學習目標 : 認識faya步進馬達模組的功能及使用方式
學習時間 : 50min
示範模組 : (1) fayaduino UNO
(2) faya 電源底板
(3) faya 步進馬達模組
工具 : (1) 樂高積木底板 (相容)
====================功能介紹====================
步進馬達的優點在於能夠穩定的控制馬達旋轉位置與速度,在無須了解背後原理的情形下,用Arduino準確的控制步進馬達的速度與位置再簡單也不過了,faya步進馬達模組提供了4個輸入埠(A,B, /A, /B),用來連接Arduino的數位腳位,再結合函式庫準確地控制位置與速度。
控制步進馬達前,須透過Arduino的函式下指令 ,本段僅解釋用法,只要學會下面三個指令(簡單的數學關係)就能控制這顆步進馬達了,詳細說明可參考原理知識:
- #include<Stepper.h>;
- Stepper fayaStepper(stepsPerRevolution, pinA, pinAbar, pinB, pinBbar);
-fayaStepper為物件名稱,可自行命名
- stepesPerRevolution = 32 (後解釋)
- pinA, pinAbar, pinB, pinBbar 分別填入連接馬達 A, /A, B, /B 的4個Arduino 腳位
- fayaStepper.setSpeed(rpms);

(例1): fayaStepper.setSpeed(256);
此時步進馬達每分鐘轉 256/64 = 4圈,也就是15秒會轉一圈
(例2): fayaStepper.setSpeed(384);
此時步進馬達每分鐘轉 384/64 = 6圈,也就是10秒會轉一圈
- fayaStepper.step(steps);

(例1): fayaStepper.steps(1024);
此時步進馬達會走 (1024/2048)x360=180度 = 0.5圈
(例2): fayaStepper.steps(5120);
此時步進馬達會走 (5120/2048)x360= 900度 = 2.5圈
====================原理知識====================
以下解釋提供給有需要知道背後原理的人:
faya步進馬達模組採用的是型號28BYJ-48的步進馬達,它是一個5V-4相5線的步進馬達,透過ULN2003來驅動,電路圖如下:
馬達的轉動透過A,B,/A,/B訊號輪流激磁,激磁方式有:
- 一相激磁:1000-0100-0010-0001
- 二相激磁:1100-0110-0011-1001
- 一/二相激磁:1000-1100-0100-0110-0010-0011-0001-1001
以下解釋 fayaStepper(stepsPerRevolution, pinA, pinAbar, pinB, pinBbar);
由馬達的datasheet可看到一重要的參數,內部轉子的步距角(Stride Angle) =5.625/64,它的意思是轉子一次走5.625度的步距角度,也就是當轉子走64步時(5.625x64=360),會繞一圈,但5.625步距角度是一/二相激磁才會走的度數。當使用純一相激磁或二相機磁時,步距角會多一倍,此時步距角=11.25/32時,也就是轉子走32步(11.25x32=360),會繞一圈。Arduino的Stepper 函式庫,採用二相激磁的方式,因此,我們必須在stepsPerRevolution裡面填入32,告知轉子32步就走一圈。
以下解釋 fayaStepper.step(steps);
馬達datasheet裡的另一個重要的參數是減速齒輪比 64:1,也就是當轉子轉64圈時,馬達的外部轉軸才轉一圈,轉子走一圈需要32步,因此我們可算出達外部轉軸轉一圈時,轉子需走2048步時(32x 64 = 2048)。
結合以上兩個概念,換個方式再解釋一次: 當用兩相激磁方式驅動馬達時,每次激磁 (也就是一組A, B, /A, /B Pulse訊號),會讓轉子走一步,前進11.25度。當送出2048組激磁(pulse)時,轉子總共前進了11.25*2048 = 23040度。但是經過64:1的減速齒輪後,外部的轉軸變成只前進了23040/64 = 360度,也就是一圈。
以下解釋 fayaStepper.setSpeed(rpms);
此函式裡的rpm值代表轉子每分鐘轉的圈數,經過64:1的減速齒輪後,外部轉軸每分鐘轉的圈數需除以64,因此,當下了指令fayaStepper.setSpeed(64),此時外部轉軸的轉速為每分鐘轉64/64 = 1圈;當下了指令fayaStepper.setSpeed(256),此時外部轉軸的轉速為每分鐘轉四圈,也就是每15秒鐘就轉一圈。
註: stepsPerRevolution 和 rpms 值息息相關,有些網站範例的stepsPerRevolution填入的是"外部轉軸的步數",也就是32x64=2048,此時,rpms 就代表著外部轉軸的rpm,因此rpm=1,代表外部轉軸每分鐘轉一圈,填入4代表每分鐘轉四圈,感覺起來很方便直覺,但此時無法填入0.5、1.2等等有小數的rmp值(小數點後會被省略),因此我喜歡套用這篇文章套用公式的方式增加控式的彈性。
另外step為正值時馬達順時鐘轉,負值時馬達逆時鐘轉!
最後介紹faya步進馬達模組貼心的在面板上設計了4顆LED,當A,B,/A,/B 相位收到訊號時,相對應的LED會點亮,當馬達速度放很慢很慢時,讓使用者能很清楚地觀察目前激磁的相位。以下圖為例,拍攝的時候正在執行A、B兩相的激磁階段。
二相激磁:1100-0110-0011-1001 |
===================範例實作(1)===================
了解模組功能(原理)後,我們用以下範例來展示模組的功能:
目標:
(1)步進馬達順時針旋轉一圈(360度),所用時間為10秒鐘
(2)休息2秒鐘
(3)步進馬達逆時針旋轉一圈(90度),所用時間為7.5秒鐘
接線:
(1) 電源線連接
如下圖所示,連接的說明請看這篇文章 或簡易版
(2) 訊號線連接
Arduino_11 ===> 步進馬達_A
Arduino_10 ===> 步進馬達_B
Arduino_9 ===> 步進馬達_/A
Arduino_8 ===> 步進馬達_/B
範例程式:
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// 2017/4/24 | |
// Faya-Nugget 範例程式 (StepMotor_1.ino) | |
// 單元: 模組介紹-faya步進馬達模組 | |
/////// 網址: http://fayalab.blogspot.com/2017/04/faya_24.html | |
// 目標: (1)馬達順時針旋轉1圈,費時10秒 | |
// (2)停2秒 | |
// (2)馬達逆時針旋轉1/4圈,費時7.5秒 | |
// 接線: Arduino ==> faya模組 | |
// 11 ==> A (步進馬達) | |
// 10 ==> B (步進馬達) | |
// 9 ==> /A (步進馬達) | |
// 8 ==> /B (步進馬達) | |
#include<Stepper.h> | |
int motorPin_A = 11; | |
int motorPin_B = 10; | |
int motorPin_AP = 9; | |
int motorPin_BP = 8; | |
//定義Stepper函示庫中的參數 | |
//轉子每32steps轉一圈 | |
//埠 A B /A /B 分別接到 11 10 9 8 | |
Stepper fayaStepper(32, motorPin_A, motorPin_AP, motorPin_B, motorPin_BP); | |
void setup() { | |
//設定連接Arduino的腳位為輸出 | |
pinMode(motorPin_A, OUTPUT); | |
pinMode(motorPin_B, OUTPUT); | |
pinMode(motorPin_AP, OUTPUT); | |
pinMode(motorPin_BP, OUTPUT); | |
fayaStepper.setSpeed(384); //轉子384rpm = 馬達轉軸384/64 = 6rpm = 10秒轉一圈 | |
fayaStepper.step(2048); //轉子走2048步時,外部轉軸轉1圈 = 360度 | |
delay(2000); //休息2秒 | |
fayaStepper.setSpeed(128); //轉子128rpm = 馬達轉軸128/64 = 2rpm = 30秒轉一圈 = 7.5秒轉90度 | |
fayaStepper.step(-512); //轉子走512步時,外部轉軸轉1/4圈 = 90度 | |
} | |
void loop() { | |
} | |
備註:
- 執行程式前,記得將馬達開關移到"ON"位置
- 大家可以發現真正控制馬達動作的程式只有(L32~L36)5行,是不是很簡單?
範例結果:
討論:
- 步進馬達的激磁需要時間反應的,因此當fayaStepper.setSpeed(rpms)中的rpms直設得太高時,步進馬達反應不過來,有時會以卡卡的感覺,甚至停住不動,大家可以把rpms直設到512甚至更高,比較結果如何!
- 28BYJ-48的步進馬達的減速齒輪比例不是剛剛好1/64,實際上約是1/63.x,所以當持續轉幾圈後,就會發現開始位移,但對於一般的應用/學習,這顆馬達的C/P算是物超所值了!
也歡迎大家在底下留言或到我們的粉絲團留言喔!
====================================
fayalab 粉絲團
FB本篇留言版
沒有留言:
張貼留言