全文目录
1 CAN 基本框架
2 CAN 上位机
via.ZQWL-USB-CANFD-Tool 使用手册 V1.0.4
2.1 发送接收界面介绍
- 发送方式
- 正常发送:在 ID 仲裁丢失或发送出现错误时,CAN 控制器会自动重发,直到发送成功,或发送超时(超时时间 1 秒),或总线关闭。
- 单次发送:在一些应用中,允许部分数据丢失,但不能出现传输延迟时,自动重发就没有意义了。在这些应用中,一般会以固定的时间间隔发送数据,自动重发会导致后面的数据无法发送,出现传输延迟。使用单次发送,仲裁丢失或发送错误,CAN 控制器不会重发报文。
- 自发自收:产生一次带自接收特性的正常发送,在发送完成后,可以从接收缓冲区中读到已发送的报文。
- 单次自发自收:产生一次带自接收特性的单次发送,在发送出错或仲裁丢失不会执行重发。在发送完成后,可以从接收缓冲区中读到已发送的报文。
- 帧类型
帧类型分为【标准帧】和【扩展帧】。选择标准帧时,帧 ID 有效位 11 位;选择扩展帧时,帧 ID 有效位为 29 位。
- 帧格式
帧格式分为【数据帧】和【远程帧】。
由于远程帧无数据、CANFD 不支持远程帧,故当您选择【远程帧】时,发送将不携带数据;当您勾选【CANFD】时,帧格式只能选择【数据帧】。
- 帧 ID
当帧类型选择【标准帧】时,帧 ID 有效范围为 0x0~0x7FF;ZQWL-USB-CANFD-Tool 使用手册 V1.0.4
当帧类型选择【扩展帧】时,帧 ID 有效范围为 0x0~0x1FFFFFFF。
- 数据长度
当不勾选【CANFD】时,数据长度取值范围为 0~8;
当勾选【CANFD】时,数据长度取值范围为 0~64;在数据长度大于 8 时,数据长度非线性增长。
- 数据
数据一栏允许填入数据个数,与【数据长度】一栏填入长度对应。若填入数据个数小于数据长度,则发送时将自动补 0。例如,您填写数据长度为 6,数据应填入 6 个字节,若填入 5 个字节,则最后一个字节为 0。
- 发送总帧数
该栏表示发送次数,当填入-1 时,点击发送后,会按照设置好的参数持续发送。
- 发送周期
循环发送的时间,当填 0 时,全速发送。
- ID 递增
使能后,在发送总帧数不为 1 的情况下,每发一帧,将 ID 增加 1(标准帧最大 0x7FF,扩展帧最大 0x1FFFFFFF);
- 数据递增
使能后,在发送总帧数不为 1 的情况下,每发一帧,数据增加 1(低位在前),注意,递增的数据长度最大为 8。
- 保存
用于将当前界面的数据保存到文档。
- 实时保存
用于实时保存总线报文。
- 合并相同 ID
将收发界面的相同的 ID 合并为一条(注意当方向不同时,不合并)。
- 总线收发速率
通过主界面的发送速率和接收速率,可以很方便的看出当前 CAN(FD)总线的负荷情况。
- 清空和暂停
清空指将当前界面数据清空;暂停指将当前界面保持不变。
2.2 中继器功能
3 CAN 二次开发注意事项
via.ZQWL-USBCANFD 二次开发通讯协议 V1.05
3.1 USB 硬件描述符
3.2 参数配置
3.2.1 参数含义
每帧数据长度为 22 字节,十六进制格式:包括 2 个字节帧头(0x49,0x3B
)、1 个字节功能码、1 个字节读/写标志、16 个字节数据和 2 个字节帧尾(0x45,0x2E
):
[!attention]
- 读/写:当需要读参数,填
0x52
;当需要写参数时,填0x57
;
其中,“设备信息”和“设备序列号”命令只支持读命令(0x52
)- CAN 通道号:取值为
0x00~0x01
,分别对应CAN0~CAN1
- 自定义波特率标志:
0x00
为采用“常用波特率码”- 常用波特率码:
- 系统控制命令
可以通过这个命令实现将设置好的参数写入到设备里(即断电不丢失)。- 生效参数:
0x00
为不生效(断电参数丢失)0x01
为生效(保存到 flash 中,断电不丢失)- 系统复位:
0x00
为系统不复位0x01
为系统复位- CAN 0 开关:
0x00
为关闭 CAN 00x01
为开启 CAN 0;- CAN 1 开关:
0x00
为关闭 CAN 10x01
为开启 CAN 1;
3.2.2 串口助手举例
3.2.2.1 读取设备信息
上位机发送(Hex 格式):49 3B 40 52 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 45 2E
3.2.2.2 读取设备序列号
上位机发送(Hex 格式):49 3B 41 52 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 45 2E
3.2.2.3 设置 CAN 参数
设置 CAN0 参数:仲裁域波特率 250kbps,数据域波特率 500kbps
上位机发送(Hex 格式):49 3B 42 57 00 00 45 00 00 00 00 00 00 00 00 00 00 00 00 00 45 2E
3.2.2.4 发送生效参数并开启 CAN 0 命令
注意,设置完后,还要发送生效参数并开启 CAN0 命令:
开启任一 CAN 通道后,设备开始向上位机发心跳包。
上位机发送(Hex 格式):49 3B 44 57 01 00 01 00 00 00 00 00 00 00 00 00 00 00 00 00 45 2E
3.3 心跳包
[!info]
我们购买的的设备为 CAN 单双通道
故心跳包选择格式:单双通道设备心跳包
3.3.1 单双通道设备心跳包格式
单双通道心跳包为设备向上位机发送的数据包
- 功能码为
0xFF
(注意 4 通道功能码是 0xFE)。 - 设备状态:1 个字节,定义如下:
3.3.2 心跳包参数含义
- 发送速率:每秒发送的 CAN(FD)报文个数。
- 接收速率:每秒接收的 CAN(FD)报文个数。
- 错误计数器:
包括发送错误计数器和接收错误计数器,这些状态直接反映了总线的通畅情况,当接收错误计数器值大于 127 时,总线几乎已经瘫痪。当出现错误值较高的情况(40 以上),表示总线的通讯出现比较严重的阻塞,此时就有必要调整 CAN (FD) 网络的波特率值或增加CAN (FD) 网桥,以提高 CAN (FD) 总线质量。当总线通信良好时,错误计数器一般都能维持在 0。
在没有数据向 CAN(FD)发送时,心跳包每隔 1 秒向上位机发送一次,当有数据向CAN (FD) 发送时,设备立即向上位机发送一条心跳包。
3.4 CAN数据收发指令
通过该命令可以实现 CAN(FD)报文的发送和接收(BYTE:字节),报文格式如下:
- BYTE0: 帧头固定为 0x5A;
- BYTE1:帧信息 1,包含 CAN 通道和 CAN(FD)报文数据长度 DLC;
当为 CAN 帧时,DLC 的取值范围是 0~8。
[!caution]
BYTE 1 为 0 xFF 或 0 XFE 时为设备发向上位机的心跳包,接收数据时需要注意。
- BYTE2:帧信息 2,包含发送类型、帧格式、帧类型和是否加速等信息
[!caution]
CAN 通道号有 3 个 bit 构成,从高位到低位分别是:BYTE2 的 Bit4、Bit3、BYTE1的 Bit7。取值为 0x00 ~~ 0x07,分别对应 CAN0 ~~ CAN7 通道。
- 正常发送:在 ID 仲裁丢失或发送出现错误时,CAN 控制器会自动重发,直到发送成功,或发送超时(超时时间 1 秒),或总线关闭。
- 单次发送:在一些应用中,允许部分数据丢失,但不能出现传输延迟时,自动重发就没有意义了。在这些应用中,一般会以固定的时间间隔发送数据,自动重发会导致后面的数据无法发送,出现传输延迟。使用单次发送,仲裁丢失或发送错误,CAN控制器不会重发报文。
- BYTE3~6:CAN(FD)帧 ID,一共 4 个字节。标准帧时,只有 BYTE5~6 的低 11bit 有效;扩展帧时,29bit 有效。
[!caution]
BYTE3 的最高位(Bit7)是 CAN 协议类型标志:0 为CAN 帧;1 为CANFD 帧;
-
帧数据:长度为 DLC。
-
帧尾:一个字节,固定为 0xA5
[!attention]
当上位机向设备发送 CAN(FD)数据包时,设备收到后会立即返回一条心跳包。
4 CANopen 协议
4.1 SDO 报文
发送一条指令, 如果成功就会返回 60 开头的报文
sdo有是会因为种种原因导致通信不正常.
4.2 PDO 报文
4.2.1 PDO 相关含义
进行 pdo 通信, 需要配置两个部分:通讯参数和映射参数.
的指令是 181h, 281h, 381h, 481h
. 见到这几个开头的报文, 就知道它是驱动器发送的 TPDO
RPDO 的指令是 201h, 301h, 401h, 501h
. 见到这几个开头的报文, 就知道它是驱动器接收的 RPDO
4.2.2 CanOpen–PDO配置方法
-
失能(设置201为PDO的ID,8000应该表示失能)
601,22 00 14 01 01 02 00 80
-
设置类型等相关参数(收到同步帧,并有事件发生)
601,22 00 14 02 00 00 00 00
-
对映射对象的子索引0x00写入0;清除原有映射内容
601,22 00 16 00 00 00 00 00
-
写入映射对象数据(数据长度(1)+ 数值(1)+OD(2)= 4)
601, 22 00 16 01 10 00 40 60
601, 22 00 16 02 20 00 7a 60
601, 22 00 16 03 08 00 60 60
-
映射对象的子索引0x00写入3,说明有3个映射对象
601, 22 00 16 00 03 00 00 00
-
使能(设置201为PDO指令的ID,0000应该表示使能)
601, 22 00 14 01 01 02 00 00
-
在进行pdo操作之前,要输入 NMT 命令先让can总线进入操作模式
000,01 01
4.3 NMT 命令
NMT(Network Management Tool)命令在 CANopen 协议中用于管理网络中的节点。NMT 命令允许上位机或网络管理者控制节点的状态,例如启动、停止或重置节点。以下是设定 NMT 命令的基本步骤:
4.3.1 确定 NMT 命令类型
CANopen 定义了几种 NMT 命令,包括:
NMT_Start
:启动节点NMT_Stop
:停止节点NMT_PreOperational
:将节点置于预操作模式NMT_Reset_Node
:重置节点NMT_Reset_Communication
:重置通信
4.3.2 构造 NMT 报文
NMT 报文是一个标准的 CAN 报文,具有固定的格式。构造 NMT 报文需要以下信息:
- COB-ID:NMT 报文的 CAN 标识符,通常是
0x000
。 - Command:NMT 命令代码,根据所选命令(Start, Stop 等)而定。
- Node ID:目标节点的 ID。
4.3.3 发送 NMT 报文
使用 CAN 接口将构造好的 NMT 报文发送到 CAN 总线上。
4.3.4 示例 NMT 报文构造:
4.3.4.1 NMT Start 命令:
COB-ID: 0x000
Byte 0: 0x01 (NMT Start command)
Byte 1: 目标节点的Node ID
Byte 2: 0x00 (保留字段)
Byte 3: 0x00 (保留字段)
Byte 4: 0x00 (保留字段)
Byte 5: 0x00 (保留字段)
Byte 6: 0x00 (保留字段)
Byte 7: 0x00 (保留字段)
在这个示例中,如果你想启动节点 ID 为 1 的设备,那么 Byte 1 将是 0 x 01。
4.3.4.2 NMT Stop 命令:
COB-ID: 0x000
Byte 0: 0x02 (NMT Stop command)
Byte 1: 目标节点的Node ID
其他字节为保留字段,通常设置为 0 x 00。
4.3.4.3 NMT Reset Node 命令:
COB-ID: 0x000
Byte 0: 0x03 (NMT Reset Node command)
Byte 1: 目标节点的Node ID
同样,其他字节为保留字段。
4.3.4.4 等待响应
在发送 NMT 命令后,目标节点应该根据命令改变其状态。某些 NMT 命令可能会从节点收到响应,例如心跳或状态变化。
4.4 台达电机操作模式设定
4.4.1 速度模式
-
设置为速度模式
601,22 60 60 00 03 00 00 00
-
速度设置为0
601,23 ff 60 00 00 00 00 00
// 发送速度00 即停下来 -
使能
601,2b 40 60 00 06 00 00 00
// 配置驱动器(固定流程)
601,2b 40 60 00 07 00 00 00
// 配置驱动器(固定流程)
601,2b 40 60 00 0f 00 00 00
// 配置驱动器(固定流程) -
设置速度
601,23 ff 60 00 e8 03 00 00
// 发送速度e8 03,是小端模式正确顺序为03e8即十进制1000
4.4.2 位置规划模式
- 设定模式
601,2b 60 60 00 01 00 00 00
- 设定目标位置
601,2b 7a 60 00 30 75 00 00
// 30000 PUU - 设定速度命令
601,2b 81 60 00 08 bb 00 00
// 3000PUU/s此处应该将电机需要的四个参数都设定好
- 使能
601,2b 40 60 00 06 00 00 00
601,2b 40 60 00 07 00 00 00
601,2b 40 60 00 0f 00 00 00
601,2b 40 60 00 1f 00 00 00
- 获得回授信息
601,40 64 60 00 00 00 00 00
601,40 41 60 00 10 00 00 00
4.4.3 补间位置模式
-
设置为补间位置模式
601,22 60 60 00 07 00 00 00
-
设定补间周期
601,23 c2 60 00 05 00 00 00
// 设定需与通讯周期 OD 1006h 相同,1-10ms之间,暂定5ms -
配置 PDO
- 失能(设置 201 为 PDO 的 ID,8000 应该表示失能)
601,22 00 14 01 01 02 00 80
- 设置类型等相关参数(收到同步帧,并有事件发生)
601,22 00 14 02 00 00 00 00
- 对映射对象的子索引 0 x 00 写入 0;清除原有映射内容
601,22 00 16 00 00 00 00 00
- 写入映射对象数据(数据长度(1)+ 数值(1)+OD(2)= 4)
601, 22 00 16 08 20 00 c1 60
- 映射对象的子索引 0 x 00 写入 1, 说明有 1 个映射对象
601, 22 00 16 00 01 00 00 00
- 使能(设置 201 为 PDO 指令的 ID,0000 应该表示使能)
601, 22 00 14 01 01 02 00 00
- 在进行 pdo 操作之前, 要先让 can 总线进入操作模式
000,01 01
- 失能(设置 201 为 PDO 的 ID,8000 应该表示失能)
-
使能
601,2b 40 60 00 06 00 00 00
// 配置驱动器 (固定流程)
601,2b 40 60 00 07 00 00 00
// 配置驱动器 (固定流程)
601,2b 40 60 00 0f 00 00 00
// 配置驱动器 (固定流程) -
设置补间位置
201,e8 03 00 00
// 发送速度 e8 03, 是小端模式正确顺序为 03 e8 即十进制 1000,数据位数取决于映射对象数据设定的数据长度