2013年6月30日 星期日
28BYJ-48 5V四相步進馬達簡單入門
這個文章其實已經有數不清的人分享過了, 所以自己只是做個記錄, 有需要的人也可以參考看看
28BYJ-48是一個5V四相(四條線)的步進馬達, 它的外觀如下
主要參數如下, 比較重要的是它的步距角(5.625/64的意思是360度需要內部電機轉64圈, 所以每轉一圈為360/64=5.625度), 再來是減速比1/64(意思是外部齒輪外一圈, 內部要轉64圈), 其它的參數我也不太能確定
下面的馬達的線路圖, 紅色為電源線, 有人說可以不用接, 好像接不接都沒影嚮
下面是我買的步進馬達模組, 它搭配ULN2003這個驅動板, 可以讓你直接接usb就能驅動步進馬達, 還蠻方便的
下面是ULN2003驅動板的外觀, 很多拍賣都買得到
下面則是這個步進馬達建議旳驅動方式, 一般分一相激磁, 二相激磁, 一二相激磁, 這顆是用一二相激磁
這要決定好, 因為驅動table表要根據這個來設定
根據上圖, 我們可以建一個順時針轉的驅動table表如下(把上圖有做"-"記號的地方設為1, 就可以得到)
Forward_Rotation[8]={0x01,0x03,0x02,0x06,0x04,0x0C,0x08,0x09};
再來是建一個MotorOneStep的函數, 意思是每呼叫一次, 就轉一個step(也就是5.625度), sample code如下
void MotorOneStep(char direction) //代表電機內部轉一圈, 因減速比為64, 所以步進角度=360/64=5.625度
{ //所以呼叫64次, 就等於外部齒輪轉一圈
char i,j;
if(direction==1) //Direction=1, 代表順時針轉
{
for(j=0;j<8;j++) //8個45度, 等於內部轉一圈, 也等於外部一個步進角度
{
for(i=0;i<8;i++) //內部電機轉45度
{
Motor=Forward_Rotation[i]; //順時針轉或逆時針轉表格, Motor=PORTD
delay_ms(10); // 延遲可以調整電機速度, 範圍為0~255
}
}
}
else
{
for(j=0;j<8;j++) //8個45度, 等於內部轉一圈, 也等於外部一個步進角度
{
for(i=0;i<8;i++) //內部電機轉45度
{
Motor=Backward_Rotation[i]; //順時針轉或逆時針轉表格, Motor=PORTD
delay_ms(10); // 延遲可以調整電機速度, 範圍為0~255
}
}
}
}
這樣就建立好一個Step的函數, 範例如下, 在main裡呼叫
for(MotorStep=0;MotorStep<64;MotorStep++)
{
MotorOneStep(1); //代表順時針轉一圈
}
for(MotorStep=0;MotorStep<64;MotorStep++)
{
MotorOneStep(0); //代表逆時針轉一圈
}
for(MotorStep=0;MotorStep<8;MotorStep++)
{
MotorOneStep(1); //代表順時針轉45度, 5.625*8=45度
}
就醬子囉~~~
訂閱:
張貼留言 (Atom)
沒有留言:
張貼留言
歡迎大家來討論交流一下~~~