问题来源
最近自学Arduino,在使用步进电机时开始没能使步进电机转起来,转起来后感觉没法调速,遂完成此篇笔记供自己后续查阅以及方便遇到相同问题的诸君寻找灵感。对于如何使步进电机转动就不详述,网上有很多。
Stepper库函数
这个是Arduino库函数,用于控制步进电机,官网Stepper说明网址为https://www.arduino.cc/en/Reference/Stepper,下面介绍个人理解:
- Stepper
两种调用形式,Stepper(steps, pin1, pin2)与Stepper(steps, pin1, pin2, pin3, pin4),主要是看电机是两相还是四相,该函数作用是创建Stepper类的实例,参数steps应该是所使用的的电机转一周需要的步数(脉冲数),通过电机步距角计算。后面的pin1,2,3,4,依据实际情况填写。注意这个函数需要写在程序开始,即在void setup()之上。 - setSpeed
调用形式setSpeed(rpms),这个是控制转述的函数,实际是脉冲频率,参数为每分钟电机转的步数。数值为正整数。该函数不会使电机旋转。 - step
step(steps),这个函数是使电机转过固定的步数,只有当电机转过指定步数之后才会执行该语句的下一条语句。参数应该是整数,正负号控制旋转方向。
调速
读了上面就知道step()函数是控制转速的。
导致我怀疑电机不能调速的原因是设置不同参数电机都旋转很慢,事实证明我买的电机就只能转这么快。step(300)就到达我所用电机与ULN2003的极限,而此前我不理解网上那程序上述函数的具体意义,调了一通参数也没见到步进电机快速旋转。此外使用电机与驱动器不同,会导致别人程序中的备注文字并不使用与我所写的程序,因此误解别人程序,导致调速迟迟不能成功。
实例
//使用arduino IDE自带的Stepper.h库文件
#include <Stepper.h>
// 这里设置步进电机旋转一圈是多少步,依据步距角计算,及走一圈需要多少脉冲
#define STEPS 64
//设置步进电机的步数和引脚(就是驱动板上IN1~IN4连接的四个数字口)。
Stepper stepper(STEPS, 8, 9, 10, 11);
void setup()
{
// 设置电机的转速:每分钟为90步
stepper.setSpeed(290);
// 初始化串口,用于调试输出信息
Serial.begin(9600);
}
void loop()
{
// 顺时针旋转
Serial.println("shun");
stepper.step(2048);
//delay(500);
// 逆时针旋转
/*
Serial.println("ni");
stepper.step(-512);
delay(500);
*/
}