跳到主要内容

CAN 通讯功能

本机 CAN 接口支持 Canopen SDO 数据传输协议,SDO 主要用来在设备之间传输低优先级的对象,这种数据传输跟 MODBUS 的方式类似, 即主站发出后, 需要从站返回数据响应:Client→Server/Server→Client.SDO 的基本结构。CAN 总线采用终端电阻匹配方式,需在总线两端节点的 CAN_H 与 CAN_L 之间各配置一个 120Ω 终端匹配电阻,以抑制信号反射、提高通信稳定性。总线中间节点不应增加终端电阻,否则会降低总线等效阻抗,影响通信可靠性。

SDO 的基本结构
Byte0Byte1-2Byte3Byte4-7
SDO Command specifier对象索引(Index)对象子索引(SubIndex)最大 4 字节数据

对象索引的 2 个字节,最大 4 字节数据的 4 个字节都是低位在前,高位在后排列的。
比如说对象索引为 0x606C,那么 Byte1=6C,Byte2=60。

读取参数

IdentifierDLCData
01234567
发送 SDO 报文0x600+Node_ID8发送命令字对象索引对象子索引00
接收 SDO 报文0x580+Node_ID8接收命令字对象索引对象子索引最大 4 字节数据
  • 发送命令字:均为0x40
  • 接收命令字:0x4F-接收数据为 1 个字节; 0x4B-接收数据为 2 个字节; 0x43-接收数据为 4 个字节
  • 实例:通过 SDO 方式,发送以下命令读取 1 号电机的实际位置(0x606300)
    Identifier命令字对象索引对象子索引最大 4 字节数据
    发送报文0x6010x400x630x600x000x000x000x000x00
    接收报文0x5810x430x630x600x000xD90x050x000x00
    实际位置 = 0x05D9(HEX)= 1497(DEC) DDSM350-CTCAN通讯实例

修改参数

IdentifierDLCData
01234567
发送 SDO 报文0x600+Node_ID8发送命令字对象索引对象子索引最大 4 字节数据
接收 SDO 报文0x580+Node_ID8接收命令字对象索引对象子索引最大 4 字节数据
  • 发送命令字:0x2F-发送数据为 1 个字节; 0x2B-发送数据为 2 个字节; 0x23-发送数据为 4 个字节
  • 接收命令字:0x60-发送报文发送成功; 0x80-发送报文发送失败
  • 实例:通过SDO方式,控制1号电机的轴(0x604000),首次写入0x06令电机断电松轴,随后写入0x0F使电机上电并锁轴。
    Identifier命令字对象索引对象子索引最大 4 字节数据
    首次发送报文0x6010x2B0x400x600x000x060x000x000x00
    首次接收报文0x5810x600x400x600x000x060x000x000x00
    第二次发送报文0x6010x2B0x400x600x000x0F0x000x000x00
    第二次接收报文0x5810x600x400x600x000x0F0x000x000x00
    DDSM350-CTCAN通讯实例

PDO 功能

驱动器自带简易的 PDO 功能,不需要 CAN 主站进行配置。

PDO1 报文格式
IdentifierDLCData
01234567
0x180+Node_ID8映射到对象 0x60F919(实际速度_0.001rpm)映射到对象 0x606300(实际位置)

CAN 通讯实例

实例1:读取电机实际电流 Iq
通过查阅常用对象列表中的"表 F1-3 测量数据"列表,可知"实际电流 Iq"对象地址为 0x607800,且是个 16 位有符号数。
假设当前电机实际电流为 1Arms通过单位转换[DEC]=[Arms] * 1.414 * 2048 / 15,1Arms=193(DEC)= C1(HEX)

Identifier命令字对象索引对象子索引最大 4 字节数据
主机发送报文0x6010x400x780x600x000x000x000x000x00
本机回应报文0x5810x4B0x780x600x000xC10x000x000x00

实例2:写目标速度(更精细速度命令)
通过查阅常用对象列表中的"表 F1-2 基本模式及控制"列表,可知"目标速度"对象地址为0x60FF00,且是个 32 位有符号数。
假设要实现是 150rpm 速度命令,通过公式 U[y,x]:[DEC]=([rpm] * 512 * [反馈精度]) / 1875
计算出对应的 DEC 数值, 这里[反馈精度]是 4096, [DEC]=(150 * 512 * 4096) / 1875= 167772,即十六进制为 0x28F5C

Identifier命令字对象索引对象子索引最大 4 字节数据
主机发送报文0x6010x230xFF0x600x000x5C0x8F0x020x00
本机回应报文0x5810x600xFF0x600x000x5C0x8F0x020x00

实例3:CAN PDO 通讯实例

  • 开启 PDO
    通过查阅常用对象列表中的"表 F1-5 通讯参数"列表,可知"开启 PDO"对象地址为0x470001,且是个 8 位无符号数。

    Identifier命令字对象索引对象子索引最大 4 字节数据
    主机发送报文0x6010x2F0x000x470x010x010x000x000x00
    本机回应报文0x5810x600x000x470x010x010x000x000x00
  • 从机将主动上报实际速度和实际位置
    如果电机实际速度为 10rpm(转换 HEX 为 2710),实际位置为 1000 DEC(转换 HEX 为 3E8)
    每隔禁止时间(默认 10ms)本机将主动发送

    Identifier命令字对象索引对象子索引最大 4 字节数据
    本机主动发送报文0x1810x100x270x000x000xE80x030x000x00