手上有一個(gè)步進(jìn)電機(jī)和ULN2003電機(jī)驅(qū)動(dòng)模塊,這是之前做Arduino實(shí)驗(yàn)的時(shí)候留下的,這幾天正好比較空閑,就移植了一個(gè)Arduino的Stepper庫(kù),這個(gè)庫(kù)是用于控制步進(jìn)電機(jī)的。這次我是將ULN的IN1-IN3接到Rainbow的PA1、PA3、PA5、PA7,硬件情況如下圖:
在軟件包的“Projects\Stepper_OneRevolution”文件夾包含了本文的完整工程,可以直接編譯、燒寫(xiě)和調(diào)試。代碼非常簡(jiǎn)單,貼出來(lái)了:
#include "WProgram.h"
#include "Stepper.h"
//根據(jù)馬達(dá)調(diào)整合適的分辨率
const int stepsPerRevolution = 200;
//5線4相步進(jìn)電機(jī),使用PA1, PA3, PA5, PA7
Stepper myStepper(stepsPerRevolution, PA1, PA3, PA5, PA7);
void setup()
{
//啟用默認(rèn)串口,波特率9600
Serial.start();
//設(shè)置馬達(dá)速度為60rpm
myStepper.setSpeed(60);
}
void loop()
{
// 發(fā)送順時(shí)針轉(zhuǎn)動(dòng)指令
Serial.println("clockwise");
myStepper.step(stepsPerRevolution);
delay(500);
// 發(fā)送逆時(shí)針轉(zhuǎn)動(dòng)指令
Serial.println("counterclockwise");
myStepper.step(-stepsPerRevolution);
delay(500);
}
int main(void)
{
//初始化開(kāi)發(fā)板
boardInit();
setup();
while(1) loop();
}
程序編譯無(wú)誤后,下載到Rainbow中,可以看到步進(jìn)電機(jī)轉(zhuǎn)起來(lái)了,和Arduino中運(yùn)行效果完全一樣。只是在這個(gè)應(yīng)用中,我發(fā)現(xiàn)步進(jìn)電機(jī)時(shí)鐘只順時(shí)針轉(zhuǎn)動(dòng),不逆時(shí)針轉(zhuǎn),我跟蹤了一下程序,邏輯完全正確,同時(shí)Arduino中運(yùn)行起來(lái)也是這樣的,我對(duì)電機(jī)這塊沒(méi)有什么研究,但是程序邏輯方面沒(méi)有問(wèn)題,初步判斷可能是我這個(gè)步進(jìn)電機(jī)的問(wèn)題,身邊沒(méi)有其它型號(hào)的步進(jìn)電機(jī),所以無(wú)法最終確定問(wèn)題所在。