TAG | EasyDriver
与其它普通直流电机相比,步进电机最大的特点就是它可以通过输入脉冲信号来进行控制的,也就是说电机的总转动角度可以由输入脉冲数决定,而电机的转速由脉冲信号频率决定。正因如此,你可以用Arduino来为步进电机产生相应的脉冲信号,来精确地控制电机转动的角度和速度!
步进电机是机电控制中一种常用的执行机构,实际使用时通常会用到一个驱动电路来对其进行驱动,这里我们使用的是EasyDriver,使用它能够很方便地控制一个两相混合式步进电机。电路在工作时由Arduino负责给EasyDriver发送相应的控制脉冲信号,来驱动步进电机转动相应的角度。由于EasyDriver一边要接收Arduino的控制信号,一边要控制电机转过相应的角度,因此接线其实也可以分成两个部分。
一部分是同Arduino相连的GND, STEP, DIR三根接线,分别为地、步进脉冲引脚和方向控制引脚步,STEP和DIR使用Arduino上普通的数字I/O引脚即可:
另一部分则是为电机供电的GND和+V引脚(这里我使用的9V外接电源),以及与两相步进电机相连接的MA和MB这4个个引脚(分别同电机的一个相连接起来):
为了演示的方便,我们还在A0和A1两个引脚上接上了两个按钮来分别控制电机的方向。顺便提一句,Arduino的A0 ~ A6在需要的时候也可以当成数字I/O引脚使用,其中A0对应的数字I/O为14,A1对应的数字I/O为15,依次类推。
接线并不算太复杂,最后电路接线的效果图:
相应的程序也比较简单:
int dirPin = 6; int stepperPin = 5; int switch1 = 14; int switch2 = 15; int value; void setup() { pinMode(dirPin, OUTPUT); pinMode(stepperPin, OUTPUT); pinMode(switch1, INPUT); pinMode(switch2, INPUT); } void step(boolean dir,int steps){ digitalWrite(dirPin,dir); for(int i=0;idigitalWrite(stepperPin, HIGH); delayMicroseconds(50); digitalWrite(stepperPin, LOW); delayMicroseconds(50); // speed control delayMicroseconds(100); } } void loop(){ value = digitalRead(switch1); if (HIGH == value) { step(true,1600 * 5); } value = digitalRead(switch2); if (HIGH == value) { step(false,1600*5); } }
按照前面的连线,控制电机转动的脉冲信号是通过Arduino上的数字I/O引脚5来提供的,而电机转动方向的控制则是通过数字I/O引脚6来实现的。两个按钮开关分别接在A0和A1号引脚上,对于数字I/O引脚14和15:
int dirPin = 6; int stepperPin = 5; int switch1 = 14; int switch2 = 15;
步进电机的转动主要是通过step()函数来实现,该函数有两个参数:第一个是转动的方向,分别代表正转和反转;第二个是步进数目,即给的控制脉冲的数目。通过修改每个脉冲间隔之间的时间长度,可以非常容易地调整电机转动的速度:
// speed control
delayMicroseconds(100);
两个对step()函数的调用,分别控制电机正转/反转相应的圈数,由于每种电机步进的角度数不同,旋转一圈所需要的脉冲数也是不一样的:
step(true,1600 * 5); step(false,1600 * 5);
最后提醒一下,EasyDriver上的R6是用来限流的,调节它可以设置经过驱动芯片的电流大小。




