A08. 伺服馬達控制

專案說明

控制伺服馬達的轉動, 從 0 度轉到 90度, 再轉到180 度, 再回到 0 度

伺服馬達 (Servo) 為遙控車, 遙控飛機等常用的控制馬達, 內部包含一個直流馬達, 齒輪箱, 控制電路。 透過外部輸入訊號來轉動軸柄, 轉動的角度通常介於 0 度 ~ 180 度, 不同的品牌型號會有角度上的差異。 伺服馬達通常都會有一定誤差, 就算同廠牌同型號都會有一定程度的誤差, 若要做到較精準的使用, 需要找出每顆的整輸入訊號和工作角度的關係, 再給出正確的訊號。

馬達通常會有三條線, 紅色接電源, 黑色 (或棕色) 接地,黃色 (或其他彩色) 接訊號源。 馬達通常需要較大的電流來驅動, 若單一顆小馬達可使用板載的電源(如此範例), 但若接多顆馬達, 需要使用外部供電。

電路圖

(圖片由 Fritzing 產生, LinkIt 7697 fritzing 下載)

積木畫布

執行此範例可以看到馬達左右旋轉, 在兩端位置有可能會抖動 (並微微發熱), 這現象是旋轉角度已經超過此馬達的極限了, 長時間操作操作馬達會壞掉。

產生的 Arduino 程式如下

#include <Servo.h>

Servo __myservo10;

void setup()
{
  __myservo10.attach(10);
}

void loop()
{
  __myservo10.write(0);
  delay(2000);

  __myservo10.write(180);
  delay(2000);
}

衍伸學習 : 超出馬達範圍

控制馬達的訊號, 是透過板子的腳位送出一個 50hz (每秒重複 50 次, 每次 20ms) 的訊號, 訊號內會有一拉高的訊號, 告知馬達的電路板這次要轉多少度。 每個型號的伺服馬達的可旋轉角度和控制旋轉角度的脈衝寬度都不一樣。 若無額外設定, 則軟體預設的脈衝寬度會是 544µs ~2400µs (0.544ms ~ 2.4 ms)

若此馬達的轉動範圍和接收訊號範圍是和預設值完全相同, 則馬達收到 544µs 脈衝寬度的訊號時, 會轉到 0 度。 收到 2400µs 的訊號時, 會轉到 180 度。

現實使用上馬達的工作範圍不一定符合軟體的訊號預設值, 所以會造成轉不夠或轉過頭。

此範例使用的是 Grove Starter Kit for LinkIt 7697 內的 Mini Servo, 型號為 (EMAX ES08A), 經測試兩端極值的脈衝寬度約為 620µs ~ 2700µs (角度約 200 度)。

可嘗試修改積木如下圖, 將脈衝範圍設定符合這顆馬達的工作範圍, 就不會發生抖動現象.

其他學習資源

FAQ

Q: 為何我的馬達不會轉?

A: 有幾個可能性:

  • 請先檢查接線是否正確

  • 積木內的 "Pin" 是否有都正確設定

  • 馬達可能長時間在超出極限值下運作燒壞了

Q: 為何我的馬達會一直抖動?

A: 超出極限範圍運做時, 馬達會一直抖動, 長時間運作馬達會發燙, 也有可能會燒壞

Last updated