SANPO USB 转 CAN

SANPO USB 转 CAN 适合在 Windows 或 Linux 上使用串口程序控制经典 CAN 设备。上位机只需在 CAN ID 和数据外加入接口编号等信息,开发板会完成 USB 串口与 CAN 总线之间的转换。

建议使用 V47 或更新的 V4 固件。如果在 Linux 上希望直接使用 can0cansendcandumppython-can,请参考 SocketCAN

连接和准备

开发板连接电脑后,通常会出现两个 USB 串口。其中一个控制 CAN-1 和 CAN-2,另一个控制 CAN-3 和 CAN-4。操作系统分配的 COM/dev/ttyACM* 编号不一定与开发板丝印顺序一致,首次使用时建议只连接一个 CAN 设备进行确认。

  1. 在串口软件或程序中打开对应的 USB 串口。

  2. 将串口波特率设置为与 CAN 设备一致的值。出厂默认为 1 Mbps。

  3. 按文本发送 AT+ET,并以 CRLF 结尾。返回 OK 后即可使用本页定义的报文格式。

  4. 使用十六进制或二进制方式发送 CAN 报文。

支持的 CAN 波特率为 1000001250002500005000001000000。打开 USB 串口时选择的波特率,会同时用于该串口对应的两路 CAN。

选择 CAN 接口

当前 USB 串口对应的接口

Channel

发送目标

CAN-1、CAN-2

0x01

CAN-1

CAN-1、CAN-2

0x02

CAN-2

CAN-3、CAN-4

0x03

CAN-3

CAN-3、CAN-4

0x04

CAN-4

任意一个 USB 串口

0x00

同时发送到当前串口对应的两路 CAN

接收报文中的 Channel 使用当前 USB 串口内的顺序:0x01 表示第一路,0x02 表示第二路。因此,使用另一个 USB 串口时,CAN-3 和 CAN-4 的回包 Channel 也会显示为 0x010x02

CAN 扩展帧

发送和接收使用相同格式:

字段

长度

说明

帧头

2 字节

固定为 45 54

Channel

1 字节

CAN 接口编号

CAN ID

4 字节

29 位扩展帧 ID,高字节在前

数据长度

1 字节

08

CAN 数据

0~8 字节

实际数据

帧尾

2 字节

固定为 0D 0A

例如,向 Channel 1、扩展帧 ID 0x0000FD01 发送 8 字节数据:

45 54 01 00 00 FD 01 08 01 00 00 00 00 00 00 00 0D 0A

CAN 标准帧

发送和接收使用相同格式:

字段

长度

说明

帧头

2 字节

固定为 53 54

Channel

1 字节

CAN 接口编号

保留字节

2 字节

固定为 00 00

CAN ID

2 字节

11 位标准帧 ID,高字节在前

数据长度

1 字节

08

CAN 数据

0~8 字节

实际数据

帧尾

2 字节

固定为 0D 0A

例如,向 Channel 1、标准帧 ID 0x142 发送 4 字节数据:

53 54 01 00 00 01 42 04 11 22 33 44 0D 0A

保存默认 CAN 波特率

如果希望开发板上电后自动使用指定波特率,可以按文本发送:

AT+SETCAN=1000000\r\n

设置成功后返回 OK\r\n,并在重新上电后继续生效。串口软件下次打开端口时,会再次按软件中选择的波特率配置 CAN,因此两处设置应保持一致。

CyberGear 示例

示例程序:USB 转 CAN CyberGear 示例

Windows:

python usb2can_cybergear_sine_demo_v4.py --port COM8 --motors 1 --channel 1

Linux:

sudo python3 usb2can_cybergear_sine_demo_v4.py --port /dev/ttyACM0 --motors 1 --channel 1

请根据实际串口、CAN 接口和电机 ID 修改参数。示例默认使用 1 Mbps。

常见问题

现象

处理方法

找不到 USB 串口

检查 USB 线、驱动和接口,然后重新拔插开发板

不确定串口对应哪两路 CAN

只连接一个设备,分别使用两个 USB 串口发送测试报文

发送后设备没有回复

检查串口与 CAN 波特率、Channel、CAN ID、终端电阻、总线接线和设备供电

报文被发到了两路 CAN

Channel 为 0x00 时会同时发到当前 USB 串口对应的两路 CAN;请改为具体通道编号

使用其他软件后回包格式发生变化

按文本发送 AT+ET\r\n,收到 OK 后重试

串口提示被占用

关闭其他串口软件或上位机程序,再重新打开端口