Arduino - 伺服電機



伺服電機是一種小型裝置,帶有一個輸出軸。透過傳送編碼訊號給伺服電機,可以將此軸定位到特定的角度位置。只要編碼訊號存在於輸入線上,伺服電機就會保持軸的角度位置。如果編碼訊號改變,軸的角度位置也會改變。實際上,伺服電機用於遙控飛機來定位控制面,例如升降舵和方向舵。它們也用於遙控汽車、木偶和機器人。

Servo Motor

伺服電機在機器人技術中非常有用。這些電機體積小巧,具有內建控制電路,並且功率強大。標準伺服電機,例如 Futaba S-148,具有 42 oz/英寸的扭矩,對於其尺寸而言非常強大。它還按機械負載的比例消耗功率。因此,輕載伺服電機不會消耗太多能量。

下圖顯示了伺服電機的內部結構。您可以看到控制電路、電機、一組齒輪和外殼。您還可以看到連線到外部世界的 3 根線。一根用於電源(+5 伏),一根用於接地,白色線是控制線。

Servo Motor control circuitry

伺服電機的執行原理

伺服電機有一些控制電路和一個電位器(一個可變電阻器,又稱電位器)連線到輸出軸。在上圖中,電位器位於電路板的右側。此電位器允許控制電路監控伺服電機的當前角度。

如果軸處於正確的角度,則電機將關閉。如果電路發現角度不正確,它將轉動電機,直到達到所需的角度。伺服電機的輸出軸能夠旋轉大約 180 度。通常在 210 度左右,但是這取決於製造商。普通伺服電機用於控制 0 到 180 度的角度運動。由於主輸出齒輪上安裝的機械止動器,它在機械上無法進一步旋轉。

施加到電機的功率與其需要移動的距離成正比。因此,如果軸需要旋轉很大的距離,電機將以全速執行。如果它只需要旋轉少量,電機將以較慢的速度執行。這稱為**比例控制**。

如何告知伺服電機旋轉的角度?

控制線用於通訊角度。角度由施加到控制線的脈衝持續時間決定。這稱為**脈衝編碼調製**。伺服電機期望每 20 毫秒(0.02 秒)看到一個脈衝。脈衝的長度將決定電機旋轉的距離。例如,1.5 毫秒的脈衝將使電機旋轉到 90 度位置(通常稱為中性位置)。如果脈衝短於 1.5 毫秒,則電機將使軸更接近 0 度。如果脈衝長於 1.5 毫秒,則軸將更接近 180 度。

Angle Turn

所需元件

您將需要以下元件:

  • 1 個 Arduino UNO 開發板
  • 1 個伺服電機
  • 1 個 ULN2003 驅動 IC
  • 1 個 10 KΩ 電阻

步驟

按照電路圖,按照下圖所示進行連線。

Servo Motor Connections

草圖

在您的計算機上開啟 Arduino IDE 軟體。使用 Arduino 語言進行編碼將控制您的電路。透過單擊“新建”開啟一個新的草圖檔案。

Sketch

Arduino 程式碼

/* Controlling a servo position using a potentiometer (variable resistor) */

#include <Servo.h>
   Servo myservo; // create servo object to control a servo
   int potpin = 0; // analog pin used to connect the potentiometer
   int val; // variable to read the value from the analog pin

void setup() {
   myservo.attach(9); // attaches the servo on pin 9 to the servo object
}

void loop() {
   val = analogRead(potpin);
   // reads the value of the potentiometer (value between 0 and 1023)
   val = map(val, 0, 1023, 0, 180);
   // scale it to use it with the servo (value between 0 and 180)
   myservo.write(val); // sets the servo position according to the scaled value
   delay(15);
}

程式碼說明

伺服電機有三個端子 - 電源、接地和訊號。電源線通常為紅色,應連線到 Arduino 的 5V 引腳。接地線通常為黑色或棕色,應連線到 ULN2003 IC 的一個端子 (10-16)。為了保護您的 Arduino 開發板免受損壞,您需要一些驅動 IC 來完成此操作。這裡我們使用 ULN2003 IC 來驅動伺服電機。訊號線通常為黃色或橙色,應連線到 Arduino 的 9 號引腳。

連線電位器

分壓器是串聯電路中的電阻,它將輸出電壓按比例縮放為施加的輸入電壓的特定比例。以下是電路圖:

Connecting Potentiometer

$$V_{out} = (V_{in} \times R_{2})/ (R_{1} + R_{2})$$

Vout 是輸出電壓,它取決於施加的輸入電壓 (Vin) 和串聯電阻 (R1 和 R2)。這意味著流過 R1 的電流也會流過 R2,不會被分割。在上式中,隨著 R2 值的變化,Vout 將根據輸入電壓 Vin 縮放。

通常,電位器是一個分壓器,它可以根據可變電阻的值縮放電路的輸出電壓,該可變電阻使用旋鈕進行縮放。它有三個引腳:GND、訊號和 +5V,如下圖所示:

Potentiometer with Description

結果

透過改變電位器的旋鈕位置,伺服電機將改變其角度。

廣告