步進馬達積木

步進馬達是一種可以與脈衝訊號同步準確地控制旋轉角度和轉速的馬達,所以步進馬達的也可以稱為「脈衝馬達」。由於步進馬達不需使用位置感測,僅透過四相的激磁即可實現準確的轉動角度而被廣通用於需要定位的裝置中(例如3D印表機....)。一個圓柱體的步進馬達,線圈是在柱體的外圈,轉子(永磁)在中心,藉由外圈線圈的激磁推開轉子或吸引轉子而讓轉子旋轉,所以它的結構和一般的馬達相反。一般很常見的步進馬達「28BYJ-48步進馬達」轉動一圈可切為4096步(step),所以可以很精細的控制步進馬達轉動的角度,通常「28BYJ-48步進馬達」會藉由「ULN2003驅動板」和開發板連接,28BYJ-48步進馬達需要使用四個腳位來控制線圈的激磁,使用的電壓範圍則為5~12V。


步進馬達的積木位在「吉哥積木」→「模組」→「步進馬達內,這個積木可以控制二個步進馬達。

範例一:連續順時針轉動

一個步進馬達需要使用四個腳位來控制它的移動,在初始化區塊中需要使用「步進馬達初始化」積木設定四個腳位,以28BYJ-48步進馬達來說,轉一圈需要4096步,不同的馬達步數不一樣,使用前要確認自己的馬達一圈是多少步。另外還要設定每一步中間的間隔時間,時間間隔可以精準的控制步進馬達的轉速。以下的範例是1.3毫秒,請不要低於1毫秒,因為馬達的行程移動是需要時間的,時間設太低的話還沒移動到定位又要移動下一步,那就沒辦法移動了。如果馬達有負載的話,如果發現馬達有聲音但是沒有移動的話,每步暫停時間要適時的加大。這個積木可以設定二個步進馬達,如果有第二個馬達,一樣要在初始化區塊使用馬達二的初始化積木。

「當馬達停止移動時」的積木會在馬達停止時觸發,這個積木必須放在「重複執行」區塊中。在開發板執行完初始化進入重複執行階段時,因為馬達是停的,所以也會觸發這個積木程式。以下的程式會馬達會移動4096步,也就是轉一圈,停下後又會觸發「當馬達停止移動時」的程式,又再轉一圈,所以會無止盡的順時針轉動下去。

因為在初始化時設定每步暫停時間是1.3毫秒,一圈是4096步,所以轉動一圈耗時1.3×4096=5324.8毫秒,大約5.3秒。

範例:連續時針轉動

移動步數是正數的話會順時針轉動,負數則會逆時針轉動。以下的範例和上一個範例就差在正負數的差別。

範例順時針一圈,逆時針一圈

以下的範例,馬達會順時針轉一圈再逆時針轉一圈,無止盡的轉動下去,只要設定一個變數,值是4096,每次轉動結束後就把自己乘上-1,就會正負數一直交換,再把這個變數指定給馬達,便能順時針轉一圈再逆時針轉一圈。

以下的範例在GPIO2接了一個四顆燈泡的WS2812,在馬達順時針轉動時燈泡會亮紅色,在逆時針時會亮綠色。

範例設定步進馬達移動的行程

假如想要步進馬達移動固定的步數,例如正轉一圈後反轉半圈,再正轉半圈再反轉1/4圈,再正轉1/4圈再反轉一圈,可以將想要的移動步數放進陣列中(以下的mySteps陣列變數),用status變數記錄現在執行到陣列中的哪一個值,將那個值指定給步進馬達來移動即可。WS2812燈在每一次陣列值變換之際會亮紅燈50毫秒再熄滅。

範例:設定步進馬達移動到絕對位置

不同於「步進馬達移動步數____」積木,「步進馬達移動到位置編號____」積木,可以將馬達指定到絕對位置。如果開發板一啟動帶動步進馬達初始化時,這個時候馬達的絕對位置編號便是0,一步之後是1,二步之後是2,一直到位置編號4096便是繞了一圈,「步進馬達移動到位置編號____」積木便是將馬達直接指定轉動位置而不是指定轉動步數。位置編號是正整數,至於馬達是正轉或反轉到這個絕對位置,則是看哪一個方式轉動是最短路徑積木會自己計算出來。

以下修改範例四的程式,建立一個myIndexes的8個數字的陣列,陣列中存放的是絕對位置而不是要移動的步數。注意移動馬達的積木是步進馬達移動到位置編號____」積木。

範例強制停止轉動

「步進馬達強制停止」積木可以中斷馬達的運作,但是強制停止不會觸發「當馬達停止移動時」的事件。以下的程式在初始化區塊放入「步進馬達強制停止」積木,便不會在開發板一啟動時便觸發「當馬達停止移動時」的事件,所以一啟動馬達是不會轉的。當按下A按鈕時,馬達開始重複轉動一直轉動;當按下B按鈕時則會強制停止馬達的轉動。