第7章:舵机原理与选型
学习目标
本章将深入探讨舵机(伺服电机)的工作原理、选型方法和应用技巧。作为机械控制系统的核心执行器,舵机广泛应用于机器人、云台、模型等领域。通过学习本章内容,您将掌握舵机的PWM控制原理、性能参数解读、安装调试技巧,以及在实际项目中的选型策略。我们将从基础的模拟舵机开始,逐步深入到数字舵机的高级特性,最后探讨无刷电机的FOC控制技术。
7.1 舵机工作原理(PWM控制)
7.1.1 舵机的基本构成
舵机是一个闭环控制系统,主要由以下几部分组成:
舵机内部结构示意图
+------------------+
| 控制电路板 |
| (Control Board) |
+--------+---------+
|
+--------v---------+
| 直流电机 |
| (DC Motor) |
+--------+---------+
|
+--------v---------+
| 减速齿轮组 |
| (Gear Train) |
+--------+---------+
|
+--------v---------+
| 位置传感器 |
| (Potentiometer) |
+------------------+
核心组件功能:
- 直流电机:提供原始动力,通常为有刷直流电机,转速3000-6000RPM,功率0.5-5W
- 减速齿轮组:降低转速,增大扭矩,齿轮比通常为100:1到300:1
- 位置传感器:检测输出轴角度,传统舵机使用电位器,高端舵机使用磁编码器
- 控制电路:接收PWM信号,比较目标位置与实际位置,驱动电机
舵机的发展历程: 舵机最初源于航模领域,用于控制飞机的舵面。早期舵机采用模拟电路控制,精度和响应速度有限。随着微控制器技术的发展,数字舵机应运而生,大幅提升了控制性能。现代舵机已经广泛应用于机器人、自动化设备、医疗器械等领域。
舵机外壳材料选择:
- 塑料外壳:成本低,重量轻,适合小型应用,散热性能差
- 铝合金外壳:散热好,强度高,适合连续工作,成本较高
- 碳纤维外壳:超轻量,高强度,用于竞赛级应用,价格昂贵
齿轮材料对性能的影响:
- 尼龙齿轮:噪音小,成本低,易磨损,承载能力有限(<10kg·cm)
- 金属齿轮:耐用性好,承载能力强(>15kg·cm),噪音较大,需要润滑
- 钛合金齿轮:极高强度,重量轻,用于高端产品,成本极高
- 碳纤维强化齿轮:强度与重量平衡优秀,适合中高端应用
7.1.2 PWM控制信号
PWM(Pulse Width Modulation,脉宽调制)是舵机的标准控制方式:
PWM信号时序图
周期 T = 20ms (50Hz)
高电平 ┌──┐ ┌──┐ ┌──┐
│ │ │ │ │ │
低电平 ┘ └─────┘ └─────┘ └─────
├─┤├────────────────┤
tw T-tw
tw = 脉宽时间 (0.5ms ~ 2.5ms)
标准PWM参数:
- 信号周期:20ms(频率50Hz)
- 脉宽范围:0.5ms ~ 2.5ms
- 中位脉宽:1.5ms(对应90°位置)
- 角度映射:$\theta = 90° \times \frac{t_w - 1.5}{1.0}$
控制精度计算: 对于180°舵机,脉宽范围为2ms,理论分辨率为: $$\text{分辨率} = \frac{180°}{2ms \times 1000\mu s/ms} = 0.09°/\mu s$$ 实际应用中,由于控制器PWM分辨率限制(如8位PWM),实际分辨率约为: $$\text{实际分辨率} = \frac{180°}{256} \approx 0.7°$$ PWM信号生成方法:
-
硬件PWM:使用微控制器的定时器生成 - 优点:精确、不占用CPU资源 - 缺点:引脚数量有限 - 适用:少量舵机控制
-
软件PWM:程序循环生成 - 优点:可用任意GPIO引脚 - 缺点:占用CPU资源,精度受中断影响 - 适用:对精度要求不高的应用
-
专用PWM芯片:如PCA9685 - 优点:多通道(16路),高精度(12位) - 缺点:需要额外硬件成本 - 适用:多舵机系统
信号完整性考虑: PWM信号在传输过程中可能受到干扰,影响舵机性能:
- 信号上升/下降时间:理想情况下<1μs,实际中受线缆电容影响
- 振铃现象:长线缆传输时需要终端电阻匹配(通常100-200Ω)
- 噪声抑制:使用屏蔽线缆,信号线远离电源线
- 信号电平:标准TTL电平(0-5V),部分舵机支持3.3V逻辑
非标准PWM协议: 除了标准50Hz PWM外,还有其他控制协议:
- 125Hz高频PWM:用于数字舵机,提高响应速度
- 串行总线协议:如Dynamixel使用的半双工UART
- CAN总线协议:工业级舵机采用,抗干扰能力强
- 模拟电压控制:早期舵机使用,已基本淘汰
7.1.3 闭环控制原理
舵机内部采用简单的比例控制(P控制):
闭环控制框图
目标位置 ──→ [+] ──→ 误差 ──→ [控制器] ──→ 电机
(PWM) ↑ │
│ ↓
实际位置 ←───┴──────── [位置传感器] ←──── 输出轴
控制算法详解:
-
PWM解码:控制电路测量PWM脉宽,通过查表或线性映射转换为目标角度 - 使用计时器捕获上升沿和下降沿 - 脉宽测量精度:±1μs(硬件限制) - 滤波处理:通常采用3-5个周期的移动平均
-
位置采样:读取电位器分压,通过ADC转换为数字量 - ADC采样率:1-5kHz(模拟舵机50Hz,数字舵机300Hz) - 电压范围:0-Vcc对应0-270°机械角度(电位器通常270°) - 噪声处理:低通滤波去除高频干扰
-
误差计算:$e = \theta_{target} - \theta_{current}$ - 误差范围:-180°到+180° - 最短路径算法:考虑跨越0°/180°边界的情况 - 误差积分:高端舵机可能包含I项用于消除稳态误差
-
控制输出:$u = K_p \times e$(其中$K_p$为比例增益) - 典型$K_p$值:0.5-2.0(取决于电机功率和齿轮比) - 输出限幅:防止过驱动损坏电机 - PWM占空比:$duty = |u|/u_{max} \times 100\%$
-
电机驱动:H桥电路控制电机正反转 - 正转:误差为正,向增大角度方向转动 - 反转:误差为负,向减小角度方向转动 - 制动:误差在死区内,短路制动或能耗制动
死区设置与优化: 为避免抖动,通常设置死区(deadband):
- 当$|e| < \epsilon$时($\epsilon$通常为1-2°),电机停止
- 这会导致定位精度略低于理论值
- 自适应死区:根据负载和振动情况动态调整
- 迟滞特性:进入死区和离开死区使用不同阈值,防止临界振荡
电位器反馈机制: 舵机内部的电位器是实现闭环控制的关键元件:
电位器工作原理
Vcc (5V)
│
█ R1
│
输出 ──┤ ← 滑动触点(与输出轴连接)
│
█ R2
│
GND
输出电压:Vout = Vcc × (R2/(R1+R2))
角度映射:θ = (Vout/Vcc) × 180°
电位器的局限性:
- 线性度:±2%,影响全程精度
- 分辨率:受ADC位数限制,通常8-10位
- 温度漂移:电阻值随温度变化,影响精度
- 机械磨损:长期使用后接触电阻增大,产生噪声
- 寿命限制:典型寿命30-50万次旋转
控制器增益调节: 比例增益$K_p$的选择对舵机性能影响很大:
- $K_p$过小:响应缓慢,定位时间长,可能无法克服摩擦力
- $K_p$适中:快速响应,稳定定位,最佳工作状态
- $K_p$过大:产生超调,振荡,甚至不稳定
典型的增益调节过程:
- 从小$K_p$开始,观察响应速度
- 逐步增大$K_p$,直到出现轻微超调
- 回调至超调刚好消失的值
- 该值的80%作为最终增益
改进的控制算法: 虽然大多数舵机使用简单的P控制,高端舵机可能采用更复杂的算法:
-
PD控制:加入微分项,减少超调 $$u = K_p \times e + K_d \times \frac{de}{dt}$$ 实际应用参数:
-
$K_p$:1.0-2.0(位置增益)
- $K_d$:0.01-0.1(微分增益)
- 微分项作用:预测误差趋势,提前制动
-
噪声敏感性:需要对误差信号滤波
-
带前馈的控制:提高跟踪性能 $$u = K_p \times e + K_f \times \theta_{target}$$ 前馈补偿原理:
-
根据目标位置直接给出基础控制量
- 减少反馈环节的负担
- 改善动态响应,减少跟踪延迟
-
$K_f$通常为0.8-0.95倍的稳态增益
-
自适应控制:根据负载自动调节增益 $$K_p = K_{p0} \times (1 + \alpha \times |load|)$$ 负载检测方法:
-
监测电流:高电流表示高负载
- 速度偏差:实际速度低于期望表示负载增加
- 自学习:记录不同位置的负载特性
-
$\alpha$范围:0.2-0.5(负载补偿系数)
-
积分抗饱和PID:消除稳态误差 $$u = K_p \times e + K_i \times \int e \, dt + K_d \times \frac{de}{dt}$$ 抗饱和策略:
-
积分限幅:$|\int e \, dt| < I_{max}$
- 条件积分:仅在误差小于阈值时积分
- 积分分离:大误差时禁用积分项
- 反算法(Back-calculation):输出饱和时停止积分
7.2 扭矩与速度参数
7.2.1 扭矩规格解读
舵机扭矩是选型的关键参数,通常以kg·cm为单位:
扭矩定义:
- 堵转扭矩(Stall Torque):输出轴完全锁定时的最大扭矩
- 工作扭矩:建议不超过堵转扭矩的60-70%
- 连续扭矩:可长时间输出的扭矩,通常为堵转扭矩的30-40%
扭矩与电压关系: $$T = T_{rated} \times \frac{V_{actual}}{V_{rated}}$$ 例如:6V时扭矩为20kg·cm的舵机,在4.8V时扭矩约为: $$T_{4.8V} = 20 \times \frac{4.8}{6} = 16kg\cdot cm$$ 负载计算示例: 机械臂关节负载计算:
L (力臂长度)
├────────────┤
O─────────────● m (负载质量)
└─舵机轴
所需扭矩 T = m × g × L
例:负载2kg,力臂15cm
T = 2kg × 10m/s² × 15cm = 300kg·cm²/s² = 30kg·cm
考虑安全系数1.5:选择 > 45kg·cm 的舵机
扭矩单位换算: 舵机扭矩有多种表示单位,需要正确换算:
- 1 kg·cm = 0.098 N·m = 13.89 oz·in
- 1 N·m = 10.2 kg·cm = 141.6 oz·in
- 1 oz·in = 0.072 kg·cm = 0.0071 N·m
动态扭矩考虑: 静态扭矩计算只考虑重力,实际应用中还需考虑动态因素: $$T_{total} = T_{static} + T_{dynamic}$$ 其中动态扭矩包括:
- 加速扭矩:$T_{acc} = J \times \alpha$(J为转动惯量,α为角加速度)
- 摩擦扭矩:$T_{friction} = \mu \times F_n \times r$(μ为摩擦系数)
- 风载扭矩:$T_{wind} = 0.5 \times \rho \times C_d \times A \times v^2 \times L$
扭矩裕度设计原则:
应用场景 安全系数 说明
静态定位 1.2-1.5 负载稳定,无冲击
缓慢运动 1.5-2.0 低速运动,加速度小
快速运动 2.0-3.0 高速运动,频繁加减速
冲击负载 3.0-5.0 存在突发载荷
扭矩不足的表现:
- 无法启动或启动缓慢
- 定位误差大,无法到达目标位置
- 舵机发热严重,电流过大
- 齿轮打滑或损坏
- 保持力不足,容易被外力推动
扭矩测试方法:
- 静态测试:使用测力计在不同半径处测量最大拉力
- 动态测试:加载标准负载,测量加速时间和最大速度
- 堵转测试:锁定输出轴,测量堵转电流和发热情况
- 疲劳测试:长时间运行,监测扭矩衰减
7.2.2 速度参数
舵机速度通常以"秒/60°"表示:
速度计算:
- 角速度:$\omega = \frac{60°}{t_{60°}}$(度/秒)
- 转速:$n = \frac{\omega}{360°} \times 60 = \frac{10}{t_{60°}}$(RPM)
速度与扭矩权衡:
- 高速舵机:齿轮比小,扭矩较小
- 高扭矩舵机:齿轮比大,速度较慢
- 通用公式:$T \times \omega \approx \text{常数}$(功率守恒)
动态响应考虑: 加速时间估算: $$t_{acc} = \frac{J \times \omega}{T - T_{load}}$$ 其中:
- $J$:转动惯量
- $\omega$:目标角速度
- $T$:舵机扭矩
- $T_{load}$:负载扭矩
速度规格的理解: 舵机速度规格通常给出无负载条件下的数据:
典型速度规格示例:
0.12s/60° @ 6V(无负载)
0.10s/60° @ 7.4V(无负载)
实际速度计算:
角速度 = 60°/0.12s = 500°/s
转速 = 500°/360° × 60 = 83.3 RPM
负载对速度的影响: 实际速度与负载呈非线性关系: $$v_{loaded} = v_{no-load} \times (1 - \frac{T_{load}}{T_{stall}})^n$$ 其中n通常在0.5-1之间,取决于电机特性。
速度控制策略:
- 梯形速度曲线:
速度
^
│ ┌────────┐
│ / \
│ / \
│ / \
└─────────────────→ 时间
加速 匀速 减速
- S型速度曲线:
速度
^
│ ___
│ / \
│ / \
│ / \
└─────────────────→ 时间
更平滑的加减速
高速应用的特殊考虑:
- 惯性载荷:高速运动时,惯性力可能超过静态载荷
- 振动问题:快速启停产生的振动需要阻尼处理
- 发热问题:频繁高速运动导致发热增加
- 齿轮冲击:需要软启动保护齿轮
速度测量方法:
- 编码器测速:最精确,需要额外传感器
- 反电动势测速:利用电机特性,精度中等
- 时间测量:测量到达指定角度的时间,简单但精度低
7.2.3 功率与效率
功率消耗分析: 舵机的功率消耗包含多个组成部分:
- 空载功率:
- 空载电流:50-200mA(小型),200-500mA(大型)
- 主要消耗:控制电路、位置采样、摩擦损耗
- 功率计算:$P_{idle} = V \times I_{idle}$
-
典型值:0.3-3W
-
负载功率:
- 工作电流:0.5-2A(取决于负载)
- 堵转电流:1-3A(小型),3-8A(大型)
- 峰值功率:$P_{peak} = V \times I_{stall}$
-
连续功率:$P_{cont} = P_{peak} \times 0.3$
-
动态功率: $$P_{dynamic} = P_{mech} + P_{loss}$$ 其中:
-
$P_{mech} = T \times \omega$(机械输出功率)
- $P_{loss} = I^2R + P_{friction} + P_{control}$(各项损耗)
效率分析: 舵机的总效率由多个环节决定:
- 电机效率:70-85%
- 铜损:$P_{cu} = I^2 \times R_{coil}$
- 铁损:涡流损耗和磁滞损耗
-
机械损:轴承摩擦和风阻
-
齿轮传动效率:85-95%(每级)
- 齿面摩擦:与润滑状态相关
- 齿轮材料:金属齿轮效率略低于尼龙
-
级数影响:$\eta_{gear} = \eta_{stage}^n$
-
控制电路效率:90-95%
- H桥压降:0.2-0.5V per MOSFET
- 开关损耗:与PWM频率成正比
-
静态功耗:MCU和传感器消耗
-
总效率: $$\eta_{total} = \eta_{motor} \times \eta_{gear} \times \eta_{control}$$ 典型值:40-65%
热管理设计: 连续工作时的热功率必须得到有效散发: $$P_{heat} = P_{input} \times (1 - \eta)$$ 热阻计算: $$\Delta T = P_{heat} \times R_{thermal}$$ 其中:
- $\Delta T$:温升(°C)
- $R_{thermal}$:热阻(°C/W)
- 典型热阻:10-30°C/W(取决于外壳材料)
散热优化策略:
-
被动散热: - 铝合金外壳:热导率200W/(m·K) - 增加散热筋:增大表面积30-50% - 导热垫片:填充空气间隙 - 自然对流:垂直安装优于水平
-
主动散热: - 强制风冷:降低热阻50-70% - 散热片:黑色阳极氧化提高辐射 - 热管耦合:用于高功率应用 - 液冷系统:极端应用场景
-
控制策略: - PWM占空比限制:防止过热 - 温度监控:内置NTC热敏电阻 - 过温保护:>80°C自动降功率 - 间歇工作:10%占空比可连续运行
寿命与温度关系: $$L = L_0 \times 2^{\frac{T_0 - T}{10}}$$
- 每升高10°C,寿命减半
- 建议工作温度:<60°C
- 极限温度:85°C(短时)
7.3 数字舵机vs模拟舵机
7.3.1 技术差异对比
| 特性 | 模拟舵机 | 数字舵机 |
| 特性 | 模拟舵机 | 数字舵机 |
|---|---|---|
| 控制频率 | 50Hz | 300-330Hz |
| 位置采样率 | 50Hz | 300Hz+ |
| 死区 | 5-8μs | 1-2μs |
| 保持力 | 一般 | 强 |
| 响应速度 | 慢 | 快 |
| 功耗 | 低 | 较高 |
| 价格 | 便宜 | 贵 |
7.3.2 模拟舵机特性
工作原理:
模拟舵机控制时序
PWM输入 ──→ 每20ms采样一次 ──→ 驱动电机
↓
位置误差大时全速驱动
接近目标时降速
优点:
- 成本低,适合预算有限的项目
- 待机功耗低
- 电磁干扰小
缺点:
- 响应延迟大(20ms更新周期)
- 保持力弱,容易被外力推动
- 精度较低,死区大
7.3.3 数字舵机优势
高频控制回路:
数字舵机内部处理
MCU ──→ 300Hz位置采样 ──→ PID控制 ──→ PWM驱动
↑ ↓
└──────── 编码器/电位器 ←────────────┘
关键特性:
- 快速响应:3ms更新周期 vs 20ms
- 强保持力:持续修正位置偏差
- 可编程性:支持参数调整(部分型号)
- 高分辨率:12位ADC vs 8位
适用场景:
- 高动态响应要求(如直升机尾舵)
- 需要强保持力(如机械臂关节)
- 精密定位应用
7.4 舵机安装与连接
7.4.1 机械安装要点
安装方式选择:
常见舵机安装方式
A. 直接安装(标准舵机支架)
┌──────────┐
│ 舵机本体 │
├──────────┤
│□ □ □ □│ ← 安装孔
└──────────┘
B. 侧面安装(U型支架)
┌─┐ ┌─┐
│ │██████│ │
│ │舵机本体│ │
└─┘ └─┘
C. 双轴支撑(高负载应用)
轴承
↓
─────●─────
│
┌────┴────┐
│ 舵机 │
└─────────┘
安装注意事项:
- 对中精度:确保舵机轴与负载轴同心,偏差<0.5mm
- 刚性固定:使用M3或M4螺栓,避免振动松动
- 散热空间:预留5-10mm散热间隙
- 线缆预留:考虑运动范围,预留30%余量
振动隔离设计: 高精度应用需考虑振动隔离:
- 橡胶垫片:降低高频振动传递
- 弹性联轴器:补偿轴对中误差
- 质量配重:降低系统固有频率
7.4.2 电气连接规范
标准接线定义:
舵机接线颜色标准
┌─────────────┐
│ 舵机接头 │
│ ● ● ● │
│ │ │ │ │
└─┼─┼─┼───────┘
│ │ └─── 信号线(Signal)
│ │ 黄色/橙色/白色
│ │ PWM控制信号
│ │
│ └───── 电源正(VCC)
│ 红色
│ 4.8V-7.2V
│
└─────── 电源负(GND)
黑色/棕色
共地连接
电源设计要点:
- 独立供电:舵机电源与控制器分离
- 电容滤波:每个舵机并联470μF电容
- 线径选择: - 单个舵机:AWG22(0.64mm²) - 多舵机汇流:AWG18(0.82mm²) - 电压降计算:$\Delta V = I \times R_{wire}$
电流需求估算:
舵机数量 空载总电流 峰值电流 推荐电源
1个 200mA 2A 5V/2A
4个 800mA 8A 5V/10A
6个 1.2A 12A 5V/15A
12个 2.4A 24A 5V/30A
7.4.3 控制器接口
常见控制方式:
- 单片机直接控制:
// Arduino PWM控制示例
#include <Servo.h>
Servo myservo;
// 引脚9输出PWM,控制舵机至90度
myservo.attach(9);
myservo.write(90);
-
专用舵机控制板: - PCA9685:16路PWM,I2C接口 - SSC-32:32路舵机控制器 - Dynamixel协议:串行总线控制
-
信号隔离设计:
光耦隔离电路
MCU侧 光耦 舵机侧
3.3V ┌───┐ 5V
│ 1K │ │ │
PWM──███──→│ │──█──→舵机
│ │ │ │ 信号
GND────────┴───┴───┴───GND
7.5 舵机臂设计要点
7.5.1 舵机臂类型与选择
标准舵机臂规格:
常见舵机臂类型
A. 单臂 B. 双臂 C. 圆盘
● ● ●●●
│ ───┼─── ●●●●●
│ │ ●●●●●●●
│ │ ●●●●●
D. 十字臂 E. 齿轮 F. 万向节
│ ╱│╲ ●
───┼─── ╱ │ ╲ ╱ ╲
│ ╱ │ ╲ ●───●
材料选择:
- 塑料:轻量,成本低,适合小扭矩
- 铝合金:强度高,散热好,标准选择
- 碳纤维:超轻高强,高端应用
- 钢制:最高强度,重型应用
7.5.2 力臂设计计算
力矩传递分析:
力臂长度与力的关系
舵机轴 ●────────→ F
├───r───┤
扭矩关系:T = F × r
r增大 → F减小(力降低,位移增大)
r减小 → F增大(力增大,位移减小)
最优力臂长度: $$r_{opt} = \sqrt{\frac{T_{servo}}{F_{required}}}$$ 设计示例:
- 需要推力:10N
- 舵机扭矩:20kg·cm = 2N·m
- 最优力臂:$r = \frac{2}{10} = 0.2m = 20cm$
7.5.3 连接可靠性设计
花键连接:
25T花键标准(常见规格)
╱╲╱╲╱╲
╱ ╲ ╱
╲ ╱ ╲
╲╱╲╱╲╱
优点:无间隙、扭矩大
缺点:需要专用工具
螺栓夹紧:
- M3螺栓扭矩:0.5-0.8N·m
- 使用弹垫防松
- 定期检查预紧力
键槽设计:
键槽尺寸计算
┌─────┐
│ │← 键宽 w = d/4
│ ● │← 轴径 d
│ │← 键高 h = d/6
└─────┘
7.6 案例研究:六足机器人关节舵机选型与控制
7.6.1 需求分析
六足机器人参数:
- 机体重量:2kg
- 载荷能力:1kg
- 腿长:200mm
- 每腿3个自由度(髋关节、膝关节、踝关节)
- 总计18个舵机
7.6.2 负载计算
静态支撑分析:
三足支撑时最恶劣工况
▲ 3kg
│
●────┼────●
\ │ /
\ │ /
\ │ /
\│/
●
单腿负载 = 3kg ÷ 3 = 1kg
关节扭矩需求:
-
髋关节(水平旋转): - 负载力臂:100mm - 所需扭矩:1kg × 100mm = 100kg·mm = 10kg·cm - 选择:15kg·cm舵机(安全系数1.5)
-
膝关节(抬腿): - 负载力臂:150mm(最大伸展) - 所需扭矩:1kg × 150mm = 15kg·cm - 选择:25kg·cm舵机
-
踝关节(末端调节): - 负载力臂:50mm - 所需扭矩:1kg × 50mm = 5kg·cm - 选择:9kg·cm舵机
7.6.3 舵机选型方案
选型结果: | 关节 | 型号 | 扭矩 | 速度 | 重量 | 数量 |
| 关节 | 型号 | 扭矩 | 速度 | 重量 | 数量 |
|---|---|---|---|---|---|
| 髋关节 | MG996R | 15kg·cm@6V | 0.17s/60° | 55g | 6 |
| 膝关节 | DS3235 | 25kg·cm@6V | 0.15s/60° | 60g | 6 |
| 踝关节 | MG90S | 9kg·cm@6V | 0.10s/60° | 14g | 6 |
总重量:(55×6) + (60×6) + (14×6) = 774g
7.6.4 控制系统设计
硬件架构:
控制系统框图
主控制器 舵机控制板
┌────────┐ ┌──────────┐
│RPi/STM32│─I2C→│ PCA9685×2│
└────────┘ └────┬─────┘
│PWM×18
┌────┴────┐
│18个舵机 │
└─────────┘
步态控制算法:
# 三角步态示例(伪代码)
class TripodGait:
def __init__(self):
self.group_A = [0, 3, 4] # 腿编号
self.group_B = [1, 2, 5]
def step_forward(self):
# 第1相:A组抬腿,B组支撑
self.lift_legs(self.group_A)
self.move_body_forward(distance=50)
# 第2相:A组落地,B组抬腿
self.lower_legs(self.group_A)
self.lift_legs(self.group_B)
# 第3相:B组向前摆动
self.swing_legs_forward(self.group_B)
self.lower_legs(self.group_B)
7.6.5 供电系统设计
功率需求计算:
- 峰值电流:18 × 2A = 36A
- 平均电流:18 × 0.5A = 9A
- 电池选择:2S LiPo 5000mAh 30C
- 工作时间:5000mAh ÷ 9000mA ≈ 33分钟
电源分配:
电源分配方案
7.4V电池 ──→ UBEC(5A)×4 ──→ 每组4-5个舵机
│
└→ 主控板供电(独立5V/2A)
7.7 高级话题:无刷电机FOC控制与编码器反馈
7.7.1 无刷电机vs传统舵机
性能对比: | 特性 | 传统舵机 | 无刷伺服 |
| 特性 | 传统舵机 | 无刷伺服 |
|---|---|---|
| 寿命 | 300-500小时 | 5000+小时 |
| 效率 | 40-55% | 80-90% |
| 噪音 | 齿轮噪音大 | 静音运行 |
| 精度 | ±1-2° | ±0.1° |
| 成本 | 低 | 高 |
| 控制复杂度 | 简单PWM | 需要FOC驱动 |
7.7.2 FOC控制原理
磁场定向控制(Field Oriented Control):
FOC控制框图
位置指令 ──→ [位置环] ──→ [速度环] ──→ [电流环]
↑ ↑ ↑
│ │ │
编码器位置 编码器速度 相电流采样
电流环内部:
Id*,Iq* ──→ [PI] ──→ [反Park] ──→ [SVPWM] ──→ 三相逆变器
↑ │
[Clark/Park]←──── 相电流 ←──────┘
核心变换:
-
Clark变换:三相→两相静止坐标系 $$\begin{bmatrix} I_\alpha \\ I_\beta \end{bmatrix} = \frac{2}{3}\begin{bmatrix} 1 & -\frac{1}{2} & -\frac{1}{2} \\ 0 & \frac{\sqrt{3}}{2} & -\frac{\sqrt{3}}{2} \end{bmatrix}\begin{bmatrix} I_a \\ I_b \\ I_c \end{bmatrix}$$
-
Park变换:两相静止→两相旋转坐标系 $$\begin{bmatrix} I_d \\ I_q \end{bmatrix} = \begin{bmatrix} \cos\theta & \sin\theta \\ -\sin\theta & \cos\theta \end{bmatrix}\begin{bmatrix} I_\alpha \\ I_\beta \end{bmatrix}$$ 其中:
- $I_d$:直轴电流(磁通分量)
- $I_q$:交轴电流(转矩分量)
- $\theta$:转子电角度
7.7.3 编码器类型与精度
常见编码器对比:
-
增量式编码器: - 分辨率:512-4096 PPR - 需要初始化找零点 - 成本低
-
绝对值编码器: - 磁编码器:12-14位(0.088°-0.022°) - 光电编码器:17-23位(0.003°-0.00004°) - 上电即知位置
-
霍尔传感器: - 仅提供6个扇区位置 - 低速控制效果差 - 成本最低
分辨率计算:
机械角度分辨率 = 360° / (编码器线数 × 4 × 减速比)
例:2048线编码器,50:1减速比
分辨率 = 360° / (2048 × 4 × 50) = 0.0088°
7.7.4 SimpleFOC开源方案
硬件配置示例:
SimpleFOC系统组成
Arduino/STM32 ──→ SimpleFOC Shield ──→ 无刷电机
↑ ↑ ↓
位置指令 电流采样 磁编码器
代码示例(Arduino):
#include <SimpleFOC.h>
// 电机和编码器配置
BLDCMotor motor = BLDCMotor(7); // 7对极
MagneticSensorI2C sensor = MagneticSensorI2C(AS5600_I2C);
// 驱动器配置
BLDCDriver3PWM driver = BLDCDriver3PWM(9, 5, 6, 8);
void setup() {
// 编码器初始化
sensor.init();
motor.linkSensor(&sensor);
// 驱动器初始化
driver.voltage_power_supply = 12;
driver.init();
motor.linkDriver(&driver);
// FOC控制模式
motor.controller = MotionControlType::angle;
motor.PID_velocity.P = 0.2;
motor.PID_velocity.I = 2;
motor.PID_velocity.D = 0;
// 初始化FOC
motor.init();
motor.initFOC();
}
void loop() {
motor.loopFOC(); // FOC主循环
motor.move(target_angle); // 位置控制
}
7.7.5 实际应用案例
机械臂关节升级方案:
原方案(传统舵机):
- MG996R舵机
- 扭矩:15kg·cm
- 精度:±2°
- 噪音:55dB
升级方案(无刷FOC):
- 5010无刷电机 + SimpleFOC
- 配置AS5048A磁编码器(14位)
- 扭矩:20kg·cm(含减速器)
- 精度:±0.02°
- 噪音:<30dB
性能提升:
- 定位精度提升100倍
- 运行噪音降低25dB
- 能耗降低40%
- 寿命延长10倍
7.7.6 调试与优化
PID参数整定:
- 位置环:P=10, I=0, D=0.5
- 速度环:P=0.2, I=2, D=0
- 电流环:P=3, I=300, D=0
常见问题解决:
- 抖动:降低位置环P值,增加D值
- 响应慢:增加速度环P值
- 过冲:降低速度环I值
- 发热:检查电流环,限制$I_d$=0
性能优化技巧:
- 使用前馈控制减少跟踪误差
- 实施抗积分饱和
- 添加速度/加速度限制
- 实现S曲线轨迹规划
本章小结
本章系统介绍了舵机的工作原理、选型方法和应用技术。核心要点包括:
基础知识:
- PWM控制原理:20ms周期,0.5-2.5ms脉宽对应角度位置
- 闭环控制:通过电位器反馈实现位置闭环
- 扭矩计算:$T = m \times g \times L$,选型需考虑1.5倍安全系数
关键参数:
- 扭矩规格:工作扭矩不超过堵转扭矩的60-70%
- 速度与扭矩权衡:$T \times \omega \approx \text{常数}$
- 数字舵机优势:300Hz控制频率,响应快,保持力强
实践要点:
- 电源设计:独立供电,合理估算电流需求
- 机械安装:注意对中精度,预留散热空间
- 舵机臂设计:力臂长度决定力与位移的权衡
高级技术:
- FOC控制:效率80-90%,精度可达±0.02°
- 编码器选择:磁编码器性价比高,光电编码器精度高
- SimpleFOC方案:开源易用,适合升级改造
通过本章学习,您应该能够根据项目需求选择合适的舵机,设计可靠的机械连接和供电系统,并了解从传统舵机到无刷FOC的技术演进路径。在实际应用中,要根据精度、成本、功耗等因素综合考虑,选择最适合的方案。
练习题
基础题
题目1:一个标准舵机接收到1.0ms的PWM脉冲信号,假设舵机的运动范围是0-180°,中位在90°,请计算舵机将转到什么角度?
提示:标准舵机1.5ms对应90°,脉宽范围0.5-2.5ms对应0-180°
答案
脉宽与角度的线性关系:
- 0.5ms → 0°
- 1.5ms → 90°
- 2.5ms → 180°
角度计算: $$\theta = \frac{1.0 - 0.5}{2.5 - 0.5} \times 180° = \frac{0.5}{2.0} \times 180° = 45°$$
或使用公式:$\theta = 90° \times \frac{t_w - 1.5}{1.0} = 90° \times \frac{1.0 - 1.5}{1.0} = -45°$
相对于中位:90° - 45° = 45°
答案:舵机将转到45°位置。
题目2:一个机械臂需要提起500g的负载,力臂长度为20cm,请计算所需的最小舵机扭矩。如果考虑1.5倍的安全系数,应该选择多大扭矩的舵机?
提示:扭矩 = 力 × 力臂,重力加速度取10m/s²
答案
计算步骤:
- 负载重力:F = m × g = 0.5kg × 10m/s² = 5N
- 所需扭矩:T = F × L = 5N × 0.2m = 1N·m = 10kg·cm
- 考虑安全系数:T_safe = 10kg·cm × 1.5 = 15kg·cm
答案:最小需要10kg·cm扭矩,考虑安全系数应选择15kg·cm或以上的舵机。
题目3:有6个舵机需要同时工作,每个舵机的空载电流为200mA,堵转电流为2A。请估算电源的电流容量需求。
提示:考虑正常工作和峰值情况
答案
电流需求计算:
- 空载总电流:6 × 200mA = 1.2A
- 峰值总电流:6 × 2A = 12A
- 建议电源容量:15A(留有余量)
实际应用中:
- 正常运行:5-6A(部分舵机带载)
- 瞬时峰值:可能达到12A
- 电源选择:5V/15A或6V/15A
答案:建议使用15A容量的电源。
挑战题
题目4:设计一个四足机器人,每条腿有3个关节(髋关节、膝关节、踝关节),机器人总重3kg,需要能够携带1kg负载。请完成以下设计: a) 计算各关节所需的舵机扭矩 b) 选择合适的舵机型号 c) 设计供电方案
提示:考虑最恶劣工况——两腿支撑
答案
a) 扭矩计算:
最恶劣工况:两腿支撑
- 单腿负载:(3kg + 1kg) ÷ 2 = 2kg
各关节扭矩(假设腿长配置):
-
髋关节(侧向摆动): - 力臂:~15cm - 扭矩:2kg × 15cm = 30kg·cm - 选择:35-40kg·cm
-
膝关节(主要承重): - 力臂:~20cm(最大伸展) - 扭矩:2kg × 20cm = 40kg·cm - 选择:50-60kg·cm
-
踝关节(姿态调节): - 力臂:~8cm - 扭矩:2kg × 8cm = 16kg·cm - 选择:20kg·cm
b) 舵机选型:
- 髋关节:DS3235 (35kg·cm) × 4
- 膝关节:大扭矩舵机 (60kg·cm) × 4
- 踝关节:MG996R (20kg·cm) × 4
c) 供电方案:
- 总舵机数:12个
- 峰值电流:12 × 3A = 36A
- 电池:3S LiPo 11.1V, 5000mAh, 45C
- 降压:UBEC 11.1V→6V, 10A × 4个
- 分组供电:每组3个舵机
题目5:你需要将一个传统的MG996R舵机(精度±2°)升级为高精度伺服系统(目标精度±0.1°)。请设计一个基于FOC控制的升级方案,包括: a) 硬件选型 b) 控制策略 c) 成本效益分析
提示:考虑使用SimpleFOC或ODrive方案
答案
a) 硬件选型:
SimpleFOC方案:
- 电机:5010-360KV无刷电机(~¥50)
- 编码器:AS5047P磁编码器,14位分辨率(¥80)
- 驱动器:SimpleFOC Shield(¥150)
- 减速器:行星减速器 20:1(¥100)
- 控制器:STM32F103(¥30)
- 总成本:~¥410
b) 控制策略:
三环控制:
- 位置环:P=15, I=0.1, D=1
- 速度环:P=0.5, I=5, D=0
- 电流环:P=5, I=500, D=0
特殊处理:
- 实施S曲线轨迹规划
- 加入前馈补偿
- 死区补偿
c) 成本效益分析:
| 对比项 | MG996R | FOC升级方案 |
|---|---|---|
| 成本 | ¥30 | ¥410 |
| 精度 | ±2° | ±0.1° |
| 寿命 | 500小时 | 5000+小时 |
| 效率 | 45% | 85% |
| 噪音 | 55dB | 30dB |
投资回报:
- 精度提升20倍
- 寿命延长10倍
- 能耗降低47%
- 适合高端应用
题目6:在设计云台稳定器时,需要实现0.01°的角度分辨率,响应频率达到100Hz。请分析: a) 传统舵机能否满足要求? b) 如果不能,提出解决方案 c) 计算所需的编码器分辨率
提示:考虑控制频率和编码器精度
答案
a) 传统舵机分析:
传统舵机限制:
- PWM更新频率:50Hz(不满足100Hz要求)
- 分辨率:~0.7°(8位PWM,远低于0.01°要求)
- 死区:5-8μs(对应约1°)
结论:传统舵机无法满足要求
b) 解决方案:
推荐方案:无刷云台电机 + FOC控制
- 无刷电机:GM2804/GM3506
- 控制器:Storm32/SimpleBGC
- 编码器:磁编码器或IMU反馈
- 控制频率:可达1000Hz
关键特性:
- 直驱无齿轮(无回程差)
- FOC矢量控制(平滑)
- 高频控制环(>500Hz)
c) 编码器分辨率计算:
目标:0.01°分辨率
无减速器情况:
- 需要位数:360°/0.01° = 36000级
- 二进制位数:log₂(36000) ≈ 15.14位
- 选择:16位编码器(0.0055°分辨率)
有减速器(10:1):
- 电机端需要:0.01° × 10 = 0.1°
- 需要级数:360°/0.1° = 3600级
- 二进制位数:log₂(3600) ≈ 11.81位
- 选择:12位编码器即可
推荐:AS5048A(14位)或AS5047P(14位)磁编码器
常见陷阱与错误
1. PWM信号问题
错误现象:舵机抖动、不响应或位置不准
常见原因:
- PWM频率错误(不是50Hz)
- 脉宽超出范围(<0.5ms或>2.5ms)
- 信号线接触不良
- 地线未共地
调试方法:
1. 用示波器检查PWM信号
2. 确认控制器与舵机共地
3. 检查脉宽是否在规格范围内
4. 测试中位信号(1.5ms)
2. 供电不足
错误现象:舵机无力、复位、抖动
常见原因:
- 电源电流不足
- 线径太细,压降过大
- 多舵机同时启动造成电压跌落
解决方案:
- 使用独立大电流电源
- 增加储能电容(1000μF/舵机)
- 分时启动多个舵机
- 使用更粗的电源线
3. 机械安装错误
错误现象:舵机发热、噪音大、寿命短
常见原因:
- 轴不对中,造成径向力
- 负载超过额定扭矩
- 舵机臂安装角度错误
- 机械干涉限制运动
预防措施:
- 使用联轴器补偿对中误差
- 计算负载,留足余量
- 上电前手动检查运动范围
- 添加机械限位保护
4. 控制逻辑错误
错误现象:舵机运动不协调、超出范围
常见代码错误:
// 错误:未限制角度范围
servo.write(angle); // angle可能>180°
// 正确:添加范围限制
angle = constrain(angle, 0, 180);
servo.write(angle);
5. 数字舵机兼容性
问题:数字舵机在模拟舵机系统中工作异常
原因:
- 更新频率不匹配
- 死区设置不同
- 功耗差异
解决:
- 不混用数字和模拟舵机
- 调整控制器输出频率
- 独立供电
最佳实践检查清单
设计阶段
- [ ] 计算所有负载扭矩,考虑动态载荷
- [ ] 选择舵机时留50%以上余量
- [ ] 评估精度要求,决定数字/模拟舵机
- [ ] 规划供电方案,估算峰值电流
- [ ] 设计机械限位,防止超程损坏
- [ ] 考虑散热需求,预留通风空间
安装阶段
- [ ] 检查舵机与负载轴对中(<0.5mm)
- [ ] 确认所有电气连接牢固
- [ ] 舵机电源与控制器共地
- [ ] 安装储能/滤波电容
- [ ] 标记线缆,便于维护
- [ ] 手动测试运动范围无干涉
调试阶段
- [ ] 从中位(90°)开始测试
- [ ] 逐步增加运动范围
- [ ] 监测舵机温度(<60°C)
- [ ] 记录空载和负载电流
- [ ] 测试极限位置保持力
- [ ] 验证紧急停止功能
优化阶段
- [ ] 调整PWM死区减少抖动
- [ ] 优化运动轨迹降低冲击
- [ ] 实施加减速控制
- [ ] 添加位置反馈校验
- [ ] 设置过流/过热保护
- [ ] 建立维护计划和备件库
维护阶段
- [ ] 定期检查齿轮磨损
- [ ] 清洁和润滑(如需要)
- [ ] 检查电位器/编码器精度
- [ ] 测试保持力是否下降
- [ ] 更换老化的电容
- [ ] 记录运行时间和故障
通过遵循这个检查清单,可以确保舵机系统的可靠性和长期稳定运行。