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