点动松开写 6040=7?CiA402 里"停车"有三种写法,只有一种还出力矩
程序只有两行,看着挑不出毛病。问题就出在这两行太短了
垂直轴点动,程序是这样写的:
按下:6040h 写 15
松开:6040h 写 7
往上往下都一样,60FF 一直挂着设定速度不动
这两行看着很规矩,而且在水平轴上先跑过,效果挺好:按下就走,松开就停,停得住也不冲。于是原样搬到了垂直轴。
搬到垂直轴,松开就往下溜。
📌 15 和 7 之间只差一个 bit,而那个 bit 决定的不是"动不动",是还出不出力矩。
松手那一刻,你要的是"停止运动",驱动器收到的是"退出运行"。在水平轴上这两件事看不出区别,搬到垂直轴就全露出来了。
⚠️ 还有一条事实先记着,它跟"会溜"同样重要:另外一条垂直轴,程序一字不改,却不滑。这条能告诉你真正的最后一道防线是什么,第四节专门讲。
· · ·
🔍 一、15 和 7 之间,差的是 bit3
先把 6040h 这几个位摆清楚:
| 位 | 符号 | 含义 |
|---|---|---|
| bit 0 | SO | Switch on,合闸 |
| bit 1 | EV | Enable voltage,允许上电 |
| bit 2 | QS | Quick stop,1 表示不快停 |
| bit 3 | EO | Enable operation,运行使能 |
| bit 7 | FR | Fault reset,故障复位 |
| bit 8 | HALT | 临时停止,不退出运行 |
15 =0x000F,bit0 到 bit3 全 1。
7 =0x0007,bit0 到 bit2 是 1,bit3 变成了 0。
bit3 是 Enable operation,也就是运行使能。清掉它,触发的是 CiA402 状态机里的转换 5:
Operation enabled(0x0027)→ Switched on(0x0023)
这个状态的含义,技术资料里通常写成Energized, no torque:功率级还通着电,但电机不出力矩。
⚠️ 这就是关键。很多人把 7 理解成"关掉运动、电机还站着",实际它是退出运行、力矩归零。功率级带电和能出力矩是两回事。
所以在垂直轴上,松开写 7 的真实效果是这样的:电机先减一阵子速,减到零之后彻底不出力。从这一刻起,谁托住这根轴,就不是电控说了算了。
🛑 二、减速那段归谁管?看 605Ch,别去调 Pr5.06
松手之后确实会减速,不然就不是溜一点而是直接砸下来。但减速由谁执行,是有分支的。
松下 A6 手册"减速停止时序"那一节写得很明白:
伺服 OFF 的时序由 605Ah(Quick stop option code)、605Bh(Shutdown option code)、605Ch(Disable operation option code)设置。这些对象为 0 时,走伺服(MINAS A6)侧的减速功能;非 0 时,走 CoE(CiA402)侧的减速功能。
而 A6 的出厂初始值是:
| 对象 | 出厂值 |
|---|---|
| 605Ah Quick stop option code | 2 |
| 605Bh Shutdown option code | 1 |
| 605Ch Disable operation option code | 1 |
| 605Dh Halt option code | 1 |
📌605Ch = 1,非 0,所以走的是 CiA402 侧:按 slow down ramp 减速(速度模式下用的就是 6084 减速度),减完之后转 Switched on。
⚠️ 这里有个很实在的坑:既然走的是 CiA402 侧,A6 自己的 Pr5.06(伺服 OFF 时序)在当前配置下根本不参与。不少人照着"垂直轴伺服 OFF 时序"去调 Pr5.06,改完没反应,原因就在这儿,那条路压根没走。
但更关键的不是减速走哪条路,而是终点都一样。
不管是 CiA402 侧的斜坡还是 A6 侧的减速,终点都是"力矩没了"。减速只是让它滑得慢一点、滑得晚一点,不会让它停住。停住需要的是力矩,或者抱闸。
顺带说一句那个常被误用的 DB:如果你把 605Ch 改成 0,才会走 A6 侧的 Pr5.06,出厂值 0 是"减速中动态制动,停止后动态制动"。动态制动的制动力正比于转速,转速到零,制动力就是零,同样托不住静止的负载。所以那条路也不是解。
· · ·
📊 三、CiA402 里"停车"有三种写法,只有一种还出力矩
这张表是整篇最该存下来的部分。
| 写法 | 6040h | 状态 | 力矩 | 怎么停由谁定 |
|---|---|---|---|---|
| Halt | bit8 = 1,即0x010F | 保持 Operation enabled | ✅ 保持 | 605Dh(A6 出厂 1) |
| Disable operation | bit3 = 0,即0x0007 | 转 Switched on | ❌ 撤掉 | 605Ch(A6 出厂 1) |
| Quick stop | bit2 = 0 | Quick stop active | ❌ 多数也撤 | 605Ah(A6 出厂2) |
⚠️ 第三条要说清楚,因为很多人以为快停是安全的:605Ah = 2 在 CiA402 里的定义是"按 quick stop ramp(6085h)减速,随后转 Switch on disabled"。也就是说快停停完之后同样断力矩,垂直轴用快停照样失去保护。
三种写法里,只有 Halt 是"停下但力矩还在"。Halt 不触发状态转换,驱动器停在 Operation enabled,只是把运动停了。这正是点动松开需要的语义。
· · ·
🧩 四、同样是 6040 写 7,为什么另一条垂直轴不滑
这条事实说明一件事:撤掉力矩是溜车的必要条件,不是充分条件。
力矩归零之后,负载动不动,只看一组对比:重力顺着传动链折算过来的负载转矩,有没有超过传动链自身的静阻力矩。
超过了,轴被自己驱动着转起来,往下滑
没超过,摩擦把它卡在原地,看上去"没事"
所以两条垂直轴程序一模一样、结果却不同,差别一定在机械侧。按概率排,就这三种:
| 差别 | 为什么不滑 | 怎么确认 |
|---|---|---|
| 有抱闸,且时序对 | 机械抱闸在力矩归零之前或同时夹紧 | 查 BRK-OFF 输出时序,或者松手时听有没有抱闸动作声 |
| 传动链能自锁 | 梯形丝杠或蜗轮蜗杆,负载反推不动 | 看丝杠类型和减速机型号 |
| 静摩擦够大 | 负载轻,导轨或减速机的阻力吃掉了重力转矩 | 断电后用手盘一下,或者短行程实测 |
自锁这条值得单独讲,因为它有硬判据
滑动螺旋副的自锁条件是导程角小于等于摩擦角,写成式子就是tan λ ≤ μ,其中λ = arctan(导程 ÷(π × 中径))。
换算成临界摩擦系数更直观:μ 临界 = 导程 ÷(π × 中径),实际摩擦系数大于它就锁得住。
| 中径 | 导程 5 mm | 导程 10 mm | 导程 20 mm |
|---|---|---|---|
| 20 mm | 0.0796 | 0.1592 | 0.3183 |
| 30 mm | 0.0531 | 0.1061 | 0.2122 |
| 40 mm | 0.0398 | 0.0796 | 0.1592 |
0.003 ~ 0.01
滚珠丝杠的摩擦系数,滚动摩擦
0.10 ~ 0.30
梯形丝杠的摩擦系数,滑动摩擦
⚠️滚珠丝杠永远不会自锁。它靠滚珠把滑动变成滚动,摩擦系数只有 0.003 到 0.01,而上表临界值最小的也有 0.04 左右,差一到两个数量级。这正是它又快又省力的原因,也正是它在垂直轴上必须配抱闸的原因。
梯形丝杠反过来了,效率只有 20% 到 50%,效率低是缺点,能自锁是优点。
⚠️自锁只能当第二道防线,不能当第一道。那个判据里的 μ 是整个计算中最不可靠的数:新润滑脂会降低它,螺纹磨合之后会降低它,振动工况下有效摩擦系数甚至可以趋近于零,螺栓在振动下会自己松就是同一个道理。真有坠落风险的位置,要靠棘轮、制动器、蜗轮减速机或者机械挡块这类正向保持装置,不能把安全押在摩擦上。
📌 所以这次的排查可以很直接:把两条垂直轴的机械配置摊开对比,差别落在哪一项上,原因就在哪一项上。抱闸、自锁、还是负载与摩擦,一次就能定。
· · ·
✅ 五、怎么改(三种改法,按改动量排)
第一种,改动最小:6040 一直写 0x000F,松开时只把 60FF 写 0
这是最省事也最正确的点动写法。使能全程不动,速度指令归零,速度环自己维持零速,伺服锁定把重力顶住。
按下:6040 写 15,60FF 写设定速度
松开:6040 还是 15 不动,60FF 写 0
第二种,规范写法:松开时 6040 写 0x010F,置 bit8
Halt 语义清晰,减速按 605Dh(出厂 1,slow down ramp)走,停在 Operation enabled,力矩不撤。
⚠️ 但必须配一个动作:Halt 期间要把 60FF 也写成 0。Halt 只是把运动停住,60FF 里那个设定值还在,一旦清除 Halt 位,轴会立刻按原速度冲出去。
第三种,确实需要断使能的场合:把顺序补完整
①60FF 写 0,等 606Ch(实际速度)真正到零
②确认零速之后再夹紧抱闸
③抱闸确认夹住,最后才写 7
反过来的话,中间那段窗口里,轴是纯负载。
⚠️另外那个"60FF 不动"的习惯建议改掉。现在松开时 60FF 还挂着设定速度,全靠 605Ch 的斜坡兜着。哪天 605Ch 被改成 0、或者 6084 被人调大,就是从设定速度直接断力矩,垂直轴直接掉。留着设定速度松手,是把安全押在一个选项码的出厂值上。
📏 六、那"行程越长滑越多"和"向下不滑"呢
主因已经定了,这两条是次要因素,但也别扔掉,它们能帮你确认有没有第二处毛病。
行程越长滑越多。点动虽然是恒速的,从 0 加速到设定转速仍然需要距离。按 2000 r/min、加速度 30000 r/min/s、导程 10 mm 算,要走11.11 mm才到顶。在这之前,行程越短,松手那一刻速度越低,减速段越短,后面那一段自由滑行的起点也越低。
11.11 mm
加速到 2000 r/min 需要走过的距离
67 ms
按 6084 从 2000 减到 0 的时间
🎯判别法:继续加长行程,滑量饱和→ 是加速段效应,改完程序就该消失;滑量还在线性涨→ 是位置相关外力(拖链、线缆、气管悬挂重量随高度变化,或者导轨某段阻力不同),那得去查机械,改程序治不了。
向下不滑,先别当结论。向下运行时轴本来就在往下走,松手后那一段下滑会被当成"多走了一点",方向一致,肉眼分不出来。
验证办法:用同一把尺子量两个方向。不看最终停在哪,只看速度归零之后那 1 秒里 6064h 还在不在变。如果向下其实也在滑,那这条观察就不成立,只是你没看见。
· · ·
🔧 七、根治清单
改程序,这是主要的。6040 全程保持 0x000F,松开只把 60FF 写 0
或者走 Halt:松开写
0x010F,同时把 60FF 归 0确实要断使能的,补齐"零速 → 夹紧抱闸 → 写 7"的顺序,别反过来
回读确认:松开后状态字应该一直稳在 0x0027。如果变成 0x0023,说明力矩还是被撤了
别去调 Pr5.06,当前 605Ch = 1 走的是 CiA402 侧,那条路没生效
断电场景另配:Pr5.10 设 4 到 7 + Pr6.10 bit10 = 1 + Pr6.51 非零(这是报警落下防止,跟正常松手是两条路)
还有个高频混记顺手纠正:Pr1.00 是位置环增益(单位 0.1/s),Pr1.01 才是速度环增益(单位 0.1 Hz),Pr1.02 是速度环积分时间常数(单位 0.1 ms)。把 Pr1.00 当速度环比例增益调,调的其实是位置环。
⚠️ 如果改完还想动 Pr1.02,注意它属于会被自动调整接管的参数。现场那组 Pr1.00 = 3050、Pr1.02 = 50 落在 A6 刚性表第 22 档上,说明当前是自动调整在管。要手动调,得先把 Pr0.02 设成 0 退出自动调整。另外自动调谐结束30 分钟内断电结果不保存,收工前手动写一次 EEPROM。
📈 八、波形怎么确认
状态字 6041h 是第一证据。松开的那一瞬间开始采,连采几百毫秒:
停在
0x0027→ 力矩还在,改对了跳到
0x0023→ 进了 Switched on,力矩没了,还是老样子
转矩曲线看松手后的形状:减速期间应该有转矩,速度到零的那一刻转矩掉下去,紧接着位置曲线开始走。掉下去的那个点,就是滑行的起点。
位置曲线看速度归零之后还有没有台阶,有台阶说明窗口还在。
⚠️ 读波形前先做一件事:单独选中某一个测量项,看界面底部的实时数值,别直接读纵轴刻度。PANATERM 右侧纵轴经常是多个物理量共用一套刻度,把转矩的刻度当速度读,很容易得出"实际速度比指令还高"这种结论。
· · ·
写在最后
这个故障的根子不在增益,不在机械,也不在重力补偿。
它在一行只有两个取值的程序里:6040 写 15 还是写 7。
15 和 7 之间差的是 bit3,bit3 是运行使能,运行使能决定电机出不出力矩。垂直轴松手之后还能不能站住,就看那一刻还有没有力矩。
CiA402 给"停车"留了三种写法,只有 Halt 是停下但力矩还在。
15 / 7 这对组合之所以用得顺手,是因为它在水平轴上从来不出问题。水平轴没有外力持续推着它,断掉力矩之后摩擦会让它停下,"断力矩"和"停下来"在水平轴上是同一件事。所以水平轴测不出这个 bug,它只会帮你在这段程序上盖一个"验收通过"。
而另一条垂直轴程序一字不改却不滑,那是机械在替你兜底。兜不兜得住,跟程序没关系,跟丝杠类型、有没有抱闸、负载多重有关系。兜住了是运气,兜不住就是事故,别把这两者的差别交给运气。
❗ 最后一句安全的:改完先跑短行程,观察松手后的下滑量和机械冲击,确认没问题再放大行程。要长期静止或者断电,抱闸时序必须单独验收。
觉得这篇有点用,点个赞、点个在看,也转给正在跟垂直轴较劲的同事。
关注「老王的工控笔记」,现场踩过的坑,写下来就不算白踩。
#伺服调试 #垂直轴 #松下 A6 #CiA402 #控制字 #6040h #Halt #点动 #溜车 #EtherCAT #滚珠丝杠 #自锁 #抱闸