You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

工业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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.21 12:04:36