2017年4月24日 星期一

模組介紹 : faya步進馬達模組


學習目標 : 認識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);
        此指令透過rpms值設定步進馬達的轉速,其中


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

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

        • fayaStepper.step(steps);
          此指令透過steps值設定步進馬達的步數,此馬達每2048步走一圈(後解釋),因此:



          (例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本篇留言版

          沒有留言:

          張貼留言