用途
伺服馬達(servo motor),可用於遙控模型汽車或機械手臂的轉向,所以又常稱為 RC 伺服機(RC Servo)、伺服馬達舵機。
伺服馬達內含直流馬達、齒輪箱、軸柄、以及控制電路,可透過訊號控制軸柄角度,大都是 0 到 180 度,不同廠牌型號會有不同的範圍。經由齒輪箱降速後,變成適當可用的轉速,提供更高的扭轉力。
一般伺服馬達有三條線,電源(紅色)、接地(黑或棕色)、訊號線(橘)。透過訊號線傳送PWM脈衝控制軸柄的停止位置旋轉角度,脈衝波必須達到50Hz,也就是每20ms發送一次脈衝,而脈衝持續供電狀態下的時間長短便代表了馬達該將軸柄轉到什麼位置。
本章節使用Tower Pro SG90這個Servo進行實驗,其規格為 0.5ms 代表 0 度,2.4ms 代表 180度,不在此範圍的脈衝寬度將會造成馬達燒毀。
不同廠牌型號的伺服馬達可允許旋轉的角度各不相同,請詳查產品規格書
型號規格
型號 : Tower Pro SG90
重量:9g
尺寸:23*12.2*29mm
工作電壓:4.8V
轉矩:1.8kg-cm,當工作電壓為4.8V時
運轉速度:0.1秒 ∕ 60度 ,當工作電壓為4.8V時
脈衝寬度範圍:500~2400µs
死頻帶寬度(dead band width):10µs
接線
SG90的黑色線為接地, 需接到樹莓派實体編號的第6支接腳, 紅色線需輸入5V的電壓, 所以需接樹莓派的實体編號第2支接腳, 橘色線為控制線, 接GPIO 1之接腳
極限值
gpiozero 的 Servo 類別使用軟體 PWM,可能會受到其他系統進程的影響。如果伺服馬達抖動過大,可以嘗試微調 min_pulse_width 和 max_pulse_width 的參數。
SG90 的工作電壓是 4.8V-6V,建議避免長時間使用 Raspberry Pi 提供的電源來驅動伺服馬達。
角度轉換
當 angle = 0° 時,position = -1(最左)
當 angle = 90° 時,position = 0(中間)
當 angle = 180° 時,position = 1(最右)
所以角度的轉換公式為
position = (angle / 180) * 2 - 1
程式
本程式可以將 servo 轉向 0、90、180 度及任何角度
from gpiozero import Servo from time import sleep def set_angle(servo, angle): # 將角度轉換為位置值 position = (angle / 180) * 2 - 1 servo.value = position # 初始化 Servo # 使用 Servo,必須指定 GPIO 腳位,SG90 通常需要微調最小和最大脈衝值 servo = Servo(18, min_pulse_width=0.0005, max_pulse_width=0.0025) try: while True: print("旋轉到最左端") servo.min() # 旋轉到 -90 度 sleep(1) print("旋轉到中間位置") servo.mid() # 旋轉到 0 度 sleep(1) set_angle(servo, 45) sleep(1) print("旋轉到最右端") servo.max() # 旋轉到 +90 度 sleep(1) for i in range(0,181, 20): set_angle(servo, i) print(f"角度 : {i}") sleep(1) except KeyboardInterrupt: print("停止程式") finally: servo.detach() # 停止控制伺服