FEATURED · 精选文章

协作机器人EtherCAT控制:CSP/CSV/CST模式切换与双闭环整定

发布时间 / 2026/9/17 12:14:01
来源 / 创域科博编辑部
栏目 / 资讯中心
协作机器人EtherCAT控制:CSP/CSV/CST模式切换与双闭环整定 简介这份PDF文档系统梳理了协作机器人控制方案面向机器人本体开发、伺服调试与运动控制方向的工程师以及需要理解人机协作安全机制的技术人员。文档围绕力矩感知与碰撞检测展开讲解机器人如何察觉外部微小力矩变化并作出反应识别到异常扭矩增加时自动停机接触人员或物体时由循环同步位置速度模式切换至循环同步力矩模式从而让人员可轻松推开机械臂同时介绍了示教模式下操作人员拖动机械臂、由Elmo控制器记录关键位置点并复现轨迹的流程。方案还涉及Elmo系列驱动器的双闭环控制、增量式编码器与19位绝对值编码器反馈、1:2000动态电流范围以及P-MAS多轴运动控制器在250μs内同步16轴的EtherCAT总线运动学解算和EASII配置工具。包内共1个PDF文件约157KB篇幅紧凑、结构完整。目前已有393人学习适合作为协作机器人控制选型与调试的参考资料。1. 协作机器人控制方案的骨架为什么 EtherCAT 与循环同步模式是主线很多团队第一次接手协作机器人项目时会把注意力放在减速比、臂长和重复定位精度上结果真到联调阶段才发现卡住进度的是「七个关节怎么在同一个瞬间知道彼此在哪、各自该出多大力」。这套方案的底座就是一根 EtherCAT 实时总线多轴运动控制器在 250us 内同步 16 个轴最短可做到 100us 内同步 8 个轴每个总线周期里把目标位置、目标速度或目标扭矩下发到每一台驱动器。驱动器侧跑的是 DS-402 协议里的循环同步模式CSP、CSV、CST 分别对应位置、速度、扭矩三种。协作机器人和传统工业机器人真正的分水岭在于它要在运行过程中把模式从 CSP 或 CSV 切到 CST让人用手就能推开机械臂。做关节一体化的伺服工程师、写机器人控制器的软件工程师、以及评估驱动器选型的方案设计者都绕不开这条主线。2. 力矩感知与碰撞检测CSP/CSV 到 CST 的判定与实现2.1 两条力矩获取路径的取舍力矩信号从哪儿来决定了整套碰撞检测的时间常数。一种做法是把力矩传感器放在电机减速箱的后端直接测外部力矩的快速增量另一种是干脆不加传感器用驱动器电流环反推。前者的分辨率高、能测到很小的外部扰动代价是关节里多一个部件、多一圈线束和一套标定流程后者省硬件但摩擦、齿槽和惯量耦合都会混进估算值里。实际选型时常见做法是按关节位置分两层靠近基座、负载大、对碰撞最敏感的大臂关节上传感器末端小关节用电流估算。原因很直白基座关节的一个小角度偏差经过整条臂放大后末端位移可能是好几厘米。检测路径典型响应时间可测最小力矩额外硬件适用关节减速箱后端力矩传感器0.52 ms额定力矩的 0.5% 左右传感器 滑环/走线基座、大臂电流环估算15 ms额定力矩的 3%8%无小臂、腕部关节电流 观测器13 ms额定力矩的 2% 左右无全轴通吃2.2 碰撞判据别拿绝对力矩做阈值直接用「实测力矩大于某个值」触发停机是在实验室里能跑通、上产线就翻车的写法。原因是抓取不同负载时同一个关节的正常力矩可能差好几倍。更稳的判据是看观测残差——实测力矩减去指令力矩再减去模型补偿残差里剩下的才是真正的外部扰动。# 碰撞判据残差 时间窗双条件避免单点噪声误触发 TRIP_RATIO 1.8 # 触发阈值按额定力矩的比例给 TRIP_WINDOW 4 # 连续超阈值的最小周期数按 250us 周期约 1ms TORQUE_LPF 200 # Hz力矩反馈低通压掉减速箱齿频噪声 class CollisionDetector: def __init__(self, rated_torque): self.limit rated_torque * TRIP_RATIO self.counter 0 def update(self, measured, commanded, model_comp): # 残差 实测 - 指令 - 重力/动力学补偿 residual measured - commanded - model_comp if abs(residual) self.limit: self.counter 1 else: self.counter 0 return self.counter TRIP_WINDOWTRIP_RATIO给太大轻碰不触发给太小高加减速段必然误报。经验上先用 2.0 跑一遍全行程观察加速段残差峰值再往下压到峰值之上留 30% 裕度。TRIP_WINDOW的作用是滤掉单周期的采样毛刺但不能设太长超过 5 个周期约 1.25ms就会明显拖慢停机响应。2.3 模式切换的执行序列判定成立之后要在一个总线周期内完成 CSP 到 CST 的切换。切换顺序错了会出现力矩跳变机械臂会「弹」一下。正确顺序是先清掉位置模式下残留的扭矩偏置再写模式字最后给目标扭矩和限幅。CIA402_MODE {CSP: 8, CSV: 9, CST: 10} def enter_compliant(axis, gravity_torque, damping_gain): axis.pdo_write(TorqueOffset, 0) # 清掉位置模式的扭矩偏置 axis.pdo_write(TargetTorque, 0) # 先给零扭矩避免切换瞬间冲击 axis.sdo_write(0x6060, CIA402_MODE[CST]) # 0x6060 modes of operation assert axis.sdo_read(0x6061) CIA402_MODE[CST], 模式未生效 axis.pdo_write(MaxTorque, axis.rated_torque * 0.3) # 限幅防误动作伤人 axis.pdo_write(TargetTorque, gravity_torque) # 叠加重力补偿进入柔顺 return True0x6060是模式给定0x6061是模式回读两者必须一致才算切换成功——很多现场故障就是写完 6060 不管回读结果驱动器因为状态机不允许而默默拒绝。MaxTorque限到额定的 30% 是个保守值人手能轻松推动又不会在重力补偿算错时甩起来。回切到 CSP 时顺序反过来先把扭矩命令降到重力补偿值再写模式字最后重新使能位置环。2.4 示教模式下的重力补偿示教模式和碰撞后的柔顺模式本质上是同一套 CST 机制区别在于示教时要长时间维持对补偿精度要求更高。控制器除了输出目标扭矩还要额外叠加一组补偿扭矩去抵消重力、关节摩擦和动力学阻抗否则操作人员拖起来会觉得「一顿一顿」。这部分通常不需要写完整的动力学模型。对多数协作机器人只做重力项补偿就已经能让拖拽手感很顺摩擦项用一个与速度方向相反的常值加上黏滞系数近似即可。补偿残差太大时手感表现为特定姿态下明显发沉这时候先查各连杆质心和质量的标定值而不是去调滤波器。3. 双闭环控制减速箱前后的反馈怎么分工3.1 单闭环为什么在关节里不够用如果只在电机端装一个编码器位置环看到的是电机转子角度减速箱的背隙、扭转柔性和连杆形变全都被「藏」在后面。减速比 100:1 的关节电机端 0.01° 的误差传到末端就是 1°反过来末端受到外力产生的形变电机端也几乎看不出来。定位精度和抗扰能力就卡在这里。双闭环的思路是把速度环和位置环拆到两个不同的反馈源上速度环用减速箱前端的增量式编码器加 Hall 元件位置环用装在负载末端的 19 位高分辨率绝对值编码器。速度环靠近电机带宽高、响应快位置环靠近负载测的是真正要控制的那个点。3.2 反馈元件的分工反馈源安装位置服务环路分辨率主要作用增量式编码器 Hall减速箱前端电机轴速度环 / 换相数百到数千线提供高带宽速度反馈、电机换相19 位绝对值编码器减速箱后端负载侧位置环单圈 524288 计数末端绝对位置、断电免回零力矩传感器可选减速箱后端碰撞检测依量程而定外部力矩直接测量19 位绝对值编码器的单圈分辨率是 2^19折算到关节输出端多数场景下能到角秒量级。它同时解决了开机找零的问题——上电即可知道负载端绝对角度这对协作机器人很重要因为回零动作本身就可能撞到人。一个容易踩的坑是负载端绝对值编码器装在关节输出轴上它测到的位置包含减速箱弹性形变如果直接拿它做位置环反馈环路里就带进了一个低阻尼的谐振环节。工程上的处理是在位置环输出到速度环给定之间插入一个陷波器把减速箱的一阶扭转频率压下去通常落在 3080Hz 区间。3.3 双闭环增益的整定顺序整定顺序不能乱先速度环再位置环最后加前馈。速度环没整好就去调位置环得到的结果一定是「看起来响应快了实际一碰就振」。参数含义初始建议调整方向KP[1]速度环比例增益2540出现高频啸叫就往下调KI[1]速度环积分增益8001500低速爬行时加大KP[2]位置环比例增益4080跟随误差大就加大振荡就减小VF速度前馈0.81.0提高跟随精度过大产生超调AF加速度前馈00.5减少加减速段的动态误差# EASII 侧配置双闭环反馈与增益寄存器名按 Elmo 体系示意固件版本间会有差异 axis -n 1 set OL[1].EC 2 # 主反馈 负载端绝对值编码器 axis -n 1 set OL[1].BA 19 # 绝对值位数 axis -n 1 set OL[2].EC 1 # 辅助反馈 减速箱前端增量编码器 Hall axis -n 1 set KP[1] 35 # 速度环比例 axis -n 1 set KI[1] 1200 # 速度环积分 axis -n 1 set KP[2] 60 # 位置环比例 axis -n 1 set VF 0.95 # 速度前馈 axis -n 1 saveOL[1]是主反馈位置环从它取值OL[2]是辅助反馈速度环从它取值这个映射关系必须在参数里写死否则驱动器默认两个环共用一个源双闭环就白做了。改完参数一定要save很多驱动器掉电不保留复位后回到单闭环现象是「重启之后精度就变差了」。3.4 验证双闭环是否真的生效验证方法很直接锁死末端手动给负载端施加一个小扭矩看位置环反馈有没有变化。如果位置反馈完全不动说明位置环实际读的还是电机端编码器。另一个验证点是关闭使能后手动转动关节绝对值编码器的读数应该跟随转动如果读数不变检查编码器通讯线序和电池电压。4. P-MAS 与 250us 周期内的运动学逆解4.1 总线周期和轴数是一道预算题250us 同步 16 个轴、100us 同步 8 个轴这两个数字不是随口给的背后是每个周期里要跑完的固定开销EtherCAT 帧收发、从站 DC 同步补偿、PDO 打包解包、运动学正逆解、以及安全逻辑。轴数翻倍帧长和同步开销都涨单周期留给运动学的时间就被压缩。轴数最小总线周期留给运动学的预算典型形态8100 us约 40 us单臂 6 轴 2 外部轴、Delta16250 us约 120 us双臂协作机器人 外部轴、翻转工位做双臂协作机器人松协调运动时两个臂加若干外部轴很容易凑到 1416 轴这时候 250us 就是硬约束逆解里不能出现动态内存分配、浮点除法和三角函数以外的重型运算否则周期抖动会直接反映到关节上。4.2 MCS 与 PCS两套坐标系各管一段控制器内置的运动学功能同时支持 MCS机器坐标系和 PCS产品坐标系。MCS 描述机器人本体的关节与末端关系PCS 描述工件或产品在外部装置里的位置。翻转、传送这类动作之所以能和其他轴完全同步是因为控制器把外部装置的位姿变换统一到同一套周期里做而不是在上位机里先算好再下发。实际用起来标定顺序是先把 MCS 的 DH 参数标到末端重复定位达标再把 PCS 和传送/翻转机构的相对位姿标进去。顺序反了会出现「机器人本体精度没问题一上产线就偏」的情况。4.3 在实时内核里写自定义运动学P-MAS 为客户应用预留了实时内核可以写自己的运动学转换方程。这对手臂构型不是标准 SCARA 或 Delta 的项目很关键——不用等控制器厂商出新固件自己把逆解塞进去就行。/* 实时内核中的逆解入口每个 EtherCAT 周期被调用一次 */ void kinematics_inverse(const double pcs[6], double mcs[7][2]) { double m[6]; /* 1. PCS - MCS叠加翻转/传送外轴的位姿变换 */ pcs_to_mcs(pcs, m, g_external_pose); /* 2. 七轴逆解。禁止动态分配所有中间量用静态数组 */ dh_inverse(m, mcs); /* 3. 基于动力学模型的补偿力矩附加到扭矩偏置上 */ for (int i 0; i 7; i) { mcs[i][1] gravity_compensate(i, mcs); } pdo_stage_positions(mcs); /* 本周期输出等待下一个总线节拍 */ }pcs_to_mcs承担的是外部装置位姿的映射dh_inverse输出七轴的目标位置和速度最后叠加补偿力矩。函数里所有数组都是静态或栈上分配实时内核里一旦出现malloc抖动就可能从几微秒涨到几百微秒。gravity_compensate的系数依赖各连杆质心标定值标定不准的表现是某些姿态下关节持续出力、温度上升明显。4.4 上位机通讯怎么接控制器与触摸屏、手操板、PLC、PC 之间的通讯走 Ethernet、TCP/IP、UDP快一点的二进制协议走 Modbus 和 EtherNet/IP。选型上的经验是周期性的状态刷新走 Modbus TCP 或 EtherNet/IP毫秒级就够了手操板这类需要低延迟交互的走 UDP 自定义二进制帧。上位机只负责下发任务和显示状态所有轨迹插补和逆解都留在控制器里不然上位机的一次 GC 停顿就能让整条臂抖一下。5. EASII 系统辨识与多轴整定的收尾配好双闭环、跑通模式切换之后剩下的工作集中在一点把每个轴的带宽推上去同时保证不振荡。EASII 里能做的判断不少系统辨识是其中最省事的入口——给轴灌一个扫频激励直接测出机械系统的频率响应再据此设计控制器和滤波器。单轴辨识常见做法是跑 Chirp 信号从 1Hz 扫到 400Hz幅值给到关节行程的 5% 左右。幅值给大了减速箱背隙会污染低频段给小了高频段信噪比不够。扫完之后先看幅频曲线上的谐振峰超过 0dB 的峰必须用陷波器压掉。这里的取舍是陷波器越窄对相位损失越小但机械系统的谐振频率会随负载和位姿漂移太窄的陷波器在换姿态后就失效了所以一般留 23 倍的带宽余量。# 多轴辨识逐轴激励再用位置分组增益消除轴间交叉影响 for ax in 1 2 3 4 5 6 7; do axis -n $ax ident_start --profile chirp --amp 0.05 --f0 1 --f1 400 axis -n $ax ident_wait axis -n $ax notch --auto # 自动布置陷波器 done axis -n all group_gain --set-from-ident # 用辨识结果统一更新位置分组增益--amp 0.05控制激励幅值--f0/--f1是扫频起止频率--auto让工具根据辨识曲线自动布陷波器。最后一步group_gain是多轴场景的关键单个轴单独看曲线都很干净七轴联动时却出现低频摆振原因就是各轴的相位裕度不一致某个轴的滞后通过机械耦合传到相邻轴。用带特殊位置分组增益的方法统一给增益能把这部分交叉影响压下来。调完之后验证方法要落到实处别只看曲线。低速段用 1% 额定速度跑全行程看有没有爬行高速段跑到设计最大速度的 80%看跟随误差峰值有没有超过允许值然后在不同姿态下各做一次碰撞测试确认触发时间和停机距离一致。这三项都过才算真的调完了。本文还有配套的精品资源点击获取
RELATED — 相关阅读

相关资讯

LATEST — 最新资讯

最新发布

TODAY — 本日精选

新闻

WEEKLY — 本周精选

新闻

MONTHLY — 本月精选

新闻