Arduino與步進馬達

步進馬達比伺服馬達更能精準控制旋轉角度,可以連續旋轉,可以精準控制旋轉角度,可以用於3D印表機控制列印噴頭所在位置,以下介紹步進馬達的運作原理與對應的程式。

實驗目標

利用ULN2003模組驅動步進馬達,分別使用一相激磁、二相激磁與一二相激磁方式驅動步進馬達。

實驗所需元件

步進馬達(28BYJ-48)*1

ULN2003模組*1

本實驗使用28BYJ-48步進馬達,該步進馬達屬於4相5線,4相表示四組線圈,5線表示5條連接線,28BYJ-48步進馬達的步進角為360/64=5.625度,使用1比64的減速齒輪,因為360/5.625*64=4096,所以需要4096步進馬達才轉一圈。在一二相激磁需要4096步,但在一相激磁、二相激磁只需要2048步。步進馬達在旋轉角度上有較高的精準度,適合用於3D印表機定位噴頭上,3D印表機需要多個步進馬達讓噴頭可以在三度空間精準定位。

實驗接線圖

ULN2003模組與Arduino連接接腳對應,如下表。

使用一相激磁、二相激磁與一二相激磁方式驅動步進馬達,以下分成三部分討論。

(1)一相激磁,正轉一圈接著逆轉一圈,不斷重複。

一相激磁使用以下四個步驟讓馬達轉動,旋轉一圈需要2048步,優點為省電,但缺點為力矩小。

程式實作提示

本程式使用函式digitalWrite讓線圈通電產生磁力,使用函式delay延遲時間控制旋轉速度,但延遲時間不能過短,太短會轉不動。

程式碼與解說

第2行:宣告變數t為2,變數t用於函式delay,t會影響轉速,t越小轉越快,太小會轉不動。

第4到10行:在setup函式內,使用函式pinMode設定D8、D9、D10與D11為輸出模式。

第12到25行:在loop函式內,使用for迴圈讓函式stepForward執行512次,如此步進馬達會旋轉一圈,延遲1秒鐘(第14行),接著使用for迴圈讓函式stepBack執行512次,如此步進馬達會倒轉一圈,延遲1秒鐘(第18行)。

第26到50行:自訂函式stepForward,讓步進馬達轉動。

使用函式digitalWrite讓D8接腳輸入1,其餘接腳輸入0,進入一相激磁的步驟1狀態(第27到30行),延遲t毫秒(第31行)。

使用函式digitalWrite讓D9接腳輸入1,其餘接腳輸入0,進入一相激磁的步驟2狀態(第33到36行),延遲t毫秒(第37行)。

使用函式digitalWrite讓D10接腳輸入1,其餘接腳輸入0,進入一相激磁的步驟3狀態(第39到42行),延遲t毫秒(第43行)。

使用函式digitalWrite讓D11接腳輸入1,其餘接腳輸入0,進入一相激磁的步驟4狀態(第45到48行),延遲t毫秒(第49行)。

第52到76行:自訂函式stepBack,讓步進馬達倒轉回來。

使用函式digitalWrite讓D11接腳輸入1,其餘接腳輸入0,進入一相激磁的步驟4狀態(第53到56行),延遲t毫秒(第57行)。

使用函式digitalWrite讓D10接腳輸入1,其餘接腳輸入0,進入一相激磁的步驟3狀態(第59到62行),延遲t毫秒(第63行)。

使用函式digitalWrite讓D9接腳輸入1,其餘接腳輸入0,進入一相激磁的步驟2狀態(第65到68行),延遲t毫秒(第69行)。

使用函式digitalWrite讓D8接腳輸入1,其餘接腳輸入0,進入一相激磁的步驟1狀態(第71到74行),延遲t毫秒(第75行)。

(2)二相激磁,正轉一圈接著逆轉一圈,不斷重複。

二相激磁使用以下四個步驟讓馬達轉動,旋轉一圈需要2048步,優點為力矩大,但缺點為耗電。

程式實作提示

本程式使用函式digitalWrite讓線圈通電產生磁力,使用函式delay延遲時間控制旋轉速度,但延遲時間不能過短,太短會轉不動。

(3)一二相激磁,正轉一圈接著逆轉一圈,不斷重複。

一二相激磁使用以下八個步驟讓馬達轉動,旋轉一圈需要4096步,優點為力矩大與轉速高,但缺點為耗電。

程式實作提示

本程式使用函式digitalWrite讓線圈通電產生磁力,使用函式delay延遲時間控制旋轉速度,但延遲時間不能過短,太短會轉不動。

實驗圖如下