ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

人形机器人控制器混合总线架构:EtherCAT+CANFD冗余实战解析

人形机器人控制器混合总线架构:EtherCAT+CANFD冗余实战解析 1. 选型逻辑人形机器人控制器为什么需要混搭多条总线1.1 先从负载账算起40个节点、1kHz周期、还要抗机械振动人形机器人和传统工业机械臂最大的差异就是“测控节点多且分布散”。我调过的一套双足样机单腿6个自由度、双臂加腰部14个自由度再算上灵巧手、腕部力传感器、躯干IMU、脚底压力阵列测控节点轻松超过40个。每个节点既要下发位置、力矩、刚度指令又要回传位置、速度、电流、温度、母线电压、故障字一个控制周期内光关节状态就有几百字节。更麻烦的是整机控制周期通常按1kHz设计也就是1毫秒内要把所有节点扫一遍。如果某条总线出现偶发丢帧或延迟抖动最直接的后果就是关节电流波形上多出毛刺跑静态站姿可能看不出来一旦切到动态步态毛刺会被放大成整机抖动严重时直接触发急停。所以选总线不是照搬样本里的“高级感”而是按真实负载算完账再定。1.2 各总线负责的“路段”不能重叠也不能真空总线/协议我在系统中负责的路段选择核心理由冗余双CAN/CANFD四肢关节、手部、分散传感器便宜、抗干扰、布线灵活CANFD单帧可塞64字节CANWebCAN节点数据统一映射上云上上位机屏蔽底层帧格式让调试和监控变成“填寄存器”千兆以太网视觉点云、模型下载、上位机监控大流量带宽大适合非实时数据EtherCAT主控制器到高实时伺服轴的高速过程数据周期同步精度高分布式时钟成熟最终架构呈现出一个“主干强实时、分支强抗扰、上层强带宽”的混合形态。EtherCAT负责跟主控强耦合的实时轴冗余双CAN/CANFD负责机械上最容易震动的四肢末端CANWeb负责把CAN节点“翻译”成适合上位机理解的资源模型千兆以太网则专注跑视觉和监控。这种分工不是拍脑袋拍出来的是反复对比过单用EtherCAT和单用CANFD两条极端的失败路径之后才确定的单用EtherCAT成本高、从站芯片调试周期长单用CANFD带宽和同步精度撑不起高动态伺服。我建议准备入手的团队不要上来就抄别人拓扑图先把自己系统的节点数、数据量、控制周期、线束路径列成一张表再决定哪一种总线承担哪一段路。2. 冗余双CAN/CANFD实战从硬件拓扑到软件切换2.1 双通道不是多并一根线而是独立路由很多人听到“冗余双CAN”第一反应是“把CAN_H和CAN_L多接一根线”。这是最常见的误区。冗余双总线的价值在于两条链路在物理路径、连接器、收发器、CAN控制器层面尽量独立这样当其中一路被机械磨损、连接器松动或电磁干扰打断时另一路还能独立工作。我在样机上做了两路完全独立的CAN/CANFD网络CAN-A作为主链路CAN-B作为备份链路。所有关节模组同时物理挂接在A、B两路上但默认只在A网收发。两条链路用不同的线束路径敷设连接器也错开位置比如左腿线束走左侧波纹管右腿线束走右侧腰部节点则AK和BK分别走上下两个出线口。这样做的原因很直接如果两路线缆并排绑在一起一次机械磨损就会同时打断两条链路那冗余就完全失去意义。实测中这套设计确实救过一次场。机器人在连续跑动态步态几百小时后右腿靠近髋关节的一段线束因为反复弯折出现内部断芯CAN-A网单点断开但CAN-B网数据全程完整。主站侧检测到A网丢包后自动切到B网整个过程连续几个控制周期就恢复整机没有触发急停调试人员甚至没有察觉。2.2 CANFD参数计算与配置不是拍脑袋填速率CANFD最核心的特性是仲裁段和数据段分别配置速率。仲裁段负责帧ID、控制位等基础控制信息决定总线上能挂载多少节点以及通信距离数据段只负责载荷传输决定单帧能传输多少数据量。这种分离设计带来一个实际操作原则仲裁段可以牺牲部分速率换取稳定性和节点容量数据段则全力保障带宽。在我的关节控制项目里使用的配置是仲裁段1Mbps、数据段5Mbps、采样点75%以上。为什么是这两档先算总线长度人体尺寸决定了关节线束不会超过1米1米以内的短线缆完全能稳定承受5Mbps数据段。再看节点数量单路总线挂15个节点以下时1Mbps仲裁段足够支撑1kHz周期轮询。如果未来扩展到20个节点以上我会把仲裁段降到500kbps保证位时序余量更充足。配置时有一个关键细节必须注意CANFD的5Mbps数据段要求收发器支持CANFD高速模式我使用的收发器特意挑选了支持CANFD的型号不能用普通CAN收发器强行跑高速数据段否则会看到波形畸变和位错误。另外总线两端各接一个120Ω终端电阻是硬性要求这个电阻不能省少一个终端电阻波形反射就会引发间歇性位错误而且这种错误在低速时不明显、高速时频发排查起来非常容易误判为软件问题。下面是F28P65上双CANFD初始化的关键伪代码方便参考// F28P65 双CANFD初始化要点 // CAN-A为主链路CAN-B为备份链路 CANFD_init(CANA, 1 Mbps, 5 Mbps, SamplePoint75%); CANFD_init(CANB, 1 Mbps, 5 Mbps, SamplePoint75%); // 仲裁段1Mbps每位8Tq同步段1Tq传播段2Tq相位缓冲段5Tq // 数据段5Mbps缩短传播段至1Tq采样点约75% // 两条链路都开启自动重传但主站侧做错帧检测2.3 冗余切换的核心先发现问题再果断换路硬件给了双通道的底子但真正让冗余发挥作用的是软件层切换策略。我在每个CANFD节点周期发送的状态帧里都固定携带三个字段递增帧序号、节点心跳时间戳、当前使用链路编号。主站侧用一个滑动窗口记录A网连续丢包次数连续3个周期没收齐某个节点的数据就把该节点判定为A网异常立即在下一轮广播中下发“切换至CAN-B”指令。切换不是只改主站软件节点侧也需要配合。当节点收到切换指令后会屏蔽A网收发改用B网继续发状态帧同时将状态帧里的“当前使用链路编号”字段置为B。主站看到B网上对应节点恢复心跳后才算整个切换完成。整个过程要控制在一两个控制周期内我的实测数据是CAN-A断线后CAN-B完全接管大约需要8到10毫秒对人形机器人的低速巡检完全足够对高速动态动作则会有一点冲击所以我在规划里还会把“切换中状态”发给上层运动控制器让上层在切换瞬间降低加速度限制避免机械冲击。这里必须强调一个经验切换只是“换个通道”不是“重新初始化”。节点切到B网后不需要重新枚举或复位否则切换时间会拉长到几十毫秒甚至上百毫秒。正确的做法是在节点固件里把A、B两套CAN控制器都保持初始化状态只是修改“当前启用哪个控制器”的开关这样切换延迟最小。3. CANWeb协议让每个关节节点变成可读写的透明资源3.1 为什么不用裸CAN帧而是再套一层应用协议裸CAN/CANFD的帧结构里只有帧ID和数据字节所有语义需要通信双方提前约定。人形机器人调试阶段最痛苦的就是频繁增加监控变量今天想看关节加速度明天想看驱动器温升后天又要看某条总线的错误计数。如果用裸CAN帧每加一个变量都要重新定义帧ID和字节布局还得同步升级所有节点的固件开发效率极低。CANWeb解决的就是这个痛点。它是在CAN/CANFD物理链路之上的一层应用协议把每个CAN节点组织成一个“资源表”资源表里每一项都有明确的地址、数据类型、读写属性。上层访问CAN节点时不需要关心底层帧格式只需要像查寄存器一样填“设备地址寄存器地址”就能读到实时值或者写入配置。这种模型在调试过程中的优势非常明显我只需要在上位机工具里打开一个寄存器表关节电流、母线电压、温度、故障字一目了然。3.2 在机器人上调试CANWeb的实测流程CANWeb不改变物理接线它就是跑在CANFD链路上的一层协议。实际调试时我先用CANWeb扫描工具挂在CAN-A网上执行全线扫描确认每个关节节点的寄存器表都能正常上报。扫描完A网后把工具换到CAN-B网再扫一遍。两网数据一致说明硬件双链路和协议层都正常如果某一网数据缺失问题多半出在对应物理链路上。扫描通过后我会配置一个CANWeb网关把CAN-A网上的节点数据周期转成TCP/UDP包供上位机显示、录像和回放。这个网关非常有用因为机器人调试时不可能一直拿着调试器蹲在旁边有了TCP通道我可以远程看每个关节的所有监控量跑完一轮步态后直接把波形导出来分析。这里有一个经验要提醒CANWeb网关在配置“轮询节点列表”时默认会轮询配置里填的从站数量。如果你图省事把地址范围配到0到255网关会反复扫描不存在的地址每次超时都会拖慢整体寄存器刷新速率。我的做法是先执行一次单网扫描拿到实际在线节点列表再按在线节点配置轮询列表这样刷新速率能提升好几倍。3.3 寄存器表设计与故障字联动使用CANWeb时节点寄存器表的设计直接决定后期调试效率。我的建议是每个关节节点至少规划这几个区域状态量区、控制量区、配置区、诊断区。状态量区放位置、速度、电流、温度、母线电压控制量区放目标位置、速度前馈、力矩前馈配置区放节点ID、滤波器参数、CANFD速率档位诊断区放错误计数、总线错误类型、当前使用链路编号。诊断区里的“当前使用链路编号”特别重要它和冗余切换策略联动。当主站把某个节点切到CAN-B后如果该节点在B网仍然上报“当前链路B”且数据连续稳定说明切换成功如果B网也出现错误计数上升主站会直接把该节点标记为链路异常并通知上层运动控制器降低该关节的加速度限制避免在链路不稳定的情况下强行执行高动态动作。4. 千兆以太网与EtherCAT融合从主站选型到从站配置4.1 主站选型要分阶段别一上来就啃协议栈EtherCAT主站这块我强烈建议大家先想清楚当前阶段的目标是“快速调通样机”还是“准备量产固件”这两个目标对应的主站路线完全不同。样机阶段直接用现成主站最快。Windows环境我用过TwinCATLinux环境我用过IgH/EtherLab开源主站还有商业主站SOEM。IgH在Linux上移植起来比较直接通过标准以太网网卡驱动绑定网口后就能获得主站基础能力开发效率比从零写主站高太多。如果你只是在做原理验证和关节模组调试完全没有必要在样机阶段自己开发主站。但一旦进入量产阶段就需要考虑商业主站或者在裸机上移植经过验证的简化主站。很多人问“有没有免费的EtherCAT主站软件”IgH和SOEM确实免费但免费背后有个隐性成本协议栈只做到过程数据管理层驱动适配、实时性调优、诊断工具都要自己补。而且IgH对网卡驱动有要求最好使用支持独立网口的EtherCAT专用网卡使用普通板载网卡时一定要关掉网口休眠、TCP分段卸载、校验和卸载等功能否则会产生明显的周期抖动在Wireshark里表现为一批错误帧。4.2 从站配置XML、SSC以及F28P65/STM32的接线方式从站这块几乎是整个EtherCAT链路里坑最多的部分。常用的从站方案是“ESC芯片加MCU”ESC负责处理以太网帧和分布式时钟MCU通过SPI或并行总线与ESC交换过程数据。我常用的ESC芯片是LAN9252和AX58100MCU则根据部位区别选择关节控制用TI的F28P65因为它自带多路CANFD和强大的信号链资源手部控制模组用STM32资源和成本更匹配。F28P65和AX58100的连接方式我专门画过一张核对过多次的接线图核心是这样AX58100的SPI从接口接到F28P65的SPI主接口另外配一个中断引脚、一个复位引脚ESC的EEPROM里烧录从站配置信息上电时ESC自动加载EEPROM。F28P65作为SPI主机通过周期性读写ESC的PDO数据寄存器来交换控制字、状态字和过程数据。从站能不能被主站正确识别完全取决于三处配置是否一致SSC工具生成的从站固件、XML配置里的PDO映射、ESC EEPROM里的从站信息。我现在养成的习惯是每次修改PDO映射后强制重新生成SSC代码、同步更新XML、重烧EEPROM三者必须完全对齐否则主站一进OP模式就报错。下面是一个常见的从站XML配置片段展示了控制字/状态字的PDO映射方式!-- EtherCAT 从站XML关键片段SM2输出PDO映射 -- RxPdo Fixed1 Sm2 Index0x1600/Index Entry Index0x6040/Index SubIndex0x00/SubIndex !-- 控制字16位 -- BitLen16/BitLen /Entry Entry Index0x6060/Index SubIndex0x00/SubIndex !-- 运行模式8位 -- BitLen8/BitLen /Entry /RxPdo4.3 Wireshark抓包与千兆网段隔离设计排查EtherCAT从站映射问题时Wireshark是绕不开的工具。Windows下抓包前先确定抓的是哪块网卡然后把网卡选中Wireshark如果没自动识别EtherCAT类型需要手动启用EtherCAT dissector这样才能看到EtherCAT数据报头、WKC工作计数器和AL状态机迁移。关于Wireshark抓包我分享一个最具性价比的检查顺序先看主站是否周期发出EtherCAT帧再看从站有没有返回最后看WKC数值是否正确。如果从站一直卡在PREOP或SAFEOP状态优先查XML映射是否跟固件一致而不是急着改主站配置。我遇到过很多次主站侧怎么调都不行最后定位到是XML里SM同步管理器的方向配置反了导致主站发不下去。千兆以太网在我的系统架构里不参与实时控制回路它主要承载视觉点云、模型参数下载、上位机监控这类大流量数据。为了避免千兆网的数据风暴影响EtherCAT的实时性我把千兆设备单独划分到管理网段通过一台独立交换机和EtherCAT网段、CANWeb网关网段隔离开或者用VLAN做逻辑隔离。这样视觉数据再怎么占用带宽也影响不到EtherCAT的周期数据和CANFD帧间隙。很多人忽略了这个细节把所有网络全插在一台交换机上结果EtherCAT周期抖动飙到几十微秒还找不到原因。5. 现场高频故障排查与避坑实录5.1 一张表快速定位CAN/EtherCAT典型故障现象大概率原因排查建议CANFD节点偶发不收发仲裁段速率不一致或终端电阻缺失示波器抓CAN_H/CAN_L波形确认120Ω终端电阻CANFD高速数据段波形畸变收发器不支持CANFD高速模式换成支持CANFD的收发器降低数据段速率测试关节节点重上电后不上线CANWeb寄存器表从站数量配置过大先单网扫描按实际在线数配置轮询列表EtherCAT周期性报“从站丢失”线缆过长、屏蔽层接地不良或连接器虚接查线缆长度确认屏蔽层单端接地重插连接器主站卡在PREOP/SAFEOPXML的SM方向或PDO映射与固件不一致核对XML、SSC代码、EEPROM三者一致性Wireshark看到大量CRC错误帧网卡TCP卸载/休眠功能未关闭关闭网卡卸载和节能功能或更换专用网卡CAN位错误计数快速上升供电地线电位差干扰灌进收发器检查供电地、CAN地线单点连接加滤波5.2 一个折腾我两周的案例低速没问题一跑起来就掉线我要重点分享一个真实案例。双足样机调机阶段静态站姿时所有关节通信正常但一跑起来右边小腿关节偶发掉线过一两秒又自动恢复。最开始怀疑是CANFD波特率余量不足我把数据段从5Mbps降到4Mbps现象没有改善又怀疑是CANWeb网关轮询压力过大结果排除了。最后用示波器同时抓CAN_H、CAN_L和电机供电轨才发现每次掉线都对应一个明显的母线电压尖峰。顺着电压尖峰查下去是关节驱动器里的一颗电容老化导致高频纹波灌回总线收发器的供电引脚触发收发器进入错误状态。换掉电容、在总线收发器供电处加一级RC滤波后问题彻底消失。这个案例给我留下了很深的印象。CAN和EtherCAT这类工业总线出问题时七成不在协议本身而在供电、接地、物理层。排查时不要第一时间怀疑配置先抓物理波形、看错误计数器、再回看软件配置效率会高很多。很多同事卡了两三天的问题最后都是一个电容或一个螺丝松了。5.3 排查工具清单与我这边的固定打法调试这套混合总线系统我工位上常年放着几样东西一台双通道示波器、一块支持CANFD的USB分析仪、一台装有Wireshark和TwinCAT的调试笔记本、一对备用120Ω终端电阻、一段成品双绞屏蔽线。别小看这些基础工具很多故障就是靠它们快速锁定的。固定排查顺序我也形成了肌肉记忆先看物理层波形和终端电阻再看错误计数器和心跳超时再看协议映射和配置最后才考虑改代码。这个顺序帮我快速解决了大量问题也建议刚入手的工程师直接采用这个顺序能避免很多无效试错。6. 最后留一个实测后的小体会这套“冗余双CAN/CANFD CANWeb 千兆以太网 EtherCAT”的混合架构如果让我重新搭一遍我依然会选同样的组合但会有三点调整第一CANFD的两路物理路径一定会用不同规格的波纹管和保护套独立敷设绝不再并排绑在一起第二每个关节从站主动上报链路健康字而不是等主站发现丢包后再被动切换能让故障感知提前好几个周期第三EtherCAT网段和千兆管理网段之间坚持物理隔离绝不为了省一台交换机而把实时数据和非实时数据混在一起。也有朋友问过我为什么不干脆全部统一到EtherCAT或者全部统一到CANFD让系统看起来更“干净”。我的回答很直接实际项目中最稳的方案往往是几种成熟总线互相兜底、各干各擅长的活。硬件冗余付出的成本换来的是整机运行时不至于因为一根线断了就全线瘫痪。如果以后有新一代样机我还会在现有基础上加入更多链路自诊断能力让每条总线都能随时告诉我们“我现在健不健康还剩多少余量”这对人形机器人这种机械和电气高度耦合的产品来说比堆更多算力更实际。
返回列表