3. 舵机基础
舵机(Servo)是OpenMV视觉追踪项目中最重要的执行机构之一。当OpenMV通过摄像头识别到目标物体后,需要驱动云台转动,使摄像头始终对准目标,这一过程的核心就是舵机的位置闭环控制。与普通直流电机不同,舵机内部集成了减速齿轮组、直流电机、位置反馈电位器和控制电路,能够根据输入的PWM信号精确转动到指定角度。理解舵机的工作原理、PWM信号特性以及选型要点,是搭建稳定云台跟踪系统的基础。
3.1 舵机的工作原理与内部结构
舵机本质上是一个位置闭环伺服系统。其核心工作流程为:控制电路接收来自OpenMV的PWM信号,解析出目标角度值;同时,输出轴上的电位器实时检测当前角度并转换为电压信号;控制电路将目标角度与当前角度进行比较,计算出误差值,并驱动直流电机通过减速齿轮组向减小误差的方向旋转,直到误差为零时锁定位置。
以最常见的模拟舵机SG90为例,其内部主要包含以下部件:
- 直流电机:提供原始旋转动力,转速高但扭矩小。
- 减速齿轮组:将电机的高速旋转转换为大扭矩的低速输出,常见减速比在1:200到1:300之间。
- 位置反馈电位器:与输出轴联动,将角度位置转换为0~5V的模拟电压信号。
- 控制电路板:包含PWM信号解析芯片、比较器和电机驱动H桥电路。
当PWM脉宽为1.5ms时,舵机输出轴位于中位(通常为90°);脉宽减小至0.5ms时,输出轴转到0°;脉宽增大至2.5ms时,输出轴转到180°。对于270°舵机,脉宽范围会相应扩展至0.5ms~2.5ms对应0°~270°。
3.2 PWM信号控制与角度映射
OpenMV通过机器视觉模块的定时器输出PWM信号控制舵机。在MicroPython中,使用 pyb.Pin 和 pyb.Timer 配置PWM输出,核心参数为频率(50Hz)和占空比。由于舵机对脉宽敏感而非占空比,因此需要根据频率计算对应的占空比数值。
from pyb import Pin, Timer
# 初始化PWM引脚(以P7为例,对应定时器4通道1)
servo_pin = Pin('P7', Pin.OUT_PP)
tim = Timer(4, freq=50) # 50Hz,周期20ms
ch = tim.channel(1, Timer.PWM, pin=servo_pin)
def set_angle(angle):
# 角度范围0~180,脉宽0.5ms~2.5ms
pulse_width = 0.5 + (angle / 180.0) * 2.0 # 单位ms
duty = int(pulse_width / 20.0 * 10000) # 占空比万分比
ch.pulse_width_percent(duty / 100.0)
角度与脉宽的映射关系如下表所示:
| 目标角度 | 脉宽(ms) | 占空比(50Hz) | OpenMV duty值 |
|---|---|---|---|
| 0° | 0.5 | 2.5% | 250 |
| 45° | 1.0 | 5.0% | 500 |
| 90° | 1.5 | 7.5% | 750 |
| 135° | 2.0 | 10.0% | 1000 |
| 180° | 2.5 | 12.5% | 1250 |
实际使用中,由于舵机个体差异和机械安装误差,0°和180°的极限位置可能略有偏差。建议在软件中设置角度软限位,例如将有效角度限制在5°~175°之间,避免舵机堵转损坏。
3.3 常见舵机类型对比与选型要点
在OpenMV视觉追踪项目中,最常用的舵机为SG90、MG90S和MG996R。它们的主要区别在于齿轮材质、扭矩和功耗。
| 参数 | SG90 | MG90S | MG996R |
|---|---|---|---|
| 齿轮材质 | 尼龙塑料 | 金属齿轮 | 全金属齿轮 |
| 工作电压 | 4.8V~6.0V | 4.8V~6.0V | 4.8V~7.2V |
| 堵转扭矩(4.8V) | 1.8 kg·cm | 2.2 kg·cm | 9.4 kg·cm |
| 工作电流(空载) | 约100mA | 约120mA | 约500mA |
| 堵转电流 | 约650mA | 约800mA | 约2.5A |
| 重量 | 9g | 13.6g | 55g |
| 适用场景 | 轻型云台 | 小型云台(推荐) | 大型云台/机械臂 |
选型要点:
- 扭矩估算:云台需要克服摄像头和支架的重力矩。计算公式为
所需扭矩 = 重量(kg) × 力臂(cm)。例如,摄像头+支架总重80g,力臂3cm,则所需扭矩为0.24 kg·cm,SG90即可满足。但考虑到动态响应和摩擦余量,建议选择扭矩为需求值2倍以上的舵机。 - 电源能力:MG996R堵转电流可达2.5A,若使用OpenMV的USB供电(最大500mA),会导致电压跌落、舵机抖动甚至复位。必须使用外部5V/2A以上的稳压电源,并共地连接。
- 控制精度:模拟舵机的死区带宽约为5~10μs,对应角度分辨率约0.5°~1°。对于视觉追踪应用,1°的分辨率已足够,无需追求数字舵机。
- 响应速度:SG90的0°~180°响应时间约0.12s,MG996R约0.17s。在追踪快速移动目标时,响应速度比扭矩更重要。
3.4 实战案例:OpenMV云台舵机选型与调试
某视觉追踪项目需要识别30米外的人形目标,云台结构为两轴(水平+垂直),摄像头选用OpenMV Cam H7 Plus(重量约30g),搭配铝合金支架(重量约50g),水平力臂4cm,垂直力臂2.5cm。
初始方案:使用两个SG90舵机。实测发现水平轴在快速转动时出现明显抖动,且追踪速度超过30°/s时舵机丢失位置。
分析过程:水平轴所需扭矩 = (0.03+0.05)kg × 4cm = 0.32 kg·cm,SG90标称扭矩1.8 kg·cm,看似足够。但实际动态扭矩需求是静态的3~5倍,且SG90的尼龙齿轮在频繁正反转时存在回差,导致位置振荡。
改进措施:将水平轴更换为MG90S(金属齿轮,扭矩2.2 kg·cm),垂直轴保留SG90。同时优化控制代码,加入角度平滑滤波和加速度限制:
target_angle = 90 # 目标角度
current_angle = 90
step = 2 # 每帧最大变化角度
while True:
# 从OpenMV视觉模块获取目标偏移量
error = get_target_offset()
target_angle = 90 + error * 0.5
# 限制角速度
if target_angle > current_angle + step:
target_angle = current_angle + step
elif target_angle < current_angle - step:
target_angle = current_angle - step
set_angle(target_angle)
current_angle = target_angle
结果对比:更换后水平轴抖动消失,追踪速度提升至60°/s,且连续运行30分钟无过热现象。垂直轴SG90在承受0.08kg负载时工作正常。
复盘经验:舵机选型不能只看静态扭矩,必须考虑动态响应和机械回差。金属齿轮舵机虽然价格贵一倍,但在频繁往复运动中寿命和稳定性显著优于塑料齿轮。此外,软件层面的角速度限制能有效减少舵机堵转概率,延长使用寿命。