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