0 · 7 块内容地图(控制层的完整切面)

中层控制是把底软提供的「实时执行能力」变成「关节按指令稳定运动」的工程学科。下面 7 块按由内到外的顺序展开:

1基础闭环三环

电流 → 速度 → 位置,3 个 PID 嵌套,关节所有运动的基础。

2FOC 详解

Clarke / Park / SVPWM,电流环的物理实现,决定扭矩响应带宽。

3摩擦补偿 + 回差 + 非线性

低速爬行、库仑摩擦、死区,这些非线性是力控误差主来源。

4力矩估计 + R6 观测链

双编码器 + 扭簧 + 电流模型,输出端到端 < 1 ms 力矩。

5阻抗 / 导纳 / 柔顺

与外部环境「软接触」,决定机器人能不能做装配 / 抛光 / 抓取。

6状态机与控制模式

位置 / 速度 / 力矩 / 阻抗 4 种模式切换,安全 + 平滑过渡。

7多关节协调

同步、轨迹、热管理、降级,单关节通过考核也要看整机表现。

为什么中层是「控制工程的全部」:① 底层提供 10 kHz 中断 + 准确采样 + 保护关断,这是「硬件能跑」② 中层把硬件能力变成「关节能按指令动、能感知力、能柔顺接触」③ 上层算法只是给中层发指令、解释数据。
关键心法:底层决定「能不能跑」,中层决定「能不能用」,上层决定「好不好用」。中层没做好,整个模组就是「能转但不能干活」。

1 · 1基础闭环三环(电流 → 速度 → 位置)

1.1 三环架构

关节的所有运动都由三个嵌套 PID 环实现。每个环有自己独立的采样率、带宽和输出对象:

                ┌──────────────────────────────────┐
位置指令 θ* →  │  位置环(位置 PID)              │  带宽 50-100 Hz
                │  θ* → θ_err → 输出 ω*           │  输出:速度指令
                └──────────────┬───────────────────┘
                               ↓
                ┌──────────────────────────────────┐
                │  速度环(速度 PID)              │  带宽 200-500 Hz
                │  ω* → ω_err → 输出 T*           │  输出:力矩指令
                └──────────────┬───────────────────┘
                               ↓
                ┌──────────────────────────────────┐
                │  电流环(电流 PI / FOC)         │  带宽 1-2 kHz
                │  T* → I* → 输出 Vq / Vd         │  输出:电压矢量
                └──────────────────────────────────┘
    

1.2 三环的关键参数(关节模组实战值)

环采样率PID 类型典型带宽调节时间输出物理量
电流环10-20 kHzPI(含前馈解耦)1-2 kHz< 1 msVd / Vq 电压矢量
速度环1-5 kHzPI + 低通滤波200-500 Hz2-5 ms力矩指令 T*
位置环1-2 kHzP / PD / PID50-100 Hz10-20 ms速度指令 ω*
工程经验:三环的采样率比例至少 1:5:10,否则带宽冲突会引起震荡。位置环 1 kHz / 速度环 5 kHz / 电流环 20 kHz 是较常见的配比。

1.3 离散 PID 实现要点

位置式 PID vs 增量式 PID

标准 PI 公式(电流环)

设 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% 时,冻结积分项
    

数字实现伪代码(电流环,10 kHz 触发)

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 寄存器
}
    

1.4 调节顺序(不能错)

  1. 先电流环:固定 d 轴 id=0,给 q 轴小阶跃电流指令,看实际电流是否跟随(带宽 ≥ 1 kHz)
  2. 再速度环:固定 q 轴电流,闭环速度给阶跃指令,看速度是否跟随(无超调或小超调)
  3. 最后位置环:闭环位置给阶跃指令,看位置是否平滑无超调
  4. 每调一级都要做扫频(chirp 信号激励),画 Bode 图看带宽 + 相位裕度
调 PID 的核心心法:① 外环带宽 ≤ 内环带宽 / 3(位置 ≤ 速度 / 3 ≤ 电流 / 3)② 每个环必须有相位裕度 ≥ 45° + 幅值裕度 ≥ 6 dB ③ 抗积分饱和是必须的,否则启动时积分爆掉④ 调参时先 P 后 I 最后 D,P 给一半再加 I。

1.5 准出门禁

检查项指标测试方法
电流环阶跃响应上升时间 < 0.5 ms / 超调 < 10%示波器或 Streamline
电流环带宽≥ 1 kHz(相位裕度 ≥ 45°)扫频 + Bode
速度环阶跃无超调 / 调节时间 < 10 ms给定目标速度观察
位置环阶跃无超调 / 稳态误差 ≈ 0给定目标位置
正反转切换无抖动 / 平稳梯形速度指令
低速性能0.1°/s 不爬行三角波位置指令

2 · 2FOC 详解(矢量控制)

2.1 FOC 是什么,为什么需要

FOC(Field-Oriented Control,磁场定向控制)是把三相交流电机等效为直流电机控制的方法。它通过坐标变换把三相电流解耦成励磁分量 d 和转矩分量 q,独立控制:

为什么 FOC 是关节模组的标配:① 扭矩响应快(<1 ms)② 效率高(id=0,铜损最小)③ 低速扭矩平稳(无步进步进感)④ 发热低(适合紧凑关节)⑤ 是伺服机器人的工业标准。

2.2 FOC 5 大模块

┌─────────────┐    ┌─────────────┐    ┌─────────────┐
│ ① ADC 采样  │ →  │ ② Clarke 变换│ →  │ ③ Park 变换 │
│   ia, ib    │    │   iα, iβ    │    │   id, iq   │
└─────────────┘    └─────────────┘    └─────────────┘
                                            ↓
┌─────────────┐    ┌─────────────┐    ┌─────────────┐
│ ⑤ SVPWM    │ ←  │ ④ 反 Park   │ ←  │ ⑥ PI 调节  │
│ CCR1-3     │    │   vα, vβ   │    │   vd, vq   │
└─────────────┘    └─────────────┘    └─────────────┘
    

2.3 关键公式(背下来)

变换公式备注
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 / √3SVPWM 调制线性区

2.4 SVPWM 详解

SVPWM(Space Vector PWM)是把 vα/vβ 转换为 3 相 PWM 占空比的标准方法。它比 SPWM 母线电压利用率高 15%。

玉洁的工程价值:SVPWM 是 FOC 的输出端,决定电流波形质量。差的 SVPWM 会让电流波形畸变 → 转矩脉动 → 关节振动 → 力矩估计误差。玉洁 7/27 lock R4 FOC 三件套时已经覆盖这部分。

2.5 电流采样同步(关节模组关键坑)

FOC 需要在PWM 周期中点采样电流,避开开关噪声:

2.6 FOC 准出门禁

检查项指标
电流波形 THD< 5%
扭矩响应时间< 1 ms(指令到扭矩响应)
低速电流平稳度1°/s 转动时 iq 纹波 < 5%
过调制处理电压饱和时进入弱磁区(id < 0)
编码器电气角对齐误差 < 5°(电角度)

3 · 3摩擦补偿 + 回差 + 非线性

3.1 为什么必须补偿

关节模组的所有非理想特性都来自摩擦、回差、死区这些非线性。它们是低速爬行、力控误差、定位误差的三大主因:

非线性物理来源表现补偿难度
库仑摩擦轴承 / 减速器啮合起跳 / 死区★★
黏滞摩擦润滑 / 搅油速度相关阻力★
静摩擦接触面粘附低速爬行★★★
Stribeck 效应边界润滑过渡低速下非线性★★★
回差(背隙)谐波 / RV 减速器啮合间隙正反转切换时位置丢失★★★
死区PWM 死区 / 电流传感器偏置小电流指令无效★★

3.2 摩擦模型(LuGre 模型)

关节模组实战最常用 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 速度
    

3.3 摩擦辨识(参数怎么得到)

  1. 匀速电流扫描:给定不同恒速,测量稳态电流 → 拟合 T_fric-ω 曲线 → 得到 Fc / Fs / σ₂
  2. 三角波速度辨识:低速三角波激励,提取出 LuGre 的 σ₀ / σ₁
  3. 温度补偿:摩擦系数随温度变化(每 10°C 变 5-10%),加入温度补偿表
  4. 在线自适应:用递推最小二乘(RLS)在线更新摩擦参数

3.4 回差补偿(背隙消除)

减速器(特别是谐波 / RV)的回差在 5-30 arcmin 之间,正反转切换时会丢失这些角度。补偿方法:

3.5 准出门禁

检查项指标测试方法
低速爬行0.1°/s 无明显黏滞三角波位置指令 + 编码器
正反转位置误差< 1 编码器分辨率双向标定比较
恒速稳态电流与模型预测误差 < 10%实测 vs LuGre 预测
起跳消除指令 0.01 Nm → 实测扭矩无阶跃低速电流波形

4 · 4力矩估计 + R6 双编码器观测链

4.1 力矩估计的 3 条路径

关节模组要输出精确力矩(< 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)高接触力检测 / 碰撞

4.2 电流模型(高速主力)

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)
    

4.3 双编码器扭簧解算

这是 R6 力矩感知模组的核心:

电机端 ─┐
        ├─ 扭簧 ─ 输出端
        │
        │      Δθ = θ_m / N - θ_l
        │      T_spring = K_spring · Δθ
        │
电机端编码器 19bit  输出端编码器 19bit
θ_m 解析    →      θ_l 解析
    

4.4 多源融合策略(玉洁 7/20 lock 选 B)

玉洁 7/20 锁了B 切换选择融合策略:

速度区间主用力矩路径辅助路径
|ω| < 0.5 rad/s(低速)② 双编码器扭簧① 电流模型
0.5 ≤ |ω| < 5 rad/s(中速)加权融合(50% + 50%)—
|ω| ≥ 5 rad/s(高速)① 电流模型② 双编码器
急停 / 碰撞③ DOB 优先①② 旁路

4.5 准出门禁

检查项指标测试方法
力矩稳态误差< 3% FS挂砝码 / 力矩传感器比对
力矩动态响应阶跃响应 < 1 ms高速抓拍力矩波形
扭簧标定误差< 2%静态 + 动态标定
温漂补偿-20~80°C 范围内 < 5% FS温箱测试
DOB 碰撞检测≤ 5 ms 检测延迟撞击测试

5 · 5阻抗 / 导纳 / 柔顺控制

5.1 为什么需要柔顺控制

刚性位置控制碰到环境就崩。机器人做装配、抛光、抓取、擦玻璃必须「软接触」——既保持接触力稳定,又不损伤物体。阻抗 / 导纳控制是工程上实现「柔顺」的两大主流方法。

5.2 阻抗控制 vs 导纳控制

阻抗控制(Impedance)

输入:位置指令 θ*

输出:扭矩指令 T*

公式:T* = J·α + B·(ω*-ω) + K·(θ*-θ)

适用:高刚度环境接触(地面、夹具)

优势:响应快、扭矩带宽高

坑:碰到硬墙会被「顶死」

导纳控制(Admittance)

输入:扭矩传感 T_ext

输出:位置修正 Δθ

公式:θ = (T_ext - B·ω - K·θ*) / (M·s² + B·s + K)

适用:力控场景(抛磨、装配、抓取)

优势:硬接触稳定、不会顶死

坑:需要外部扭矩信号,延迟敏感

5.3 阻抗模型选型(玉洁实际场景)

场景推荐模型参数
抛光 / 打磨导纳控制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

5.4 阻抗 / 导纳的关键参数

临界阻尼公式:B_critical = 2·√(M·K)。当 B > B_critical 时,响应是过阻尼(无超调);当 B = B_critical 时,临界阻尼;B < B_critical 时欠阻尼(有超调和振荡)。

5.5 准出门禁

检查项指标测试方法
阻抗模型响应阶跃响应 < 50 ms, 无振荡力矩阶跃 + 编码器
硬接触稳定撞墙不振荡、不跳变撞墙测试
力跟踪精度稳态力误差 < 5% FS挂砝码
软接触切换模式切换 < 20 ms, 无冲击位置 ↔ 力控切换
碰撞急停≤ 5 ms 触发, 急停延迟 < 20 ms撞击测试

6 · 6状态机与控制模式管理

6.1 控制模式 4 类

模式指令输出典型场景
位置模式θ*位置点位运动 / 轨迹跟踪
速度模式ω*速度连续运动 / 牵引示教
力矩模式T*扭矩力控 / 柔顺
阻抗模式θ* + T_extθ + T软接触 / 装配

6.2 模式状态机(关节完整状态)

                 ┌──────────┐
       复位 →   │  Init    │ 初始化(自检 + 标定加载)
                 └────┬─────┘
                      ↓
              ┌───────────────┐
              │  Disabled     │ 电机不可使能(默认安全状态)
              └───────┬───────┘
                      ↓ 使能
              ┌───────────────┐
              │  Enabled      │ 电机可使能,但 T = 0
              └───────┬───────┘
                      ↓ 接收指令
        ┌─────────────┼─────────────┐
        ↓             ↓             ↓
   ┌────────┐    ┌─────────┐   ┌─────────┐
   │  Position   │  Velocity   │  Torque
   │  位置模式   │  速度模式   │  力矩模式
   └────┬───┘    └────┬────┘   └────┬────┘
        └─────────────┼─────────────┘
                      ↓
              ┌───────────────┐
              │  Fault        │ 故障态(关 PWM + 报警)
              └───────┬───────┘
                      ↓ 清除故障
              ┌───────────────┐
              │  Disabled     │
              └───────────────┘
    

6.3 模式切换的关键约束

6.4 故障分级 + 自动降级

故障等级响应恢复
温度过高(> 80°C)警告降额(限流 50%)温度降回自动恢复
过流(> 30A)严重立即关断需人工清除
编码器丢失严重关断 + 报警需维修
通信超时警告保持最后指令通信恢复
CAN 总线错误警告进入安全模式重连
超温(> 110°C)致命永久锁死需返厂

6.5 准出门禁

检查项指标
模式切换时间< 50 ms(位置 ↔ 力矩)
切换冲击无速度 / 电流阶跃
故障响应关断延迟 < 5 ms
降额策略温度-电流曲线实现
故障记录100% 记录(时间 + 上下文)

7 · 7多关节协调(多关节协同控制)

7.1 多关节协同的挑战

单关节能跑不代表整机能用。多关节协调要解决:

7.2 分布式时钟同步(DC / IEEE 1588)

方案精度成本适用
无同步(异步)± 1 ms零低速非同步场景
主从同步(CAN SYNC)± 100 µs低中等速度
EtherCAT DC(分布式时钟)± 100 ns中高同步场景(玉洁选)
IEEE 1588 PTP± 1 µs高工业以太网

7.3 峰值电流管控

母线电容容量: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:电源预加重(前置储能电感)
    

7.4 多关节轨迹同步

7.5 故障降级策略

7.6 准出门禁

检查项指标
22 关节同步精度< 100 µs
峰值电流(22 关节同时启动)≤ 母线设计电流
热平衡(满载 30 分钟)所有关节 < 85°C
单关节故障整机进入安全状态 < 50 ms
轨迹同步偏差 < 1 编码器分辨率

8 · 今天小结 + 下一步

中层控制 7 块全部展开完了。今天聊的范围:

中层控制「准出门禁」清单:电流环带宽 ≥ 1 kHz / 速度环带宽 ≥ 200 Hz / 位置环带宽 ≥ 50 Hz / 力矩误差 < 5% FS / 模式切换 < 50 ms / 22 关节同步 < 100 µs / 故障关断 < 5 ms。
达到这个标准之后:才能进入 2-7 三层总览 中的「阶段 5:算法应用」(轨迹规划 / 示教 / 力控任务 / 诊断预测 / SDK),对应下一节「上层算法应用详细拆解」。

下一步建议:如果今天中层聊透了,进入 2-10 上层算法应用详细拆解(轨迹规划 / 示教 / 力控任务 / 诊断预测 / SDK / 数据飞轮和算法订阅)。如果还要继续在中层深挖,可以挑某一块再展开(比如 FOC SVPWM 七段式细节,或者阻抗控制的临界阻尼调试方法)。