SANPO USB 转 RS485

SANPO USB 转 RS485 适合从电脑端指定 RS485-1/2/3/4 中的某一路接口发送数据。上位机在设备原始指令后增加 Channel、数据长度和帧尾,开发板会将原始指令发到指定的 RS485 接口。本协议适合高频率实时控制。

建议使用 V47 或更新的 V4 固件。如果需要直接发送不带 SANPO 封装的 RS485 原始数据,可以使用 RS485 原始数据透传,但每条指令发送完成后至少需要保留 3 ms 无数据间隔;连续高速实时控制请使用本页介绍的 SANPO 封装协议。

连接和通信参数

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

打开 USB 串口时,请将波特率、停止位、校验位和数据位设置为与 RS485 设备一致。这些参数会同时用于当前 USB 串口对应的两路 RS485。出厂默认参数为 4 Mbps、1 个停止位、无校验、8 个数据位。如需保存默认参数,请参考 RS485 原始数据透传中的设置说明。

选择 RS485 接口

当前 USB 串口对应的接口

Channel

发送目标

RS485-1、RS485-2

0x01

RS485-1

RS485-1、RS485-2

0x02

RS485-2

RS485-3、RS485-4

0x03

RS485-3

RS485-3、RS485-4

0x04

RS485-4

任意一个 USB 串口

0x00

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

发送报文

每条 USB 报文由以下内容组成:

字段

长度

说明

RS485 原始数据

0~60 字节

设备厂家定义的完整指令

Channel

1 字节

RS485 接口编号

数据长度

1 字节

原始数据的字节数,不包括 Channel、长度和帧尾

帧尾

2 字节

固定为 0D 0A

例如,将一条 17 字节的宇树电机指令发送到 Channel 2:

FE EE 11 00 00 00 00 00 00 00 00 00 00 00 00 18 7C 02 11 0D 0A

其中 02 是 Channel,11 表示前面的原始指令长度为 0x11,即 17 字节。

宇树 GO-M8010 示例

示例程序:USB 转 RS485 宇树电机示例

Windows:

python usb2rs485_unitree_sine_demo_v4.py --port COM9 --motors 1 --channel 2

Linux:

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

请根据实际串口、RS485 接口和电机 ID 修改参数。示例默认使用 4 Mbps、1 个停止位、无校验、8 个数据位。

常见问题

现象

处理方法

找不到 USB 串口

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

指令被发到了两路 RS485

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

发送后设备没有回复

检查串口参数、Channel、设备 ID、指令长度、指令校验、A/B 接线和设备供电

串口提示被占用

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