3. 舵机基础

舵机(Servo)是OpenMV视觉追踪项目中最重要的执行机构之一。当OpenMV通过摄像头识别到目标物体后,需要驱动云台转动,使摄像头始终对准目标,这一过程的核心就是舵机的位置闭环控制。与普通直流电机不同,舵机内部集成了减速齿轮组、直流电机、位置反馈电位器和控制电路,能够根据输入的PWM信号精确转动到指定角度。理解舵机的工作原理、PWM信号特性以及选型要点,是搭建稳定云台跟踪系统的基础。

舵机内部结构 直流电机 减速齿轮组 输出轴 电位器反馈 控制电路 角度反馈 PWM信号控制 周期 T = 20ms (50Hz) 高电平脉宽 τ = 0.5~2.5ms 0° 45° 90° 135° 180° 270° 0.5ms 1.5ms 2.5ms OpenMV控制链路 OpenMV PWM输出 舵机 图像识别 脉宽调制 角度执行 电源: 5V / 6V, 电流 0.5~2A

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°。

经验提示:在OpenMV项目中,建议使用180°舵机作为云台的水平与垂直控制。270°舵机虽然范围更大,但控制精度和线性度通常不如180°舵机,且价格更高。

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.52.5%250
45°1.05.0%500
90°1.57.5%750
135°2.010.0%1000
180°2.512.5%1250

实际使用中,由于舵机个体差异和机械安装误差,0°和180°的极限位置可能略有偏差。建议在软件中设置角度软限位,例如将有效角度限制在5°~175°之间,避免舵机堵转损坏。

3.3 常见舵机类型对比与选型要点

在OpenMV视觉追踪项目中,最常用的舵机为SG90、MG90S和MG996R。它们的主要区别在于齿轮材质、扭矩和功耗。

参数SG90MG90SMG996R
齿轮材质尼龙塑料金属齿轮全金属齿轮
工作电压4.8V~6.0V4.8V~6.0V4.8V~7.2V
堵转扭矩(4.8V)1.8 kg·cm2.2 kg·cm9.4 kg·cm
工作电流(空载)约100mA约120mA约500mA
堵转电流约650mA约800mA约2.5A
重量9g13.6g55g
适用场景轻型云台小型云台(推荐)大型云台/机械臂

选型要点:

  1. 扭矩估算:云台需要克服摄像头和支架的重力矩。计算公式为 所需扭矩 = 重量(kg) × 力臂(cm)。例如,摄像头+支架总重80g,力臂3cm,则所需扭矩为0.24 kg·cm,SG90即可满足。但考虑到动态响应和摩擦余量,建议选择扭矩为需求值2倍以上的舵机。
  2. 电源能力:MG996R堵转电流可达2.5A,若使用OpenMV的USB供电(最大500mA),会导致电压跌落、舵机抖动甚至复位。必须使用外部5V/2A以上的稳压电源,并共地连接。
  3. 控制精度:模拟舵机的死区带宽约为5~10μs,对应角度分辨率约0.5°~1°。对于视觉追踪应用,1°的分辨率已足够,无需追求数字舵机。
  4. 响应速度:SG90的0°~180°响应时间约0.12s,MG996R约0.17s。在追踪快速移动目标时,响应速度比扭矩更重要。
风险提示:不要将舵机电源与OpenMV的3.3V逻辑电源共用。舵机启动瞬间电流可达正常工作电流的5倍以上,会造成电压跌落,导致OpenMV复位或SD卡写入错误。务必使用独立的5V/2A电源模块,并将舵机电源地线与OpenMV的GND连接。

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负载时工作正常。

复盘经验:舵机选型不能只看静态扭矩,必须考虑动态响应和机械回差。金属齿轮舵机虽然价格贵一倍,但在频繁往复运动中寿命和稳定性显著优于塑料齿轮。此外,软件层面的角速度限制能有效减少舵机堵转概率,延长使用寿命。

总结:舵机是OpenMV视觉追踪系统的执行末端,其性能直接影响追踪的平稳性和准确性。掌握PWM信号与角度的映射关系,理解不同舵机的扭矩、速度和电源特性,是搭建可靠云台的关键。在实际项目中,建议先进行扭矩估算,再根据动态需求选择金属齿轮舵机,并始终使用独立电源供电。