因為有控制自動餵食器(參考這篇)的需求,所以爬文了一下步進馬達。
Arduino直接驅動馬達可能會有供電不足的問題,透過驅動板模組方便許多。
1.ULN2003馬達驅動版
1、板子上使用ULN2003A電機驅動晶片
2、晶片所有管腳已經引出,方便連接使用
3、可支援5-12V供電
4、板子上有4路信號指示LED
4、板載XH-5P插座,可以直接連接28BYJ-48型號的步進電機。
2. 28BYJ-48 步進馬達
- 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
所以這顆馬達轉一圈需要64 步,也就是每一步為5.625度。
但馬達有內建滅速齒輪,滅速比為1/64,也就是馬達轉64圈,
透過滅速齒輪輸出後,其實只轉一圈 。
所以要讓馬達輸出轉一圈其實是4096 step。
資料來源:
http://www.ltc.com.tw/images/mtardul2003.rar
實際接線,馬達的插座有防呆,不會接錯
為了避免供電不足,我用了一個外接電源12V1A,透過麵包板供電模組降成5V
我找了幾個程式碼的範例,目前看到比較精準,而且動的起來的是以下這篇
http://42bots.com/tutorials/28byj-48-stepper-motor-with-uln2003-driver-and-arduino-uno/
接著我把程式碼腳位改成我目前使用的,程式碼如下,執行程式後它會正轉一圈後再倒
轉回原來的位置。
#include <AccelStepper.h> #define HALFSTEP 8 // Motor pin definitions #define motorPin1 11 // IN1 on the ULN2003 driver 1 #define motorPin2 10 // IN2 on the ULN2003 driver 1 #define motorPin3 9 // IN3 on the ULN2003 driver 1 #define motorPin4 8 // IN4 on the ULN2003 driver 1 // Initialize with pin sequence IN1-IN3-IN2-IN4 for using the AccelStepper with 28BYJ-48 AccelStepper stepper1(HALFSTEP, motorPin1, motorPin3, motorPin2, motorPin4); void setup() { stepper1.setMaxSpeed(1000.0); stepper1.setAcceleration(100.0); stepper1.setSpeed(200); //stepper1.moveTo(20000); stepper1.moveTo(2000); }//--(end setup )--- void loop() { //Change direction when the stepper reaches the target position if (stepper1.distanceToGo() == 0) { stepper1.moveTo(-stepper1.currentPosition()); } stepper1.run();}
執行畫面:
請問一下,為什麼motorPin3, motorPin2順序要相反? 謝謝
回覆刪除