CAN (Controller Area Network)
Jeśli UART to spacer, a SPI to jazda sportowym autem po torze, to CAN jest jak opancerzony wóz bojowy, który przejedzie przez największe pole minowe zakłóceń elektromagnetycznych i dowiezie ładunek na miejsce.
Został stworzony w latach 80. przez firmę Bosch, aby zredukować setki kilogramów plątaniny kabli w samochodach. Dzisiaj to absolutny standard w motoryzacji (OBD2, komunikacja modułów w aucie), przemyśle i robotyce.
Najważniejsze cechy w pigułce
- Asynchroniczny - nie ma linii zegarowej.
- Multi-Master - tu nie ma jednego szefa. Każde urządzenie w sieci może rozpocząć nadawanie w dowolnym momencie.
- Oparty na Wiadomościach (Message-Based) - urządzenia nie mają swoich adresów (jak w I2C). Zamiast tego, to wysyłane wiadomości mają swoje ID.
- Ekstremalnie odporny - sygnał różnicowy i wbudowane potężne sprzętowe mechanizmy wykrywania błędów.
🔌 Jak to podłączyć? (Sygnał różnicowy)
W przeciwieństwie do UART czy SPI, mikrokontrolery zazwyczaj nie potrafią "bezpośrednio" rozmawiać na magistrali CAN. Mają wbudowany tylko kontroler CAN (który wypluwa sygnały TX i RX), ale potrzebują tzw. Transceivera CAN (np. popularne układy TJA1050, MCP2551, SN65HVD230), aby przetłumaczyć te sygnały na fizyczną magistralę.
Sama magistrala składa się z dwóch przewodów: * CAN_H (CAN High) * CAN_L (CAN Low)
Magia odporności, czyli dlaczego to takie stabilne?
W CAN stan logiczny nie jest mierzony względem masy (GND). Stan magistrali odczytuje się sprawdzając różnicę napięć między linią CAN_H a CAN_L. Jeśli w kabel uderzy silne zakłócenie elektromagnetyczne (np. iskrzenie świec w silniku), napięcie skoczy na obu przewodach jednocześnie. Różnica między nimi pozostanie jednak taka sama! Dzięki temu CAN kpi sobie z szumów.
Terminatory 120 Ω – Święta zasada CAN
Aby magistrala działała poprawnie i sygnały nie odbijały się od końców kabla (tworząc tzw. echa), na skrajnych końcach magistrali (pomiędzy linią CAN_H a CAN_L) musisz umieścić rezystory terminujące o wartości 120 Ω. Zawsze dwa, na najdalszych krańcach sieci.
🚦 Kto ma pierwszeństwo? (Arbitraż)
W sieci Multi-Master, gdzie każdy może zacząć gadać, co się stanie, gdy dwa moduły zaczną nadawać dokładnie w tej samej mikrosekundzie? W I2C byłby konflikt. W CAN wygrywa ten, kto ma... niższe ID wiadomości.
Ten mechanizm nazywa się Arbitrażem. W CAN stany logiczne nazywają się inaczej niż zwykle: * Ziobro (0) to stan Dominujący (ściąga napięcie na magistrali). * Jedynka (1) to stan Recesywny (odpuszczający).
Kiedy dwa urządzenia nadają jednocześnie bit po bicie, cały czas nasłuchują, co dzieje się na linii. Jeśli Urządzenie A nadaje 1, a Urządzenie B nadaje 0 - stan dominant (0) wygrywa na kablu. Urządzenie A widzi, że wysłało 1, ale na kablu jest 0, więc mówi: "Okej, ktoś jest ważniejszy, zamykam się i czekam na swoją kolej".
Wniosek: Wiadomość z ID
0x001(np. sygnał o odpaleniu poduszki powietrznej) zawsze "przejedzie" wiadomości o ID0x7FF(np. informacja o zmianie stacji w radiu).
📦 Ramka danych (Mało miejsca, ale pewnie)
Klasyczny CAN (CAN 2.0A / 2.0B) nie nadaje się do przesyłania filmów. Jego ładowność jest mikroskopijna, ale za to pancernie zabezpieczona.
Standardowa ramka zawiera: 1. Arbitration ID: 11-bitowe (Standard) lub 29-bitowe (Extended). Określa temat wiadomości i jej priorytet. 2. DLC (Data Length Code): Informacja, ile bajtów danych przesyłamy (od 0 do 8). 3. Payload (Dane): Maksymalnie tylko 8 bajtów! (W nowszym standardzie CAN-FD rozszerzono to do 64 bajtów). 4. CRC: Sprzętowa suma kontrolna. 5. ACK: Każde urządzenie w sieci, które odebrało wiadomość poprawnie (nawet jeśli jej nie potrzebuje!), potwierdza to jednym dominującym bitem ACK.
🏎️ Zasięg a Prędkość
W magistrali CAN musimy iść na kompromis – im dłuższy kabel, tym wolniej musimy przesyłać dane ze względu na czas propagacji sygnału.
| Prędkość (Baud Rate) | Maksymalna długość magistrali |
|---|---|
| 1 Mbps | ok. 40 metrów |
| 500 kbps | ok. 100 metrów |
| 125 kbps | ok. 500 metrów |
| 50 kbps | aż 1 kilometr! |
✅ Zalety i ❌ Wady
Zalety: * Niesamowicie odporny na błędy: Gdy urządzenie (node) na magistrali CAN zaczyna ciągle sypać błędami (np. uległo awarii), kontroler sprzętowo się wyłącza (tzw. Bus Off), aby nie "zatykać" sieci innym. * Architektura Multi-Master: Łatwo dodać nowy czujnik do sieci – wystarczy go wpiąć, nie trzeba konfigurować Mastera. * Sygnał różnicowy: Ogromna odporność na zakłócenia zewnętrzne.
Wady: * Złożoność: Uruchomienie CANa jest znacznie trudniejsze niż I2C czy SPI. Wymaga konfiguracji filtrów, maskowania ID i obsługi sprzętowych skrzynek pocztowych (mailboxes) w mikrokontrolerze. * Mały ładunek (Payload): 8 bajtów danych na ramkę wymaga fragmentacji, jeśli chcemy przesłać dłuższą informację. * Sprzęt: Wymaga dodatkowych układów scalonych (Transceiverów).