ARTICLE DETAIL

资讯详情

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

基于EtherCAT的双编码器机器人关节伺服驱动器设计要点与调试经验

基于EtherCAT的双编码器机器人关节伺服驱动器设计要点与调试经验 做机器人关节模组这几年最磨人的从来不是结构图纸而是塞在关节里面的那块小体积、高功率密度还得带实时总线通信的伺服驱动器。最近刚把手头这个基于 EtherCAT 的双编码器关节驱动器从方案阶段推到批量试产趁着记忆还热把项目的核心设计、选型逻辑和踩过的坑整理出来。这个项目概述起来就是三个关键词EtherCAT、机器人关节、双编码器。驱动器本身不算最复杂的伺服产品但一旦把“关节”和“总线同步”拉进来难度就上了一个台阶。如果你也在做协作机械臂关节、直驱转台或者高精度旋转模组这篇总结应该能帮你少走不少弯路。1. 这个项目到底要解决什么问题1.1 单编码器方案在机器人关节上的局限很多刚入行的朋友会问伺服驱动器用一个编码器不就行了吗电机屁股后面装一个角度、速度、位置全有了为什么要加第二个这个问题的答案得从“关节”这两个字说起。机器人关节不是简单的电机直连负载它中间几乎必然经过减速器——常见的谐波减速器、RV减速器或者行星减速器。减速器带来的传动误差来源很多齿隙回差、柔轮弹性变形、波发生器磨损后的游隙。尤其是谐波减速器它的扭转刚度并不是无限大负载一变输出端实际角度和理论折算角度之间就会出现偏差。电机端编码器只能测量转子的机械角度它并不知道减速器输出端发生了什么。举个具体例子某款谐波减速器在额定扭矩下扭转形变可能达到1到3弧分听起来不大但机器人在做精密装配或轨迹规划时这个误差会直接反映在末端执行器上。更麻烦的是这种形变是随负载变化的无法通过简单的静态补偿消除。所以如果你只用电机端编码器做位置闭环相当于“隔着减速器”去控制关节末端。位置环带宽稍微拉高一点减速器的弹性形变和机械谐振就会把系统逼得要么抖动、要么震荡最终只能把位置环增益压得很低关节刚度大打折扣。1.2 双编码器架构的设计目标双编码器方案的核心思想是把“电机控制”和“关节测量”这两件事彻底分开。电机端编码器负责伺候电流环和速度环它需要提供准确的转子电角度用于FOC换相同时提供高更新率的速度反馈用于速度环。关节输出端编码器专门伺候位置环和外部的运动控制它直接安装在输出法兰侧测的就是关节最终转过的真实角度不经过任何减速器折算。这样一来位置环看到的反馈是真实的关节角度减速器的回差、形变全部被闭环覆盖掉了。只要位置环增益给得上去关节末端的刚度自然就高抵抗外力扰动和负载波动的能力也强很多。另外双编码器还有一个隐藏价值故障诊断和鲁棒性提升。两个编码器在正常运行期间的数据存在确定的机械关系经过减速比关联一旦这个关系被打破比如减速器打滑、编码器受冲击损坏、安装螺丝松动系统就能立刻发现并触发保护避免机器人带着异常继续运行造成更大事故。1.3 为什么通信必须选 EtherCAT现在机器人控制器里的关节驱动器数量不少六轴机械臂就是六个甚至更多轴还要考虑外部轴。它们必须在一个确定的时间周期内完成同步采样、同步输出否则机器人运动轨迹就会出现轴间不同步姿态漂移。对比一下常见的几种总线方案CANopen用得多、成本低但1Mbps的速率承载多轴的过程数据非常吃力只能做到大概1ms到几毫秒的周期而且同步精度取决于主站调度抖动比较大。Modbus RTU/TCP实现简单但本质上是一个读写请求/响应的轮询模型实时性、确定性都达不到高性能多轴同步的要求。EtherCAT从站硬件处理帧主站一次报文遍历所有从站加上分布式时钟机制能做到亚微秒级同步精度周期可以做到1ms甚至更短。这正是多关节机器人需要的。如果你做的是单轴独立设备用CAN是一种务实选择但做多轴关节机器人EtherCAT基本是业内默认选项。2. 编码器选型与双编码器数据融合2.1 电机端编码器的职责与选型要点电机端编码器放在电机尾部它最主要、最苛刻的任务是提供FOC必需的转子电角度。电角度给错了电流环输出的力矩方向就会偏轻则效率下降发烫重则反转失控飞车。我在这个项目里对电机端编码器的要求是绝对式、单圈即可、分辨率不低于14位、读取延迟尽可能低。因为电机转速高编码器更新率和传输延迟直接影响速度环和电流环的高频段特性。选型时我对比了几类方案增量式光电编码器ABZ差分精度高但上电要找零机器人关节里很难接受上电后的找零动作除非配电池多圈或者霍尔换相工程上比较绕。磁绝对值编码器如AS5047P、MA730、TLE5012B单圈14位左右SPI或ABI接口体积小、抗冲击、成本低。缺点是安装偏心会导致角度误差另外对磁场环境敏感。光电绝对值编码器精度最高但体积大、成本高在电机后端空间受限的场景下不一定装得下。最后选了磁绝对值编码器SPI接口读取。一个关键理由是它在静止时也能读出绝对角度上电即得电角度FOC可以直接启动不需要电机预定位或旋转找零。对于机器人关节上电瞬间你根本不知道执行器会被外部力推到哪个位置绝对角度能力几乎是刚需。2.2 输出端编码器的职责与选型要点输出端编码器装在关节输出法兰侧它的本职是给位置环提供“真值”。这里有几个要求和电机端完全不同第一要高分辨率因为关节位置反馈的分辨率直接决定机器人末端的可重复精度。第二要绝对式并且最好带多圈计数这样关节在任何姿态下上电都能知道当前绝对位置不需要回零。第三信号传输要稳定因为从输出端到驱动板之间有一段线缆连接器会经历关节旋转和弯折。我在输出端选的是BISS-C协议的多圈绝对值编码器单圈分辨率做到19位左右。BISS-C在工业界用得越来越普遍它的优点在于时钟和数据两根差分线帧结构简单传输速率高支持CRC校验很适合做在关节内部这种电磁环境复杂的地方。有一点要特别注意输出端编码器的采样周期和通信延迟通常比电机端编码器长。BISS-C的读取需要主控持续输出时钟脉冲然后回收数据整个读帧过程占用几十微秒甚至更长。这个延迟如果直接放进电流环环路里那环路带宽就没法看了。所以输出端编码器一定只放在位置环再把位置环带宽限制在几十赫兹以内这个延迟对控制系统的影响就完全可控。2.3 双编码器的数据融合与异常检测双编码器不是让你算一个卡尔曼滤波然后把两个角度揉在一起。我的实际做法是“分工融合”。电流环、速度环完全使用电机端编码器。位置环反馈完全使用输出端编码器。速度前馈使用电机端编码器的速度除以减速比折算到关节端再做低通滤波后作为位置环的阻尼项。位置环的微分项从输出端编码器差分出来但必须经过低通滤波或观测器因为数字微分会把量化噪声放大得很厉害。所谓“融合”更多体现在零位统一和状态校验上。装配时我会做一次标定手动把关节转到某个机械零位同时记录电机端编码器和输出端编码器的读数把两者的差值存成零点偏移。运行中系统每周期计算“输出端编码器的角度变化量折算到电机端”和“电机端编码器实际角度变化量”的差值持续超过阈值的就判定为传动链异常立刻停机报警。这套逻辑不复杂但非常实用。它能识别出来的问题包括减速器柔轮打滑、编码器联轴器松脱、磁编码器意外退磁、输出端线缆断线等。你在普通单编码器伺服上永远发现不了这些故障。3. EtherCAT 通信链路与分布式时钟同步3.1 主站与从站方案的取舍EtherCAT是一个“主从”架构主站通常是PC加实时网卡或者PLC控制器从站是每个关节驱动器内部的从站控制器芯片。主站方案上工程量产阶段我用过TwinCAT做验证也在Linux下用SOEM写过简单的测试主站。如果你的目标是快速联调原型SOEM轻量、开源、容易上手如果是最终交付到产线上配合机器人控制柜通常主流做法是使用现成的机器人控制器厂商提供的EtherCAT主站或者直接对接TwinCAT这类软PLC。从站侧没那么多花头基本就是“ESC芯片MCU”的组合。ESC芯片负责EtherCAT协议栈的硬件处理MCU负责伺服控制和对象字典。3.2 从站控制器的选型与接口设计从站控制器选型上我对比过ET1100和LAN9252最后用的LAN9252配合STM32系列MCU。ET1100是经典大户功能完整很多高端伺服都在用但它封装大、需要的外围电路多、价格也不便宜。LAN9252胜在性价比和集成的PHY两路以太网PHY都集成在芯片内部外围器件明显减少SPI接口接MCU非常干净。对于关节驱动器这种要在狭小空间里塞很多东西的场景集成度就是王道。接线方面每个从站必须有两个网口EtherCAT-IN和EtherCAT-OUT。这是EtherCAT的标准拓扑要求支持菊花链串联。也就是说伺服驱动器上两个RJ45或者两个工业连接器一个进一个出控制器发出来的帧从第一个从站进去再从最后一个从站出来回到主站。这个“需要几个TX网口”的问题其实答案很固定两个除非你放在链路末端只用IN。LAN9252与MCU之间用SPI通信我配的是10MHz时钟并使用DMA读写。EtherCAT帧到达后ESC会自动把对应的过程数据放到内部DPRAM再通过同步事件通知MCU来取。MCU在同步中断里读取输入PDO运行FOC然后把输出PDO写回DPRAM。全程SPI用DMA搬运不让CPU浪费在搬数据上。3.3 DC 时钟同步的过程拆解DCDistributed Clock是EtherCAT最值钱的功能。通俗地讲它让网络中所有从站在物理时间上对齐然后在同一个时刻“按下快门”这样所有关节的编码器采集是同时发生的PWM输出也是同时更新的。很多网上资料把DC说得玄乎实际处理起来就是下面几个步骤主站读取每个从站的接收时间戳和发送时间戳寄存器计算出从站与从站之间的信号传播延迟。主站选定拓扑中第一个支持DC的从站作为参考时钟算出每个从站相对参考时钟的偏移量写入从站的系统时间偏移寄存器完成粗同步。主站开始周期性运行不断读取各从站的“本地系统时间与实际时间差”寄存器对每个从站时钟做细微调整补偿晶振漂移。配置从站的SYNC0输出周期。到设定时间后LAN9252硬件自动输出脉冲MCU在这个脉冲触发的中断里完成编码器锁存和控制计算。实际效果上四五个从站串联时同步抖动可以压到几十纳秒量级。这个精度对控制周期1kHz到4kHz的位置环来说绰绰有余。这里有个常见误解“DC是主站和从站对表。”实际上主站在DC中更像协调者真正干活的是从站之间通过帧传递时间信息进行自动校准。所以哪怕主站软件的实时性一般只要帧能跑得稳定从站之间的同步精度依然很高。4. 驱动器硬件与三环控制实现4.1 功率级设计要点驱动器功率级的参数是根据关节需求定的。这个项目的关节峰值扭矩对应电机峰值电流20A持续电流8A母线电压48V。这个范围在协作机器人里很典型所以功率级设计也有一定代表性。MOSFET选的80V耐压的低压大电流功率管留出足够的电压裕量。为什么要80V而不是40V或者60V因为母线48V在电机再生制动时会往上抬加上拖拽线缆的感生尖峰很容易冲到60V以上。耐压太低炸管的风险就大耐压太高Rdson通常跟着上去发热变大。80V是一个平衡点。栅极驱动我用的是集成式三相门驱动内部带死区时间和过流保护外围器件比分立方案少很多。死区时间要按所选MOSFET的关断延迟来调太短会有直通风险太长会增加输出波形畸变和电流环噪声。电流采样用的是低侧双电阻采样配运放放大。这里有个大家都知道的坑低侧采样在PWM占空比接近0%或100%时采样窗口非常短采样到的电流不准。所以务必要配置采样点避开开关沿甚至在低占空比时做移相采样或者依靠SVPWM的零矢量来保证采样窗口。另外一个容易被忽略的点电流采样运放的偏置电压上电时不是零会随温度漂移。我做了上电自校准把零电流时的ADC读数存下来每次运行时先减掉这个偏置。这个过程的精度直接影响电流环的稳态纹波和电机发热。4.2 FOC 电流环的实现与整定电流环是整个控制系统的地基。我用的是经典FOCClark变换、Park变换、PI调节器、逆Park、SVPWM。采样和PWM同步PWM频率16kHz电流环16kHz每一个PWM周期都做一次完整计算。这个频率对于伺服来说算够用但不豪华好处是SVPWM更新率与控制频率对齐采样点固定在一个PWM周期的中心算法简单可靠。电机参数大致是相电阻0.2欧姆相电感0.2mH电气时间常数约1ms。电流环PI参数可以从期望带宽推出来一个常用的经验公式是Kp约等于相电感乘以期望角频率也就是0.0002H乘以2π×1000约等于1.26V/A。Ki约等于相电阻乘以期望角频率也就是0.2Ω乘以2π×1000约等于1260V/(A·s)。这是理论初值最终要拿示波器看电流阶跃响应微调。经验是不要一上来就把带宽拉到2kHz以上数字控制系统的延迟PWM更新延迟、ADC采样延迟、SPI通信延迟都压在那里带宽拉过头就会在特定频率上产生振荡。电流环整定完毕后我会做一次三相电流波形一致性检查。很多时候电机噪声大、发热大不是控制算法问题而是三相电流采样增益不一致导致电流环解耦不准。4.3 CSP 模式与三环联动EtherCAT伺服里有几种标准工作模式这个项目用的是CSPCyclic Synchronous Position周期同步位置模式。这也是机器人关节最常用的一种模式主站每个周期发送目标位置从站内部自己跑位置环、速度环、电流环。CSP模式下各个环在从站内部是这样分工的位置环反馈来自输出端编码器目标位置来自EtherCAT主站下发的0x607A对象位置环输出是速度指令。速度环反馈来自电机端编码器折算过来的关节速度位置环给出的速度指令再叠加前馈后作为速度目标。电流环反馈来自相电流速度环输出作为Iq目标Id控制在零附近。位置环带宽按关节需求取20到40Hz。为什么这么低不是不能高而是关节带着谐波减速器机械传动链在几百赫兹到几千赫兹范围往往有多个谐振峰位置环带宽如果设计过高很容易在和机械谐振峰的交互中引发抖动。在整机测试时我用的是逐级点亮的方法先单独调通电流环再接速度环最后接位置环和EtherCAT主站联调。CSP模式下的从站除了周期性的目标位置还要处理控制字和状态机主站下发控制字0x6040让驱动器在“使能”和“禁止”状态之间切换从站回传状态字0x6041同时回传实际位置0x6064。这套交互协议是标准的调通一次以后后面所有关节都复制粘贴。5. 固件架构与调试流程5.1 固件任务划分与同步机制固件设计上我最深的体会是“不要让控制代码和通信代码互相踩踏”。整个固件分了三个层次第一层是EtherCAT从站驱动处理LAN9252的SPI读写、PDO缓存解析、对象字典服务。这部分代码只在从站事件触发时运行。第二层是伺服控制任务包含FOC、速度环、位置环、双编码器数据处理。它由SYNC0中断触发优先级最高。整个控制链路的执行时间要严格控制我这里优化后能做到20微秒以内留出充足的裕量给16kHz的周期。第三层是状态管理和非实时任务比如温度保护、电压监控、参数保存、调试口输出。这些跑在主循环或者低优先级中断里绝不允许它们影响控制任务。这里有个容易犯的错很多人喜欢在EtherCAT事件中断里直接写控制算法的标志位又在控制中断里查询标志位。看起来没毛病但两个中断如果优先级设计不合理会在极小的概率下互相抢占导致控制周期被拉长甚至丢周期。我的做法是把EtherCAT过程数据写入一个双缓冲结构由控制任务在固定的周期起点统一抓取而不是让通信中断实时地打断控制循环。5.2 从站配置与PDO映射EtherCAT从站上电后要先做一件事从EEPROM里加载配置。这个EEPROM存的是从站的基本信息厂商ID、产品码、PDO映射、DC配置等。出厂时如果EEPROM没烧录或者校验不通过主站扫描会报错。LAN9252需要通过SII接口外挂一个EEPROM我用的EEPROM容量不大但PDO映射和物体字典的预定义段都要放进去。烧录时要特别小心EEPROM写入时序我刚开始烧坏过两块后来写了个带校验重试的烧录工具才稳定。PDO映射排布上我的做法是RxPDO目标位置0x607A32位、控制字0x604016位、目标速度0x60FF32位。TxPDO实际位置0x606432位、状态字0x604116位、实际速度0x606C32位、电流实际值0x607816位。加一个电流反馈到主站对调试很有用可以在控制器端直接观察每个关节的负载情况。5.3 从零到联调的完整调试顺序驱动器这种东西最忌讳一上来就把所有环节都打开然后出问题了不知道怪谁。我的调试顺序是固定的每一步都把变量控制到最少硬件上电先确认母线电压正常、电源纹波可接受。烧写最低限度的固件只做电流采样自校准和PWM输出测试。接电机做FOC电角度对齐验证手动缓慢旋转电机观察电流波形。电流环整定给阶跃Iq调PI看响应。速度环整定空载下给阶跃速度调PI加低通滤波抑制噪声。双编码器标定把输出端编码器和电机端编码器的零点差记录下来验证减速比折算。位置环整定接输出端编码器反馈调位置环增益观察末端刚度。EtherCAT联调先上SOEM测试主站跑PDO读写确认CSP模式能切换状态。整机带载测试加入负载观察电流、温度、跟随误差。这套流程走完如果哪一步出问题基本可以定位到具体的子系统。6. 常见问题与排查经验6.1 通信与同步类问题这个项目过程中遇到最多的问题集中在通信侧现象可能原因处理办法主站扫描不到从站从站EEPROM配置空或校验失败用SII烧录工具重写EEPROM检查EEPROM焊接从站扫描到了但一直报错LAN9252复位脚电平不对或者SPI时序不匹配用示波器查SPI时钟、MISO波形确认复位时序DC同步误差明显偏大从站晶振精度不足或者SYNC0走线过长换高精度晶振SYNC0信号线靠近ESC布局运行过程中从站随机断开网线屏蔽层没有接地或者连接器接触不良检查连接器弹片屏蔽层单端接地排查机械振动环境实际上通信问题的排查最重要的是分清楚“物理层、链路层、应用层”。物理层出问题用示波器看以太网差分波形就能定性链路层问题要从主站日志确认扫描时间和报错码应用层问题则要看PDO数据是否周期性更新。6.2 编码器干扰与数据异常编码器信号在关节驱动器里特别容易出问题因为功率线和编码器线挨得近PWM开关瞬态会通过寄生电容和共地阻抗耦合进编码器信号。现象可能原因处理办法磁编码器角度跳变安装偏心过大或者电机轴向窜动重新调校编码器安装同心度检查轴端固定BISS-C读帧CRC错误多时钟线或数据线屏蔽不良连接器松动编码器线单独走屏蔽屏蔽层单端接地上电时输出端编码器读不到BISS-C通信时序不对或者供电不足示波器抓时钟和数据确认供电电压和启动时序两个编码器读数折算后偏差大减速器存在回差或装配零位标定错误重新做零位标定考虑回差大小做方向对应补偿这里有一个很重要的经验编码器线缆的屏蔽层不能两端都接地。两端接地会在不同点位之间形成地环路电流反而会把干扰引进去。我在第一版样机上因为这个问题吃过亏后来统一改成单端接地CRC错误率大幅下降。6.3 控制不稳定问题控制不稳定是最难排查的因为问题可能出现在任何一个环节。比较典型的是“电机静止时高频抖动”。我遇到过三次原因各不相同第一次是电流采样偏置没有校准导致Iq上有直流偏置电机轻微“点头”第二次是速度环的PI参数太紧把编码器量化噪声放大成了速度噪声反馈到电流环引起抖动第三次是PWM死区时间设置不当产生了明显的电流畸变。还有一个常见现象是“位置闭环后关节有共振哨音”。这通常是位置环带宽和机械谐振频率靠得太近。解决手段有三板斧第一降低位置环增益牺牲一部分刚度换稳定第二在速度环输出或者电流环指令上加入陷波滤波器专门吃掉落在这个谐振频率附近的指令成分第三检查机械装配看是不是电机法兰刚性不足或者减速器连接有间隙。实际工程中陷波滤波器是压箱底的利器但要先用扫频或者锤击测试确认谐振频率点不要盲目加。最后一个容易踩的坑是堵转保护。机器人关节在碰撞时电流会瞬间飙升如果只做单纯的电流过流保护很容易在正常峰值加减速时误触发。我用的策略是“电流超限超时”联合判断同时结合输出端编码器的持续位置变化来区分“正常出力”和“撞停卡死”。结尾一点体会这个项目做下来我最大的体会是双编码器驱动器真正难的不是“多接一个编码器”而是让两个编码器在各自的生理时钟里工作再让EtherCAT把时间轴统一起来。位置环用慢变量、电流环用快变量、通信网络负责对齐所有轴的“快门时刻”这三件事理清楚了整个系统就不会打架。最后再分享一个小技巧量产阶段一定要在固件里留一个“诊断模式”通过EtherCAT主站直接读取原始编码器角度、电流采样偏置、DC同步误差和温度数据。这些数据平时不参与控制但出了问题能让你少拆十次机器人。这个习惯帮我节省了大量的现场调试时间强烈建议你也这么做。
返回列表