SocketCAN
SocketCAN 适合在 Linux 电脑、Jetson 或树莓派上直接控制 CAN 设备。开发板通过 USB 接入后,Linux 会将 CAN 接口显示为 can0、can1、can2、can3 网络接口,可以直接使用 can-utils、python-can 或其他 SocketCAN 软件例如CANgaroo。
请使用 V4.6 或更新版本的固件。SocketCAN 只支持 CAN 设备;RS485 设备请参考 RS485 原始数据透传。
连接和识别设备
通过 USB 将开发板连接到 Linux 主机。
将电机连接到开发板的 CAN 接口,然后开发板XT60电源接口接入电源,给电机供电。
安装 CAN 工具并加载驱动:
sudo apt update
sudo apt install can-utils
sudo modprobe gs_usb
查看当前识别到的 CAN 接口:
ip link show type can
开发板通常会显示 4 个 canX 接口。Linux 分配的 can0、can1、can2、can3 不一定按开发板丝印顺序排列,控制电机前应先确认每个 canX 对应的物理 CAN 接口。
配置 CAN 接口
以将 can0 配置为 1 Mbps 为例:
sudo ip link set can0 down
sudo ip link set can0 type can bitrate 1000000
sudo ip link set can0 up
请将波特率设置为与电机一致的值。该设置只对当前 Linux 系统中的接口生效;设备重新上电、拔插或主机重启后,需要重新配置。
查看接口状态和波特率:
ip -details link show can0
如需将 4 个接口全部配置为 1 Mbps,可以执行:
for iface in can0 can1 can2 can3; do
sudo ip link set "$iface" down
sudo ip link set "$iface" type can bitrate 1000000
sudo ip link set "$iface" up
done
收发 CAN 报文
在第一个终端中监听 can0:
candump can0
在第二个终端中发送标准帧:
cansend can0 123#11223344
发送扩展帧:
cansend can0 0000FD01#0102030405060708
cansend 发送成功时通常不输出信息。如果电机或其他 CAN 设备返回数据,candump 会显示接口名、CAN ID 和数据内容。电机是否响应取决于它的协议、ID 和当前状态,不是所有测试报文都会产生回复。
查看收发数量和错误计数:
ip -s -details link show can0
CyberGear 电机示例
下载 CyberGear SocketCAN 示例程序 后,可以使用以下命令控制 can0 上 ID 为 1 的电机:
sudo python3 socketcan_cybergear_demo_v6.py \
--setup-links \
--motor-map "can0:1"
--setup-links 会自动启用命令中使用的 CAN 接口,默认波特率为 1 Mbps。使用多个接口和电机时,可以按下列格式填写:
--motor-map "can0:1,2,3;can1:4,5,6"
例如 can0:1,2,3 表示 can0 连接了 ID 为 1、2、3 的电机。运行前请根据实际接线修改接口名和电机 ID。
常见问题
现象 |
处理方法 |
|---|---|
找不到 |
确认固件为 V4.6 或更新版本,执行 |
|
先执行 |
|
执行 |
能发送但电机没有回复 |
检查 |
|
检查总线接线、波特率和终端电阻;排除问题后将接口设为 |