在这篇文章中,我们将展示如何通过加速和减速来增强简单的“步进电机点动系统 ”。
目录
介绍
正如我们所谈到的:加速,反之:减速度,是每个运动系统的重要特征。
它减少了诸如机械应力之类的东西,它可能是系统中的最低要求,外观和感觉都更好,等等。
但是我们如何实现简单的事情,例如启动和停止斜坡呢?
AccelStepper是Arduino的一个库,正是这样做的。
除其他事项外,它还可以计算出进入步进电机的[脉冲]序列应该有多快。
可以使用内置的“库管理器”(工具->管理库…)将其轻松添加到Arduino环境中。
安装完成后,您要做的就是将AccelStepper库包含在您的项目中。这在下面的代码的第1行上完成。
电路和固件
本示例中使用的电路包括:
- ST-M5045微步驱动器。配置有x2微米步进的相当便宜的驱动器。
- 常规的24 V DC 15 A电源
- 42BYGM810“万泰步进电机”
- Arduino Uno
步进电机具有(非常规的)0.9度步进/脉冲,并且与2x微型步进驱动器结合使用,总共需要800步才能完成完整的旋转。
我们在这里使用的编码器给出24步/转。
因此,要使编码器转数/步进转数达到1,我们必须将编码器脉冲乘以(800/24)〜33.3。
编码:
#define encoder_pin_A 8
#define encoder_pin_B 9
int encoder_pin_A_last = LOW;
int encoder_pos = 0;
int n = LOW;
#define stepper_pin_step 6
#define stepper_pin_dir 5
// Enc have 24 steps per revolution
// The motor have 800 steps per revolution
// Want: 1 encoder rev = 1 stepper rev
// 800 / 24 = 33.3333333333...
float steps_per_pulse = 33.3333333333;
AccelStepper stepper(AccelStepper::DRIVER, stepper_pin_step, stepper_pin_dir);
void setup() {
stepper.setMaxSpeed(800.0);
stepper.setAcceleration(300.0);
pinMode(encoder_pin_A, INPUT_PULLUP);
pinMode(encoder_pin_B, INPUT_PULLUP);
}
void loop() {
// read encoder
n = digitalRead(encoder_pin_A);
if ((encoder_pin_A_last == LOW) && (n == HIGH)) {
if (digitalRead(encoder_pin_B) == LOW) {
encoder_pos--;
} else {
encoder_pos++;
}
// set stepper to the new calculated position
stepper.moveTo((long) round(encoder_pos*steps_per_pulse));
}
encoder_pin_A_last = n;
stepper.run();
}
然后,电动机以第22行设置的加速度斜升/加速。当达到第21行设置的速度时,电动机停止。
以步/秒为单位给定速度,并以每秒每秒的步数表示所需的加速度。
如我们在下图中看到的,这是从查看STEP引脚行为的屏幕截图来看,系统加速和减速。
最后的话
正如我们在这里看到的那样:可以以一种非常简单的方式实现带编码器以及带加速和减加速的点动!
在这样的电动嵌入式系统中当然存在一些挑战。您可以在其中遇到一些有趣的挑战,例如:
- 电源不够“强劲”吗?
- 使用的Arduino /计算机不够强大?
- 步进驱动程序是否不按照您的意愿遵循*STEP 或DIR *命令?
- 等等
如您所见,此处存在一些烦人的“嵌入式系统挑战”。
您还希望我们探索其他与步进电机相关的挑战吗?请让我们知道,我们可能会在即将发表的博客文章中解决这些问题!