ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

基于EtherCAT的机器人关节双编码器驱动器设计与调试

基于EtherCAT的机器人关节双编码器驱动器设计与调试 做机器人关节驱动器的朋友一定对“双编码器”这个词不陌生。换过减速机的人都知道行星减速器背隙和柔轮变形是关节精度最大的敌人单纯靠电机端编码器去估算输出位置高速大扭矩工况下误差能到几十角分甚至更大。所以我在设计这台基于EtherCAT的机器人关节驱动器时直接在电机轴和输出轴各放了一个编码器配合EtherCAT分布式时钟把位置环和速度环跑在1kHz闭环周期上整机精度和动态响应提升非常明显。这篇整理就把这套方案的硬件架构、通信同步和调试踩坑完整记录下来适合正在做关节模组、伺服驱动器或者工业控制器开发的朋友参考。1. 为什么要把双编码器放上关节驱动器1.1 单编码器方案在关节场景的软肋机器人关节驱动器最常用的结构是“电机减速器负载”。电机端编码器测的是电机转子转角理论上用减速比折算一下就能得到输出角度但折算结果成立的前提是减速器没有形变和背隙。实际用的行星减速器、谐波减速器或者RV减速器动态下的弹性形变和齿轮间隙是必然存在的尤其谐波减速器柔轮受力后会产生明显的扭转弹性变形。高速启停时负载端实际转角与电机端折算值相差可以达到几十弧分这对任务空间定位精度是致命打击。换句话说单编码器方案把传动系统的误差全部叠加进了控制回路后端再做速度前馈和位置前馈补不回根上的误差。就像开车时只看方向盘转了几圈不看车轮实际转角轮胎打滑了你永远不知道车实际开到哪个方向。所以要在输出侧加一个高分辨率编码器把机械传动这部分误差变成可以直接测量的量。1.2 双编码器到底能解决什么问题双编码器的思路是在减速器输出侧再加一个编码器电机端编码器负责电流环和速度环的高速反馈输出端编码器负责一个长期稳定、高精度的位置基准。两套数据在驱动器内做融合可以实时监测减速器两端的角度差这个差值其实就是传动误差的直接度量。有了它能做三件非常有用的事第一直接利用输出编码器构建位置闭环减速器形变和背隙全部纳入反馈末端定位精度大幅提升第二把电机端和输出端角度差做一个前馈补偿动态响应更跟手第三再进阶一点两台编码器的速度差还可以用来估计负载力矩、辨识关节刚度为后续的柔顺控制和健康监测打基础。所以双编码器不是简单多加一个传感器而是把机械系统里最不确定的传动环节变成可测、可控的物理量。1.3 为什么通信层选EtherCAT既然要对位置环做高带宽闭环通信周期和同步精度就得上一个台阶。EtherCAT基于主站-从站全硬件处理报文数据帧经过每个从站只产生纳秒级延迟一个周期内几乎所有从站能同时刷新数据。配合分布式时钟DC机制各驱动器可以锁定同一个控制时刻从站的反馈采样和PWM更新几乎同步发生。实测下来250us同步周期下多个从站的输出抖动可以控制在几十纳秒以内这对4kHz电流环配合1kHz位置环的架构非常友好。传统脉冲或CANopen方案虽然也能跑但在多关节协调联动时时序不确定性会带来明显的相位误差。而EtherCAT主站在普通PC或嵌入式Linux上就能用SOEM、IGH这类开源库实现测试阶段不需要购买专用主站硬件验证成本很低。所以这个项目从通信架构开始就定了EtherCAT。2. 双编码器硬件架构与数据融合2.1 电机侧编码器的选择与接口设计电机端编码器是电流环和速度环的反馈来源优先关注带宽和更新率而不是极致分辨率。增量式编码器在断电后需要重新找零点但很多关节电机本身会保留轴向零点位置配合上电后的原点搜索也够用。我更推荐使用磁编码器或光学绝对值编码器接口选SPI或BISS直接单圈或多圈绝对位置上电即可读取。比如一颗17位磁编码器SPI接口时钟跑到4MHz在250us反馈周期内可以完成上百次读取余量非常充足。关键是编码器读取要放在硬件定时器中断里而不是放在控制主循环里轮询否则读取时间抖动会直接影响速度环的微分质量电流噪声也会变大。2.2 输出侧编码器的选型与安装细节输出侧编码器装在减速器输出端承担着整个系统最终的定位反馈首选绝对式编码器分辨率建议至少18位。目前主流的接口是BISS-C和SSIBISS-C带CRC校验传输时钟可到10MHz非常适合在实时性要求高的场景下使用。安装时最容易踩坑的是编码器轴与关节输出轴的同轴度。哪怕偏0.05mm转一圈就会产生固定周期的角度误差而且标定很难完全消除。一体化关节驱动器通常会把输出编码器直接集成在交叉滚子轴承或者输出法兰的同轴码盘上从结构上保证同心。如果自己搭建测试平台建议用弹性膜片联轴器过渡不要刚性直连否则码盘会受轴承径向力影响长期运行后精度逐步劣化。2.3 双编码器数据融合与零点标定两套编码器必须建立在同一个坐标基准上首先要标定零点。常见做法是把关节停在机械零位同时记录电机侧和输出侧编码器的读数再把两个读数折算到输出轴坐标系。折算时要注意减速比的方向谐波减速器和行星减速器的电机输入与输出旋转方向可能不同标反了位置环会直接飞车。标定完成后正常使用中如果发现电机侧与输出侧差值朝一个方向漂移说明机械系统可能存在磨损、滑移或者紧固件松动。控制层面我习惯让输出侧编码器作为位置环反馈源电机侧编码器作为速度和电流内环反馈源。中间层还要加一个平滑滤波器把输出编码器的差分速度做滤波避免直接微分放大量化噪声。位置环更新率1kHz时输出编码器采样由同步中断触发计算路径要固定不引入随机延迟。3. EtherCAT通信实现与DC同步3.1 从站控制器选型与PDO映射EtherCAT从站核心是ESC芯片常见的有Beckhoff ET1100、ET1200和Microchip LAN9252。选型主要看FMMU数量、PDO缓存深度和封装成本关节驱动器用ET1100或者LAN9252都够。从站EEPROM里的SII信息要按ESC厂商规范编写包含从站类型、产品码、PDO描述等写错一个字段从站就上不了线。PDO映射是整个通信配置里最基础也最容易出错的部分。以CSP循环同步位置模式为例至少需要映射这些对象RxPdo Index0x1600/Index Entry Index0x6040/Index SubIndex0/SubIndex BitLen16/BitLen /Entry Entry Index0x607A/Index SubIndex0/SubIndex BitLen32/BitLen /Entry Entry Index0x60FF/Index SubIndex0/SubIndex BitLen32/BitLen /Entry /RxPdo0x6040是控制字0x607A是目标位置0x60FF是目标速度。发送PDO则要包含状态字0x6041、实际位置0x6064、实际速度0x606C。这里有一个容易被忽略的细节双编码器方案里“实际位置”建议反馈输出侧编码器折算后的负载角度“实际速度”可以用电机编码器折算值或融合后的速度。两个量的口径不统一主站做多轴联动轨迹规划时就对不上。3.2 DC时钟同步过程详解EtherCAT DC同步的核心是让所有从站在同一个时间基准下采样输入、更新输出。网上很多资料只讲“同步”但实际过程分三步第一步主站通过ARMW和FRMW指令读取各从站的系统时间估算出本地时钟与参考时钟的偏移量。第二步主站周期性发送时钟漂移补偿报文每个从站根据差值校准本地时钟的漂移率。第三步从站把采样时刻对齐到周期性的SYNC0事件上SYNC0由ESC硬件单元产生精度比软件中断高几个数量级。这里有一个常见误区DC同步不只是对时还要配置SYNC0脉冲的周期和激活时间。SYNC0的Shift Time用于补偿主站到各从站的数据传输路径延时需要根据实际网络拓扑去调不能所有站都用同一个值。我实际调下来会用主站读回每个从站的“实际目标时间差”把差值稳定在正负100ns以内才认为DC同步合格。如果从站只做DC对时却不用SYNC0中断触发采样那同步精度就退化成软件定时器级别对多关节协调来说基本没有意义。3.3 CSP模式下的位置控制流程CSP模式下主站每个周期下发目标位置从站内部完成位置环和速度环。关节驱动器的CSP周期我建议先跑1kHz确认无跟随误差后再尝试2kHz但要注意2kHz下DC同步周期和控制器计算时间预算是否够用。从站内部的执行流程是这样的SYNC0中断触发读取双编码器数据坐标变换和滤波计算位置环计算速度环更新PWM最后把状态写入PDO缓存等待主站读取。所有计算必须在一个控制周期内完成我用500us周期时大约占用MCU主频600MHz环境下的30%算力包括BISS-C读取和通信余量还有富余。主站侧下发目标位置时最好同时下发速度前馈否则纯位置P环在大惯量关节上会有明显的追踪滞后。实时性方面主站每个周期读回实际位置并算跟踪误差一旦误差超过阈值就触发快速停止这对保护机械结构很重要。我在调试初期把阈值设为0.2mm折算角对应值但机械刚度不够时太激进后来按实际工况放宽到了0.5mm。4. 调试中的坑与排查实录4.1 上电初始化的正确顺序伺服驱动器上电流程很有讲究我踩过好几次坑。第一先给控制电和功率电分时上电等编码器供电稳定后再执行任何位置读取。BISS-C接口在控制电和功率电同时上电瞬间容易出现偶发CRC错误原因是电源地弹噪声耦合到通信线路上。第二从站要等主站进入OP状态后再进行位置清零而不是上电就清零。第三如果输出侧编码器是多圈绝对式要确认多圈计数已经通过专用指令归零否则累计圈数会污染实际位置。第四双编码器零点标定需要在驱动器首次运行时执行并把结果写入非易失存储后续上电直接加载。不按这个顺序做轻则低速抖动重则上电瞬间飞车。特别是零点标定错误又赶上位置环增益设置偏高机器人关节会像抽搐一样弹一下机械限位都可能被打坏。4.2 典型故障与排查速查表下面这些故障都是我在双编码器关节调试中实际遇到过的整理成速查表方便对照现象可能原因排查方向位置跟随误差周期性增大输出编码器同轴度偏差记录差值与角度的关系检查安装低速爬行时电流噪声大速度反馈微分抖动改用融合速度或加低通滤波DC同步丢失报警SYNC0中断未能及时服务检查ESC中断优先级和主站周期配置偶发CSP跟踪超差主站目标位置更新与DC错拍检查从站实际目标时间差双编码器差值持续漂移减速器磨损或键槽松动机械检查与二次标定上电读数为随机值编码器供电时序不对调整控制电与功率电上电顺序“跟踪超差”这个现象最有迷惑性。第一次遇到时我一直怀疑是PI参数问题后来把主站写入PDO的时机和SYNC0中断拉齐对比才发现主站下发目标位置的时刻与SYNC0没对齐从站拿到的是同一周期的数据但晚了整整一个节拍。把PDO更新绑定到SYNC0后问题直接消失。所以排查问题的顺序应该是通信数据链条、采样时序、再是控制参数不要一上来就动增益。4.3 参数辨识与增益整定带双编码器的驱动器增益整定可以更加激进因为位置环有了真实负载反馈不用过多担心减速器间隙造成的自激抖动。我一般先做电机电阻、电感、反电动势常数辨识整定电流环带宽做到约2.4kHz。速度环只利用电机侧编码器比例增益从设备铭牌推荐值的一半开始往上加观察速度阶跃响应。位置环用输出侧编码器P增益先给一个保守值比如20再逐步加大同时观察位置跟随误差。整定过程中如果位置环出现谐振峰值通常需要加入低通滤波或者陷波器谐振频率可以扫频得到。最终我常用的参数组合是位置环增益40速度环增益2.5电流环带宽2.4kHz这样配置下关节响应快而且没有明显震荡。要注意增益参数必须跟着负载惯量变化做重新整定同一套参数在空载和满负载工况下表现天差地别。4.4 跳码与信号完整性处理双编码器最容易出问题的其实是信号链路尤其是走线较长或者与功率线并排时。BISS-C和SPI的信号边沿会被功率驱动的高频PWM干扰产生偶发跳码。硬件上至少要做三件事编码器信号线单独屏蔽屏蔽层单点接地差分接口如BISS-C的CLK和DATA使用RS485收发器做电平转换不要直接进MCU的普通GPIO从站软件里对连续两次读数做差值监测超过合理范围就丢弃并进入安全状态。差值阈值需要按负载运动速度动态评估。我曾经把它设成一个固定小值结果正常高速运动时系统频繁误报警后来改成按上一周期实际速度预测本次读数再与真实读数做差阈值设为预测误差的两倍。这下既保留了跳码检测能力又不干扰正常工况。跳码问题排查到了代码层面还要回头检查电源纹波和地线完整性很多“软件问题”最后都出在PCB布局上。5. 一些经验与后续扩展5.1 自主开发要先守住四条底线如果只是原理验证用开发板和开源主站就够了。但要做产品级关节模组建议从第一天就重视四件事ESC的PDO缓存管理要稳定DC同步要经过长时老化和温度漂移测试双编码器数据融合必须在真实机械负载下标定故障安全逻辑要覆盖通信断开、编码器异常、超速超限等场景。每一项单独看都不难连在一起没有充分测试时会非常隐蔽。我在做第一版样机时吃过一次亏实验室运行一小时一切正常上机跑了一上午减速器温度升高后输出编码器数据偶发跳一个点位置环猛地抖一下。排查了整整两天最后发现是码盘固定螺钉在温度循环下轻微松动。解决方法是改用带防松胶的螺钉并在码盘点位加了固化胶点。这类机械问题在纯电气测试里根本暴露不出来。5.2 双编码器数据还能玩出更多花样双编码器严格来说不只是位置反馈它还是一个自带传感器的传动误差观测器。利用电机侧速度和输出侧速度的差分可以估计负载力矩在电机侧加扫频激励通过两端角度响应可以辨识关节惯量和刚度这是经典的关节参数辨识思路。更进一步把双编码器差值的变化趋势做成健康度监测关节刚度缓慢下降时输出侧编码器的动态滞后会越来越大系统可以提前预警维护而不是等出现明显故障才停机。我在后续迭代中把输出侧编码器换成了更高分辨率的光栅式编码器配合非接触式读头去掉了联轴器带来的同轴度风险。分辨率从18位提升到23位之后位置环的量化噪声几乎消失受益最明显的是低速平稳性原来每分钟0.1转时能测到的爬行波动现在完全看不到了。5.3 给后来者的一些心里话我始终认为关节驱动器的核心竞争力不在主控芯片算力而在对机械、电机、控制和通信这四个层面的理解和协同。EtherCAT给了从站极好的实时性窗口双编码器给控制系统提供了一双“眼睛”但真正让系统在真实工况下稳定工作靠的是大量调试和故障排查的积累。每次现场出现怪问题时我都会先画一张数据流图从编码器读取一路画到PWM输出把每条通路上的时间开销和不确定度标出来问题通常也就浮出水面了。这个习惯帮我少走了很多弯路也推荐给正在做驱动器开发的朋友。等你把DC同步和双编码器都调顺了再看回传统单编码器系统会发现这套方案带来的定位精度提升和故障诊断能力绝对对得起它的硬件成本。
返回列表