用于汽车的CANbus仿真

时间:2014-12-26 03:13:24

标签: arduino can-bus

我解释了一下......

我修理汽车的电动助力转向系统,特别是菲亚特/阿尔法/朗西(德尔福制造商),我需要制作一些工具来测试这些赔偿,我的意思就是打开它。

我已经研究了一段时间了,我想我需要模拟Can-bus信号,因为eps ECU正在接收来自CAN的点火包,我在这里...

我需要知道我可以从/向BUS读取/发送CAN数据包的方式,我的意思是什么工具或其他任何东西。我一直在尝试使用Arduino UNO + Sparkfun Shield,但我没有得到任何结果,当所有连接,我的串口控制台没有嗅探任何数据包,我已正确连接所有我认为,尝试不同的bitRates,更改Arduino板和盾,尝试了很多不同的例子,我花了很多时间没有利润...我正在使用Seat Ibiza 2010用于I + D,在OBD PORT上连接CAN-H和CAN-L,在无线电等CAN线路中......

任何可能出错的想法都是受欢迎的,作为制作我的项目的新方法..提前感谢!!

的信息:

https://dl.dropboxusercontent.com/u/47864432/arduino/IMG_9358.JPG https://dl.dropboxusercontent.com/u/47864432/canbus/LIBRARYS_USED.rar

3 个答案:

答案 0 :(得分:0)

这里有两个潜在的问题:

  1. H / W问题
  2. CAN总线库问题
  3. 第一步是尝试环回测试。如果一切正常,请从任何车载OBD端口尝试CAN总线,速度应为500Kb。

答案 1 :(得分:0)

这个尝试几个总线速度 - 使用sparkfun canbus shield:

#include <SPI.h>
#include <SD.h>
#include <Canbus.h>
#include <defaults.h>
#include <global.h>
#include <mcp2515.h>
#include <mcp2515_defs.h>

const int chipSelect = 9;
File dataFile;

void setup() {
  // put your setup code here, to run once:
  pinMode(chipSelect, OUTPUT);
  Serial.begin(115200); // For debug use
  Serial.println("CAN Read - Testing receival of CAN Bus message");
  delay(1000);
  if (Canbus.init(CANSPEED_500)) //Initialise MCP2515 CAN controller at the specified speed
    Serial.println("CAN Init ok:  500k");
  else if (Canbus.init(CANSPEED_250)) //Initialise MCP2515 CAN controller at the specified speed
    Serial.println("CAN Init ok:  250k");
  else if (Canbus.init(CANSPEED_125)) //Initialise MCP2515 CAN controller at the specified speed
    Serial.println("CAN Init ok:  125k");
  else
    Serial.println("Can't init CAN");
  delay(1000);
  if (!SD.begin(chipSelect)) {
    Serial.println("uSD card failed to initialize, or is not present");
    return;
  }
  else {
    Serial.println("uSD card initialized.");
    delay(1500);
  }
  dataFile = SD.open("caninfo.txt", FILE_WRITE);
}

void loop() {
  tCAN message;
  if (mcp2515_check_message())
  {
    if (mcp2515_get_message(&message))
    {
      if (dataFile)   {
        int timeStamp = millis();
        //write to uSD card
        dataFile.print(timeStamp);
        dataFile.print("ID: ");
        dataFile.print(message.id, HEX);
        dataFile.print(", ");
        dataFile.print("Data: ");
        dataFile.print(message.header.length, DEC);
        for (int i = 0; i < message.header.length; i++)
        {
          dataFile.print(message.data[i], HEX);
          dataFile.print(" ");
        }
        dataFile.println("");
        Serial.println("Writing to SD");
      }
      else
      {
        Serial.println("Problem writing to SD");
      }
    }
  }
}

答案 2 :(得分:0)

如果要通过CAN与转向控制器进行通讯,例如对于Delhpi之类的OEM,则无法进行此操作,因为通讯网络中的ECU(电子控制单元)已得到保护,并且CAN协议软件决定了谁可以参加并谁不能。

作为测试仪工具,您可以读取故障代码,但无法破解它来模拟点火信号等。