电话/手机:联系客服
用汇川 SV660N 配合倍福(Beckhoff)TwinCAT3 做多轴插补运动。
伺服走 EtherCAT 总线,模式为 CSP(周期同步位置模式),周期 1ms。
单向匀速运行、或者做平滑的梯形加减速时,伺服跟踪非常完美。
故障点: 只要插补轨迹走到正反转交界点(比如正向 100mm/s 减速到 0,然后瞬间反向加速),在转速刚好过 0Hz 的那一毫秒,SV660N 驱动器必报 E200.0(伺服过速度)跳闸!
PLC 主站发出的位置指令波形用 Scope 抓过,平滑无突变。
为什么从正转切到反转的 0 速度瞬间,伺服内部算法会误判自己‘超速’了?是不是汇川在 CSP 模式下的速度前馈(Velocity Feedforward)在过零点有 Bugs?
优质评论内容
亲,这个不要先扣“汇川 CSP 速度前馈 Bug”。
我更倾向于:
SV660N 不是在 0Hz 瞬间真的超速了,而是在正反转交界那 1ms,驱动器内部用“位置差分”算出来的瞬时速度出现了尖峰。E200.0 抓到的是这个瞬时速度估算尖峰,不一定是电机持续超速。
SV660N 的 EtherCAT 通讯采用 CiA402 驱动协议,支持 CSP、CSV、CST 等同步模式;CSP 本质就是主站周期性给目标位置,驱动器在内部完成位置/速度/电流环控制。 Beckhoff 对 CSP 的说明也类似:CSP 下通过周期变量 Target position 给定位置,NC 负责生成位置设定值并传给驱动。
一、位置曲线“平滑”,不代表速度/加速度/加加速度平滑
你 Scope 里看到位置指令平滑,这只能说明:
位置 P(t) 连续
但驱动器真正敏感的是:
速度 V = 位置差分
加速度 A = 速度差分
jerk = 加速度差分
正向 100mm/s 减速到 0,然后立刻反向加速,如果没有足够的 S 曲线或零速停顿,位置曲线看起来可能很圆滑,但在过零那一拍:
速度从 +很小
变成 0
再变成 -很小
加速度方向突然翻转
jerk 很大
TwinCAT NC 在轴启动时可以按速度、加速度、减速度、jerk 生成动态曲线,但前提是你的插补/PLC 轨迹确实使用了这些 jerk 限制,而不是自己每 1ms 塞一串“看起来平滑”的位置点。Beckhoff 文档也说明,PTP 轴启动时会基于 acceleration、deceleration、jerk 等参数生成动态 profile。
二、1ms 周期下,一个位置差分尖峰就足够触发“过速度”
CSP 下驱动器通常会根据连续两个周期的目标位置、实际位置来估算速度。
周期是 1ms,也就是:
v[k] = (position[k] - position[k-1]) / 0.001s
所以只要某一拍位置差分异常,就会被放大 1000 倍。
例如:
正常:
1ms 内位置变化 0.1mm
=> 速度 100mm/s
异常:
某一拍位置差分突然变 2mm
=> 速度 2000mm/s
这时候机械轴可能只“抽”了一下,肉眼根本看不出来,但驱动器内部速度监控已经看到一个过速度尖峰。
所以这个故障非常符合:
正反转交界
↓
某一拍位置差分 / 速度估算 / 前馈量异常
↓
SV660N 判断过速度
↓
E200.0
三、第一嫌疑:你的轨迹在过零点不是 S 曲线,而是“加速度硬翻”
单向匀速和平滑梯形加减速都没事,因为它们没有在同一位置附近反复正反切换。
正反转交界最凶的是:
正向减速
↓
速度到 0
↓
反向加速
如果中间没有零速停顿,且加速度从 -A 立刻变成 -A 或从制动段切到反向加速段时发生突变,驱动器内部会看到一个很大的动态冲击。
验证很简单:
在 0 速度处停 20~50ms
再反向加速
如果这样 E200.0 消失,基本就不是 EtherCAT 通讯问题,也不是电机编码器问题,而是过零动态太硬。
四、第二嫌疑:实际 PDO 原始目标位置有一拍跳变,Scope 没抓到
TwinCAT Scope 里看“NC 设定位置”平滑,不等于驱动器实际收到的 0x607A Target position 原始 DINT 一定平滑。
一定要同时抓:
NC SetPosition
NC SetVelocity
NC SetAcceleration
PDO 0x607A Target position 原始值
PDO 0x6064 Actual position 原始值
PDO 0x606C Actual velocity
PDO 0x60F4 Following error
Statusword
Error code
WcState / EtherCAT Working Counter
DC Sync jitter
尤其要注意 0x607A 必须按有符号 32 位 DINT看。
如果 PLC 或中间变量用了 UDINT / UINT,在正负方向、零点、模数边界附近可能出现这种灾难:
真实想发:-10 counts
错误解释:4294967286 counts
在工程单位曲线上可能被你缩放/滤波后看不明显,但驱动器端会认为目标位置瞬间飞走,速度差分直接爆表。
五、第三嫌疑:位置单位太粗,过零点出现 +1、0、-1 计数抖动
如果电子齿轮、TwinCAT scaling、drive scaling 配得不合适,1ms 周期下低速过零时可能出现:
+2 counts
+1 count
0 count
-1 count
-2 counts
这本身正常,但如果速度估算滤波、前馈、插补周期不匹配,就可能在过零点形成锯齿速度。
表现就是:
单向跑没问题
平滑加减速没问题
一过 0 速度就炸
可以临时把轨迹速度、加速度都降到原来的 1/5,看还会不会 E200.0。
如果降低后正常,说明不是 Bug,而是过零点的离散化和动态余量不够。
六、第四嫌疑:速度前馈/加速度前馈在过零点符号或比例不对
你怀疑速度前馈,这个方向可以查,但不一定是汇川 Bug,更可能是配置或映射问题。
重点确认是否映射或写入了这些对象:
0x60FF Target velocity
0x60B1 Velocity offset
0x60B2 Torque offset
厂家扩展速度前馈
厂家扩展转矩前馈
CSP 正常只靠周期目标位置就能跑。如果你同时给了速度前馈、转矩前馈,过零点最容易出事:
位置目标已经在减速到 0
但速度前馈还保持正向
或提前切成反向
或比例单位错了
结果驱动器内部就是:
位置环:让我停住
前馈:让我猛推
速度估算:出现尖峰
↓
E200.0
Beckhoff 的加速度前馈说明里也强调,前馈需要在正负方向、加速/减速时严格对称调整,否则跟随误差会不对称。 你的问题刚好发生在正反方向切换点,所以要先把所有前馈关掉做基准测试。
七、第五嫌疑:EtherCAT DC 同步在过零点被放大
如果 EtherCAT 周期偶发抖动一拍,在匀速段可能只是很小的速度波动;但在正反转交界,速度、加速度都在快速变化,一拍延迟就可能变成明显的差分尖峰。
查这些:
TwinCAT Task jitter
EtherCAT DC Sync0
WcState
Lost frames
Drive PDO update time
NC task cycle = EtherCAT cycle = 1ms 是否一致
Beckhoff CSP 说明里列出的周期支持 250µs、500µs、1ms 等同步周期,关键是主站与从站必须按这个周期稳定交换目标位置。
现场最快破案步骤
1. 先加零速停顿
正向 100mm/s
↓
减速到 0
↓
停 20~50ms
↓
反向加速
判断:
不再 E200.0:
过零动态/jerk/前馈问题
仍然 E200.0:
继续查原始 PDO、实际速度、编码器反馈
2. 关闭所有前馈
临时关闭:
Velocity Feedforward
Acceleration Feedforward
Torque Feedforward
0x60B1 Velocity offset
0x60B2 Torque offset
厂家扩展前馈
只保留 CSP 目标位置。
判断:
关闭前馈后正常:
前馈符号、比例、延时或过零处理有问题
关闭前馈仍报:
目标位置差分、实际反馈速度或同步问题
3. 抓原始 PDO,不要只看工程单位
Scope 里一定要抓:
0x607A Target position 原始 DINT
0x6064 Actual position 原始 DINT
0x606C Actual velocity
0x60F4 Following error
0x6041 Statusword
Drive error code
然后自己算:
TargetDelta[k] = TargetPos[k] - TargetPos[k-1]
ActualDelta[k] = ActualPos[k] - ActualPos[k-1]
如果在报错前一拍,TargetDelta 或 ActualDelta 出现异常大值,过速度就是它触发的。
4. 检查符号类型和模数轴设置
重点查:
Target position 是否 DINT
Actual position 是否 DINT
PLC 中间变量有没有 UDINT / UINT
轴是否被配置成 modulo axis
位置是否在 0 / ±边界附近
TwinCAT scaling 是否和驱动器电子齿轮一致
如果过零点附近存在 正小数 → 负小数,任何无符号转换都会很危险。
5. 把加速度和 jerk 降低 5~10 倍
速度不变
加速度降到 1/5
jerk 降到 1/10
如果立刻正常,说明驱动器不是误判,而是过零处动态太硬。
6. 缩短周期测试
如果主站和驱动器允许,把 CSP 周期从:
1ms
改成:
500µs 或 250µs
更短周期下,每拍位置增量更小,速度差分尖峰会减轻。Beckhoff CSP 支持这些 2ⁿ × 125µs 的周期档位,但实际能不能用,要看驱动器和整套 EtherCAT 负载。
我会优先判断的原因排序
第一:
过零点没有真正 jerk-limited,速度看着平滑,但加速度/jerk 有尖峰。
第二:
0x607A 原始目标位置在正负切换处有一拍跳变,Scope 工程单位没看出来。
第三:
DINT/UDINT 或 modulo 处理错误,零点附近出现符号翻转/回卷。
第四:
Velocity feedforward / torque feedforward 在过零点符号、比例或延时不一致。
第五:
1ms 周期下位置差分太粗,实际速度估算在零速附近产生尖峰。
第六:
EtherCAT DC 同步或任务 jitter 在动态反向瞬间被放大。
一句话:
这不是汇川在 0Hz 误判超速,而是 CSP 在 1ms 周期下靠位置差分推导速度。正反转交界处只要目标位置、实际位置、前馈或同步有一拍不连续,内部速度估算就会瞬间爆表。先加零速停顿、关前馈、抓 0x607A/0x6064/0x606C 原始 PDO,再查 DINT 符号、modulo 和 jerk 限制。