新闻详情

新闻详情

首页 / 资讯中心 / 详情

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

发布时间:2026/9/26 1:45:08来源:尧图网络
基于EtherCAT的机器人关节双编码器驱动器设计与实现
做机器人关节驱动器这件事最绕不开的就是编码器和总线怎么选。我最近完成的一个项目就是基于 EtherCAT 的机器人关节双编码器驱动器。关节电机侧装一个编码器输出侧再装一个编码器配合 EtherCAT 总线把几十个关节的指令同步到微秒级——这套方案在协作机械臂、人形机器人、医疗机械臂里越来越常见。这篇文章把整个项目的架构选型、硬件细节、软件实现和调试踩过的坑都摊开讲适合正在做伺服驱动、关节模组或 EtherCAT 从站的工程师参考也适合刚入门想了解“双编码器到底好在哪”的朋友。1. 项目背景机器人关节为什么要装双编码器1.1 单编码器的天然短板很多第一次做关节模组的人会问一个问题电机屁股后面已经有编码器了为什么还要在减速器输出端再装一个答案很简单因为中间隔着减速器。机器人关节一般用谐波减速器或行星减速器减速比从几十比一到一百多比一。减速器不是刚性体谐波减速器本身就有柔性负载一大柔轮会发生扭转形变。电机端编码器测的是电机转子的角度减速器输出端实际角度和电机端角度之间会有一个“被拉出来的偏差”。拿减速比 50:1 的系统举例电机端转 50 圈输出端才转 1 圈。如果输出端扭矩大柔轮扭转了 0.5 度折算到电机端就是 25 度。位置环反馈用的是电机端数据控制器以为关节已经到位置了实际末端还差一段。半闭环就是这种情况轻载时精度尚可重载或高速换向时误差会被放大。生活里也有类似的例子用力拧毛巾的时候手握的那端已经转了大半圈毛巾末端还慢吞吞地跟着转中间那块被扭着的就是减速器的柔性。单编码器方案不是不能用低成本关节或者对重复定位精度要求不高的场景完全够。但要做到高刚度、高重复精度、重载下稳定单编码器很难兼顾动态响应和输出精度。1.2 双编码器闭环是怎么工作的双编码器的思路是在电机端装一个编码器负责动态响应在减速器输出端装一个编码器负责真实位置反馈。结构上就是两个环嵌套在一起。电流环和速度环用电机端编码器响应快保证力矩输出和运动平稳位置环使用输出端编码器直接测量关节末端角度把减速器回差、柔性形变、齿轮磨损这些误差统统纳入反馈。相当于位置环外面又套了一层“真实位置的闭环”。这样做最直接的好处有三个消除了减速器回差和扭转误差带来的定位偏差。反向间隙不需要靠机械预紧去压控制上能自动补偿。位置重复精度可以做到很高输出端编码器位数越高定位越稳。代价也很明显成本增加结构复杂度上升软件里要多做一次零点标定和双编码器数据融合。后面会专门讲这部分。1.3 多圈与掉电记忆关节调零那些事双编码器里电机端常用多圈绝对值编码器输出端也必须是绝对值编码器。机器人上电不能像机床那样先回原点必须立刻知道关节当前位置所以“掉电后还能记住位置”是硬要求。多圈绝对值编码器的实现方式有两类一类是内部有机械齿轮组最多记住 4096 圈或更多纯物理结构掉电不丢另一类是电子多圈通过外部电池给计数器供电或者靠磁铁极对数和圈数计数逻辑实现。我这边电机端用的是电子式多圈磁编码器输出端用的是绝对值角度编码器两者都是 SPI 或者 BiSS 接口读取。调零这件事也要提前想清楚。电机端编码器的零位和电机电角度零位不是天然对齐的输出端编码器零位和关节机械零位也不是天然对齐的。装机时需要做一次“零点标定”把两个编码器的读数关系和关节零位记录下来烧录进驱动器的参数区。这个流程我没有省略后面软件部分会详细说。2. 整体架构设计EtherCAT、主站与从站怎么搭2.1 为什么是 EtherCAT 而不是高速串口或 CANopen关节驱动器的通信方案有很多CANopen、EtherCAT、Powerlink、甚至 RS485 私有协议都有人用。我最后选了 EtherCAT核心原因是同步性和拓扑灵活性。机器人的轨迹问题是多关节协同的。六轴机械臂要画一条空间直线六个关节的目标位置几乎要同时下发。如果每个关节各自收到指令的时点差 1ms末端轨迹偏差可能到几毫米。EtherCAT 的分布式时钟技术可以把各从站的同步误差压到 1 微秒以内次毫秒级周期完全能支撑高动态轨迹。和 CANopen 比EtherCAT 的带宽优势也很明显。CANopen 在 1Mbps 波特率下1ms 周期内光发几个轴的数据就很吃力了EtherCAT 的实时以太网带宽是百兆起步数据还能按位映射PDO 可以做得非常紧凑。从站硬件上也没有想象中复杂。一个 EtherCAT 从站控制器芯片加一个 MCU 就能做我用的方案是 ET1100 STM32也有同行直接在 FPGA 里跑 ESC IP 核。整体成本可控开发资料也比较全。2.2 主站侧与从站侧硬件分工很多人第一次接触 EtherCAT 从站设计最容易搞混的是主站和从站的关系。主站一般是一台工控机或者嵌入式实时系统跑 TwinCAT、SOEM、igh 这类主站协议栈。主站负责规划轨迹、下发位置指令、接收各关节状态。从站是每个驱动器内部包含 ESC、MCU、功率驱动电路和编码器接口。ESC 芯片负责处理 EtherCAT 报文和上位机之间做数据交换。MCU 负责真正干活跑电流环、速度环、位置环。两者之间通过并行总线或者 SPI 通信MCU 只管从 ESC 的数据寄存器里拿指令、写状态不需要关心复杂的 EtherCAT 协议解析。从站需要几个网口环形拓扑下每个从站必须有 2 个网口一个进一个出串联成环。如果做星型拓扑那每个从站只需要 1 个网口另接交换机或者集线器。实际做机器人环形拓扑更常见因为链路断一处还能继续通可靠性更好。我这边所有关节驱动器都留了 2 个百兆网口内部 ESC 两个端口是直通的MCU 完全不参与报文转发。2.3 驱动功率部分与控制的隔离设计驱动器内部可以分成控制板和功率板两大部分。控制板包含 MCU、ESC、编码器接口电路、抱闸控制逻辑。功率板包含三相逆变桥、栅极驱动、电流采样电阻、母线电容和放电电路。我设计时把控制板和功率板物理分开中间通过排针连接。这样做的好处是调试方便控制板可以单独供电跑程序功率部分坏了可以直接换板子不需要重新刷固件。隔离方面MCU 到栅极驱动之间用了数字隔离器编码器接口也做了差分信号接收和 ESD 保护。电机和输出端编码器线缆都从关节内部走为了防止电机三相线对编码器信号的干扰编码器线全部用屏蔽双绞线屏蔽层在驱动器端单点接地。第一版我图省事没做屏蔽编码器读数在电机大电流时偶尔跳变后来加了屏蔽层才稳定。3. 硬件核心细节编码器接口、电流采样与 DC 同步3.1 电机端和关节端编码器的接口设计双编码器驱动器硬件上最麻烦的就是两路编码器接口因为它们往往不是一个协议。电机端磁编码器我用的是 SPI 接口的 TLE5012B差分线不太长直接 3.3V 电平通信就行。TLE5012B 有 15 位单圈分辨率内部带多圈计数。读取频率只要跟速度环周期匹配一般 1kHz-4kHz 轮询就行。输出端编码器选用的是绝对值角度编码器走 BiSS-C 协议。BiSS-C 是同步串行接口类似 SSI 的升级版带 CRC 校验能传多圈数据、状态位和报警位。距离长了必须用差分信号我加了 RS422 差分接收电路速率 2MHz读取一次大约几十微秒。两块编码器的读取时序要错开避免 SPI 和 BiSS 同时占用数据总线。我在固件里让它们在同一个定时器中断里分时完成读取完成后把原始码值存到全局变量控制环直接用这个值。接口电路上有几个关键点差分线终端电阻BiSS-C 接收端需要 120 欧匹配电阻。编码器供电要单独滤波LC 滤波加磁珠防止电机侧干扰串进来。接线端子要带锁扣机器人关节振动大普通端子很容易松。3.2 电流采样窗口与 PWM 同步电流环是整个驱动器的核心我跑的是 20kHzPWM 频率也是 20kHz。用的是三电阻采样方案在三个下桥臂分别串采样电阻通过运放放大后送 MCU 的 ADC。采样时点非常关键。必须在 PWM 开关周期的特定时刻采样一般是下桥臂导通的中点附近此时电流信号最平稳。如果采样点落在开关噪声区域采到的电流波形全是毛刺电流环会啸叫甚至发散。三电阻方案的局限是当占空比接近 0 或者接近 100% 时有一相桥臂的导通时间太短采样电阻上的电压还没有稳定ADC 采不到有效值。我加了一个采样窗口检查逻辑当某相占空比低于 5% 时自动切换到另外两相重构三相电流或者插入中心对齐采样补偿。这个功能看着不起眼但调试时会帮你省很多时间。ADC 触发我用了 PWM 定时器的中心对齐事件每个 PWM 周期产生一次采样触发保证电流采样和 PWM 周期严格同步。不能让 ADC 自己连续转换那样采样点乱飘电流环性能会大打折扣。3.3 EtherCAT DC 时钟同步的实现要点EtherCAT 的 DC 同步说白了就是让所有从站共用一个时间基准。主站每隔一段时间广播一次时钟每个从站 ESC 内部会计算本地时钟和主站时钟的偏差调整自己的本地时间寄存器。硬件上从站的 SYNC0 信号可以配置成周期输出MCU 收到 SYNC0 中断后立即锁存当前编码器值、执行位置环、刷新 PWM 占空比。这样一来所有关节在同一时刻采样和输出指令时点严格一致。我这里的周期设置是 1ms 的 EtherCAT 周期SYNC0 也配置成 1ms。MCU 在 SYNC0 中断里做位置环刷新电流环还在 PWM 中断里跑两者互不干扰。DC 同步调试有个常见坑第一次上电时从站本地时钟和主站时钟差很多前几个周期 Sync 误差可能很大如果没有做时钟补偿趋势处理关节会出现“启动时抖一下”。后来我在从站初始化时先让系统空跑几十毫秒等时钟同步稳定后再允许上位机切到 OP 状态。3.4 备选方案对比BiSS-C 与 EnDat、SPI 增量输出端编码器不是只有一种选择。我列一个表方便做方案时快速对比编码器类型接口协议单圈位数特点适用场景磁编码器SPI / SSC12-16 位成本低、抗污染、精度一般电机端速度反馈、低成本关节光电绝对值编码器BiSS-C / SSI17-25 位精度高、响应快、怕油污输出端高精度位置反馈电容式绝对值编码器BiSS-C18-23 位抗污染、精度高、结构薄关节输出端、医疗设备增量式编码器正交/差分需外部计数成本低、无绝对值、掉电丢位置不推荐机器人主关节使用我用的电机端磁编码器 输出端光电绝对值编码器的组合算是性能和成本的平衡点。如果关节输出端空间特别紧凑可以考虑电容式编码器Netzer 那类精度也不差但价格明显上去。4. 软件实现从 FOC 到 EtherCAT 应用层的完整链路4.1 固件分层结构与关键中断驱动器固件不能很随性地写。我把整个程序分成了这层结构从底层到上层依次是底层驱动PWM、ADC、SPI、BiSS-C 时序模拟、GPIO。控制层电流环、速度环、位置环、双编码器融合。应用层EtherCAT 状态机、PDO 映射、CSP 模式处理、参数存储。诊断层过流、过温、欠压、编码器异常、通信超时。MCU 资源分配上最重要的是中断优先级。我的分配是这样的PWM 更新中断20kHz电流环优先级最高。SYNC0 中断1kHz位置环、编码器读取、速度环计算。定时器轮询中断剩余编码器读取、状态诊断。后台主循环EtherCAT 报文处理、参数读写、错误日志。这里要特别强调EtherCAT 应用层的 PDO 刷新不要在控制环中断里做因为 ESC 数据寄存器的读写时序比较慢放在 1kHz 中断里会占用太多时间甚至影响控制环稳定性。我放在后台主循环里反正 1ms 周期内主循环执行次数足够多完全能跟上。4.2 EtherCAT 状态机与 PDO 映射EtherCAT 从站有四个关键状态INIT、PRE-OP、SAFE-OP、OP。每个状态对应不同的功能允许范围。MCU 需要处理状态切换请求并把当前状态反馈给主站。从 INIT 到 PRE-OP主站会配置从站的 EEPROM、FMMU、PDO 映射。这段逻辑如果写得不谨慎经常会出现主站报错、状态切不上去的情况。我的经验是严格按照 ET1100 手册的状态切换时序来处理SM 通道的映射也要和 ESC 寄存器保持一致。PDO 映射决定了主站和从站之间数据怎么排列。我用的典型 PDO 内容如下RxPDO主站到从站目标位置32 位有符号整数目标速度32 位有符号整数目标力矩16 位有符号整数控制字16 位模式字8 位TxPDO从站到主站实际位置32 位有符号整数实际速度32 位有符号整数实际电流16 位有符号整数状态字16 位编码器状态位16 位这样每个关节一个周期的报文只有几十字节即使十几个关节串联总线负载也远不到上限。4.3 CSP 模式下的位置指令处理与速度前馈机器人关节驱动器最常用的模式是 CSPCyclic Synchronous Position循环同步位置模式。主站每个周期下发目标位置从站内部做位置环和速度环最终输出电流指令。CSP 模式并不等于“从站只做一个位置环”。如果只做位置环关节动态响应会很差所以在我的固件里位置环输出是速度指令但不是直接给速度环用而是叠加了一个“速度前馈”。主站下发的目标速度会被用来做前馈补偿。位置环输出 速度前馈 最终速度指令。速度环再接一个速度前馈到电流指令。这样能做到位置跟随误差很小运动过程中不会有明显的滞后感。单位换算是很多人忽略的坑。EtherCAT 报文里的位置单位是多少我统一约定为主站下发的是 0.001 度为单位但编码器原始计数是 65536 每圈16 位磁编码器或者更高分辨率。换算关系必须在从站固件里处理好否则主站发的数值到从站执行时很容易被放大或者缩小十几倍。4.4 双编码器融合、零位对齐与误差补偿双编码器融合是本项目的核心逻辑我把它拆成三层处理。第一层是零点标定。装好关节后把驱动器调到初始化模式手动把关节转到机械零位记录下此时两个编码器的原始码值。这个偏移量分别存入两个参数运行时会自动加回读取值。第二层是位置选择。位置环反馈默认用输出端编码器速度和电流环反馈用电机端编码器。但要注意电机端编码器的速度和加速度信号更干净因为直接反映电机转动没有经过减速器柔性环节用于速度阻尼效果更好。第三层是偏差检测。两个编码器中间隔着减速器理论上正常状态两者比例换算后应该一致。如果负载突变或者机械卡死输出端编码器读数会和电机端推算值差很多。我设置了偏差阈值超过阈值立刻触发报警并停止使能这个功能相当于一个软保护能挡住不少机械故障。为了让输出端编码器的绝对位置更平滑我在读取时对连续几个周期的数值做了滑动滤波。但滤波不能加得太多否则位置环响应变慢关节会感觉“发闷”。最终选了折中的阶数。5. 调试过程与问题排查实录5.1 上电瞬间编码器奇异值位置跳跃第一次给关节上电我遇到的现象是驱动器刚上使能关节猛地跳到某个位置吓一跳。排查下来发现电机端电子多圈编码器上电初始化需要几十毫秒期间读到的圈数值是随机的还没稳定成真实值。MCU 在这个时间窗口里读到异常位置位置环直接把关节拉到那个错误位置。解决方法是增加“编码器位置有效”标志。编码器初始化完成后会置位某个状态位MCU 只有检测到这个标志才更新位置变量。如果标志未就绪即使主站下了使能指令从站也不切 OP而是在 PRE-OP 状态等待。这里有个小技巧上电时先把两个编码器的原始值读一遍作为“上电基准位置”存起来等到初始化完成后用基准值做差值校验防止初始化过程出现跳变。5.2 使能后抖动排查 DC 同步与 PWM 对齐另一个常见问题是关节在使能后小幅度高频抖动看位置环误差曲线总有一个 1Hz 左右的波动。最初我怀疑是位置环参数太激进把 P 增益降下来还是抖动。后来用示波器抓主站的同步信号和从站的 SYNC0 信号发现两个信号的沿相差了接近 0.5ms。主站的 DC 功能没有正确启用各从站之间时钟完全没对上。把 DC 功能打开、SYNC0 正确配置后抖动立刻消失。这件事给我一个教训EtherCAT 从站调试第一步必须验证 DC 同步是否到位用示波器同时看主站参考时钟和从站 SYNC0确认沿对齐再去调控制参数否则所有的调参都是白费。5.3 从站掉线/丢包接线与 ESC 配置机器人联动测试时偶尔会有某个关节掉线主站报通信超时。集中出现的时候都是机器人转动到某个角度就发生。排查时先用主站的网络诊断功能扫描拓扑发现报错都是从站的链路质量下降。关节点运动时线缆会跟着弯折而控制板上的 RJ45 座选用的是不带屏蔽的型号线缆弯折时屏蔽层断开插损增大出现了偶发丢包。后来我把所有网口座换成了带屏蔽版本转接 PCB 也重新设计还加长了信号走线的隔离间距。改完后反复扭线测试通信再没丢过。ESC 配置上还有一个点从站的 SII EEPROM 里要正确配置是否允许自动转发、是否使用 DC 等功能。如果 EEPROM 里没开 DC即使主站下发 DC 指令从站也不会响应这个问题排查起来最坑因为它编译不报错、运行初期也看不出异常。5.4 电机啸叫与电流环参数电机在高速段出现尖锐啸叫位置环发出的速度指令一抖电流环会跟着放大噪声。我用示波器抓了相电流波形发现有明显的 20kHz 附近振荡分量。原因之一是电流环 PI 参数在当前电机电感下偏激进另一个原因是采样触发点稍微偏离了 PWM 中心导致反馈电流里混入开关纹波。解决办法是先降低电流环 Kp确认波形稳定后再逐步提高。然后把 ADC 采样点微调用示波器找到 PWM 中心对齐的时刻。值得一提是新电机和旧电机的电感差异不小换电机后必须重新整定电流环参数不能一个参数直接复用到底。5.5 注意事项汇总速查表常见问题可能原因排查手法上电位置跳变编码器初始化未完成等待位置有效标志关节抖动DC 同步未启用示波器对比 SYNC0 沿通信丢包网口屏蔽差/线缆弯折换屏蔽座、检查 EEPROM电机啸叫电流环参数过激降 Kp、校准 ADC 采样点温度过高散热片贴合不良测功率管温度、补硅脂双编码器偏差报警减速器磨损/负载卡死检查机械部分、降低阈值这些坑基本覆盖了从站驱动器从硬件到软件、从单机到联调的大部分典型问题。踩过之后整个项目的调试周期明显缩短很多。6. 实测效果与个人体会6.1 关键指标测试结果项目最后阶段我在一个六轴关节模组上做了整机联调。测试数据如下指标数值EtherCAT 周期1msDC 同步抖动±0.5μs 以内电流环频率20kHz速度环频率4kHz位置环 1kHz位置跟随误差空载匀速0.02 度以内重复定位精度±0.005 度输出端编码器分辨率0.00003 度协议分辨率最大输出电流12A 持续 / 24A 峰值双编码器带来的直接提升是重载换向时的位置波动明显变小。同样一段轨迹单编码器半闭环方案在负载波动时末端有可见的抖振双编码器全闭环后基本是一条平滑曲线。这也是我认为这套方案值得做下去的原因。6.2 一些设计上的后悔与经验做完这个项目我有几个心得想分享。第一编码器接口最好设计成模块化。不同客户可能用不同的编码器协议如果全部靠硬件跳线和固件切换改起来很痛苦。当初我把 BiSS-C 和 SPI 做在同一块板上已经算省事但要是再预留一个 EnDat 接口的位置会更好。第二EtherCAT 从站的 EEPROM 配置要当成大事来做。很多排查了很久的问题最后都指向 SII 配置不对。建议在量产前制定一份从站参数模板逐项核对并用自动化脚本统一烧录。第三双编码器不是有了硬件就行标定流程要尽早固化。我前面说到的零点标定和偏差检查应该在工程师装机前就做成标准操作流程文档。否则每台设备都手工标很容易漏掉某一步导致后续控制全乱。最后再说一句双编码器方案对控制算法和参数整定的要求确实比单编码器高但一旦调顺了那种“关节指向哪就是哪”的踏实感是半闭环永远给不了的。如果正在考虑下一代关节模组的架构这个方向值得投入。
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

MathModelAgent:把 3 天的数学建模压进 1 小时的开源 AI Agent 2026/9/26 2:31:05

MathModelAgent:把 3 天的数学建模压进 1 小时的开源 AI Agent

MathModelAgent:把 3 天的数学建模压进 1 小时的开源 AI Agent 【免费下载链接】MathModelAgent 🤖📐专为数学建模设计的 Agent & skills ,自动完成数学建模,生成一份完整的可以直接提交的论文。 An Agent Designed for Mathe…

阅读更多 →
SolidWorks钣金展开精度控制:K因子与折弯工艺实战指南 2026/9/26 2:31:05

SolidWorks钣金展开精度控制:K因子与折弯工艺实战指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
LX Music:五源聚合 + 桌面歌词的开源播放器 2026/9/26 2:30:58

LX Music:五源聚合 + 桌面歌词的开源播放器

LX Music:五源聚合 桌面歌词的开源播放器 【免费下载链接】lx-music-desktop 一个基于 Electron 的音乐软件 项目地址: https://gitcode.com/GitHub_Trending/lx/lx-music-desktop LX Music 是一个基于 Electron Vue 3 构建的开源音乐播放器,自…

阅读更多 →
Bangumi 追番记录应用:从零到日常使用的完整指南 2026/9/26 2:30:58

Bangumi 追番记录应用:从零到日常使用的完整指南

Bangumi 追番记录应用:从零到日常使用的完整指南 【免费下载链接】Bangumi :electron: An unofficial https://bgm.tv ui first app client for Android and iOS, built with React Native. 一个无广告、以爱好为驱动、不以盈利为目的、专门做 ACG 的类似豆瓣的追番…

阅读更多 →
wasm3 WASI 冒烟测试完全指南:编译、跨引擎运行与回溯验证 2026/9/26 2:30:58

wasm3 WASI 冒烟测试完全指南:编译、跨引擎运行与回溯验证

解释器嵌入式语言运行时 【免费下载链接】wasm3 🚀 A fast WebAssembly interpreter and the most universal WASM runtime 项目地址: https://gitcode.com/gh_mirrors/wa/wasm3 点击查看 免费下载 在 wasm3 仓库中,test/wasi/simple/ 是最具…

阅读更多 →
abogen 完整指南:把 EPUB、PDF 和文本变成带同步字幕的有声书 2026/9/26 2:30:58

abogen 完整指南:把 EPUB、PDF 和文本变成带同步字幕的有声书

abogen 完整指南:把 EPUB、PDF 和文本变成带同步字幕的有声书 【免费下载链接】abogen Generate audiobooks from EPUBs, PDFs and text with synchronized captions. 项目地址: https://gitcode.com/GitHub_Trending/ab/abogen 想把一份 PDF 或 EPUB 变成能…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉