Spisu treści:

Prosty samouczek dla CANBUS: 8 kroków
Prosty samouczek dla CANBUS: 8 kroków

Wideo: Prosty samouczek dla CANBUS: 8 kroków

Wideo: Prosty samouczek dla CANBUS: 8 kroków
Wideo: Magistrala CAN bus - Hakowanie licznika samochodowego, pierwsza komunikacja z poziomu AVR - część 01 2024, Listopad
Anonim
Prosty samouczek dla CANBUS
Prosty samouczek dla CANBUS

Uczę się CAN od trzech tygodni, a teraz wypełniłem kilka aplikacji, aby potwierdzić moje wyniki w nauce. W tym samouczku dowiesz się, jak wykorzystać Arduino do implementacji komunikacji CANBUS. Jeśli masz jakieś sugestie, zapraszamy do zostawienia wiadomości.

Kieszonkowe dzieci:

Sprzęt komputerowy:

  • Maduino Zero CANBUS
  • Moduł temperatury i wilgotności DHT11
  • 1.3" I2C OLED 128x64-Niebieski
  • Kabel DB9 do DB9 (żeński do żeńskiego)
  • Linia Duponta

Oprogramowanie:

IDE Arduino

Krok 1: Co to jest CANBUS

Co to jest CANBUS
Co to jest CANBUS
Co to jest CANBUS
Co to jest CANBUS

O CAN

CAN (Controller Area Network) to sieć komunikacji szeregowej, która może realizować rozproszone sterowanie w czasie rzeczywistym. Został opracowany dla przemysłu motoryzacyjnego w celu zastąpienia złożonej wiązki przewodów magistralą dwuprzewodową.

Protokół CAN definiuje warstwę łącza danych i część warstwy fizycznej w modelu OSI.

Protokół CAN jest znormalizowany ISO z ISO11898 i ISO11519. ISO11898 to standard szybkiej komunikacji CAN z szybkością komunikacji 125kbps-1Mbps. ISO11519 to standard komunikacji CAN o niskiej szybkości z szybkością komunikacji poniżej 125 kb/s.

Tutaj skupiamy się na szybkim CAN.

ISO-11898 opisuje sposób przekazywania informacji między urządzeniami w sieci i jest zgodny z modelem Open Systems Interconnection (OSI), który jest zdefiniowany w kategoriach warstw. Rzeczywista komunikacja pomiędzy urządzeniami połączonymi fizycznym medium jest zdefiniowana przez fizyczną warstwę modelu

  • Każdą jednostkę CAN podłączoną do magistrali można nazwać węzłem. Wszystkie jednostki CAN są podłączone do magistrali zakończonej na każdym końcu rezystorami 120 Ω, tworząc sieć. Magistrala składa się z linii CAN_H i CAN_L. Kontroler CAN określa poziom magistrali na podstawie różnicy w poziomie mocy na obu przewodach. Poziomy autobusowe dzielą się na poziomy dominujące i recesywne, które muszą być jednym z nich. Nadawca wysyła wiadomość do odbiorcy, dokonując zmiany na poziomie magistrali. Kiedy linia logiczna „i” jest wykonywana na magistrali, poziom dominujący to „0”, a poziom recesywny to „1”.
  • W stanie dominującym napięcie CAN_H wynosi około 3,5V a napięcie CAN_L około 1,5V. W stanie recesywnym napięcie obu linii wynosi około 2,5V.
  • Sygnał jest różnicowy, dlatego CAN wywodzi się ze swojej odpornej na zakłócenia i odporności na uszkodzenia. Zbalansowany sygnał różnicowy zmniejsza sprzężenie szumów i pozwala na wysoką szybkość sygnalizacji za pośrednictwem skrętki dwużyłowej. Prąd w każdej linii sygnałowej jest równy, ale w przeciwnym kierunku, co skutkuje efektem redukcji pola, który jest kluczem do niskiej emisji hałasu. Zastosowanie zrównoważonych odbiorników różnicowych i okablowania skrętką zwiększa tłumienie sygnału wspólnego i wysoką odporność na zakłócenia magistrali CAN.

Nadajnik-odbiornik CAN

Transceiver CAN jest odpowiedzialny za konwersję między poziomem logicznym a sygnałem fizycznym. Konwertuj sygnał logiczny na poziom różnicowy lub sygnał fizyczny na poziom logiczny.

Kontroler CAN

Kontroler CAN jest podstawowym komponentem CAN, który realizuje wszystkie funkcje warstwy łącza danych w protokole CAN i może automatycznie rozwiązywać protokół CAN.

MCU

MCU odpowiada za sterowanie obwodem funkcyjnym i sterownikiem CAN. Na przykład parametry kontrolera CAN są inicjowane podczas uruchamiania węzła, ramka CAN jest odczytywana i wysyłana przez kontroler CAN itp.

Krok 2: Informacje o komunikacji CAN

Gdy magistrala jest bezczynna, wszystkie węzły mogą rozpocząć wysyłanie wiadomości (kontrola multi-master). Węzeł, który jako pierwszy uzyskuje dostęp do magistrali, otrzymuje prawo do wysyłania (tryb CSMA/CA). Gdy wiele węzłów rozpoczyna wysyłanie w tym samym czasie, węzeł, który wysyła wiadomość o wysokim priorytecie ID, otrzymuje prawo do wysłania.

W protokole CAN wszystkie komunikaty wysyłane są w ustalonym formacie. Gdy magistrala jest bezczynna, wszystkie jednostki podłączone do magistrali mogą rozpocząć wysyłanie nowych wiadomości. Gdy więcej niż dwie komórki zaczynają wysyłać wiadomości w tym samym czasie, priorytet określany jest na podstawie identyfikatora. ID nie reprezentuje adresu docelowego wysłania, ale raczej priorytet wiadomości docierającej do magistrali. Gdy więcej niż dwie komórki zaczynają wysyłać wiadomości w tym samym czasie, każdy bit nieoprocentowanego identyfikatora jest rozstrzygany jeden po drugim. Jednostka, która wygra arbitraż, może nadal wysyłać wiadomości, a jednostka, która przegra arbitraż, natychmiast przestaje wysyłać i odbiera pracę.

Magistrala CAN jest magistralą rozgłoszeniową. Oznacza to, że wszystkie węzły „słyszą” wszystkie transmisje. wszystkie węzły niezmiennie odbierają cały ruch. Sprzęt CAN zapewnia lokalne filtrowanie, dzięki czemu każdy węzeł może reagować tylko na interesujące komunikaty.

Krok 3: Ramki

Ramki
Ramki

Urządzenia CAN wysyłają dane przez sieć CAN w pakietach zwanych ramkami. CAN ma cztery typy ramek:

  • Ramka danych: ramka zawierająca dane węzła do transmisji
  • Ramka zdalna: ramka żądająca transmisji określonego identyfikatora
  • Ramka błędu: ramka przesyłana przez dowolny węzeł wykrywający błąd
  • Ramka przeciążenia: ramka do wstrzykiwania opóźnienia między danymi lub ramką zdalną;

Ramka danych

Istnieją dwa rodzaje ramek danych, standardowe i rozszerzone.

Znaczenie pól bitowych na rysunku to:

  • SOF – Pojedynczy dominujący bit początku ramki (SOF) oznacza początek wiadomości i jest używany do synchronizacji węzłów w magistrali po bezczynności.
  • Identyfikator - 11-bitowy identyfikator standardu CAN ustala priorytet wiadomości. Im niższa wartość binarna, tym wyższy jej priorytet.
  • RTR–Pojedynczy bit żądania transmisji zdalnej (RTR)
  • IDE – Dominujący bit rozszerzenia pojedynczego identyfikatora (IDE) oznacza, że przesyłany jest standardowy identyfikator CAN bez rozszerzenia.
  • R0 – Zarezerwowany bit (do ewentualnego wykorzystania przez przyszłą zmianę standardu).
  • DLC - 4-bitowy kod długości danych (DLC) zawiera liczbę przesyłanych bajtów danych.
  • Dane - można przesłać do 64 bitów danych aplikacji.
  • CRC - 16-bitowa (15 bitów plus ogranicznik) cykliczna kontrola nadmiarowa (CRC) zawiera sumę kontrolną (liczbę przesłanych bitów) danych aplikacji poprzedzających wykrywanie błędów.
  • ACK–ACK ma 2 bity, jeden to bit potwierdzenia, a drugi to ogranicznik.
  • EOF - to 7-bitowe pole końca ramki (EOF) oznacza koniec ramki CAN (komunikatu) i wyłącza napychanie bitów, wskazując na błąd upychania, gdy jest dominujący. Gdy 5 bitów o tym samym poziomie logicznym występuje kolejno podczas normalnej pracy, do danych wstawiany jest bit o przeciwnym poziomie logicznym.
  • IFS – Ta 7-bitowa przestrzeń międzyramkowa (IFS) zawiera czas wymagany przez kontroler do przeniesienia poprawnie odebranej ramki do jej właściwej pozycji w obszarze bufora komunikatów.

Arbitraż

W stanie bezczynności magistrali jednostka, która rozpoczyna wysyłanie wiadomości, jako pierwsza otrzymuje prawo do wysyłania. Gdy wiele jednostek rozpoczyna wysyłanie w tym samym czasie, każda jednostka wysyłająca rozpoczyna się od pierwszego bitu segmentu arbitrażu. Jednostka z największą liczbą dominujących poziomów ciągłego wyjścia może kontynuować wysyłanie.

Krok 4: Prędkość i odległość

Prędkość i odległość
Prędkość i odległość

Magistrala CAN to magistrala, która łączy jednocześnie wiele jednostek. Teoretycznie nie ma ograniczeń co do łącznej liczby jednostek, które można podłączyć. W praktyce jednak liczba jednostek, które można podłączyć, jest ograniczona przez opóźnienie czasowe na magistrali i obciążenie elektryczne. Zmniejsz prędkość komunikacji, zwiększ liczbę jednostek, które można podłączyć i zwiększ prędkość komunikacji, liczba jednostek, które można podłączyć, zmniejsza się.

Odległość komunikacji jest odwrotnie proporcjonalna do prędkości komunikacji, a im większa odległość komunikacji, tym mniejsza prędkość komunikacji. Dłuższy dystans może wynosić 1 km lub więcej, ale prędkość jest mniejsza niż 40 km/s.

Krok 5: Sprzęt

Sprzęt komputerowy
Sprzęt komputerowy

Moduł Maduino Zero CAN-BUS to narzędzie opracowane przez Makerfabs do komunikacji CANbus, oparte na Arduino, z kontrolerem CAN i transceiverem CAN, aby stworzyć gotowy do użycia port CAN-bus.

  • MCP2515 to samodzielny kontroler CAN, który implementuje specyfikację CAN. Jest w stanie przesyłać i odbierać zarówno standardowe, jak i rozszerzone dane oraz ramki zdalne.
  • MAX3051 łączy kontroler protokołu CAN z fizycznymi przewodami linii magistrali w sieci kontrolera (CAN). MAX3051 zapewnia możliwość transmisji różnicowej do magistrali i możliwość odbioru różnicowego do sterownika CAN.

Krok 6: Połączenie

Połączenie
Połączenie

Podłącz moduł DHT11 do modułu Maduino Zero CAN-BUS za pomocą przewodów, które będą używane jako instrument do obsługi komunikacji CAN. Podobnie podłącz wyświetlacz do modułu, aby odebrać dane i je wyświetlić.

Połączenie między Maduino Zero CANBUS i DHT11:

Maduino Zero CANBUS -- DHT11

3v3 ------ VCC GND ------ GND D10 ------ DANE

Połączenie między Maduino Zero CANBUS i OLED:

Maduino Zero CANBUS -- OLED

3v3 ------ VCC GND ------ GND SCL ------ SCL SDA ------ SDA

Użyj kabla DB9, aby połączyć dwa moduły Maduino Zero CANBUS.

Krok 7: Kod

MAX3051 uzupełnia konwersję poziomów różnicowych na sygnały logiczne. MCP2515 uzupełnia funkcje CAN, takie jak kodowanie i dekodowanie danych. MCU musi tylko zainicjować kontroler oraz wysyłać i odbierać dane.

  • Github:
  • Po zainstalowaniu Arduino nie ma pakietu do obsługi płytki (Arduino zero), który byłby wymagany do zainstalowania.
  • Wybierz narzędzia ->Płytka -> Menedżer płytki, wyszukaj „Arduino zero” i zainstaluj „Arduino SAMD Boards”.
  • Wybierz Narzędzia ->Płytka -> Arduino Zero (Native USB Port), wybierz Narzędzia -> Port -> com…
  • Po pobraniu programu z GitHub należy upewnić się, że wszystkie pliki znajdują się w katalogu projektu, który zawiera pliki bibliotek obsługujące CANBUS.
  • Zainstaluj bibliotekę czujników DHT firmy Adafruit, która służy do sterowania DHT11 w celu uzyskania temperatury i wilgotności.
  • Użyj różnych adresów, aby osobno wysłać temperaturę i wilgotność w kodzie Test_DHT11.ino.

CAN.sendMsgBuf(0x10, 0, stmp1.length(), stmp_send1);

opóźnienie (500); CAN.sendMsgBuf(0x11, 0, stmp2.length(), stmp_send2); opóźnienie (500);

„0x10” oznacza identyfikator wiadomości, „0” oznacza standardową ramkę, „stmp1.length()” oznacza długość wiadomości, „stmp_send1” to wysyłane dane.

  • W kodzie Test_OLED.ino wszystkie komunikaty na CANBUS są odbierane przez zapytanie, a wymagane informacje są wyświetlane na OLED.
  • Wgraj program Maduino-CANbus-RS485/Test_DHT11_OLED/Test_DHT11/Test_DHT11.ino do modułu, który podłączył się do czujnika i wgraj program Maduino-CANbus RS485/Test_DHT11_OLED/Test_OLED/Test_OLED.ino do innego modułu, który podłączył się do OLED.

Krok 8: Pokaż

Pokazać
Pokazać
Pokazać
Pokazać

Włącz oba moduły, na wyświetlaczu pojawi się temperatura i wilgotność.

Zalecana: