學習目標 : 認識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
範例程式:
備註:
- 執行程式前,記得將馬達開關移到"ON"位置
- 大家可以發現真正控制馬達動作的程式只有(L32~L36)5行,是不是很簡單?
範例結果:
討論:
- 步進馬達的激磁需要時間反應的,因此當fayaStepper.setSpeed(rpms)中的rpms直設得太高時,步進馬達反應不過來,有時會以卡卡的感覺,甚至停住不動,大家可以把rpms直設到512甚至更高,比較結果如何!
- 28BYJ-48的步進馬達的減速齒輪比例不是剛剛好1/64,實際上約是1/63.x,所以當持續轉幾圈後,就會發現開始位移,但對於一般的應用/學習,這顆馬達的C/P算是物超所值了!
也歡迎大家在底下留言或到我們的粉絲團留言喔!
====================================
fayalab 粉絲團
FB本篇留言版
沒有留言:
張貼留言