CANBed to opracowana przez firmę Longan Labs płytka rozwojowa, która łączy mikrokontroler kompatybilny z Arduino z gotowym interfejsem magistrali CAN-Bus. Dzięki temu jeden moduł zastępuje zestaw „płytka Arduino + osobny shield CAN”, co upraszcza prototypowanie systemów motoryzacyjnych i przemysłowych. W tym przewodniku omawiamy budowę CANBed, rozkład wyprowadzeń, specyfikację oraz sposób uruchomienia pierwszej komunikacji po magistrali CAN.

Co to jest CANBed?

Sercem płytki CANBed jest mikrokontroler ATmega32U4 — ten sam układ, który napędza Arduino Leonardo. Jego kluczową zaletą jest wbudowany sprzętowy interfejs USB, dzięki czemu płytka programuje się bezpośrednio przez port micro-USB, bez dodatkowego konwertera.

Za obsługę magistrali CAN odpowiadają dwa wyspecjalizowane układy. MCP2515 to samodzielny kontroler CAN komunikujący się z mikrokontrolerem przez interfejs SPI; obsługuje CAN 2.0B i zwalnia procesor z obsługi protokołu. MCP2551 (transceiver) stanowi warstwę fizyczną — zamienia logiczne sygnały TX/RX na różnicowe poziomy CAN_H i CAN_L na magistrali. Taki podział (kontroler + transceiver) to standardowa, sprawdzona topologia węzła CAN.

Magistrala CAN ma topologię liniową: wszystkie węzły podłączone są do wspólnej, dwuprzewodowej szyny zakończonej z obu stron rezystorami 120 Ω. CANBed ma taki rezystor terminujący wbudowany i włączany przełącznikiem, co ułatwia poprawne zakończenie magistrali.

Układ pinów CANBed v1

Płytka CANBed v1 udostępnia wyprowadzenia mikrokontrolera oraz złącza interfejsowe magistrali. Poniżej najważniejsze grupy wyprowadzeń i elementów.

18-pinowy header z interfejsami GPIO

Główna listwa udostępnia linie wejścia/wyjścia ATmega32U4:

  • Interfejs I²C (SCL i SDA), który pełni też rolę dwóch pinów cyfrowych
  • Interfejs UART (Rx i Tx), który również pełni rolę dwóch pinów cyfrowych
  • Cztery wejścia analogowe (mogą służyć jako cyfrowe I/O)
  • Osiem cyfrowych pinów I/O
  • Vin (5 V) oraz GND

Złącze micro-USB do programowania

Port micro-USB służy zarówno do wgrywania szkiców z Arduino IDE, jak i do komunikacji szeregowej z komputerem podczas debugowania.

Złącze SPI — ICSP

Sześciopinowe złącze ICSP udostępnia magistralę SPI i pozwala wgrać bootloader lub programować mikrokontroler zewnętrznym programatorem.

Wskaźnik CAN RX/TX

Diody LED sygnalizują aktywność na magistrali — odbiór (RX) i nadawanie (TX) ramek, co ułatwia szybką diagnostykę komunikacji.

9-pinowe złącze Sub-D (DB9)

Standardowe przemysłowe złącze DB9 umożliwia podłączenie do magistrali CAN lub interfejsu OBD-II pojazdu; rozkład wyprowadzeń można wybrać zgodnie ze standardem CAN albo OBD-II.

CANBed 1

Przełącznik rezystora terminującego 120 Ω

Wbudowany rezystor 120 Ω można załączyć przełącznikiem, gdy CANBed znajduje się na końcu magistrali. Poprawne zakończenie po obu stronach szyny jest kluczowe dla integralności sygnału różnicowego.

Złącza Grove (UART i I²C)

Dwa 4-pinowe złącza w standardzie Grove pozwalają dołączać moduły i czujniki bez lutowania.

Przycisk Reset

Przycisk resetu ponownie uruchamia mikrokontroler — przydatny przy programowaniu i debugowaniu.

Cechy i specyfikacja

Cechy

  • Płyta rozwojowa Arduino i shield magistrali CAN w jednym module
  • Obsługa CAN V2.0B z prędkością do 1 Mbps
  • Kontroler MCP2515 z interfejsem SPI
  • Złącze 4-pinowe lub 9-pinowe przemysłowe Sub-D (DB9)
  • 18-pinowy header z pinami analogowymi, cyfrowymi oraz interfejsami UART i I²C
  • Wybór rozkładu wyprowadzeń CAN lub OBD-II na złączu Sub-D
  • Dwa 4-pinowe złącza kompatybilne z systemem Grove
  • Interfejs SPI o częstotliwości do 10 MHz
  • Ramki standardowe 11-bitowe i rozszerzone 29-bitowe (dane oraz zdalne)
  • Nie wymaga dodatkowego mikrokontrolera do sterowania
  • Kompatybilność z Arduino IDE
  • Napięcie zasilania 9–28 V

Specyfikacja

CANBed 2

Pomysły na zastosowanie CANBed

Dzięki połączeniu Arduino i sprzętowego CAN w jednym module CANBed sprawdza się w wielu projektach:

  • Nauka i eksperymenty z komunikacją CAN-Bus
  • Budowa prototypów urządzeń z interfejsem CAN
  • Odczyt danych diagnostycznych z pojazdów przez OBD-II (car hacking, tuning)
  • Systemy kontroli dynamiki i telemetrii pojazdu
  • Systemy sterowania położeniem (np. w robotyce)
  • Dodanie magistrali CAN i mikrokontrolera do innych produktów

Jak rozpocząć pracę z magistralą CAN?

Uruchomienie pierwszej komunikacji sprowadza się do trzech kroków: konfiguracji środowiska, instalacji biblioteki i wgrania szkicu.

Konfiguracja Arduino IDE

W Arduino IDE wybierz płytkę zgodną z Arduino Leonardo (ponieważ CANBed używa ATmega32U4) oraz właściwy port szeregowy odpowiadający podłączonemu modułowi micro-USB.

Pobierz i zainstaluj bibliotekę

Pobierz bibliotekę obsługi MCP2515/CAN (np. CANBed lub mcp_can) i zainstaluj ją przez menedżera bibliotek lub dodając archiwum ZIP. Biblioteka udostępnia funkcje inicjalizacji, wysyłania i odbioru ramek.

Otwórz kod i wgraj go do płytki

Otwórz przykładowy szkic z biblioteki, ustaw szybkość transmisji odpowiadającą Twojej magistrali i wgraj kod do płytki. Diody RX/TX potwierdzą aktywność na szynie.

CANBed 3
CANBed 4

CANBed-Kod Arduino

Piny złącza OBD. Zwróć uwagę na numery pinów

CANBed 5

Żeńskie złącze OBD-II w pojeździe

CANBed 6
CANBed 7
CANBed 8
CANBed: Zestaw rozwojowy Arduino CAN-Bus

CANBed — najważniejsze funkcje API

Biblioteka udostępnia komplet funkcji pozwalających skonfigurować kontroler i obsłużyć ruch na magistrali. Poniżej krótkie omówienie kluczowych z nich.

Ustawianie szybkości transmisji

Funkcja inicjalizacji ustawia prędkość magistrali (np. 125 kbps, 250 kbps, 500 kbps lub 1 Mbps). Wszystkie węzły na tej samej szynie muszą mieć identyczną szybkość transmisji.

CANBed: Zestaw rozwojowy Arduino CAN-Bus — ilustracja 2

Ustawienie maski odbiorczej i filtra

CANBed: Zestaw rozwojowy Arduino CAN-Bus — ilustracja 3
CANBed: Zestaw rozwojowy Arduino CAN-Bus — ilustracja 4

 pokazuje, który rejestr ma być użyty (0 lub 1 dla maski i 0-5 dla filtra).

 pokazuje status ramki. 0 oznacza standardową ramkę dla maski lub filtra, natomiast 1 oznacza ramkę rozszerzoną.

 reprezentuje zawartość w masce lub filtrze.

Maski i filtry pozwalają węzłowi odbierać tylko interesujące go identyfikatory ramek, odciążając mikrokontroler od przetwarzania całego ruchu na magistrali.

CANBed — sprawdzenie odbioru

Funkcja sprawdza, czy w buforze odbiorczym czeka nowa ramka, zanim spróbujemy ją odczytać.

CANBed: Zestaw rozwojowy Arduino CAN-Bus — ilustracja 5

Uzyskaj identyfikator CAN

CANBed: Zestaw rozwojowy Arduino CAN-Bus — ilustracja 6

CANBed-Wyślij ramkę

 jest identyfikatorem ramki

 oznacza status ramki (0 - ramka standardowa, 1 - ramka rozszerzona)

 pokazuje długość ramki

 jest treścią wiadomości

Funkcja wysyłania kompletuje powyższe pola i przekazuje ramkę do kontrolera MCP2515, który nadaje ją na magistralę.

CANBed — odbiór ramki

CANBed: Zestaw rozwojowy Arduino CAN-Bus — ilustracja 7

 pokazuje długość danych

 jest miejscem zapisu danych

Funkcja odbioru kopiuje dane z bufora kontrolera do tablicy w pamięci mikrokontrolera wraz z informacją o długości ramki, dzięki czemu można je dalej przetwarzać w programie.

Porównanie rodzin CANBed

Pod marką CANBed dostępnych jest kilka wariantów różniących się mikrokontrolerem, obudową i sposobem wyprowadzenia magistrali — od kompaktowych modułów po wersje z gniazdem DB9 i wersje oparte na nowszych rdzeniach. Wybór zależy od wymaganej mocy obliczeniowej, dostępnych interfejsów oraz formy mechanicznej docelowego urządzenia.

CANBed: Zestaw rozwojowy Arduino CAN-Bus — ilustracja 8

Podsumowanie

CANBed to wygodny moduł łączący Arduino z gotowym węzłem CAN opartym na sprawdzonej parze MCP2515 + MCP2551. Wbudowany rezystor terminujący, złącze DB9 i kompatybilność z Arduino IDE skracają drogę od pomysłu do działającego prototypu systemu motoryzacyjnego lub przemysłowego. Po sprawdzeniu koncepcji na płytce deweloperskiej kolejnym krokiem bywa zaprojektowanie własnej płytki z interfejsem CAN dla produkcji seryjnej — w tym pomaga usługa prototypowania PCB oraz nasze możliwości produkcyjne.

Projektujesz urządzenie z magistralą CAN? Zleć montaż PCB w OurPCB — wycena w 12 godzin roboczych.