本文以 MG90S 舵机为例。使用其他舵机时,请参阅相应的 产品手册,并在 以下代码中修改对应参数。
MG90S 舵机的关键参数:
控制角,0°~ 180°
PWM 高电平时间 500 us~2500 us,对应 0°~180°
工作电压:4.8 V~6 V(典型值 5 V)
堵转扭矩:1.8 kg/cm (4.8V)
最大堵转扭矩:2.2 kg/cm (6V)
运行速度为0.1s/60° (4.8V)
找到任意旋转角度所需的工作时间表达式 是:
Let y be the duty time and x be the rotation angle
y=(2500-500)/180*x+500
y=(100*x+4500)/9
根据参数可知,舵机角度由 PWM 波的高电平持续时间控制。 由于舵机必须使用周期性 PWM 波形控制, 一个周期必须长于控制舵机转到 180° 所需的高电平时间,即 周期应超过 2500 us,因此 PWM 频率应低于 400 Hz。
将 PWM 频率设为 200 Hz,则周期为 5000 us, 控制舵机从 0° 旋转 至 180° 为 10% 至 50%。
CircuitPython 的 PWM 占空比控制精度为 16 位。100% 占空比的二进制值为 1111 1111 1111 1111,十六进制为 FFFF, 十进制为 65535。
用于查找任何旋转所需的占空比的表达式 角度为:
Let y be the duty cycle and x the rotation angle
y=((50-10)/180*x+10)/100*65535
y=(4369*x+196605)/30
伺服的接线方法及 BPI-PicoW-S3:
VBUS 引脚 BPI-PicoW-S3 可以输出 +5V;除 GP0 外,所有 GP 引脚均可用于 输出 PWM,只需修改程序中对应的引脚即可。
| MG90S | BPI-PicoW-S3 |
|---|---|
GND 棕色 |
GND |
+5V 红色 |
VBUS |
PWM 橙色 |
GP0 |
根据上面的表达式和参数,设计一个程序 可以任意控制这个舵机的旋转角度:
import board
import pwmio
import time
servo_1 = pwmio.PWMOut(board.GP0, frequency=200, duty_cycle=0)#200hz, one cycle 5000us
def get_duty_cycle(x):
return int((4369*x+196605)/30)
servo_1.duty_cycle = get_duty_cycle(90)# 90 degrees
可通过逻辑分析仪读取该程序输出的 PWM 高电平时间, 测量结果应与 计算值。
使用列表来设计一组连续的伺服动作:
import board
import pwmio
import time
servo_1 = pwmio.PWMOut(board.GP0, frequency=200, duty_cycle=0)#200hz, one cycle 5000us
def get_duty_cycle(x):
return int((4369*x+196605)/30)
action_list1 = [0,45,90,135,180,0,180,45,135,90]
while True:
for i in action_list1:
servo_1.duty_cycle = get_duty_cycle(i)
time.sleep(0.5)