CAN převodník MCP2515 (čtení informací)  – část 1.

_57

V tomto článku budeme rozebírat čtení informací ze sběrnice CAN automobilů.
Do sběrnice CAN se napojíme přes diagnostický konektor OBD2.

V českém internetu nejsou informace o tom, jak propojit čínský CAN převodník s integrovaným obvodem MPC2515, oscilátorem 8MHz a Arduinem.
Rozhodl jsem se, že o tom tedy napíšu krátký článek, abych tuto internetovou mezeru alespoň částečně zaplnil.
MCP2515 je čip, vyroben firmou Microchip semiconductor, podporující CAN specifikaci 2.0B a může nejen přijímat, ale i posílat standartní a rozšířené rámce. Tento čip má dvě masky a šest filtrů. Filtry se používají k odfiltrování nevyžádaných zpráv a tím pádem ke snížení zatížení Microcontroleru.
Datasheet MCP2515 stáhneš tady: PDF

Schéma je tady: PDF

Krok 1: Seznam součástek

1. Arduino Uno
2. CAN převodník MCP2515
3. Dráty samec-samice
4. Krabička z akrylového skla (nemusí být)
5. Distanční sloupky (nemusí být)
6. Auto s CAN sběrnicí

Krok 2: Zapojení součástek

CAN převodník používá SPI interface. Převodník zapojíme dle obrázku, viz níž:

Aby převodník správně pracoval, je potřeba stáhnout knihovny tady. Nebo odkaz na knihovny zde: ZIP

Tato knihovna má dva příklady – přijímání a posílání dat. V tomto článku se budeme zabývat pouze přijímáním dat. Příklad správně funguje pouze s modulem převodníku s 16MHz oscilátorem. Čínské převodníky mají 8MHz oscilátor. Proto musíme příklad opravit. Při initilizaci CAN sběrnice musíme specifikovat frekvence oscilátoru: CAN0.begin(CAN_500KBPS, MCP_8MHz). Ještě je možné zkopírovat kód, viz dole, a přidat ho.

Krok 3: Nahrát kód

// demo: MCP2515 CAN-BUS , čtení informací
#include <mcp_can.h>
#include <SPI.h>
long unsigned int rxId;
unsigned char len = 0;
unsigned char rxBuf[8];
MCP_CAN CAN0(10);                               // nastavit CS k pinu 10
void setup()
{
  Serial.begin(115200);
  // init can bus : baudrate = 500k 
   if(CAN0.begin(CAN_500KBPS, MCP_8MHz) == CAN_OK) Serial.print("can init ok!!\r\n");
  else Serial.print("Can init fail!!\r\n");
  
  pinMode(2, INPUT);                            // nastavení pinu 2 pro /INT vstup
  Serial.println("MCP2515 Library Receive Example...");
}
void loop()
{
    if(!digitalRead(2))                         // Jestli pin 2 je low, čtení informací z bufferu
    {
      CAN0.readMsgBuf(&len, rxBuf);              // čtení informací: len = délka dat, buf = data byte(s)
      rxId = CAN0.getCanId();                    // čtení ID
      Serial.print("ID: ");
      Serial.print(rxId, HEX);
      Serial.print("  Data: ");
      for(int i = 0; i<len; i++)                // Tisk každého bytu dat
      {
        if(rxBuf[i] < 0x10)                     // Jestli byte dat míň než 0x10, přidat nulu před
        {
          Serial.print("0");
        }
        Serial.print(rxBuf[i], HEX);
        Serial.print(" ");
      }
      Serial.println();
    }
}

Pokud je toto všechno spojeno dráty, nahrajeme kód do Arduina. Napojíme CAN převodník do CAN sběrnice auto, viz obrázek a můžeme začít.

Krok 4: bavit se

V dalším článku se naučíš posílat příkazy do CAN sběrnice auta s pomocí Arduina.

Share on facebook
Facebook
Share on google
Google+
Share on twitter
Twitter
Share on linkedin
LinkedIn
Share on pinterest
Pinterest

Napsat komentář

Vaše emailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *

Nejčtenější články

Akční nabídka

Arduino UNO R3

ATmega328P, Klon

160 Kč

RobotDyn 4×3

Maticová analogová klávesnice

91,10 Kč

Arduino Gamepad

Joystick Shield

146,90 Kč