手上有一个步进电机和ULN2003电机驱动模块,这是之前做Arduino实验的时候留下的,这几天正好比较空闲,就移植了一个Arduino的Stepper库,这个库是用于控制步进电机的。这次我是将ULN的IN1-IN3接到Rainbow的PA1、PA3、PA5、PA7,硬件情况如下图:
在软件包的“Projects\Stepper_OneRevolution”文件夹包含了本文的完整工程,可以直接编译、烧写和调试。代码非常简单,贴出来了:
#include "WProgram.h"
#include "Stepper.h"
//根据马达调整合适的分辨率
const int stepsPerRevolution = 200;
//5线4相步进电机,使用PA1, PA3, PA5, PA7
Stepper myStepper(stepsPerRevolution, PA1, PA3, PA5, PA7);
void setup()
{
//启用默认串口,波特率9600
Serial.start();
//设置马达速度为60rpm
myStepper.setSpeed(60);
}
void loop()
{
// 发送顺时针转动指令
Serial.println("clockwise");
myStepper.step(stepsPerRevolution);
delay(500);
// 发送逆时针转动指令
Serial.println("counterclockwise");
myStepper.step(-stepsPerRevolution);
delay(500);
}
int main(void)
{
//初始化开发板
boardInit();
setup();
while(1) loop();
}
程序编译无误后,下载到Rainbow中,可以看到步进电机转起来了,和Arduino中运行效果完全一样。只是在这个应用中,我发现步进电机时钟只顺时针转动,不逆时针转,我跟踪了一下程序,逻辑完全正确,同时Arduino中运行起来也是这样的,我对电机这块没有什么研究,但是程序逻辑方面没有问题,初步判断可能是我这个步进电机的问题,身边没有其它型号的步进电机,所以无法最终确定问题所在。