Zrozumienie protokołu puszki i użycie MCP2515 z Arduino

Understanding CAN Bus Protocol and Using the MCP2515 with Arduino

W dziedzinie zastosowań motoryzacyjnych i przemysłowych najważniejsza jest niezawodna komunikacja między wieloma mikrokontrolerami. Protokół magistrali sieci kontrolera (CAN) pojawił się jako solidne rozwiązanie dla takich potrzeb. Ten post na blogu zagłębia się w podstawy protokołu autobusu CAN i pokazuje, jak zintegrować MCP2515 Can Can z Arduino, umożliwiając bezproblemową komunikację w twoich projektach.

Co to jest protokół autobusowy?

Sieć obszaru kontrolera (CAN) to solidny standard magistrali pojazdu zaprojektowany w celu umożliwienia mikrokontrolerów i urządzeń do komunikowania się ze sobą bez komputera hosta. Opracowany przez Bosch w latach 80. Bus stał się standardem w systemach motoryzacyjnych, ale jest również szeroko stosowany w automatyzacji przemysłowej i innych systemach osadzonych.

Kluczowe funkcje protokołu Busu CAN obejmują:

  • Konfiguracja multi-master: Wiele węzłów może komunikować się w tej samej magistrali bez centralnego kontrolera.
  • Priorytetyzacja wiadomości: Wiadomości są priorytetowe w oparciu o ich identyfikator, zapewniając, że dane krytyczne są najpierw przesyłane.
  • Wykrywanie błędów: Solidne mechanizmy wykrywania błędów, w tym kontrole CRC i bity potwierdzenia, zwiększają niezawodność.
  • Komunikacja szybkiej: Obsługuje prędkości danych do 1 Mb / s, odpowiednie dla aplikacji w czasie rzeczywistym.

Funkcje te sprawiają, że autobus jest idealny do scenariuszy, w których wiele urządzeń musi skutecznie i niezawodnie komunikować się, na przykład w systemach zarządzania silnikami pojazdów, automatyzacji przemysłowej i robotyki.

Wprowadzenie kontrolera puszki MCP2515

MCP2515 to samodzielny kontroler sieci kontrolera (CAN), który łączy się z mikrokontrolerów za pośrednictwem szeregowego interfejsu peryferyjnego (SPI). Obsługuje skomplikowane protokół CAN, umożliwiając programistom skupienie się na logice aplikacji wyższego poziomu. Kluczowe funkcje MCP2515 obejmują:

  • Obsługa klatek standardowych i rozszerzonych puszek.
  • Wbudowane mechanizmy obsługi błędów i filtrowania.
  • Kompatybilność z różnymi mikrokontrolerami, w tym Arduino.
  • Niskie zużycie energii, dzięki czemu nadaje się do systemów wbudowanych.

Integrując MCP2515 z Arduino, możesz dodać możliwości autobusów do swoich projektów, umożliwiając komunikację z innymi urządzeniami lub sieciami obsługującymi Can.

Konfigurowanie MCP2515 z Arduino

Aby rozpocząć, potrzebujesz następujących komponentów:

  • Arduino Board (np. Arduino Uno)
  • MCP2515 Moduł może (często jest wyposażony w transceiver TJA1050)
  • Przewody zworki
  • Breadboard (opcjonalnie)

Oto przewodnik krok po kroku, aby skonfigurować MCP2515 z Arduino:

1. Okablowanie MCP2515 do Arduino

Podłącz moduł MCP2515 do Arduino w następujący sposób:

  • VCC Do 5v na Arduino
  • GND Do GND na Arduino
  • Cs Do Pin 10 na Arduino
  • SCK Do Pin 13 na Arduino
  • SI (Mosi) do Pin 11 na Arduino
  • WIĘC (Miso) do Pin 12 na Arduino
  • Int Do Pin 2 na Arduino

     Arduino          MCP2515
     -------          -------
     5V       ------>  VCC
     GND      ------>  GND
     Pin 10   ------>  CS
     Pin 13   ------>  SCK
     Pin 11   ------>  SI (MOSI)
     Pin 12   ------>  SO (MISO)
     Pin 2    ------>  INT

2. Instalowanie wymaganych bibliotek

Aby komunikować się z MCP2515, potrzebujesz MCP_CAN biblioteka. Zainstaluj go za pośrednictwem menedżera biblioteki Arduino:

  1. Otwórz Arduino IDE.
  2. Przejść do Szkic> Dołącz bibliotekę> Zarządzaj bibliotekami ...
  3. Szukaj MCP_CAN i zainstaluj MCP_CAN Biblioteka Cory J. Fowler.

3. Przesłanie przykładowego kodu

Oto podstawowy przykład wysyłania i odbierania wiadomości CAN za pomocą MCP2515 i Arduino:

Wysyłanie wiadomości puszki


// Include the necessary libraries
#include 
#include "mcp_can.h"

// Define the CS pin
#define CAN0_CS 10

// Initialize the CAN controller
MCP_CAN CAN0(CAN0_CS);

void setup() {
    Serial.begin(115200);
    while (CAN0.begin(MCP_ANY, CAN_500KBPS, MCP_8MHZ) != CAN_OK) {
        Serial.println("CAN BUS Shield init fail");
        Serial.println(" Init CAN BUS Shield again");
        delay(100);
    }
    Serial.println("CAN BUS Shield init ok!");
    CAN0.setMode(MCP_NORMAL);
}

void loop() {
    byte data[] = {0x00, 0xFF, 0xAA, 0x55, 0x33, 0x66, 0x99, 0xCC};
    // Send data: CAN ID = 0x100, data length = 8
    if (CAN0.sendMsgBuf(0x100, 0, 8, data) == CAN_OK) {
        Serial.println("Message Sent Successfully!");
    } else {
        Serial.println("Error Sending Message...");
    }
    delay(1000);
}

Otrzymanie wiadomości puszki


// Include the necessary libraries
#include 
#include "mcp_can.h"

// Define the CS pin
#define CAN0_CS 10

// Initialize the CAN controller
MCP_CAN CAN0(CAN0_CS);

void setup() {
    Serial.begin(115200);
    while (CAN0.begin(MCP_ANY, CAN_500KBPS, MCP_8MHZ) != CAN_OK) {
        Serial.println("CAN BUS Shield init fail");
        Serial.println(" Init CAN BUS Shield again");
        delay(100);
    }
    Serial.println("CAN BUS Shield init ok!");
    CAN0.setMode(MCP_NORMAL);
}

void loop() {
    unsigned long canId;
    byte len = 0;
    byte buf[8];
    
    // Check if data has been received
    if (CAN0.checkReceive() == CAN_MSGAVAIL) {
        CAN0.readMsgBuf(&canId, &len, buf);
        Serial.print("CAN ID: 0x");
        Serial.println(canId, HEX);
        Serial.print("Data: ");
        for (int i = 0; i < len; i++) {
            Serial.print(buf[i], HEX);
            Serial.print(" ");
        }
        Serial.println();
    }
}

W szkicu wysyłającym Arduino przesyła wiadomość puszki z identyfikatorem 0x100 co sekundę. Odbiorczy szkic słucha komunikatów przychodzących i drukuje identyfikator i dane do monitora szeregowego.

Zastosowania Bus z Arduino

Integracja Bus z Arduino otwiera wiele aplikacji poza systemami motoryzacyjnymi. Niektóre popularne przypadki użycia obejmują:

  • Robotyka: Włącz komunikację między wieloma kontrolerami silnika i czujnikami.
  • Automatyzacja przemysłowa: Ułatwiaj wymianę danych między różnymi maszynami i jednostkami kontrolnymi.
  • Automatyzacja domu: Podłącz różne inteligentne urządzenia w zunifikowanej sieci.
  • Systemy akwizycji danych: Zbieraj i przetwarzaj dane z wielu czujników wydajnie.

Wniosek

Protokół magistrali CAN, z jego niezawodnością i wydajnością, służy jako kręgosłupa komunikacji w wielu wbudowanych systemach. Korzystając z kontrolera MCP2515 z Arduino, programiści mogą bez wysiłku zintegrować możliwości autobusów CAN z ich projektami. Niezależnie od tego, czy pracujesz nad systemami motoryzacyjnymi, automatyzacją przemysłową, czy złożoną robotyką, zrozumienie i wykorzystanie puszki może znacznie poprawić ramy komunikacji systemu.

Dzięki dostarczonym wszechstronnym przewodnikom i przykładom jesteś dobrze wyposażony, aby rozpocząć integrację autobusu CAN z następnym projektem Arduino. Szczęśliwe kodowanie!

Zostaw komentarz

Notice an Issue? Have a Suggestion?
If you encounter a problem or have an idea for a new feature, let us know! Report a problem or request a feature here.