工业Windows平板查看Arduino经MCP2515发送的CAN总线数据的方法问询
工业Windows平板查看Arduino经MCP2515发送的CAN总线数据的方法问询
问题背景
我有一台带Windows系统的工业PC,想通过Arduino+SPI-CAN模块(MCP2515)向平板的CAN接口发送数据,已经写了Arduino代码:
#include <SPI.h> #include <mcp2515.h> struct can_frame canMsg1; struct can_frame canMsg2; MCP2515 mcp2515(10); void setup() { canMsg1.can_id = 0x0F6; canMsg1.can_dlc = 8; canMsg1.data[0] = 0x8E; canMsg1.data[1] = 0x87; canMsg1.data[2] = 0x32; canMsg1.data[3] = 0xFA; canMsg1.data[4] = 0x26; canMsg1.data[5] = 0x8E; canMsg1.data[6] = 0xBE; canMsg1.data[7] = 0x86; canMsg2.can_id = 0x036; canMsg2.can_dlc = 8; canMsg2.data[0] = 0x0E; canMsg2.data[1] = 0x00; canMsg2.data[2] = 0x00; canMsg2.data[3] = 0x08; canMsg2.data[4] = 0x01; canMsg2.data[5] = 0x00; canMsg2.data[6] = 0x00; canMsg2.data[7] = 0xA0; while (!Serial); Serial.begin(115200); mcp2515.reset(); mcp2515.setBitrate(CAN_125KBPS); mcp2515.setNormalMode(); Serial.println("Example: Write to CAN"); } void loop() { mcp2515.sendMessage(&canMsg1); mcp2515.sendMessage(&canMsg2); Serial.println("Messages sent"); delay(100); }
我已经在平板上装了Cangaroo之类的CAN监控软件,但不知道怎么查看PC的CAN连接,也不确定怎么能看到传输的数据。
解决步骤
1. 先确认工业PC的CAN接口状态
首先得确保Windows系统已经正确识别了CAN硬件:
- 右键点击「此电脑」→「管理」→「设备管理器」,在列表里找CAN相关设备:如果是USB转CAN模块,会在「端口(COM和LPT)」里显示;如果是内置CAN接口,可能在「网络适配器」或其他类别里,名称一般是类似「CAN Controller」「USB to CAN Adapter」的样子。
- 确认设备没有黄色感叹号,要是有就说明驱动没装对,得去硬件厂商官网下载对应驱动安装。
2. 配置CAN监控软件(以Cangaroo为例)
波特率匹配是核心,必须和Arduino代码里的设置一致:
- 打开Cangaroo后,找菜单栏的「Settings」或「Interface」选项,打开接口配置窗口。
- 在接口列表里选择你刚才在设备管理器里找到的CAN设备,然后设置波特率为125KBPS(和代码里
CAN_125KBPS对应),模式设为「Normal」(和Arduino的setNormalMode()一致)。 - 暂时不用设置过滤规则,先把软件设为全接收模式,然后点击「Start」或「Connect」按钮启动监听。
3. 验证Arduino端的发送状态
- 打开Arduino IDE的串口监视器,波特率设为115200,如果看到每隔100ms输出「Messages sent」,说明Arduino程序在正常运行,MCP2515在尝试发数据。
- 再检查硬件接线:
- MCP2515的SCK接Arduino D13、MISO接D12、MOSI接D11、CS接D10(和代码里的引脚对应);VCC接5V、GND接GND。
- 关键:MCP2515的CAN_H要接工业PC CAN接口的CAN_H,CAN_L接CAN_L,别接反!另外CAN总线两端最好加120Ω终端电阻(有些模块自带,没有的话外接一个,否则信号衰减严重可能收不到数据)。
4. 常见问题排查
如果还是收不到数据,按以下顺序排查:
- 再核对波特率:Arduino是125KBPS,软件里必须完全一致,差一点都不行。
- 测终端电阻:用万用表测CAN_H和CAN_L之间的电阻,正常应该是60Ω左右(两个120Ω并联),如果是120Ω说明只有一端接了电阻,0Ω就是短路了。
- 确认软件帧类型:代码里发的是11位标准CAN帧,软件里要设置成接收标准帧模式,别设成扩展帧。
- 换个软件试试:比如免费开源的BusMaster,排除Cangaroo本身的问题。
备注:内容来源于stack exchange,提问作者Fahrettin Gültekin
相关产品推荐
相关产品推荐

