伺服馬達的工作原理是由控制器發出PWN信號給伺服馬達控制晶片,經由控制晶片上IC判斷轉動方向,透過減速齒輪將動力傳至轉臂,同時由位置檢測器送回訊號,判斷是否已達定位。
伺服馬達的控制是透過,PWM的訊號來操控,雖然廠牌不同,但PWM的週期差不多都是20ms(毫秒),然後藉由改變脈波寬比(Duty Cycle:派波寬與週期之比),可以得到以下不同的控制效果:
PWM脈波就是1.5ms為中心來控制伺服機的正逆轉。
當小於1.5ms的正脈波使伺服馬達逆轉。
當大於1.5ms的正脈波使伺服馬達正轉。
位置檢測器其實就是可變電阻,當伺服馬達轉動時,會同時帶動可變電阻,使電阻值隨之改變,藉由檢測電阻值便可知道轉動的角度。
(圖) 伺服馬達內部結構圖
伺服馬達為求轉速快、耗電小,於是將細銅線纏繞成極薄的中空圓柱體,形成一個重量極輕的中空轉子,並將磁鐵置於圓柱體內,這就是無核心馬達。至於齒輪組,則有塑膠與金屬分別,因應不同的負載需求,金屬齒輪的伺服機一般皆為大扭力及高速型,具有齒輪不會因負載過大而崩牙的優點。較高級的伺服機會裝置滾珠軸承,使得轉動時能更輕快精準。
(圖) 常見的伺服馬達
伺服機使用3隻接腳做控制,分別為電源線、地線與控制訊號線。一般電源線在中間,避免接腳插反而燒毀伺服機。一般在坊間買得到的伺服馬達會有兩種顏色配對的接線:
(黑. 紅.白) 對應GND . V+. 訊號pin
(棕. 紅.橘) 對應 GND . V+. 訊號pin
範例程式(180度的伺服馬達):
#include <Servo.h>
Servo servo1; //建立伺服馬達物件
int angle = 0; //設定起始角度為0
void setup()
{
servo1.attach(9); // 設定伺服馬達連接於第九腳
}
void loop()
{
servo1.write(angle); // 設定伺腳馬達的轉動角度
delay(1000); // 延遲1秒
if(angle<180) //當角度小於180時,角度遞增10度,
angle = angle+10;
else //否則,角度歸零
angle=0;
}
由寫入的角度來決定輪子轉動方向,並與90度(中立點)差值大小,決定轉動的速度。
程式範例(360度的伺服馬達):
#include <Servo.h>
Servo servoL; // 建立伺服馬達物件
Servo servoR; // 建立伺服馬達物件
void setup()
{
servoL.attach(10); // 設定伺服馬達連接於第10腳
servoR.attach(11); // 設定伺服馬達連接於第11腳
}
void loop()
{
servoL.write(180); // 設定伺腳馬達的轉動角度
servoR.write(0); // 設定伺腳馬達的轉動角度
}
如果要反轉的話,即需要更換loop()內的程式碼:
{
servo1.write(0); // 設定伺腳馬達的轉動角度
}
由寫入的角度來決定輪子轉動方向,並與90度(中立點)差值大小,決定轉動的速度。