(CANopen)CiA‑402 控制字实战手册:PP/PV/PT 与 CSP/CSV/CST(含受控停机与紧急停机)
CiA‑402 控制字实战手册:PP/PV/PT 与 CSP/CSV/CST(含受控停机与紧急停机)
面向工程实践的一份速查 + 讲解:讲清楚每次下发指令时控制字(0x6040)该怎么设、每个模式要发哪些对象、受控停机/紧急停机的动作与恢复,以及**前馈(0x60B1/0x60B2)**的用法。
目录
- 快速结论
- 基本概念回顾
- 上电/使能三步曲
- 循环同步模式:CSP / CSV / CST
- 轮廓模式:PP / PV / PT
- 受控停机(Halt, bit8)
- 紧急停机(Quick stop, bit2)与恢复
- 典型 PDO 映射建议
- 总线下发示例(伪代码/报文)
- 调试与排障清单
- 常见问答
快速结论
| 模式 | 每周期需要下发的对象 | 控制字(0x6040)的常态值 | 是否需要“翻转”位 |
|---|---|---|---|
| CSP | 0x607A 目标位置(可选 0x60B1/0x60B2 前馈) | 多数设备 0x0F;有的设备要求 0x1F(bit4=1) | 不需要周期翻转 |
| CSV | 0x60FF 目标速度(可选 0x60B1/0x60B2 前馈) | 0x0F | 不需要 |
| CST | 0x6071 目标力矩/电流(可选 0x60B2 前馈) | 0x0F | 不需要 |
| PP | 0x607A 目标位置 | 依策略见下 | 需要对 bit4 做 0→1 上升沿触发 |
| PV | 0x60FF 目标速度 | 0x0F | 不需要(可用 bit8=Halt) |
| PT | 0x6071 目标力矩 | 0x0F | 不需要(可用 bit8=Halt) |
设备特定注意:有些厂商在 CSP 要求控制字长期保持 0x1F(即在 0x0F 基础上令 bit4=1);这是允许的实现差异——请以设备手册为准。
基本概念回顾
控制字 0x6040(Controlword)是主站对从站状态与动作的指令位集合。常用位:
- bit0:Switch on;bit1:Enable voltage;bit2:Quick stop;bit3:Enable operation ⇒ 四位全 1 即 0x000F,进入 Operation enabled。
- bit4:New set-point(模式相关)。
- bit5:Change set immediately(模式相关)。
- bit6:有的设备用于绝对/相对(PP 相关);也可能保留。
- bit8:Halt(受控停机)。
状态字 0x6041(Statusword)用于反馈:常见的有 Target reached(bit10)、Set-point acknowledge(bit12)等。
上电/使能三步曲
几乎所有模式,进入可运行态都需要如下序列:
- Shutdown:控制字 =
0x0006 - Switch on:控制字 =
0x0007 - Enable operation:控制字 =
0x000F
若设备在 CSP 要求长期 bit4=1,则第三步改为
0x001F。
循环同步模式:CSP / CSV / CST
循环同步(Cyclic Synchronous)模式由主站按 SYNC 周期直接下发目标量。
CSP(Cyclic Synchronous Position)
- 周期下发:
0x607A 目标位置(必要);可选0x60B1 Velocity offset、0x60B2 Torque offset作为前馈。 - 控制字:多数设备
0x0F;具体设备可能要求0x1F(bit4=1)。 - 要点:不需要像 PP 那样翻转 bit4;保持常量控制字,按周期更新位置即可。
CSV(Cyclic Synchronous Velocity)
- 周期下发:
0x60FF 目标速度;可选0x60B1/0x60B2前馈。 - 控制字:
0x0F。 - 要点:Halt/Quick stop 的减速度取自
0x6083/0x6084(仅对 Halt/Quick stop 生效)。
CST(Cyclic Synchronous Torque)
- 周期下发:
0x6071 目标力矩/电流;可选0x60B2前馈。 - 控制字:
0x0F。 - 要点:Halt/Quick stop 时的扭矩斜率由
0x6087决定。
轮廓模式:PP / PV / PT
PP(Profile Position)——需要“翻转”
PP 的典型握手机制:
- bit4 = New set‑point:当新目标准备好时,对 bit4 做 0→1 上升沿,从站锁存并开始执行;
- bit5 = Change set immediately:=1 表示立即使用新目标(打断当前段);=0 表示排队/缓冲;
- 状态字 bit12 = Set‑point acknowledge 用于确认已接收;完成时 bit10 = Target reached 置位。
两种常用时序:
① 非立即更新(bit5=0)
平时:0x0F
写目标:0x607A = <目标位置>
触发沿:控制字 0x1F(令 bit4=1)
握手后:控制字回 0x0F(bit4 清 0,不影响当前段)
② 立即更新(bit5=1)
平时:0x2F(= 0x0F + bit5)
写目标:0x607A = <新目标>
触发沿:控制字 0x3F(bit4=1)
握手后:控制字回 0x2F
许多设备支持绝对/相对切换(常见放在 bit6 或对象 0x607A 的配置);若手册标注“不支持相对”,请仅用绝对。
PV(Profile Velocity)——不需要翻转
运行:控制字 0x0F,周期更新 0x60FF
受控停机:控制字 0x10F(bit8=Halt)→ 清除回 0x0F 继续
PT(Profile Torque)——不需要翻转
运行:控制字 0x0F,周期更新 0x6071
受控降扭:控制字 0x10F(Halt),或将 0x6071=0 按 0x6087 斜率降至无扭矩
受控停机(Halt, bit8)
定义:在 Operation enabled 下,将 bit8=1(控制字 0x10F),从站按设定斜率/减速度平滑停止,不触发故障,清除 bit8 可继续运行。
- 在 CSV/PV:斜率由
0x6083/0x6084(轮廓加/减速度)决定。 - 在 CST:按
0x6087(扭矩斜率)将扭矩降至 0。
与 Quick stop 的区别:Halt 不中断状态机,恢复更快;Quick stop 会进入专门状态,恢复需重走三步曲。
紧急停机(Quick stop, bit2)与恢复
触发:在运行中清除 bit2(即把 0x0F → 0x0B;若 CSP 要求 0x1F → 0x1B)。
动作:实际减速/切断行为由 0x605A Quick stop option code 决定(常见默认为“按设定减速度停机并保持”)。速度/扭矩的斜率配置参考上节。
状态:状态字会显示 Quick stop active。
恢复流程(推荐的标准三步):
0x0006 (Shutdown)
0x0007 (Switch on)
0x000F (Enable operation) // 若设备 CSP 要求 bit4=1,则 0x001F
恢复前,为避免刚恢复就冲/拧:先把 CSV 的 0x60FF = 0、CST 的 0x6071 = 0。
典型 PDO 映射建议
实际映射以 EDS/设备支持为准,下列为最小可用的“常见组合”。
CSP(带前馈)
- RxPDO:0x6040(控制字),0x607A(目标位置),0x60B1(速度前馈,可选),0x60B2(力矩前馈,可选)
- TxPDO:0x6041(状态字),0x6064(实际位置),0x606C(实际速度,可选),0x6077(实际力矩,可选)
CSV
- RxPDO:0x6040,0x60FF(目标速度),(可选 0x60B1/0x60B2)
- TxPDO:0x6041,0x606C(实际速度),(可选 0x6064)
CST
- RxPDO:0x6040,0x6071(目标力矩),(可选 0x60B2)
- TxPDO:0x6041,0x6077(实际力矩),(可选 0x606C/0x6064)
PP/PV/PT
- PP:RxPDO 至少含 0x6040、0x607A;TxPDO 含 0x6041、0x6064/0x606C。
- PV:RxPDO 至少含 0x6040、0x60FF;TxPDO 含 0x6041、0x606C。
- PT:RxPDO 至少含 0x6040、0x6071;TxPDO 含 0x6041、0x6077。
总线下发示例(伪代码/报文)
以“发送控制字 + 目标量”为主线,忽略 SYNC/心跳等细节,帮助你在主站(SocketCAN/ROS2 等)快速落地。
1) 进入运行态(通用)
// 0x0006 → 0x0007 → 0x000F
SDO(0x6040, 0, 0x0006);
SDO(0x6040, 0, 0x0007);
SDO(0x6040, 0, 0x000F); // 若设备要求 CSP 常态 0x1F,则此处写 0x001F
2) CSP(周期位置)
// 周期任务:
PDO.Rx(0x6040) = 0x001F; // 若设备要求 bit4=1;否则 0x000F
PDO.Rx(0x607A) = target_pos[i]; // 每周期更新
// 可选前馈:
PDO.Rx(0x60B1) = vel_ff[i];
PDO.Rx(0x60B2) = tq_ff[i];
3) CSV(周期速度)
PDO.Rx(0x6040) = 0x000F;
PDO.Rx(0x60FF) = target_vel[i];
4) CST(周期力矩)
PDO.Rx(0x6040) = 0x000F;
PDO.Rx(0x6071) = target_torque[i];
5) PP 非立即(bit5=0)
SDO(0x607A, 0, target_pos);
SDO(0x6040, 0, 0x001F); // 触发沿 bit4=1
// 等待状态字 bit12=1 → 然后清除 bit4
SDO(0x6040, 0, 0x000F);
6) PP 立即(bit5=1)
SDO(0x6040, 0, 0x002F); // 平时保持 bit5=1
SDO(0x607A, 0, target_pos);
SDO(0x6040, 0, 0x003F); // 触发沿 bit4=1
// 等 ack 后
SDO(0x6040, 0, 0x002F);
7) 受控停机(Halt)
// 进入受控停机
SDO(0x6040, 0, 0x010F);
// 清除受控停机,继续运行
SDO(0x6040, 0, 0x000F);
8) 紧急停机(Quick stop)与恢复
// 触发 Quick stop:清 bit2
// 若当前 0x0F → 0x0B;若当前 0x1F → 0x1B
SDO(0x6040, 0, 0x000B);
// ……停稳后恢复:三步曲
SDO(0x6040, 0, 0x0006);
SDO(0x6040, 0, 0x0007);
SDO(0x6040, 0, 0x000F); // 或 0x001F(见设备要求)
恢复前建议:CSV 将
0x60FF=0,CST 将0x6071=0,避免恢复瞬间“冲车/拧扭”。
调试与排障清单
- 状态机卡住:检查 0x6040 位型是否走完三步;0x6041 的状态是否处于 Operation enabled。
- PP 不执行:bit4 是否产生 0→1 上升沿?bit5 策略是否与预期一致?
- CSP 不响应:是否把 0x607A 映射入 RxPDO?设备是否要求 0x1F?
- CSV 抖动/停不下:确认 0x6083/0x6084 是否合理;受控停机/Quick stop 的减速度不等于普通跟踪的限速。
- CST 打手:检查 0x6087(扭矩斜率);过大易冲击。
- 前馈无效:设备是否实现 0x60B1/0x60B2?单位/标度是否按手册标定?
常见问答
Q1:为什么有的设备要求 CSP 控制字=0x1F?
CiA‑402 并未强制 CSP 的 bit4 必须为 0 或 1。厂商可选择在 CSP 下要求 bit4=1(等价于“保持 New set‑point 置位”)。这是允许的实现差异,只要遵循设备手册即可。
Q2:PP 的 bit4 “拉回 0”会打断当前段吗?
不会。bit4 只对上升沿敏感;清零只是完成握手,不会中断正在执行的轮廓段。
Q3:Halt 与 Quick stop 的场景如何区分?
Halt 适合“可恢复的暂停/平滑停车”;Quick stop 适合“需要立即进入安全态”的紧急情况,恢复需要重走使能序列。
Q4:Quick stop 停得太猛/太慢怎么办?
调整
0x605A的选项与0x6084(配合0x6083)/0x6087的斜率,反复验证即可。
最后的建议:实现前先把运行模式(0x6060)与PDO 映射固定下来;再按本文“模式 × 控制字 × 对象”的三要素逐一核查。遇到差异,一律以设备手册为准。
更多推荐


所有评论(0)