《PDxxS1_CANopen协议控制教程_V1.0》第3-5章
3,CANopen 通信对象
在 CANopen 网络中,不同类型的数据通过不同的 通信对象(Communication Object) 进行传输。每种通信对象都有固定的 CAN ID 计算规则 和 用途定义。
CANopen 中主要通信对象:

表3.1 canopen 通信对象
其中PDO和SDO的关键区分(核心实战要点):
PDO:无应答、广播式传输,通信延迟极低,专注于实时性,适合传输高频变化的控制指令(如目标位置、速度)和运行状态(如实际位置、速度),是运动控制的核心通道;
SDO:点对点应答式传输,通信延迟高于 PDO,但可靠性极高,适合传输非实时性的参数(如电机加速度、减速度、故障阈值),支持参数的读写与校验,确保参数配置的准确性。
3.1 CAN ID 计算规则
PDxxS1 步进驱动器采用 CANopen 标准的 11bit 标准 ID(CAN 2.0A),用于标识不同类型的 CANopen 报文,确保主从站之间的通信准确无误。11bit CAN ID 的核心构成的是“功能码 + 节点ID(NodeID)”,其中功能码用于区分报文类型(如 SDO、PDO、NMT),节点ID用于区分同一网络中的不同从站设备。
计算方式:
CAN ID = 功能码(高4位) + NodeID(低7位)
说明:11bit CAN ID 的取值范围为 0x000~0x7FF,其中高4位(bit10~bit7)为功能码,用于定义报文的通信对象类型;低7位(bit6~bit0)为节点ID(NodeID),取值范围为 0x01~0x7F(0x00 为广播地址,仅用于 NMT 广播报文),同一 CANopen 网络中,每个从站的 NodeID 必须唯一,避免 ID 冲突导致通信异常。
PDxxS1 驱动器常用功能码与 CAN ID 对照表(严格遵循 CiA 301 标准,适配 CiA402 运动控制场景):

表 3.3.1 CANID计算规则
3.2 NMT(网络管理)
NMT 用于管理 CANopen 网络中各节点的 运行状态,例如:
启动节点(Start Node)
停止节点(Stop Node)
进入预运行状态(Pre-operational)
复位节点(Reset Node)
NMT 报文具有以下特点:
CAN ID 固定为 0x000
数据长度固定为2
由主站发送
所有从站均可接收
数据格式:

1,CAN ID:固定为 0x000(广播地址),所有从站均会接收该报文;
2,数据长度:固定为 2 字节;
3,Byte0:NMT 命令码;
4,Byte1:目标 NodeID(0x00 表示广播所有从站);
5,无应答机制,主站发送命令后,不接收从站的响应报文,从站执行命令后,通过 Heartbeat 报文反馈自身状态变化。
3.2.1 NMT命令码
PDxxS1 驱动器支持的常用 NMT 命令(严格遵循 CiA 301 标准)

表3.2.1.1 NMT命令码介绍
操作示例(启动 NodeID=1 的 PDxxS1 驱动器):
主站通过发送 NMT(Network Management)启动命令,可将指定节点切换至 perational(运行)状态。示例如下:

1,数据段:01 01(共 2 字节)
Byte0(0x01):Start Node(启动节点)
Byte1(0x01):目标节点 ID
2,执行效果:NodeID=1 的驱动器接收命令后,从当前状态切换到 Operational 状态,可接收主站下发的 PDO 控制指令,准备执行运动操作;其他 NodeID 的驱动器因目标 NodeID 不匹配,不执行任何操作。
补充说明:NMT 命令的执行结果可通过驱动器的 Heartbeat 报文验证,如启动节点后,驱动器的 Heartbeat 报文数据段会反馈 Operational 状态(0x05)。
Heartbeat 状态反馈
节点启动后,可通过 Heartbeat 报文检测状态。

表3.2.1.2 心跳包返回数据说明
3.3 PDO(过程数据对象)
PDO 用于 实时传输控制数据和状态数据,是 CANopen 运动控制中最核心的数据通信方式。
PDO 具有以下特点:
传输实时性高
无协议确认机制
数据长度为0 ~ 8 字节
PDxxS1 驱动器常用 PDO:

3.3.1 常用PDO介绍
3.4 SDO(参数访问)
SDO 用于访问 CANopen 设备 对象字典(Object Dictionary)。主要用于:
参数读取
参数写入
设备配置
SDO的ID说明

表3.4.1 SDO的ID说明
4,CiA402 运动控制规范
CiA 402 是 CANopen 运动控制设备的标准设备规范,用于统一定义驱动器的 状态机、控制字、状态字及运动控制接口。
PDxxS1 步进电机闭环驱动器完全兼容 CiA402 标准。
常用对象字典如下:


表4.1 常用对象字典
常用控制字(Controlword)及状态字(Statusword)关系

表4.2 控制字和状态字关系说明
CiA402 状态机
驱动器状态转换遵循 CiA402 标准状态机。
主站通过向 Controlword(0x6040) 写入相应控制字,驱动器根据当前状态执行状态转换,并通过 Statusword(0x6041) 返回当前状态。

图4.1 状态机
只有在 Operation Enabled 状态下,驱动器才允许执行运动控制。
5,驱动器使能流程
根据 CiA402 标准,驱动器必须按照以下顺序完成使能(以 NodeID=1 为例):
Step1:Shutdown(准备状态)

1,数据段解析:
第 1 字节(0x2B):SDO 命令字节,0x20 表示“写数据”,0x0B 表示数据长度为2 字节(Controlword 为 16 位,在实际使用中,可按以下方式简单理解:

表5.1 SDO命令字含义
a) 第 2~3 字节(0x40 0x60):对象字典索引,0x6040(Controlword);
b) 第 4 字节(0x00):对象字典子索引,0x00(Controlword 的唯一子索引);
c) 第 5~8 字节(0x06 0x00 0x00 0x00):写入的数据,0x0006(Controlword 的值);
2,核心作用:向 Controlword(0x6040)写入 0x0006,触发驱动器从 Switch On Disabled 状态切换到 Ready To Switch On 状态,完成电机启动前的准备工作。
l Step2:Switch On(上电)

1,数据段解析:
a) 第 1 字节(0x2B):SDO 写命令;
b) 第 2~3 字节(0x40 0x60):对象字典索引 0x6040(Controlword);
c) 第 4 字节(0x00):子索引 0x00;
d) 第 5~8 字节(0x07 0x00 0x00 0x00):写入 Controlword 的值为 0x0007;
2,核心作用:向 Controlword 写入 0x0007,触发驱动器从 Ready To Switch On 状态切换到 Switched On 状态,电机完成上电,处于待命状态。
Step3:Enable Operation(运行使能)

1,数据段解析:
a) 第 1 字节(0x2B):SDO 写命令;
b) 第 2~3 字节(0x40 0x60):对象字典索引 0x6040(Controlword);
c) 第 4 字节(0x00):子索引 0x00;
d) 第 5~8 字节(0x0F 00 00 00):写入 Controlword 的值为 0x000F;
2,核心作用:向 Controlword 写入 0x000F,触发驱动器从 Switched On 状态切换到 Operation Enabled 状态,此时驱动器已完全使能,可接收主站下发的 PDO 运动控制指令,电机能够响应运动操作。
重要说明:
1. 电机运行前必须完成使能流程
在电机开始运动之前,必须按照规定执行三步使能流程(Enable Sequence),否则驱动器无法进入可运行状态。
2. 使能流程仅在 NMT 处于 Start Node 状态时有效
只有当 CANopen 网络管理(NMT)状态为 Operational(Start Node) 时,也就是心跳回复“0x05”时,才允许执行使能流程;在其他状态下写入 Controlword 将不会生效。
3. 使能步骤必须按顺序执行
三个使能步骤必须严格按照规定顺序发送,否则驱动器可能无法完成状态切换,表现为 使能失败或驱动器无响应。
4. 故障状态处理
当驱动器进入 Fault 状态(如过流、堵转、过压等)时,必须先执行 Fault Reset(故障复位),然后重新按照使能流程完成电机使能。
5. 停止驱动器的方法
可通过以下方式停止驱动器运行:
l 发送 NMT Stop Node 命令,使节点进入 Stopped 状态
或向 Controlword 写入对应的停止控制指令,使驱动器退出运行状态
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/70040860/viewspace-3174942/ ,如需转载,请注明出处,否则将追究法律责任。