0、结果
说明:步进电机可以旋转指定角度,例如转了九十度就停止,如果想一直转也是可以的,程序里面已写,而且也有正反转。如果是你想要的,可以接着往下看。
1、外观
说明:五线四相步进电机如下,需要对应的驱动电路,ULN2003驱动板如下。

2、连线
说明:只需要连接六根线。
- uno————五线四相步进电机
- GND-------------GND
- 5V-------------VCC
- 2---------------IN1
- 3---------------IN2
- 4---------------IN3
- 5---------------IN4
3、源程序
说明:采用非阻塞方式编写,一定时间驱动一次步进电机,执行的时候不会影响别的程序,而且可以转动指定角度,也可以一直转动,并将对应功能进行函数化,方便移植。
/****************************************step54 part****************************************/
/*
接线:
GND----------GND
5V----------VCC
2------------IN1
3------------IN2
4------------IN3
5------------IN4
*/
#define step54TimeInterval 10 //检测一次的时间间隔
unsigned long step54Times = 0; //记录设备运行时间
int runStepCount = 0;
#define step54TimeInterval1 10 //检测一次的时间间隔
unsigned long step54Times1 = 0; //记录设备运行时间
int runStepCount1 = 0;
/****************************************set up and loop part*********************************/
void setup() {
Serial.begin(9600); //设置串口波特率为9600
for (int i = 2; i < 6; i++) {
pinMode(i, OUTPUT); //初始化四个引脚为输出模式
}
Serial.println("设备上线!");
}
void loop() {
clockwise(512); //顺时针旋转512步为一圈
//anticlockwise(512); //逆时针旋转512步为一圈
}
/****************************************step54 part****************************************/
/*顺时针旋转512步为一圈*/
void clockwise(int num) {
//只转一次指定的角度
if (runStepCount < num) {
if (millis() - step54Times >= step54TimeInterval) { //一定时间执行一次
step54Times = millis();
runStepCount++; //计数
for (int i = 2; i < 6; i++) {
digitalWrite(i, HIGH);
delay(2); //可以控制速度,建议不要小于2
digitalWrite(i, LOW);
}
}
}
//不注释下面的if会一直转
if (runStepCount >= num) { //重复转,一直转
runStepCount = 0;
}
}
/*逆时针旋转512步为一圈*/
void anticlockwise(int num) {
if (runStepCount1 < num) {
if (millis() - step54Times1 >= step54TimeInterval1) { //一定时间执行一次
step54Times1 = millis();
runStepCount1++;
for (int i = 5; i > 1; i--) {
digitalWrite(i, HIGH);
delay(2); //可以控制速度,建议不要小于2
digitalWrite(i, LOW);
}
}
}
//不注释下面的if会一直转
// if (runStepCount1 >= num) { //重复转,一直转
// runStepCount1 = 0;
// }
}
4、注意事项
说明:步进电机所需的驱动电路模块ULN2003驱动板,输入的电压范围5V~12V,电压越大,电机力气也越大。电机速度越快,力气越小,成反比。电机速度最快也不是很快,如果速度太快,电机来不及转动就会停止,一直卡在那里。
5、基本原理
当给定一个脉冲信号时,电机控制器会将输入信号转换成相应的控制信号,从而激活电机内部的驱动电路。
电机内部的驱动电路会依次驱动电机的四组线圈,使得电机按照特定的顺序执行步进运动。
根据电机的型号和具体接线方式,电机的步进运动可能包括单步、半步或者微步等多种模式。
在Arduino中,通过控制脉冲信号的频率和方向,可以控制电机的转速和转向。
需要注意的是,五线四相步进电机的驱动方式有多种,其中最常见的是全(双)桥式步进电机驱动器。在使用过程中,需要注意电机的额定电压、电流和步进角度等参数,以及驱动电路的性能和稳定性,以保证电机可以正常工作并且不会因为过载或者其他因素而受损。