2014年7月12日 星期六

Arduino筆記_10:用Arduino+ULN2003驅動步進馬達

Arduino的板子本身只有用USB接電腦,不夠我們去驅動步進馬達。所以上網看了一下,發現有一種超好用的晶片ULN2003,可以用來協助我們推動馬達。

ULN2003是個有7個達靈頓電晶體的包裝陳列(Darlington Array),有7個NPN達林頓管組成,並且加上反向器,使引腳1~7輸入高電壓時,引腳16~10變成低電位,讓外面的電流流入。有這個就方便多了,不用再自己搭達靈頓電路,而且集極/射極的電壓達50V很夠用。



接線
步進馬達共有五條線,第一至第四條依序連接ULN2003APG的右側1-4接腳(即16~13接腳),第五條線則接上5V,Arduino的Pin11~Pin8依序接上ULN2003APG左側的1-4接腳(即1-4接腳),第8隻接腳連接GND。



ULN2003 控制的 5線式步進馬達應該是這種:
 
步進角度:5.625 x 1/64 
減速比:1/64 
以下為DataSheet:
Rated voltage : 5VDC
Number of Phase 4
Speed Variation Ratio 1/64
Stride Angle 5.625°   /64
Frequency 100Hz
DC resistance 50Ω±7%(25℃)
Idle In-traction Frequency > 600Hz
Idle Out-traction Frequency > 1000Hz
In-traction Torque >34.3mN.m(120Hz)
Self-positioning Torque >34.3mN.m
Friction torque 600-1200 gf.cm
Pull in torque 300 gf.cm
Insulated resistance >10MΩ(500V)
Insulated electricity power 600VAC/1mA/1s
Insulation grade A
Rise in Temperature <40K(120Hz)
Noise <35dB(120Hz,No load,10cm)

Model 28BYJ-48 – 5V

這顆步進馬達裡面有減速齒輪,
信號頻率越大,馬達轉速越快,
馬達的STEPS是由自己設定的,這句stepper.step(200);就是只走200 STEPS,
stepper.setSpeed(30); 

Code 如下: 
// ===================================

#include <Stepper.h>  
#define STEPS 200  //定義步進馬達每圈的步數   
#define ROLLA -2000  // 正負轉設定正負號負號加負"-" : 2000步一圈
  
//steps:代表馬達轉完一圈需要多少步數。如果馬達上有標示每步的度數,  
//將360除以這個角度,就可以得到所需要的步數(例如:360/3.6=100)。(int)  
  
Stepper stepper(STEPS, 2, 4, 7, 8);  
  
void setup()  
{  
stepper.setSpeed(100);     // 將馬達的速度設定成140RPM 最大  150~160  
}  
  
void loop()  
{  
stepper.step(1000);//正半圈  
delay(1000); 
stepper.step(-1000);//反半圈  
delay(1000);  
stepper.step(2000);//正1圈  
delay(1000);  
stepper.step(-2000);//反1圈  
delay(1000);  
stepper.step(3000);//正1圈半  
delay(1000);  
stepper.step(-3000);//反1圈半  
delay(1000);  
stepper.step(12000);//正4圈  
delay(1000);  
stepper.step(-12000);//反8圈  
delay(1000);

}  
// ===================================


出處:
http://www.robofun.net/forum/viewthread.php?tid=6893
http://atceiling.blogspot.tw/2013/04/arduino.html#.U8FdypSSxFs
http://ming-shian.blogspot.tw/2013/05/arduinouln2003.html


4 則留言:

  1. 作者已經移除這則留言。

    回覆刪除
  2. 我也在測這顆馬達, 按照steps 200 轉一圈應該stepper.step(200); 是嗎? 為何我在測的時候stepper.step(2000);才能轉一圈? 是因為它是減速嗎? 步進馬達28byj-48

    回覆刪除
  3. 是的~ 沒錯 因為本身(馬達28byj-48) 已經有包含減速齒輪

    如果不知道幾步一圈, 實際測量方式 可以嘗試一圈大概幾步,之後再將總圈數設定為十圈

    爾後再進行微調 這樣會比較準確

    回覆刪除
  4. ULN2003 步進馬達驅動板+步進馬達(28BYJ-48 5VDC)

    步進馬達 28BYJ-48 IN 1,2,3,4接Arduino PIN 8,9,10,11


    #include <Stepper.h>
    #define STEPS 2048 //定義步進馬達每圈的步數

    Stepper stepper(STEPS,8,10,9,11); //注意pin 9 10數字互換

    void setup()
    {
    stepper.setSpeed(6); // 設定馬達速度
    }

    void loop()
    {
    stepper.step(2048);//正1圈
    delay(1000);
    stepper.step(-2048);//反1圈
    delay(1000);
    }

    回覆刪除