canopen介绍:
CAN提供所有网络管理服务和消息传递协议,但没有定义对象的内容和正在通信的对象的类
类型(它只定义了how,没有定义what ),这正是CANopen的切入点。 CANopen的核心概念是设备对象目录(od )。 CANopen通信可以通过目标词典(OD )访问驱动器的所有参数。
can的数据帧结构:
canopen基于can帧详细地分配了COB_ID和数据字段的使用方法
通常来说,帧ID是COB_ID,cob _ id (11比特)=功能码4比特(node_id ) 4比特,这使得理论上can能够有最多127个节点但是,在实际的APP应用中,最大节点的数目将取决于所使用的CAN收发器的性能。
功能代码说明:
刚接触canopen的时候对功能码不太了解。 简单来说,功能代码指示了每个can帧的作用。 是SDO还是PDO? 是TPDO还是RPDO? 例如:
can帧ID SDO标准结构:
600h Node_ID :从主站向从站580h Node_ID :从站返回主站123 can帧ID PDO标准结构:
tdo:180 hnode _ IDR PDO :200 hnode _ id 280 node _ id 300 hnode _ id 380 hnode _ id 480 node _ id 500 hnode _ id 11110
每个PDO都通过两个对象(通信参数和映射参数)写入对象词典中。
PDO通信参数表示使用哪个COB-ID、传输类型、无效时间和定时时间;
PDO映射参数用于设置PDO消息中数据的映射关系,并确定要传输的数据在CAN消息数据字段中的位置。 通过该参数,PDO的生产者和消费者可以知道发送了什么样的信息。
PDO最多可以映射四个对象。
下面从量上详细介绍了常见的子协议区域是如何定义的。
对象词典中公共子协议区域的索引为1000-1FFFh。 其中
1400-15FFh设置RPDO通信参数1600-17FFh设置RPDO映射参数1800-19FFh设置TPDO通信参数1A00-1BFFh设置TPDO映射参数接着,以表格式更直观地显示需要操作PDO配置的位置
表中金额参数对应请参考对象词典通用子协议区域。
PDO映射流程:
1、使能PDO的映射参数(1600 h或1601 h或1A00 h或1A01 h )子索引0的内容为0;
2、修改PDO兼容映射参数(1600 h或1601 h或1A00 h或1A01 h )子索引1~4的内容进行映射
数据;
3、设置启用PDO的映射参数(1600 h或1601 h或1A00 h或1A01 h )子索引0的内容是合法的
数字(此PDO映射的对象数)。
4、PDO映射完成。
PDO有几种传输方法。
同步(通过接收SYNC对象进行的同步(周期)传输由设备子协议(每1~240条SYNC消息触发异步)中定义的对象特定事件触发。 1234
一个PDO可以指定禁止时间。 也就是说,定义两个连续PDO传输的最小间隔时间,并且取决于高优先级信道
信息数据量过大,总是占用总线,其他低优先级数据无法与总线竞争的问题。 禁止时间为16位无
符号整数定义符号整数的定义,单位为100us。
PDO可以指定事件定时周期,在超过定时时间后,可以启动PDO转发(例如
位)。 事件周期由16位无符号整数定义,单位为1ms。
下面通过示例说明构成PDO的具体操作。
要使用SDO将单个RPDO映射设置为6040h,请执行以下步骤: ()假设装置的节点ID为10 ) ) ) ) ) ) ) ) ) ) ) ) )。
60a2f 00160000000000//rpdo1stop 60 a 2300160110004060//6040 h,长度为16个字节60a2f 0016000100000//rpdo1enable
PDO通信参数的设定
PDO1(发送)是异步周期型transmission_type ) 1800h:02h )=FF h
60A 2F 0018 02 FF 00 00 00
禁止时间2ms(20100us ) inhibit_time ) 1800h:03 )=14h
60A 2F 00 18 03 14 00 00 00
周期时间10ms(101ms ) event_time ) 1800h:05h )=0A h
60A 2F 00 18 05 0A 00 00 00
这样就完成了PDO。
此外,还必须配置RPDO的COB_ID映射。 否则,就不知道将此帧数据发送到哪个节点进行使用。
60A 23 00 14 01 0A 02。
PDO配置完成后,需要重置通信(Reset Communication )才能使配置生效。 NMT管理:
00 82 0A //复位节点号为a的驱动器通信
重新开始通信
00 01 0A ////有效节点a
这样就可以在帧id20a的RPDO中配置电机6040 (控制字)。 例如,使能马达:
601 2B 40 60 00 06 00 00 00 //设定6040h为6
将6012b406000070000//6040h定为7
将6012b406000f000000//6040h设定为f,启用电机;