CAN vs LIN: protokoły komunikacyjne w przemyśle motoryzacyjnym
Mateusz Pluta z inthou.pl zgłębia świat protokołów komunikacyjnych CAN i LIN, kluczowych m.in. w przemyśle motoryzacyjnym. Przedstawiając CAN jako protokół o dużej odporności na zakłócenia, idealny dla zastosowań wymagających niezawodnej komunikacji, oraz LIN jako tańszą alternatywę dla mniej krytycznych zastosowań, Pluta podkreśla znaczenie wyboru odpowiedniego protokołu w zależności od specyficznych potrzeb projektowych.
Protokół CAN
Realizując w pracy weryfikację swojego projektu, doszedłem do analizy protokołu komunikacyjnego. Mój projekt komunikuje się ze światem zewnętrznym za pomocą protokołu CAN (Can Area Network). CAN jest bardzo popularnym protokołem komunikacyjnym stosowanym w wielu gałęziach przemysłu, w których głównym celem nie jest zawrotna prędkość transmisji, a na przykład duża odporność na zakłócenia.
Pierwszym zastosowaniem protokołu CAN był przemysł motoryzacyjny, pod który był projektowany. Obecnie CAN wykorzystywany jest w wielu gałęziach przemysłu (samoloty, maszyny rolnicze, automatyka, urządzenia medyczne), wszędzie tam, gdzie niezbędna jest odporna na zakłócenia transmisja danych.
Definicja stanów logicznych
Zanim przejdziemy do dokładnego opisania protokołu CAN wyjaśnijmy sobie jedną rzecz, mianowicie poziomy napięć oraz związane z nimi stany logiczne. Protokół CAN określa dwa bity: recesywny (logiczna „1”) oraz dominujący (logiczne „0”). W zależności od prędkości (High/Low Speed) magistrali w normalnej pracy definiowane są dwa rodzaje poziomów logicznych. Napięcie na magistrali Low-Speed oraz High-Speed są zgodne z poniższymi przebiegami.
Magistrala CAN działa w sposób różnicowy tzn. mierzona jest różnica napięć pomiędzy CAN-H, a CAN-L. Podczas normalnej pracy różnica <500mV uznawana jest jako bit recesywny, zaś bit dominujący występuję wtedy gdy różnica jest większa niż 900mV.
Budowa ramki danych
CAN jest szeregowym protokołem komunikacyjnym. Wiadomości wysyłane są rozgłoszeniowo, czyli dane trafiają do wszystkich urządzeń wpiętych do sieci, urządzenie weryfikuje czy dana ramka jest dla niego interesująca, wykorzystując do tego ID. ID ramki informuję o jej zawartości oraz decyduje o priorytecie. Decyzja o przyjęciu ramki realizowana jest za pomocą filtrowania sprzętowo-software’owego.
Zacznijmy od przedstawienia graficznego budowy ramek protokołu CAN. Występują dwa formaty ramek w magistrali, wersja podstawowa (CAN 2.0A) i rozszerzona (CAN 2.0B).
CAN używa czterech różnych typów ramek:
- Ramka danych (Data Frame)
Pole arbitrażu determinuje priorytet wiadomości podczas chęci jednoczesnego dostępu dwóch urządzeń do linii transmisyjnej. W zależności od wersji protokołu CAN pole arbitrażu może składać się z 11-bitowego identyfikatora i bitu RTR (CAN 2.0A) lub z 29-bitowego identyfikatora (CAN 2.0B) oraz bitów SRR, IDE i RTR.
Pole danych: zawiera od 0 do 8 bajtów danych
Pole CRC: zawiera 15 bitów, obliczana od bitu startu do pola danych
Pole potwierdzenia: transmiter czeka na potwierdzenie od urządzenia odbiorczego. Jeśli nie otrzyma potwierdzenia ramka, jest transmitowana ponownie.
- Ramka zdalna (Remote Frame)
W ramce Remote bit RTR jest recesywny co oznacza wygranie arbitrażu przez ramki remote z ramkami danych, ponieważ ramki remote mają wyższy priorytet. Ramki Remote nie mają pola danych, lecz stosowane są do wysyłania żądania informacji o identyfikatorze i długości danych. Po wystąpieniu żądania węzeł posiadający informację powinien zapewnić je jak najszybciej.
- Ramka błędu (Error Frame)
Jest transmitowana kiedy któreś z urządzeń wykryje błąd w transmisji, po wysłaniu ramki wszystkie urządzenia połączone do magistrali wiedzą o błędzie. Pole Flaga Błędu składa się z 6 takich samych bitów, Ogranicznik Błędu złożony jest z 8 bitów recesywnych. Ogranicznik błędu zapewnia zwłokę na odczytanie Flagi Błędu przez inne urządzenia i wysłanie przez nie Ramki Błędu. Po wystąpieniu Ramki Błędu tranmister ponownie wysyła ramkę.
- Ramka przepełnienia (Overload Frame)
Jest to ramka bardzo podobna do ramki błędu. Ten rodzaj ramki nie jest używany zbyt często, współczesne kontrolery nie dopuszczają do przepełnienia.
Warstwa fizyczna
Do realizacji komunikacji za pomocą protokołu CAN niezbędny jest mikrokontroler oraz transceiver. Procesor zapewnia obsługę protokołu CAN, zaś tranceiver zamianę poziomów napięć.
Medium transmisyjnym protokołu CAN są dwa skręcone przewody o nominalnej impedancji 120Ω, ekranowane lub nieekranowane. Skrętka zapewnia bliskie umiejscowienie przewodów między sobą co pomaga w odporności na zakłócenia zewnętrzne jak i emisję zakłóceń do otoczenia przez magistralę. Maksymalna prędkość protokołu CAN wynosi 1Mbit/s. Prędkość transmisji spada odpowiednio ze wzrostem długości przewodów, zgodnie z poniższą tabelą:
Terminacja: zrealizowana jest za pomocą rezystorów 120Ω umieszczonych na krańcach linii transmisyjnej. Zadaniem rezystorów terminujących jest usunięcie odbić na końcach linii oraz zapewnienie odpowiedniego napięcia w stanie recesywnym zgodnego z protokołem CAN.
Pojęcia związane z CAN
Arbitraż: Kiedy dwa urządzenia chcą wysłać w tym samym czasie, wiadomość dochodzi do arbitrażu. Arbitraż decyduje, które urządzenie dostanie dostęp do magistrali.
Bit stuffing: po wystąpieniu 5 takich samych bitów wysłanych przez węzeł nadawczy, pojawia się bit przeciwny, odbiorniki nie kwestionują tego bitu jako danej. Bit Stuffing jest użyteczny do wykrywania błędów. Kiedy odbiorniki wykryją 6 takich samych bitów występujących po sobie pojawi się błąd Bit Stuffing.
Protokół LIN
Protokół LIN stosowany jest w miejscach, gdzie prędkość, oraz bezawaryjny przesył nie jest parametrem krytycznym. LIN nie jest tak pewny/odporny jak CAN, lecz jest dużo tańszy, dlatego jest często używaną alternatywą. Przykładami miejsc zastosowań protokołu LIN w samochodzie są: sterowniki szyb elektrycznych, sterowniki wycieraczek, czy lusterek.
Charakterystyka
- LIN jest szeregowym protokołem, który powstał na bazie UART. LIN został zaprojektowany jako protokół jednomasterowy.
- W protokole LIN występują dwa rodzaje bitów: dominujący i recesywny. Bit dominujący jest logicznym „0”, zaś recesywny logiczna „1”.
- Prędkość protokołu LIN 1-20kbit/s na dystansie do 40 metrów. Prędkość LIN jest ograniczona do 20kbit/s z powodu zakłóceń EMC, generowanych przez magistralę.
- Stała czasowa powinna wynosić od 1 do 5µs. Należy odpowiednio dobierać pojemności węzłów, aby wartość stałej czasowej została spełniona.
Warstwa fizyczna
Magistrala LIN jest w zasadzie jednoprzewodowa, drugim przewodem jest przewód masy. Procesory z reguły wyposażone są w protokół komunikacyjny LIN, niezbędny jest tylko tranceiver do zamiany poziomów napięć. Rozwiązaniem alternatywnym jest komunikacja procesora z tranceiverem po UART. Tranceivery mają wyjście typu open-drain, część z nich jest wyposażona w wewnętrzną diodę i rezystor. Jeśli tranceiver pracuję jako master, zalecane jest zastosowanie zewnętrznej diody i rezystora (typowo 1kΩ).
Napięcie w instalacji samochodowej waha się pomiędzy 7-18V, także te wartości napięć wykorzystywane są w magistrali LIN. Poziomy napięć stanów logicznych w zależności od rodzaju urządzenia nadajnik czy odbiornik przedstawia poniższy rysunek:
Transmisja danych
Urządzenie typu master wysyła wiadomość do konkretnego urządzenia typu slave, aby uzyskać od niego informację. Każde urządzenie typu slave ma przyporządkowany unikatowy adres w danej sieci. Na wiadomość od mastera odpowiada konkretny slave co zabezpiecza przed jednoczesnym dostępem do medium transmisyjnego więcej niż jednego urządzenia.
LIN używa następujących plików konfiguracyjnych, które ustalają parametry transmisji:
- Plik LDF (LIN Description File) zawiera informację dotyczące sieci komunikacyjnej tj. ramek i sygnałów, używany w urządzeniach master i slave.
- Plik LCF (LIN Configuration File) umieszczony tylko w urządzeniu master zawiera informację na temat interwałów czasowych, okresów oraz zapewnia każdej ramce odpowiedni czas transmisji.
Budowa ramki:
Ramka składa się z Nagłówka, Czasu odpowiedzi, oraz Odpowiedzi. Wiadomość zostaje stworzona kiedy urządzenie typu master wyślę ramkę zawierającą Nagłówek. Urządzenia typu Slave wypełniają ramkę danymi w zależności od zawartości Nagłówka. Każda wysyłana ramka zajmuje odpowiedni czas transmisji, w zależności od konfiguracji w pliku LCF.
Budzenie składa się z przynajmniej 13 bitów dominujących w tym bitu startu. Pole budzenia zakończone jest przynajmniej jednym bitem recesywnym. Czas budzenia trwa od 250µs do 5ms.
Synchronizacja wysyłana w celu pomiaru czasu przez urządzenia slave pomiędzy opadającymi zboczami (Baud Rate). Wysyłana jest ramka 0x55 (01010101). Na podstawie pomiarów urządzenia typu slave ustawiają odpowiedni Baud Rate. Poprzez pole synchronizacji urządzenia typu slave nie potrzebują rezonatorów.
Identyfikator jest ośmiobitowy, zawiera adres slave, do którego kierowane jest żądanie informacji, oraz dwa bity parzystości P0 i P1. Bit P0 jest wynikiem funkcji XOR z bitów B0, B1, B2, B4, zaś bit P1 jest wynikiem zanegowanej funkcji XOR z bitów B1, B3, B4, B5.
Pole danych zbudowane jest od 1 do 8 bajtów w zależności od ramki wysłanej od mastera.
W celu ogranicr: zenia poboru prądu (np. podczas postoju samochodu) urządzenia typu slave przechodzą do stanu uśpienia kiedy na magistrali nie pojawia się komunikacja przez 4s. Drugim sposobem przejścia urządzeń do stanu uśpienia jest wysłanie odpowiedniej ramki przez master.
Rodzaje ramek:
- bezwarunkowe (unconditional frames) normalne ramki wysyłane od mastera do odpowiedniego slave. Slave ma za zadanie uzupełnić ramkę w dane.
- wyzwalane zdarzeniem (event triggered frames) urządzenia typu slave uzupełniają ramkę tylko w momencie kiedy dane ulegną zmianie. Jeśli dane nie ulegną zmianie, ramki nie są uzupełniane. Ten rodzaj ramek zmniejsza obciążenie magistrali komunikacyjnej.
- sporadyczne (sporadic frames) wysyłana przez master kiedy dowie się o zmianie wartości w slave. Zwykle master uzupełnia ramkę, a urządzenie slave otrzymuję informację.
Autor: Mateusz Pluta