CANOpen 同步报文使用
程序员文章站
2022-04-01 18:43:04
...
如何实现同步报文?
引出:
第一种:同步读取从站数据
概述:
主站(SYNC producer)同步读取从站(SYNC consumer)的PDO数据
主机(SYNC Producer)
1. TPDO1字典配置
/* index 0x1800 : Transmit PDO 1 Parameter. */
UNS8 Master_highestSubIndex_obj1800 = 6; /* number of subindex - 1*/
UNS32 Master_obj1800_COB_ID_used_by_PDO = 0x180; /* */
UNS8 Master_obj1800_Transmission_Type = 0x00; /* */
UNS16 Master_obj1800_Inhibit_Time = 0x00; /* */
UNS8 Master_obj1800_Compatibility_Entry = 0x0; /* 0 */
UNS16 Master_obj1800_Event_Timer = 0x0; /* 0 */
UNS8 Master_obj1800_SYNC_start_value = 0x0; /* 0 */
关键:
UNS8 Master_obj1800_Transmission_Type = 0x00;
非循环同步
通讯相关字典配置
概述
索引 | 子索引 | 设置值 | 描述 | 单位 | 备注 |
---|---|---|---|---|---|
0x1005 | 0x0 | 0x40000080 | SYNC COB ID | 无 | 规定的 |
0x1006 | 0x0 | 0xF4240 | Communication / Cycle Period | us | 可自行更改 |
0x1007 | 0x0 | 0xF4240 | Synchronous Window Length | us | 可自行更改 |
0x1019 | 0x0 | 0xa | Synchronous counter overflow value | 无 | 可自行更改 |
主机这样配置后的效果:
主机会周期性地发送同步报文,周期为0x1006的值,同步报文的cobID为0x1005 的值。
0x1005详述:
从机(SYNC Consumer)
1. 字典配置
索引 | 子索引 | 设置值 | 描述 | 单位 | 备注 |
---|---|---|---|---|---|
0x1005 | 0x0 | 0x40000080 | SYNC COB ID | 无 | 规定的 |
0x1006 | 0x0 | 0xF4240 | Communication / Cycle Period | us | 可自行更改 |
0x1007 | 0x0 | 0xF4240 | Synchronous Window Length | us | 可自行更改 |
0x1019 | 0x0 | 0xa | Synchronous counter overflow value | 无 | 可自行更改 |
0x1800 | 0x2 | 0x3 | Transmission_Type | 无 | 可自行更改 |
Transmission_Type (0x1800.0x2)
说明: 从站(SYSNC consumer)会在收到收到 (0x1800.0x2) 个同步包后才进行发送同步的TPDO数据帧
发送
can上位机监测报文:
黄色部分: 同步报文
红色画线部分: 从机的同步TPDO
说明:
1.同步报文的发送时间间隔为:0x1006.0x0(Communication / Cycle Period)决定,本此实验
0x1006.0x0的值我设置为:0xF4240 = 1000000us = 1s
2 从站再接收到3个同步包之后才发送同步的TPDO1数据帧,这里的3是由从站的0x1800.0x02字典的值决定的。
假如修改主机字典数据:
0x1800.0x02(Transmission_Type) = 0x01 //循环同步模式
那么报文是这样的:
上一篇: RK3399的ADC配置指南