為什么要使用步進電機?
步進電機是帶有許多內齒的無刷直流電機,通過周圍的銅線圈磁性鎖定到位。與無刷電機不同,為步進電源供電電機不會轉動。相反,它鎖定到給定輸入指定的位置,順時針或逆時針轉一小步。
雖然這使得步進電機的驅動更加復雜,但與無刷直流電機相比具有一個主要優勢:它們的角位置可以非常精確地指定。例如,如果您希望電機正好旋轉270度,那么使用普通直流無刷電機(沒有某種形式的反饋)幾乎是不可能的,但使用步進電機會很輕松。
步進電機需要多個步進脈沖才能到達您想要的位置。此外,步進電機線圈始終通電,大大增加了保持轉矩,但強制轉動則很困難。這些優勢解釋了為什么步進電機常用于許多應用,包括CNC機床和CD/DVD驅動器。
步進電機電動機分為兩個階段:單極和雙極。單極電機包含連接所有線圈的公共電源,而雙極電機具有分離的線圈。
本文僅介紹單極電機,因為雙極電機需要以不同的方式驅動。
由Digikey提供(原理圖)
單極輸入和步進
單極電機通常有5根輸入線 - 兩根成對線控制線圈,第五根線連接到為每個線圈提供公共分接頭。
雖然線路顏色因電機而異,但這里有連接在本文中使用:
下表顯示了如何驅動每個輸入以旋轉電機。向前移動(即從步驟1到2)使電機順時針轉動,而向后移動則使電機逆時針轉動。
表1.電機旋轉狀態
步進電機可能需要的電流遠遠超過微控制器的限制,這就是微控制器必須從不直接連接到電機的原因。電機還可能產生反電動勢,可能會損壞I/O端口,并且絕對必須使用鉗位二極管。
然而,驅動帶有四個分立晶體管的步進電機會浪費和笨重,這就是為什么必須使用ULN2003步進驅動器IC 。該IC包含七個達林頓晶體管,每個晶體管都包含二極管保護,能夠提供500mA,50V輸出(實際上比Arduino Uno可以處理的更多)。
編碼步進電機
步進電機的編碼步驟可以通過switch語句和一些I/O位完成,但有一種更簡單的方法:使用內置的Stepper Library!
雖然Arduino是一個方便而簡單的平臺,但它的庫支持使它成為最好的平臺之一市場上的模塊通過Arduino庫兼容。對于步進電機,我們可以使用步進器庫輕松控制它們,無需對每一步進行編碼。
#include
#define STEPS_PER_REV 513
// Create our stepper motor object
Stepper motor(STEPS_PER_REV, 2, 3, 4, 5);
void setup() {
motor.setSpeed(10); // Motor speed of 10 RPM
}
void loop()
{
motor.step(STEPS_PER_REV); // Step clockwise one whole revolution
motor.step(STEPS_PER_REV / 2); // Step clockwise half revolution
motor.step(-STEPS_PER_REV); // Step counter clockwise one whole revolution
}
要使用步進電機庫我們首先要包括步進電機庫頭:
#include
下一步(可選但推薦)是定義電機在一整圈內旋轉的步數。本教程中使用的電機有32個步驟,并連接到比率為1:16的減速齒輪,因此一次旋轉的步數為513.
#define STEPS_PER_REV 513
現在我們有了定義的步數,我們需要創建一個步進電機對象。該對象初始化為五個變量:每轉的步數和連接步進電機的四個引腳。
Stepper motor(STEPS_PER_REV, 2, 3, 4, 5);
在設置功能中,我們可以定義速度(以RPM為單位)我們希望我們的電機轉動。對于這個例子,我們將RPM設置為10.
void setup() {
motor.setSpeed(10); // Motor speed of 10 RPM
}
主循環包含轉動電機所需的代碼。正數表示電機等于前進的次數,而負數表示電機向相反方向旋轉。
此示例中的三行代碼顯示STEPS_PER_RPM如何用于將電機轉動已知量。
motor.step(STEPS_PER_REV); // Step clockwise one whole revolution
motor.step(STEPS_PER_REV / 2); // Step clockwise half revolution
motor.step(-STEPS_PER_REV); // Step counter clockwise one whole revolution
-
步進電機
+關注
關注
150文章
3095瀏覽量
147346 -
Arduino
+關注
關注
187文章
6464瀏覽量
186650
發布評論請先 登錄
相關推薦
評論