CANBed firmy Longan Labs to płytka rozwojowa zgodna z Arduino, wyposażona w kontroler i układ nadawczo-odbiorczy CAN. Aby uruchomić komunikację, połącz CANH z CANH, CANL z CANL i zapewnij wspólną masę odniesienia. Zakończ magistralę rezystorami 120 Ω na obu końcach, a w bibliotece ustaw szybkość transmisji oraz zegar zgodne ze sprzętem. Do potwierdzania wysyłanych ramek potrzebny jest drugi aktywny węzeł.
Co to jest CANBed i jak działa wersja V1?
Opis dotyczy CANBed V1 z mikrokontrolerem ATmega32U4, kontrolerem MCP2515 i układem nadawczo-odbiorczym MCP2551. ATmega32U4 pracuje z częstotliwością 16 MHz, ma 32 KB pamięci programu, 2,5 KB SRAM oraz 1 KB EEPROM. Wbudowany kontroler USB umożliwia programowanie przez micro-USB bez osobnego konwertera USB-UART.
MCP2515 komunikuje się z mikrokontrolerem przez SPI i obsługuje protokół CAN 2.0B. MCP2551 odpowiada za elektryczną warstwę połączenia: przekłada sygnały logiczne na różnicowy sygnał CANH/CANL. Mikrokontroler wykonuje program użytkownika, kontroler przygotowuje i odbiera ramki, a układ nadawczo-odbiorczy łączy ten zestaw z przewodami magistrali.
Przed podłączeniem sprawdź oznaczenie wersji płytki i jej schemat. Poniższy opis wyprowadzeń oraz specyfikacja odnoszą się do V1; nie należy przenosić ich automatycznie na inne moduły o podobnej nazwie.
Układ pinów CANBed v1
CANBed V1 wyprowadza najważniejsze linie ATmega32U4 oraz złącza potrzebne do pracy z magistralą CAN. Poniżej znajdują się elementy, które najczęściej wykorzystuje się podczas uruchamiania płytki.
18-pinowa listwa z interfejsami GPIO
Główna listwa udostępnia linie wejścia/wyjścia mikrokontrolera:
- Interfejs I²C (SCL i SDA), który może pracować również jako dwa piny cyfrowe
- Interfejs UART (Rx i Tx), również dostępny jako piny cyfrowe
- Cztery wejścia analogowe, które można wykorzystać także jako cyfrowe I/O
- Osiem cyfrowych pinów I/O
- Vin (5 V) oraz GND
Złącze micro-USB do programowania
Micro-USB służy do wgrywania szkiców z Arduino IDE, zasilania płytki podczas testów oraz komunikacji szeregowej z komputerem przy debugowaniu.
Złącze SPI — ICSP
Sześciopinowe złącze ICSP udostępnia magistralę SPI. Można go użyć do programowania mikrokontrolera zewnętrznym programatorem albo do obsługi narzędzi AVR, jeżeli projekt wymaga pracy poza Arduino IDE.
Wskaźnik CAN RX/TX
Diody RX i TX sygnalizują ruch na magistrali CAN. Podczas uruchamiania układu pozwalają szybko sprawdzić, czy moduł odbiera lub nadaje ramki.
9-pinowe złącze Sub-D (DB9)
Złącze DB9 umożliwia podłączenie przewodu CAN lub przewodu OBD-II. Domyślnie CANBed jest przygotowany pod układ wyprowadzeń OBD-II, ale na płytce można skonfigurować również wariant zgodny z CANopen.

Przełącznik rezystora terminującego 120 Ω
Rezystor 120 Ω należy włączyć wtedy, gdy CANBed jest jednym z dwóch skrajnych węzłów magistrali. Przy pracy na krótkim stanowisku testowym często wystarczą dwa takie zakończenia; przy dłuższej instalacji brak terminacji albo terminacja w złym miejscu powoduje odbicia sygnału i błędy ramek.
Złącza Grove (UART i I²C)
Dwa 4-pinowe złącza Grove upraszczają podłączanie czujników i modułów peryferyjnych. Jedno złącze obsługuje UART, drugie I²C.
Przycisk Reset
Przycisk resetu ponownie uruchamia ATmega32U4. Przydaje się przy testach firmware'u, zmianie konfiguracji i ponownym nawiązywaniu połączenia z portem szeregowym.
Cechy i specyfikacja
Cechy
- Płytka Arduino i interfejs CAN-Bus w jednym module
- Obsługa CAN V2.0B z szybkością do 1 Mb/s
- Kontroler MCP2515 połączony z mikrokontrolerem przez SPI
- Złącze 4-pinowe lub przemysłowe 9-pinowe złącze Sub-D (DB9)
- 18-pinowa listwa z liniami analogowymi, cyfrowymi, UART i I²C
- Możliwość wyboru układu wyprowadzeń CANopen albo OBD-II na złączu Sub-D
- Dwa 4-pinowe złącza kompatybilne z systemem Grove
- Interfejs SPI z częstotliwością do 10 MHz
- Obsługa ramek standardowych 11-bitowych i rozszerzonych 29-bitowych, w tym ramek danych i zdalnych
- Nie wymaga dodatkowej płytki mikrokontrolera
- Kompatybilność z Arduino IDE dzięki bootloaderowi Arduino Leonardo
- Zasilanie interfejsu CAN w zakresie 9–28 V
Specyfikacja

Uwaga dotycząca zasilania: podany zakres 9–28 V nie oznacza dopuszczalnego napięcia na każdym wyprowadzeniu. Nie podawaj go na linię opisaną jako Vin (5 V), USB ani linie sygnałowe. Właściwe wejście zasilania i zasady łączenia źródeł ustal na podstawie schematu konkretnej wersji.
Topologia CAN: połączenia, napięcia i długość przewodów
Magistralę prowadź liniowo, skręconą parą przewodów, z krótkimi odgałęzieniami do węzłów. Unikaj gwiazdy: długie odnogi sprzyjają odbiciom sygnału. Zapewnij wspólną masę odniesienia, pamiętając o dopuszczalnej różnicy potencjałów mas określonej w karcie katalogowej układu nadawczo-odbiorczego. Różnicowy sposób transmisji nie usuwa tego ograniczenia.
| Stan magistrali | CANH | CANL | Różnica CANH–CANL |
|---|---|---|---|
| Dominujący | ≈ 3,5 V | ≈ 1,5 V | ≈ 2 V |
| Recesywny | ≈ 2,5 V | ≈ 2,5 V | ≈ 0 V |
To orientacyjne wartości nominalne dla układu nadawczo-odbiorczego zasilanego napięciem 5 V, a nie wyniki pomiaru CANBed. Napięcia pojedynczych linii odnoszą się do masy. Granice elektryczne sprawdź w karcie katalogowej i normie ISO 11898-2. Multimetr podczas transmisji może wskazywać wartość uśrednioną, dlatego jego odczyt nie wystarcza do oceny kształtu sygnału.
| Szybkość transmisji | Orientacyjna maksymalna długość magistrali |
|---|---|
| 1 Mbit/s | około 40 m |
| 500 kbit/s | około 100 m |
| 125 kbit/s | około 500 m |
Te wartości są regułą orientacyjną, nie gwarancją działania. Dopuszczalna długość zależy także od przewodu, opóźnień układów, odgałęzień i ustawień czasowych kontrolera. Ostateczne parametry dobierz według dokumentacji elementów oraz wymagań instalacji.
Terminacja 120 Ω i kontrola rezystancji
W liniowej magistrali stosuje się dwa rezystory 120 Ω: po jednym na każdym fizycznym końcu przewodu. Dotyczy to również krótkiego stanowiska testowego. Włącz terminację CANBed tylko wtedy, gdy płytka zajmuje jeden z tych końców; w węźle pośrednim pozostaw ją wyłączoną.
Założenia obliczenia: magistrala jest odłączona od zasilania, ma dwa idealne rezystory 120 Ω, a pozostałe elementy nie wpływają istotnie na odczyt. Rezystancja między CANH i CANL wynosi wtedy R = (120 × 120) / (120 + 120) = 60 Ω.
| Orientacyjny odczyt przy wyłączonym zasilaniu | Co sprawdzić? |
|---|---|
| ≈ 60 Ω | Wynik odpowiada dwóm równoległym terminatorom 120 Ω. |
| ≈ 120 Ω | Prawdopodobnie brakuje jednego terminatora lub połączenia z nim. |
| ≈ 40 Ω | Wynik odpowiada trzem terminatorom 120 Ω; sprawdź nadmiarowe zakończenie. |
Odłącz wszystkie źródła zasilania przed pomiarem rezystancji. Odczyt około 60 Ω nie potwierdza prawidłowego rozmieszczenia terminatorów ani jakości przewodów. To wskazówka diagnostyczna, którą trzeba zestawić ze schematem połączeń.
Do czego można wykorzystać CANBed?
CANBed pozwala poznawać komunikację CAN, budować prototypy węzłów, rejestrować ramki i przygotowywać stanowiska do prób układów automatyki lub robotyki. Samo odebranie identyfikatora i bajtów danych nie wyjaśnia jeszcze ich znaczenia: do interpretacji potrzebny jest opis komunikacji danego urządzenia.
Podłączenie przez OBD-II wymaga ostrożności. Sprawdź połączenia przewodu, numerację złącza i zasilanie; nie opieraj się wyłącznie na kształcie wtyku. Pierwsze próby wykonuj na osobnym stanowisku. W pojeździe nie wysyłaj przypadkowych ramek, ponieważ mogą wpływać na pracę jego układów.
Jak rozpocząć pracę z magistralą CAN?
Przygotuj dwa węzły, skręconą parę, wspólną masę i terminację na końcach przewodu. Zanotuj wersję płytki, biblioteki oraz częstotliwość oscylatora kontrolera CAN. Pozwoli to odtworzyć konfigurację podczas szukania przyczyny problemu.
Konfiguracja Arduino IDE i biblioteki
Dla opisanej CANBed V1 wybierz w Arduino IDE płytkę Arduino Leonardo oraz właściwy port szeregowy. Zainstaluj bibliotekę przeznaczoną dla tej płytki i MCP2515, zgodnie z dokumentacją Longan Labs. Korzystaj z przykładów dołączonych do wybranej wersji biblioteki: podobne nazwy bibliotek nie oznaczają identycznych wywołań.
Ustawienia przed wgraniem programu
Wybierz przykład nadawania i odbioru. Ustaw jednakową szybkość transmisji w obu węzłach oraz pin CS zgodny ze schematem płytki i dokumentacją biblioteki. Nie przenoś numeru pinu z przypadkowego przykładu innego modułu.
Sprawdź osobno zegar MCP2515. Ustawienie biblioteki musi odpowiadać częstotliwości jego oscylatora, np. 8 albo 16 MHz. Są to przykłady konfiguracji, a nie deklaracja wyposażenia każdej CANBed. Częstotliwość mikrokontrolera ATmega32U4 nie wystarcza do ustalenia zegara kontrolera CAN.
Po wgraniu programów porównaj wysłany i odebrany identyfikator, długość oraz bajty danych. Diody są pomocniczym wskaźnikiem aktywności, lecz nie dowodzą poprawnego odbioru przez drugi węzeł. Poniższe ilustracje kodu i opis API zachowują wcześniejszą treść; przed użyciem sprawdź ich zgodność z zainstalowaną biblioteką.


CANBed — kod Arduino
Piny złącza OBD-II. Zwróć uwagę na numerację pinów w gnieździe pojazdu.

Żeńskie gniazdo OBD-II w samochodzie.




CANBed — najważniejsze funkcje API
Biblioteka dla MCP2515 udostępnia funkcje inicjalizacji magistrali, konfiguracji masek i filtrów, sprawdzania bufora odbiorczego oraz wysyłania i odbierania ramek. Poniżej omówienie tych elementów bez wchodzenia w szczegóły konkretnej wersji biblioteki.
Ustawianie szybkości transmisji
Podczas inicjalizacji należy wybrać szybkość magistrali, np. 125 kb/s, 250 kb/s, 500 kb/s albo 1 Mb/s. Wszystkie urządzenia podłączone do tej samej szyny muszą pracować z tą samą szybkością, inaczej nie będą poprawnie odbierać ramek.

Ustawienie maski odbiorczej i filtra


Parametr num wskazuje rejestr, który ma zostać użyty: 0 lub 1 dla maski oraz 0–5 dla filtra.
Parametr ext określa typ ramki. Wartość 0 dotyczy ramek standardowych, a wartość 1 ramek rozszerzonych.
Parametr ulData zawiera wartość maski albo filtra, czyli identyfikator lub zakres identyfikatorów, które mają zostać przepuszczone.
Maski i filtry pozwalają odbierać tylko te identyfikatory CAN, które są potrzebne aplikacji. W większej sieci ogranicza to liczbę ramek obsługiwanych przez mikrokontroler i upraszcza logikę programu.
CANBed — sprawdzenie odbioru
Funkcja sprawdzania odbioru informuje, czy w buforze MCP2515 czeka nowa ramka. Najczęściej wywołuje się ją w pętli programu przed próbą odczytu danych.

Odczyt identyfikatora CAN

CANBed — wysyłanie ramki
Parametr id jest identyfikatorem ramki CAN.
Parametr ext określa format ramki: 0 oznacza ramkę standardową, a 1 ramkę rozszerzoną.
Parametr len podaje długość pola danych w bajtach.
Parametr data_buf wskazuje bufor z bajtami, które mają zostać wysłane.
Funkcja wysyłająca przekazuje komplet pól do kontrolera MCP2515. To kontroler odpowiada za arbitraż, formatowanie ramki i fizyczne nadanie jej przez transceiver na magistralę.
CANBed — odbiór ramki

Parametr len zwraca długość odebranych danych.
Parametr buf wskazuje miejsce w pamięci, do którego biblioteka zapisuje odebrane bajty.
Po odczycie bufora program może sprawdzić identyfikator ramki, długość danych i samą zawartość wiadomości. Jeżeli wcześniej ustawiono maski i filtry, do aplikacji trafią tylko ramki spełniające te warunki.
Ile trwa ramka CAN? Przykład obliczeniowy
Założenia: klasyczna ramka danych CAN ze standardowym identyfikatorem 11-bitowym, 8 bajtami danych i szybkością 500 kbit/s. Pomijamy dodatkowe bity wstawiane w długie ciągi jednakowych bitów oraz przerwę międzyramkową.
Liczba bitów wynosi: początek ramki 1 + identyfikator 11 + RTR 1 + IDE 1 + r0 1 + DLC 4 + dane 64 + CRC 15 + separator CRC 1 + potwierdzenie ACK 2 + koniec ramki 7 = 108 bitów.
Czas transmisji to t = 108 / 500 000 s = 216 µs. Jest to obliczenie dla podanych założeń, a nie pomiar. Wstawianie dodatkowych bitów, przerwy, oczekiwanie na dostęp do magistrali i ewentualne ponowienia zwiększają czas potrzebny na przesłanie wiadomości. Nie traktuj wyniku jako gwarantowanego opóźnienia aplikacji.
Brak komunikacji — lista kontrolna
- Szybkość transmisji: sprawdź ustawienia biblioteki w każdym węźle.
- Zegar kontrolera: porównaj konfigurację biblioteki z oscylatorem MCP2515; pomylenie 8 i 16 MHz zmienia rzeczywiste czasy bitów.
- Terminacja: sprawdź oba końce przewodu i rezystancję przy wyłączonym zasilaniu.
- Połączenia: wyklucz zamianę CANH z CANL, przerwy w przewodach oraz brak masy odniesienia.
- Potwierdzenie ACK: pojedynczy węzeł na fizycznej magistrali nie otrzyma potwierdzenia. Potrzebny jest drugi poprawnie skonfigurowany węzeł, który może je nadać; odbiornik w trybie wyłącznie nasłuchowym tego nie zrobi.
- Odbiór w programie: sprawdź maski, filtry i odczytywanie bufora. ACK nie oznacza jeszcze, że aplikacja odbiorcy wykorzystała wiadomość.
Jak porównywać wersje CANBed?
Porównuj oznaczenia kontrolera, układu nadawczo-odbiorczego, zakresy zasilania, wyprowadzenia i obsługę przez bibliotekę. Nie zakładaj zgodności na podstawie samej nazwy rodziny. Opisana V1 z MCP2515 dotyczy klasycznego CAN; nie przypisuj jej obsługi CAN FD. Parametry innych wersji ustal z ich kart katalogowych.
Przy przejściu do własnej konstrukcji przygotuj schemat, dokumentację płytki i wykaz elementów. Dane do produkcji płytki drukowanej powinny odpowiadać tej samej wersji projektu co dokumentacja do montażu elementów na PCB. Działający prototyp nie zastępuje sprawdzenia docelowego urządzenia z jego zasilaniem, przewodami i obudową.
Podsumowanie
Uruchomienie CANBed V1 zacznij od sprawdzenia wersji sprzętu, połączeń i dwóch terminatorów 120 Ω. Następnie dopasuj szybkość transmisji oraz zegar MCP2515 w bibliotece i potwierdź odbiór ramek przez drugi węzeł. Obliczenia oraz orientacyjne wartości pomagają w diagnostyce, ale wymagania konkretnej instalacji ustalaj na podstawie schematu, kart katalogowych i normy.


