什么是伺服電機(jī)?
什么是伺服電機(jī),它們的用途是什么,它們由什么組成,以及它們?nèi)绾喂ぷ鳎?/p>
伺服電機(jī)是一種根據(jù)控制信號確定軸轉(zhuǎn)動位置的電機(jī),通常用于通過調(diào)整襟翼來控制遙控飛機(jī),進(jìn)行無人機(jī)飛行定位,在流量控制中用于閥門控制,或用于連續(xù)驅(qū)動機(jī)器人的輪子。它們可用來定位或調(diào)整任何您所能想到的東西。伺服電機(jī)包括一個直流電機(jī)、一個控制電路、幾個扭力齒輪以及一個塑料外殼。
它們?nèi)绾喂ぷ鳎?/p>
伺服電機(jī)通過利用脈沖寬度調(diào)制 (PWM) 信號按順時針或逆時針方向(具體取決于信號的脈沖寬度)旋轉(zhuǎn)軸,來對軸位置進(jìn)行控制。通常,1 ms 脈沖寬度會按順時針方向旋轉(zhuǎn)軸,2 ms 脈沖寬度會按逆時針方向旋轉(zhuǎn)軸。要將軸定位在 ? 位置(或中間位置),通常使用 1.5 ms 脈沖。每個脈沖之間將需要 20 ms 間隔。下圖 2 顯示每個位置的定時。
圖 :不同軸位置的 PWM 定時
圖 :Parallax 的規(guī)格書中所示的布線連接。
如何為應(yīng)用選擇伺服電機(jī)
確定您需要的是有限旋轉(zhuǎn)(最大 180 度)還是連續(xù)旋轉(zhuǎn)。您還應(yīng)注意應(yīng)用所需的軸扭矩以及旋轉(zhuǎn)速度(以每分鐘轉(zhuǎn)數(shù) RPM 表示)。
如果您正在構(gòu)建一個移動物體(如機(jī)器人),通常需使用連續(xù)旋轉(zhuǎn)伺服系統(tǒng)來驅(qū)動輪子。另一方面,對于定位飛機(jī)模型的襟翼以進(jìn)行飛行控制、水閥、開關(guān)或輔助機(jī)器人手臂所用的手柄等應(yīng)用,可以使用有限旋轉(zhuǎn)伺服系統(tǒng)。
下圖列出了一些可用的伺服系統(tǒng)模型。
使用 Arduino 平臺
(如果您不熟悉 Arduino,可訪問此文章鏈接了解更多信息)
最常用的一款 Arduino 板稱為“UNO”。還有幾個常用版本是我們分銷的產(chǎn)品,來自第三方 供應(yīng)商,例如 Adafruit、SparkFun、Seeed、DFRobot 等。我個人最喜歡的是來自 SparkFun 的 Red Board,這款產(chǎn)品在原始“UNO”板的基礎(chǔ)上新增了一些出色的改進(jìn)。我還使用過 Adafruit 的“Flora”,它是一款性價比高且易于使用的圓形電路板。要查看 Digi-Key 的所有 Arduino 板,請單擊此鏈接。
如果您已熟悉如何 Arduino 板,可以跳過下面這一段:
我對 Arduino 的描述如下:這是一款 IC 芯片和/或電路板,可在 Arduino IDE 這一常見的 IDE(集成開發(fā)環(huán)境)中使用標(biāo)準(zhǔn) C 語言。您可以在 Arduino IDE 中創(chuàng)建代碼/軟件(即草圖),使主 IC 芯片(在常用電路板中為 ATMEGA328 微控制器)激活 I/O 引腳來執(zhí)行某些操作。您可以在 IDE 中的屏幕上獲得關(guān)于 IC 如何處理數(shù)據(jù)的反饋(使用串行命令),這類似于使用 Windows 超級終端模式查看來自外界的串行反饋。互聯(lián)網(wǎng)上提供了大量在線支持以及諸多書籍和示例代碼。Arduino 一直在更新其 IDE,所以請確保下載了最新版本。它們有許多示例代碼和功能庫,因此電路板可以充分發(fā)揮其作用。正如其稱呼一樣,Arduino 板具有標(biāo)準(zhǔn)的引腳布局,而且還開發(fā)出了一種稱為“盾板”的標(biāo)準(zhǔn)版,可以為電路板添加不同的功能——這里是 Digi-Key 提供的各種電路板的鏈接。
我們來看一下如何使用 Red Board 驅(qū)動伺服電機(jī):
首先,下載最新版本的 Arduino IDE,并啟動該程序。然后連接 Red Board。
該電路板使用 mini-B 轉(zhuǎn) A USB 電纜進(jìn)行供電,連接后請將您的草圖或編寫的代碼下載到板載 MCU。在此示例中,使用了稱為“Servo- Sweep”的標(biāo)準(zhǔn)庫實(shí)例來驅(qū)動伺服系統(tǒng)。
圖 :Servo Sweep 程序所在位置。
/* Sweep
by BARRAGAN 《http://barraganstudio.com》
This example code is in the public domain.
modified 8 Nov 2013
by Scott Fitzgerald
http://www.arduino.cc/en/Tutorial/Sweep
*/
#include 《Servo.h》
Servo myservo; // create servo object to control a servo
// twelve servo objects can be created on most boards
int pos = 0; // variable to store the servo position
void setup() {
myservo.attach(9); // attaches the servo on pin 9 to the servo object
}
void loop() {
for (pos = 0; pos 《= 180; pos += 1) // goes from 0 degrees to 180 degrees
// in steps of 1 degree
{
myservo.write(pos); // tell servo to go to position in variable ‘pos’
delay(15); // waits 15ms for the servo to reach the position
}
for (pos = 180; pos 》= 0; pos -= 1) // goes from 180 degrees to 0 degrees
{
myservo.write(pos); // tell servo to go to position in variable ‘pos’
delay(15); // waits 15ms for the servo to reach the position
}
}
然后,將 USB 電纜插入電路板,并在 IDE 左上角的“Tools”下選擇“Arduino UNO”板。在同一菜單中,選擇“Port”,以驗(yàn)證程序是否選中了電路板所連接的 COM 端口。最后,單擊左上角的下載按鈕(指向右側(cè)的小箭頭)。幾秒鐘后,Red Board 的一些 LED 會閃爍(表示正在將已編譯程序下載到該電路板)。
然后,將伺服電機(jī)連接到一個單獨(dú)的電源,其地線與電路板的地線需連在一起(USB 電源只能驅(qū)動這么多的電流,這時伺服系統(tǒng)有點(diǎn)噪音,其感應(yīng)脈沖會對電路板產(chǎn)生不利影響)。
要控制電機(jī),需要將 PWM 輸入連接到電路板上。通過查看上面的代碼,我們可以知道要將 PWM 輸出連接到引腳 9。通過上圖 3,使用白色引線或中間導(dǎo)線,將其連接到電路板的引腳 9。
現(xiàn)在可以開始運(yùn)行程序了。程序首先按順時針方向盡可能將軸歸零,然后按逆時針方向緩慢掃描 180 度,之后又按順時針方向歸零。使用示波器可以測量程序所產(chǎn)生的 PWM 脈沖寬度。我們會發(fā)現(xiàn) 90 度時為 1.5 ms,0 度或順時針擺動時接近 600 μs。180 度或逆時針擺動時,PWM 脈沖接近 2.2 ms。說明該程序運(yùn)行良好,您可以更改一些值來查看各種效果,例如更改鎖定位置,或者將延遲更改為較小的值以加快掃描速度。
評論
查看更多