这几年做机器人关节驱动器的人越来越多,但真正把“基于 EtherCAT 的机器人关节双编码器驱动器”从原理图搬到量产板的并不多。这个项目表面上是把电机驱动、总线通信、编码器接口焊在一块板子上,实际上它牵涉机器人力控、总线同步、伺服三环、机械标定等一堆问题。我前前后后折腾过的方案里,双编码器结构带来的收益非常明显:关节端定位精度上来了,低速爬行没了,末端抖动也小了一个量级。这篇文章我会按我的实际设计过程来拆,把为什么上双编码器、为什么选 EtherCAT、DC 同步怎么调、CSP 模式怎么跑、常见坑怎么避都讲清楚。适合正在做机器人关节模组、协作机械臂、直驱关节的工程师,也适合想入行伺服驱动开发、但还没摸过从站协议栈的朋友。
1. 方案选型:这台驱动器为什么这么设计
1.1 单编码器不够用,双编码器解决的是“全闭环”问题
机器人关节驱动器和普通工业伺服最大的区别在于负载结构。关节电机一般要经过谐波减速器、行星减速器或摆线减速器,减速比从50比1到160比1不等。如果只在电机轴上装一个编码器,驱动器看到的位置、速度都是“减速器输入端”的状态,减速器自身的回差、柔轮形变、齿隙、扭转变形全部看不见。用这种半闭环方案做点位控制问题不大,但做轨迹跟踪、力控、拖动示教就很吃力。
双编码器方案是把编码器装在两个位置:一个装在电机轴端,负责高速读取,另一个装在减速器输出端,负责绝对位置和低速精读。电机端的编码器给电流环、速度环做反馈,输出端的编码器给位置环做闭环,中间经过减速比换算,这样关节负载端的位置变化能被直接感知,减速器导致的误差被位置环吃掉一部分,整机刚度和轨迹精度明显提升。
我见过很多工程师一上来就纠结“输出端要不要用多圈绝对值”,我的建议是:既然都做双编码器了,输出端直接上多圈绝对值,最好是 BiSS-C 或 SSI 接口,省掉上电找零位的过程。电机端反而可以用增量式的 ABZ 编码器,反正电流环、速度环只需要短周期相对位置变化。
1.2 EtherCAT 不是“流行的选择”,而是多关节场景下的刚需
机器人关节驱动器之间需要级联,而且主站要在一个固定周期内把几十个关节的目标位置、速度、力矩同时发下去,再从每个关节收回实际位置、速度、电流。如果用 CAN,1Mbps 的带宽在 1ms 周期下要传几十个关节的报文,总线占用率会非常难看;用 RS485 就更不用说了,半双工、无同步机制、只能小规模点对点。EtherCAT 的优势在于“一个帧带所有从站”:无论从站数量多少,周期报文循环次数基本恒定,带宽利用率极高。
更关键的是 EtherCAT 的分布式时钟(DC)能力。机器人多关节联动时,如果各关节的采样时刻不一致,哪怕只差 0.5ms,插补出来的末端轨迹也会出现肉眼可见的抖动。EtherCAT 的 DC 机制可以让所有从站在同一个系统时间点上锁存编码器数据、同步刷新 PWM 输出,从站之间的同步误差能控制在亚微秒甚至几十纳秒量级,这是 CAN 和普通以太网完全给不了的。
项目里我选了标准线形拓扑,每个关节驱动器内置双网口,主站网线进来,再出一根网线给下一个关节。从站控制器用了 LAN9252,SPI 接口接主控 MCU,成熟、资料多、成本可控,自己画 PCB 也容易。
1.3 硬件架构:ESC 到 MCU 到功率级的完整链路
整个驱动器硬件链路大概是这样的:
- EtherCAT 主站(TwinCAT 或 SOEM)通过标准网线接入关节驱动器;
- 关节驱动器的 PHY 芯片接收报文,交给 LAN9252(ESC,EtherCAT 从站控制器);
- LAN9252 通过 SPI 与 MCU 交互,MCU 从 ESC 的 DPRAM 里读 PDO 数据、写 PDO 数据;
- MCU 完成 FOC 算法,输出六路 PWM 给栅极驱动芯片,驱动三相全桥 MOSFET;
- MCU 同时通过编码器接口读取电机端 ABZ 编码器和输出端 BiSS-C 绝对值编码器;
- 电流采样通过三相低阻采样电阻配合运放完成,母线电压、温度也一并采集。
主控我建议用自带浮点运算的 MCU,比如 STM32F4 系列或者 STM32G4 系列。G4 系列的定时器和 ADC 更适合电机控制,F4 的生态更成熟。如果后期要跑复杂的振动抑制算法,可以上 H7 级别,但对 1kHz 位置环、20kHz 电流环来说,F4/G4 已经完全够用,没必要上来就堆料。
提示:把功率部分和信号部分分区布板,编码器线、电流采样线、PWM 线尽量远离。我做第一版就是因为编码器电路离 MOSFET 太近,一体机空载正常、一带负载就乱跳,查了两天才发现是开关噪声干扰了编码器信号。
2. 双编码器与伺服三环:核心控制细节
2.1 双编码器的信号接口和分辨率怎么定
电机端编码器常见手段是 2500 线 ABZ 增量式,驱动器内部再做四倍频,等效 10000 线。但如果关节电机本身带了 17 位磁编码器,也可以直接读取,反正电机端速度高,分辨率只要达到速度环需求就行。
输出端编码器承担的是位置绝对精度,建议至少 17 位,最好 19 位多圈。一个 100 比 1 谐波减速器,输出端转一圈,电机端要转 100 圈。输出端编码器角度分辨率如果按 19 位算,大约 0.0007 度,已经比绝大多数机器人关节的重复定位精度要求高了。
常见的输出端接口我在选型时重点对比过三种:
| 接口方式 | 线束 | 抗干扰能力 | 协议复杂度 | 适用场景 |
|---|---|---|---|---|
| BiSS-C | 时钟+数据差分 | 强 | 中等,带 CRC | 工业机器人关节常见 |
| SSI | 时钟+数据差分 | 强 | 低 | 很多绝对值编码器支持 |
| Sin/Cos | 模拟差分信号 | 中 | 需要高精度 ADC | 高端伺服常用 |
| 数字霍尔组 | 多路电平 | 弱 | 低 | 低端关节,不推荐 |
我最终选了 BiSS-C,因为它的时钟由驱动器提供,数据线回传数据加 CRC 校验,长线传输比普通串口可靠得多。用 MCU 的 SPI 外设做主模式,再配合定时器控制时钟频率,中等速率配置 2MHz 到 4MHz 都能稳定跑。
2.2 电机端编码器和输出端编码器怎么融合
双编码器不是简单“读两个位置”就完了,融合策略直接影响低速性能和力矩控制。我实际用的策略是:
- 位置环反馈:直接用输出端绝对值编码器,经过零位偏移校准后作为全闭环反馈;
- 速度环反馈:高速时用电机端编码器,因为电机端一圈的脉冲数多,瞬时速度计算更平滑;
- 低速时,尤其是输出端速度低于某个阈值时,改用输出端编码器计算速度,因为这时电机端编码器一个控制周期内可能只走几个脉冲,微分噪声很大。
融合的切换点要做滞回,避免在临界速度附近来回切。比如我设定输出端 0.001 rad/s 以上用电机端速度,掉到 0.0006 rad/s 以下切输出端速度,中间留一段死区,速度估计就不会跳变。
还有一个最容易忽视的工作是零位对齐。机械装配后,电机端编码器 Z 脉冲位置和输出端绝对值编码器零点几乎没有必然关系,必须做一次“标定”。常见做法是点动电机使输出端编码器输出零位附近,然后捕获电机端 Z 脉冲对应角度,存成固定偏移。这个偏移量要写到驱动器 EEPROM 里,换编码器、拆装减速器之后都要重新标定。
2.3 电流环、速度环、位置环的层级与周期
驱动器控制环路的常规结构是三环串联:电流环最内层,速度环在中间,位置环最外层。机器人关节控制下发的通常是目标位置和目标速度,所以位置环必须和 EtherCAT 周期对齐,一般跑 1kHz;速度环可以跑到 2kHz 到 4kHz;电流环跟着 PWM 频率走,我这里是 20kHz。
三环周期的选择是有依据的。20kHz 电流环对应 50μs 控制周期,FOC 中 SVPWM 的刷新率就是 20kHz。速度环周期不能太低,因为速度环输出的 q 轴电流指令要交给电流环跟踪,速度环 2kHz 到 4kHz 是比较合理的区间。位置环 1kHz 和 EtherCAT 1ms 周期匹配,主站每个周期下发一次目标值,位置环刚好刷新一次。
注意:位置环周期不要盲目比 EtherCAT 周期高。主站 1ms 下发一次目标位置,你位置环跑到 4kHz 反而要自己插值,插值逻辑没写好就是额外抖动源。
3. EtherCAT 从站实现:从 EEPROM 到 DC 同步
3.1 SII EEPROM 配置:从站起死回生的第一步
EtherCAT 从站上电后,ESC 会根据 SII EEPROM 里的内容配置自身。SII 里存的是厂商 ID、产品代码、寄存器初始化值、PDO 映射、分布式时钟相关参数等信息。如果 SII 没有写好,主站扫描从站时会显示“未知设备”或者识别不到设备,甚至从站根本进不了 OP 状态。
我一般习惯先把程序做成“EEPROM 异常时使用默认配置”的模式,等主站能扫到设备、能读写对象字典之后,再用 TwinCAT 的 ESI 导入工具把正式配置写进去。SII 配置有很多细节,最容易踩的坑是:
- PDO 映射必须和 0x1600 / 0x1A00 等对象字典内容对应;
- 心跳时间(Watchdog)太短导致稍微卡顿就触发看门狗,从站频繁掉线;
- 分布式时钟寄存器初始化值不写,后面 DC 同步怎么都起不来。
PDO 映射这步很重要。我做的关节驱动器在 CSP 模式下的核心 PDO 如下:
RxPDO(主站→从站)
| 索引 | 名称 | 类型 | 说明 |
|---|---|---|---|
| 0x6040 | 控制字 | U16 | 状态机切换 |
| 0x607A | 目标位置 | S32 | 单位:脉冲或角度换算 |
| 0x60FF | 目标速度 | S32 | 单位:编码器计数/s |
| 0x60B0 | 力矩偏置 | S16 | 用于力控补偿 |
TxPDO(从站→主站)
| 索引 | 名称 | 类型 | 说明 |
|---|---|---|---|
| 0x6041 | 状态字 | U16 | 上送从站状态 |
| 0x6064 | 实际位置 | S32 | 输出端编码器换算值 |
| 0x606C | 实际速度 | S32 | 速度环估算值 |
| 0x6077 | 实际力矩 | S16 | q 轴电流换算 |
3.2 从零开始切换到 CSP 模式:控制字的那几个数字
EtherCAT 从站必须按 CiA402 状态机切换流程才能进入运行状态。很多新手直接发 0x0F 试图一步到位,结果从站就是不进 OP,原因就是没有按状态机顺序走。我调试时常用的顺序是:
- 发送控制字 0x0006,让从站进入 “Ready to switch on”;
- 发送控制字 0x0007,让从站进入 “Switched on”;
- 发送控制字 0x000F,让从站进入 “Operation enabled”,此时伺服开始根据 CSP 目标值运行。
每次状态切换之间稍微留一点时间,等状态字 0x6041 里的对应位确认到位后再发下一步,不要连续猛刷。还有一个细节:CSP 模式下进入运行状态后,主站如果需要更新目标位置,控制字的第 4 位(bit4,new setpoint 位)要置 1,表示这次下发的是新的设定值,从站内部逻辑才会重新采样目标位置。
CSP 的数据流其实很简单:主站下发目标位置、目标速度、力矩偏置,从站自己在位置环内跑,再把实际位置、实际速度、实际电流上送。用于通用机器人运动控制完全够用,真要上阻抗控制和力控,就需要 CSP 配合力矩偏置或者切到 CST 模式。
3.3 把 DC 时钟同步过程拆开讲透
DC 同步是 EtherCAT 最值钱的功能,也是项目里最让人头疼的部分。我花了不少时间去读 ETG 规范,实际抓了很多波形才真正把逻辑捋顺。DC 同步的核心目标只有一个:让所有从站在同一个“全局系统时间”的同一时刻,触发采样和输出刷新。
这个过程分四步展开:
第一,初始化同步。主站建立系统时间参考,并设置每个从站的时钟周期和 SYNC0 中断周期。SYNC0 是硬件事件,从站控制器会按照预先设定的周期产生中断信号,MCU 收到中断后读取当前时刻的编码器值、执行控制算法、更新 PWM 输出,一整套动作都对齐到 SYNC0 上。
第二,测量传播延迟。每个从站收到报文的时间相比主站发送时间有一个传输延迟,还要考虑上一级从站转发造成的额外延迟。主站通过 ARMW 命令逐个从站写入时间戳,再读取回发时间戳,计算出每个从站的 System Time Delay。这套测量通常在 PREOP 到 SAFEOP 阶段自动完成,但如果从站 DC 寄存器没配置好,测量结果会是 0 或者乱跳。
第三,漂移补偿。每个从站的晶振频率不可能完全相同,20ppm 的误差在一秒内就会造成 20μs 的偏差,在 500μs 控制周期里这足以毁掉整条轨迹。EtherCAT 的做法是让每个从站定期把自己的本地时钟与主站参考时钟做差,算出漂移量,写入本地时钟单元的漂移补偿寄存器。这个补偿值是动态更新的,运行期间会持续微调。
第四,SYNC 事件触发。一切就绪后,从站在每个系统时间周期的整数倍点,产生 SYNC0 中断。MCU 的中断服务函数里,第一步锁存编码器计数,第二步读取电流采样结果,第三步执行控制算法,第四步更新 PWM 寄存器。这样每个从站都严格在同一系统时间点采样和执行,关节之间的数据时间一致性就有了保障。
在 STM32 配合 LAN9252 的典型实现里,SYNC0 中断信号走 LAN9252 的 SYNC0/ERR 引脚,接到 STM32 的 EXTI 外部中断。LAN9252 的 DC 寄存器地址主要在 0x0900 到 0x0930 区间,包括系统时间寄存器、SYNC 时间和周期寄存器等,这些值都可以通过 SPI 访问。如果 MCU 的同步中断里跑太多耗时操作,抖动会非常大,所以中断服务函数里尽量别打印、别做浮点库函数,数据搬到控制任务里处理。
提示:实际调试 DC 时,先用示波器同时测两个从站的 SYNC0 引脚波形。如果两个波形沿之间的偏差在 100ns 级别,说明 DC 正常;如果偏到微秒级甚至毫秒级,优先查晶振贴片质量、PHY 的时钟输出、SPI 读写速度。
4. 驱动器联调与性能验证:从单关节到多关节
4.1 上电自检与抱闸时序
驱动器的上电流程不能省,做不严谨很容易把功率级烧掉。我的流程是:
- 母线电容预充到安全电压后,闭合主继电器;
- MCU 读取 EEPROM 里的零位偏移、编码器规格、限位参数;
- 对电机端编码器、输出端编码器分别做断线检测;
- 如果绝对编码器数据有效,把位置环直接初始化为当前绝对位置;
- 待机状态下先不使能 PWM,等主站下发使能指令;
- 抱闸释放必须在速度环使能之后,否则断电时关节会突然掉落。
抱闸时序这个点以前吃过亏:抱闸控制接的继电器或者 MOS 管有动作延迟,PWM 还没输出时抱闸先松了,电机端带着减速器直接倒转,输出端编码器瞬间跑飞。正确顺序是先生成励磁电流,把电机轴稳住,再释放抱闸,断电时反过来,先抱闸再断 PWM。
4.2 单关节测试:阶跃、正弦跟随和低速爬行
驱动器联调的常规流程是先开环给电,确认相序和编码器方向一致;然后闭合电流环,再做速度环,最后切位置环。每一步都通过 EtherCAT 主站软件里的示波器功能把实际值抓出来。
阶跃响应是基本功。我给输出端发 0.1 rad 阶跃,观察位置反馈的上升时间、超调量和稳定时间。增益太低会有拖尾,增益太高会振荡,理想状态是少超调、一个来回就稳住。位置环带宽可以通过正弦扫频来测:固定频率下发正弦位置指令,不断增大频率,看输出端的幅值衰减和相位滞后,衰减到 -3dB 的频率就是位置环带宽。
低速爬行测试最能体现双编码器方案的价值。我让关节以 0.001 rad/s 的速度匀速转,持续运行一分钟,然后用输出端编码器画速度曲线。单编码器方案在这个速度下往往会出现明显的“一顿一顿”现象,因为电机端编码器的速度微分噪声太大了;而双编码器融合后,速度反馈主要来自高分辨率输出端编码器,速度曲线是平滑的,没有肉眼可见的爬行台阶。
4.3 多关节级联:EtherCAT 周期稳定性和同步抖动
多关节级联测试里,最直观的办法是在主站里连续记录每个从站的 DC 时钟差。我把 6 个关节驱动器串成一串,主站周期设为 500μs,连续跑一小时,观察有没有掉线和同步错误。正常情况下,从站之间的 SYNC0 偏差应该在几百纳秒以内。
如果链路里出现某个从站 DC 漂移越来越大,我通常先怀疑这个从站到主站的传播延迟测量是否稳定。传播延迟是在每次主站重启后的初始化阶段测出来的,测好之后不会再动态变。如果这个值测不准,SYNC0 脉冲就会对着错误的时间点触发,表现出来就是哪怕单从站正常,多从站一联动就开始抖动。
整个系统跑下来的总线性能指标我放在最后以表格形式给出,这里先说说测试时怎么留证据:EtherCAT 主站软件一般能记录过程数据,同时用示波器抓 SYNC0 波形做对照。我做项目时习惯把主站周期的抖动、每个从站 DC 偏差、丢帧计数全部存成 CSV 文件,联调结束用来评估改动前后有没有退化。
5. 常见问题与排查技巧实录
5.1 EtherCAT 从站扫描不到、间歇掉线
现象:主站扫描不到从站;或者扫描到了,但一进 OP 就掉线重连。排查询问优先级如下:
| 现象 | 可能原因 | 排查方法 |
|---|---|---|
| 扫描不到从站,LINK/ACT 灯不亮 | PHY 初始化失败、变压器焊接不良、网线接口坏 | 测 PHY 时钟、检查 LINK 信号 |
| 扫描到了但设备名不对 | SII EEPROM 内容错误 | 重新写入正确 SII/ESI |
| 进 OP 频繁掉线 | Watchdog 超时、PDO 映射长度不对、SPI 读 DPRAM 太慢 | 加大 Watchdog,检查 SPI 速率 |
| 从站数量多后第一个从站掉线 | 前一从站的转发延迟过大或 PHY 质量差 | 单独测试每段链路 |
SPI 读写 ESC DPRAM 的速度是隐藏瓶颈。LAN9252 的 SPI 速率我一般配 20MHz 以上,每个周期要读写入的字节也就几十个,20MHz 下完全来得及。如果 SPI 速率太低,比如只有 5MHz,传输耗时可能达到几十微秒,在 500μs 周期里占比过高,一旦控制任务稍微超时,掉线就近在眼前。
5.2 DC 同步故障:从站总是报类似 2311-81 的错误
很多商用驱动器在分布式时钟超时的时候会报一个错,比如 2311-81。我自己调试时也遇到过,这个错误码本质上是说“DC 同步超时或同步丢失”。出现这个错误后,从站一般会退出 OP 状态,需要重新同步才能恢复。
排查思路我总结成三条:
- 看网络链路质量。物理层抖动会导致时间戳采样乱跳,优先替换网线、检查 ESD 器件、确认 PHY 调试模式没有误开;
- 看晶振。从站的系统时间靠本地晶振运行,如果晶振精度不够、温度漂移严重,漂移补偿算法会拉不回来,冷启动和热运行半小时后表现完全不同;
- 看同步中断处理。MCU 在 SYNC0 中断里做的事太多,中断响应延迟抖动大,位置环执行时刻就不稳定,误报 DC 错误也不奇怪。
我排查 DC 抖动最有效的办法是:把两个从站的 SYNC0 信号引出到示波器,长时间跑。如果两个沿之间的偏差一直在一个小范围内来回摆动,说明漂移正常;如果偏差缓慢增加,说明晶振漂移补偿没生效,去查从站是否配置了正确的 DC 寄存器初始化值。
5.3 双编码器融合调试的“隐形坑”
双编码器融合这个方案看似美好,实际上有几个坑特别影响体验:
第一,零位偏移没有校准好。输出端绝对编码器和电机端编码器读数不匹配,位置环一旦闭合,关节会往一个方向慢慢偏,或者干脆啸叫发散。解决办法是做一个专门的零位校准模式:人工把关节转到机械零点附近,驱动器自动读取两个编码器的相对偏移,存入 EEPROM。
第二,输出端绝对值编码器偶尔丢帧。BiSS-C 有 CRC 校验,丢帧会被识别出来,但如果接收程序处理不好,丢一帧就会造成位置跳变。我的做法是接收状态机里做透,读到 CRC 错误就丢弃本次数据,再用上一次有效数据顶上,连续多次错误才报编码器故障,避免单帧错误直接打断控制。
第三,速度融合切换造成速度估计跳变。前面已经提到用滞回切换,除此之外,还可以在两个速度源之间做低通滤波过渡,让速度环的输入不出现阶跃。
注意:绝对不能拿电机端编码器的位置直接换算成输出端角度去驱动位置环,除非你的减速器精度非常高、回差接近于零。不然高速运行时会发现端点定位误差忽大忽小,最后查来查去发现还是回差问题。
5.4 PWM 与电流采样的细节问题
电流采样是电流环的命根子。我用的采样方式是 PWM 中心对齐,在两个下桥臂同时导通的中点触发 ADC。这样采样到的三相电流最接近实际平均值。如果触发时刻不对,采到的是开关噪声尖峰,电流反馈波形会很难看,速度环一开就开始抖。
死区补偿也是必须做的一步。MOSFET 的开关死区会导致输出电压损失,尤其是在低速轻载时,电流波形会出现明显的削底。死区补偿算法网上有很多,我的经验是先做静态电压补偿,再根据电流方向微调,实测能减少低转速下的电流谐波。
母线电压跌落也是坑。母线电压在负载突变时会有明显跌落,如果不做母线电压补偿,FOC 算出来的空间矢量幅值就会忽高忽低,电流环增益等效波动。好在大部分 MCU 的 ADC 都支持采集母线电压,在电流环里把母线电压变化量补偿进调制比即可。
5.5 常见问题速查表
| 现象 | 可能原因 | 快速处理 |
|---|---|---|
| 单关节上电啸叫 | 编码器方向反、相序错 | 先开环验证相序,再闭合电流环 |
| 位置阶跃超调大 | 位置环 P 过大 | 降低位置环 KP,增大速度环阻尼 |
| 低速跟随有台阶 | 速度估计噪声大 | 低速切换双编码器速度源,加滤波 |
| EtherCAT 进 OP 后周期超时 | PDO 映射过长、SPI 太慢 | 精简 PDO,提高 SPI 速率 |
| DC 偏差缓慢增大 | 晶振漂移补偿失效 | 查 DC 寄存器初始化值 |
| 抱闸释放后关节下坠 | 励磁建立滞后 | 先励磁再释放抱闸,时间间隔留 50ms |
| 输出端编码器偶发跳变 | 线缆干扰、CRC 处理不当 | 上屏蔽线,加重复读取和 CRC 校验 |
6. 实测数据与项目体会
项目做到最后,我拿一套 500W 级关节模组做了完整测试,参数如下:
| 项目 | 实测结果 |
|---|---|
| EtherCAT 周期 | 500μs |
| DC 同步偏差(多从站) | ±70ns 以内 |
| 电流环带宽 | 约 1.5kHz |
| 速度环带宽 | 约 200Hz |
| 位置环带宽 | 约 15Hz |
| 最小稳定速度 | 0.0005 rad/s 无明显爬行 |
| 重复定位精度 | ±0.003° |
| 长时间运行掉线次数 | 连续 8 小时 0 次 |
这个结果在通用伺服类驱动里已经不算差。双编码器带来的全闭环优势在低速轨迹跟踪时尤其明显,输出端编码器把减速器回差的大部分影响都补偿掉了。DC 同步真正稳定之后,多关节联动时末端的抖动明显改善,这是单用 CAN 总线很难实现的。
最后说点我做这个项目的体会。第一,EtherCAT 从站开发不要一上来就想着自己从寄存器层硬撸,先用现成的从站代码生成工具把基本框架跑通,再按项目需求裁剪,效率高得多。第二,双编码器不是堆两个编码器接口那么简单,零位标定、融合策略、速度切换这些软件工程量比焊板子大得多,但这也是整套方案的核心价值所在。第三,DC 同步问题往往是物理层和软件层交织在一起,示波器必须常备,光看寄存器数值查不出来。
如果后面要把这套驱动器往更高端扩展,我建议把关节力矩传感器加上去,在电流环外层再做一层力矩环,配合双编码器位置环,整臂的柔顺控制和碰撞检测就能直接落地。再往下做,就是惯量辨识、摩擦前馈、末端振动抑制这些东西了。每个方向都是一整片硬骨头,但从双编码器这个基础架构出发,路径是清晰的。