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 |
|
RS485-1 |
RS485-1、RS485-2 |
|
RS485-2 |
RS485-3、RS485-4 |
|
RS485-3 |
RS485-3、RS485-4 |
|
RS485-4 |
任意一个 USB 串口 |
|
同时发送到当前串口对应的两路 RS485 |
发送报文
每条 USB 报文由以下内容组成:
字段 |
长度 |
说明 |
|---|---|---|
RS485 原始数据 |
0~60 字节 |
设备厂家定义的完整指令 |
Channel |
1 字节 |
RS485 接口编号 |
数据长度 |
1 字节 |
原始数据的字节数,不包括 Channel、长度和帧尾 |
帧尾 |
2 字节 |
固定为 |
例如,将一条 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 为 |
发送后设备没有回复 |
检查串口参数、Channel、设备 ID、指令长度、指令校验、A/B 接线和设备供电 |
串口提示被占用 |
关闭其他串口软件或上位机程序,再重新打开端口 |