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:
- Otwórz Arduino IDE.
- Przejść do Szkic> Dołącz bibliotekę> Zarządzaj bibliotekami ...
- 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!