Arduino& SeeedStudio CAN-BUS Shield

时间:2015-01-26 08:40:34

标签: arduino can-bus

我已将CAN-BUS屏蔽连接到我的供暖系统,并且我从总线获取数据 这是有效的(我认为)。 但是,我无法获得我想要的数据。 请参阅附图。

CAN-open data

CAN-Bus Log

它表示它在CAN打开的情况下运行,节点应为80(0X50十六进制)。 然而,当我放置一个过滤器时,它只显示来自节点80的数据,我不会得到任何数据 此外,当我尝试不使用过滤器时,我不会从模块中获取任何数据!

它还说它每1秒发送一次心跳。我在Node id 1862(0X746 hex)上找到了这个。

如何从模块中读取数据。

从盾牌中读取的代码:

#include <SPI.h>
#include "mcp_can.h"

INT32U canId = 0x000;
MCP_CAN CAN(9); 

unsigned char len = 0;
unsigned char buf[11];
char str[40];


void setup()
{
    Serial.begin(38400);

START_INIT:

    if(CAN_OK == CAN.begin(CAN_125KBPS))
    {
        Serial.println("CAN BUS Shield init ok!");
    }
    else
    {
        Serial.println("CAN BUS Shield init fail");
        Serial.println("Init CAN BUS Shield again");
        delay(100);
        goto START_INIT;
    }
}


void loop()
{
    if(CAN_MSGAVAIL == CAN.checkReceive())  
      {
        CAN.readMsgBuf(&len, buf); 
        canId = CAN.getCanId();

               Serial.print("<");
              Serial.print(canId);
              for(int i = 0; i<len; i++)
                {
                  Serial.print(",");
                  Serial.print(buf[i]);
                }
            Serial.print(">");
            Serial.println();
      }
}

1 个答案:

答案 0 :(得分:0)

代码是正确的,但 mcp_can 库和兼容的屏蔽可能存在一个问题。原始的Seed-Studio屏蔽使用16 MHz晶振,但市场上还有其他兼容模块,并非所有模块都使用16 MHz晶振,有些则使用8 Mhz。

因此,首先检查要使用的CAN模块,如果它在8 MHz上运行,则必须在初始化时调整速度设置。在这种情况下,如果您需要从以125 kb / s运行的CAN总线读取CAN消息,则必须在初始化中设置 CAN.begin(CAN_250KBPS)

...
   if(CAN_OK == CAN.begin(CAN_250KBPS))
...

检查是否正确连接了CAN HI和CAN LO。这可能是另一个问题。 检查您的SPI_CS_PIN是否设置正确(在您的方面是针对引脚9的CS)。

然后您应该通过在总线上发送CAN消息来检查您的连接/速度/ CS - 该消息必须由您的CAN总线嗅探器捕获。