中层控制是把底软提供的「实时执行能力」变成「关节按指令稳定运动」的工程学科。下面 7 块按由内到外的顺序展开:
电流 → 速度 → 位置,3 个 PID 嵌套,关节所有运动的基础。
Clarke / Park / SVPWM,电流环的物理实现,决定扭矩响应带宽。
低速爬行、库仑摩擦、死区,这些非线性是力控误差主来源。
双编码器 + 扭簧 + 电流模型,输出端到端 < 1 ms 力矩。
与外部环境「软接触」,决定机器人能不能做装配 / 抛光 / 抓取。
位置 / 速度 / 力矩 / 阻抗 4 种模式切换,安全 + 平滑过渡。
同步、轨迹、热管理、降级,单关节通过考核也要看整机表现。
关节的所有运动都由三个嵌套 PID 环实现。每个环有自己独立的采样率、带宽和输出对象:
┌──────────────────────────────────┐
位置指令 θ* → │ 位置环(位置 PID) │ 带宽 50-100 Hz
│ θ* → θ_err → 输出 ω* │ 输出:速度指令
└──────────────┬───────────────────┘
↓
┌──────────────────────────────────┐
│ 速度环(速度 PID) │ 带宽 200-500 Hz
│ ω* → ω_err → 输出 T* │ 输出:力矩指令
└──────────────┬───────────────────┘
↓
┌──────────────────────────────────┐
│ 电流环(电流 PI / FOC) │ 带宽 1-2 kHz
│ T* → I* → 输出 Vq / Vd │ 输出:电压矢量
└──────────────────────────────────┘
| 环 | 采样率 | PID 类型 | 典型带宽 | 调节时间 | 输出物理量 |
|---|---|---|---|---|---|
| 电流环 | 10-20 kHz | PI(含前馈解耦) | 1-2 kHz | < 1 ms | Vd / Vq 电压矢量 |
| 速度环 | 1-5 kHz | PI + 低通滤波 | 200-500 Hz | 2-5 ms | 力矩指令 T* |
| 位置环 | 1-2 kHz | P / PD / PID | 50-100 Hz | 10-20 ms | 速度指令 ω* |
设 Ld = Lq = L(隐极电机简化),Rs 为定子电阻
电流环 PI: u(k) = Kp·e(k) + Ki·Ts·Σe(i) + 1/L·∫(u - Rs·i)dt
前馈解耦项: ωe·(Ld·iq - Lq·id) → 对消旋转电动势
抗饱和: 当 u 接近母线电压 ±90% 时,冻结积分项
ISR_CurrentLoop() @ 10kHz {
读 ADC:ia, ib → ic = -(ia+ib)
Clarke: iα = ia, iβ = (ia + 2·ib) / √3
Park: id = iα·cosθ + iβ·sinθ
iq = -iα·sinθ + iβ·cosθ
误差: ed = id* - id
eq = iq* - iq
PI: vd = Kp_d·ed + Ki_d·∫ed
vq = Kp_q·eq + Ki_q·∫eq
前馈: vd += -ωe·Lq·iq
vq += ωe·Ld·id + ωe·Ψf
限幅: vd, vq ≤ Vbus / √3
反 Park: vα = vd·cosθ - vq·sinθ
vβ = vd·sinθ + vq·cosθ
SVPWM: → 比较值 CCR1, CCR2, CCR3
更新 PWM 寄存器
}
| 检查项 | 指标 | 测试方法 |
|---|---|---|
| 电流环阶跃响应 | 上升时间 < 0.5 ms / 超调 < 10% | 示波器或 Streamline |
| 电流环带宽 | ≥ 1 kHz(相位裕度 ≥ 45°) | 扫频 + Bode |
| 速度环阶跃 | 无超调 / 调节时间 < 10 ms | 给定目标速度观察 |
| 位置环阶跃 | 无超调 / 稳态误差 ≈ 0 | 给定目标位置 |
| 正反转切换 | 无抖动 / 平稳 | 梯形速度指令 |
| 低速性能 | 0.1°/s 不爬行 | 三角波位置指令 |
FOC(Field-Oriented Control,磁场定向控制)是把三相交流电机等效为直流电机控制的方法。它通过坐标变换把三相电流解耦成励磁分量 d 和转矩分量 q,独立控制:
┌─────────────┐ ┌─────────────┐ ┌─────────────┐
│ ① ADC 采样 │ → │ ② Clarke 变换│ → │ ③ Park 变换 │
│ ia, ib │ │ iα, iβ │ │ id, iq │
└─────────────┘ └─────────────┘ └─────────────┘
↓
┌─────────────┐ ┌─────────────┐ ┌─────────────┐
│ ⑤ SVPWM │ ← │ ④ 反 Park │ ← │ ⑥ PI 调节 │
│ CCR1-3 │ │ vα, vβ │ │ vd, vq │
└─────────────┘ └─────────────┘ └─────────────┘
| 变换 | 公式 | 备注 |
|---|---|---|
| Clarke(abc → αβ) | iα = ia iβ = (ia + 2·ib) / √3 | 功率不变变换 |
| Park(αβ → dq) | id = iα·cosθ + iβ·sinθ iq = -iα·sinθ + iβ·cosθ | θ 为电角度(机械角 × 极对数) |
| 反 Park(dq → αβ) | vα = vd·cosθ - vq·sinθ vβ = vd·sinθ + vq·cosθ | — |
| 电磁转矩 | Te = (3/2)·P·[Ψf·iq + (Ld-Lq)·id·iq] | P 极对数,Ψf 永磁体磁链 |
| 电压极限 | √(vd² + vq²) ≤ Vbus / √3 | SVPWM 调制线性区 |
SVPWM(Space Vector PWM)是把 vα/vβ 转换为 3 相 PWM 占空比的标准方法。它比 SPWM 母线电压利用率高 15%。
FOC 需要在PWM 周期中点采样电流,避开开关噪声:
| 检查项 | 指标 |
|---|---|
| 电流波形 THD | < 5% |
| 扭矩响应时间 | < 1 ms(指令到扭矩响应) |
| 低速电流平稳度 | 1°/s 转动时 iq 纹波 < 5% |
| 过调制处理 | 电压饱和时进入弱磁区(id < 0) |
| 编码器电气角对齐 | 误差 < 5°(电角度) |
关节模组的所有非理想特性都来自摩擦、回差、死区这些非线性。它们是低速爬行、力控误差、定位误差的三大主因:
| 非线性 | 物理来源 | 表现 | 补偿难度 |
|---|---|---|---|
| 库仑摩擦 | 轴承 / 减速器啮合 | 起跳 / 死区 | ★★ |
| 黏滞摩擦 | 润滑 / 搅油 | 速度相关阻力 | ★ |
| 静摩擦 | 接触面粘附 | 低速爬行 | ★★★ |
| Stribeck 效应 | 边界润滑过渡 | 低速下非线性 | ★★★ |
| 回差(背隙) | 谐波 / RV 减速器啮合间隙 | 正反转切换时位置丢失 | ★★★ |
| 死区 | PWM 死区 / 电流传感器偏置 | 小电流指令无效 | ★★ |
关节模组实战最常用 LuGre 摩擦模型,能同时描述库仑 + 黏滞 + Stribeck + 静摩擦:
LuGre 模型:
dz/dt = v - σ₀·|v|·z / g(v)
T_fric = σ₀·z + σ₁·dz/dt + σ₂·v
其中:
z —— 内部鬃毛形变量(不可直接测量)
v —— 速度
σ₀ —— 鬃毛刚度(决定静摩擦大小)
σ₁ —— 阻尼系数
σ₂ —— 黏滞系数
g(v) = Fc + (Fs - Fc)·exp(-(v/vs)²) —— Stribeck 函数
Fc —— 库仑摩擦
Fs —— 静摩擦
vs —— Stribeck 速度
减速器(特别是谐波 / RV)的回差在 5-30 arcmin 之间,正反转切换时会丢失这些角度。补偿方法:
| 检查项 | 指标 | 测试方法 |
|---|---|---|
| 低速爬行 | 0.1°/s 无明显黏滞 | 三角波位置指令 + 编码器 |
| 正反转位置误差 | < 1 编码器分辨率 | 双向标定比较 |
| 恒速稳态电流 | 与模型预测误差 < 10% | 实测 vs LuGre 预测 |
| 起跳消除 | 指令 0.01 Nm → 实测扭矩无阶跃 | 低速电流波形 |
关节模组要输出精确力矩(< 5% FS 误差,端到端 < 1 ms),单条路径不够,必须多源融合:
| 路径 | 原理 | 带宽 | 精度 | 适用场景 |
|---|---|---|---|---|
| ① 电流模型 | T = Kt·iq | 极高(>1 kHz) | 中等(Kt 温漂) | 高速 / 中低速主用 |
| ② 双编码器观测 | 扭簧形变 = θ_motor - θ_link × N | 中(500 Hz) | 高(扭簧特性稳定) | 中低速 / 力控主用 |
| ③ 扰动观测器(DOB) | T_disturb = T_ref - J·α - B·ω | 中(200-500 Hz) | 高 | 接触力检测 / 碰撞 |
T_est_current = Kt(θ, T_motor) · iq
其中 Kt 是电机转矩常数,随温度漂移:
Kt(T) = Kt_25·[1 + α·(T - 25)] (α ≈ -0.001 / °C)
加上磁饱和修正:
Kt(iq) = Kt_0 / (1 + β·iq²) (β ≈ 0.01-0.05)
这是 R6 力矩感知模组的核心:
电机端 ─┐
├─ 扭簧 ─ 输出端
│
│ Δθ = θ_m / N - θ_l
│ T_spring = K_spring · Δθ
│
电机端编码器 19bit 输出端编码器 19bit
θ_m 解析 → θ_l 解析
玉洁 7/20 锁了B 切换选择融合策略:
| 速度区间 | 主用力矩路径 | 辅助路径 |
|---|---|---|
| |ω| < 0.5 rad/s(低速) | ② 双编码器扭簧 | ① 电流模型 |
| 0.5 ≤ |ω| < 5 rad/s(中速) | 加权融合(50% + 50%) | — |
| |ω| ≥ 5 rad/s(高速) | ① 电流模型 | ② 双编码器 |
| 急停 / 碰撞 | ③ DOB 优先 | ①② 旁路 |
| 检查项 | 指标 | 测试方法 |
|---|---|---|
| 力矩稳态误差 | < 3% FS | 挂砝码 / 力矩传感器比对 |
| 力矩动态响应 | 阶跃响应 < 1 ms | 高速抓拍力矩波形 |
| 扭簧标定误差 | < 2% | 静态 + 动态标定 |
| 温漂补偿 | -20~80°C 范围内 < 5% FS | 温箱测试 |
| DOB 碰撞检测 | ≤ 5 ms 检测延迟 | 撞击测试 |
刚性位置控制碰到环境就崩。机器人做装配、抛光、抓取、擦玻璃必须「软接触」——既保持接触力稳定,又不损伤物体。阻抗 / 导纳控制是工程上实现「柔顺」的两大主流方法。
输入:位置指令 θ*
输出:扭矩指令 T*
公式:T* = J·α + B·(ω*-ω) + K·(θ*-θ)
适用:高刚度环境接触(地面、夹具)
优势:响应快、扭矩带宽高
坑:碰到硬墙会被「顶死」
输入:扭矩传感 T_ext
输出:位置修正 Δθ
公式:θ = (T_ext - B·ω - K·θ*) / (M·s² + B·s + K)
适用:力控场景(抛磨、装配、抓取)
优势:硬接触稳定、不会顶死
坑:需要外部扭矩信号,延迟敏感
| 场景 | 推荐模型 | 参数 |
|---|---|---|
| 抛光 / 打磨 | 导纳控制 | M=2kg, B=80 Ns/m, K=20 N/m |
| 装配(轴孔) | 导纳 + 搜索 | M=1kg, B=40, K=10 |
| 抓鸡蛋 | 阻抗控制 | M=0.5kg, B=10, K=5 |
| 擦玻璃 | 混合(位置+力) | 法向力 / 切向位置 |
| 碰撞检测 | DOB 优先 + 阻抗退让 | DOB 阈值 5 Nm |
| 检查项 | 指标 | 测试方法 |
|---|---|---|
| 阻抗模型响应 | 阶跃响应 < 50 ms, 无振荡 | 力矩阶跃 + 编码器 |
| 硬接触稳定 | 撞墙不振荡、不跳变 | 撞墙测试 |
| 力跟踪精度 | 稳态力误差 < 5% FS | 挂砝码 |
| 软接触切换 | 模式切换 < 20 ms, 无冲击 | 位置 ↔ 力控切换 |
| 碰撞急停 | ≤ 5 ms 触发, 急停延迟 < 20 ms | 撞击测试 |
| 模式 | 指令 | 输出 | 典型场景 |
|---|---|---|---|
| 位置模式 | θ* | 位置 | 点位运动 / 轨迹跟踪 |
| 速度模式 | ω* | 速度 | 连续运动 / 牵引示教 |
| 力矩模式 | T* | 扭矩 | 力控 / 柔顺 |
| 阻抗模式 | θ* + T_ext | θ + T | 软接触 / 装配 |
┌──────────┐
复位 → │ Init │ 初始化(自检 + 标定加载)
└────┬─────┘
↓
┌───────────────┐
│ Disabled │ 电机不可使能(默认安全状态)
└───────┬───────┘
↓ 使能
┌───────────────┐
│ Enabled │ 电机可使能,但 T = 0
└───────┬───────┘
↓ 接收指令
┌─────────────┼─────────────┐
↓ ↓ ↓
┌────────┐ ┌─────────┐ ┌─────────┐
│ Position │ Velocity │ Torque
│ 位置模式 │ 速度模式 │ 力矩模式
└────┬───┘ └────┬────┘ └────┬────┘
└─────────────┼─────────────┘
↓
┌───────────────┐
│ Fault │ 故障态(关 PWM + 报警)
└───────┬───────┘
↓ 清除故障
┌───────────────┐
│ Disabled │
└───────────────┘
| 故障 | 等级 | 响应 | 恢复 |
|---|---|---|---|
| 温度过高(> 80°C) | 警告 | 降额(限流 50%) | 温度降回自动恢复 |
| 过流(> 30A) | 严重 | 立即关断 | 需人工清除 |
| 编码器丢失 | 严重 | 关断 + 报警 | 需维修 |
| 通信超时 | 警告 | 保持最后指令 | 通信恢复 |
| CAN 总线错误 | 警告 | 进入安全模式 | 重连 |
| 超温(> 110°C) | 致命 | 永久锁死 | 需返厂 |
| 检查项 | 指标 |
|---|---|
| 模式切换时间 | < 50 ms(位置 ↔ 力矩) |
| 切换冲击 | 无速度 / 电流阶跃 |
| 故障响应 | 关断延迟 < 5 ms |
| 降额策略 | 温度-电流曲线实现 |
| 故障记录 | 100% 记录(时间 + 上下文) |
单关节能跑不代表整机能用。多关节协调要解决:
| 方案 | 精度 | 成本 | 适用 |
|---|---|---|---|
| 无同步(异步) | ± 1 ms | 零 | 低速非同步场景 |
| 主从同步(CAN SYNC) | ± 100 µs | 低 | 中等速度 |
| EtherCAT DC(分布式时钟) | ± 100 ns | 中 | 高同步场景(玉洁选) |
| IEEE 1588 PTP | ± 1 µs | 高 | 工业以太网 |
母线电容容量:1000 µF(典型)
单关节峰值电流:30 A × 0.5 ms = 15 mC
22 关节同时启动:22 × 15 = 330 mC
母线电压跌落:ΔV = 330 mC / 1000 µF = 330V → 跌落到 0V(母线崩溃)
→ 解法 1:分时启动(每 5ms 启动一个关节)
→ 解法 2:母线电容加大(成本 + 体积上升)
→ 解法 3:限制峰值电流上升率(dI/dt 限制)
→ 解法 4:电源预加重(前置储能电感)
| 检查项 | 指标 |
|---|---|
| 22 关节同步精度 | < 100 µs |
| 峰值电流(22 关节同时启动) | ≤ 母线设计电流 |
| 热平衡(满载 30 分钟) | 所有关节 < 85°C |
| 单关节故障 | 整机进入安全状态 < 50 ms |
| 轨迹同步 | 偏差 < 1 编码器分辨率 |
中层控制 7 块全部展开完了。今天聊的范围:
下一步建议:如果今天中层聊透了,进入 2-10 上层算法应用详细拆解(轨迹规划 / 示教 / 力控任务 / 诊断预测 / SDK / 数据飞轮和算法订阅)。如果还要继续在中层深挖,可以挑某一块再展开(比如 FOC SVPWM 七段式细节,或者阻抗控制的临界阻尼调试方法)。