STM32F4xxx — cześć 4 –CAN

st_logo

CAN stanowi bardzo elastyczną sieć, łatwą do wykonania i oprogramowania choć wielu się wydaje, że nadaje się tylko do samochodów i nic więcej … tymczasem to bzdury… tym razem nieco sobie ją przybliżymy … a potem…

Oczywiście CAN jest szeroko stosowana w segmencie automotive, ale można ją też znaleźć w wielu zastosowaniach.  Istnieje wiele warstw aplikacji dostępnych dla CAN:

  • ISO 15765  – dla samochodów osobowych
  • J1931 – dla samochodów ciężarowych
  • CANopen  – dla automatyki przemysłowej

To te popularniejsze i najczęściej spotykane warstwy fizyczne CAN , ale też nic nie stoi na przeszkodzie by opracować własny protokół dostosowany do własnych potrzeb i zastosowań.  Co ważniejsze dostępność transceiverów CAN zapewnia możliwość tworzenia stabilnych sieci charakteryzujących się wysoką niezawodnością bez konieczności stosowania drogich infrastruktur sieci na kablach koncentrycznych. Coraz większa liczba dostępnych dla amatorów mikrokontrolerów ma wbudowane kontrolery jak też istnieje mnóstwo przykładów oprogramowania. Umożliwia to łatwy start i opracowanie własnych rozwiązań i rozwinięć sieci.

imgres

Kontroler CAN jest dosyć skomplikowanym urządzenie, ale dzięki jego dostępności w tanich microkontrolerach jedyne co musimy zapewnić  to  odpowiednia konfiguracja i zapis danych do kontrolera , a całą resztą zajmie się on automatycznie zwalniając nas z całej misternej i skomplikowanej otoczki.  Ba kontroler CAN sam odczyta ramki danych z sieci i przechowa je w pamięci FIFO. Powiadomi też mikrokontroler że otrzymał dane które sobie odczytamy i odpowiednio zinterpretujemy. Zajmie się też filtrowaniem wiadomości dzięki czemu możemy łatwo ustawić ignorowanie informacji które nas nie interesują.  Jak wiec widać wygląda to wszystko bardzo prosto i przyjemnie. Takie też jest faktycznie.

Oczywiście musimy spełnić określone warunki , ale nie będzie to specjalnie męczące i wymagające. Co zatem nam się przyda ??


..:: Sprzęt ::..


W tym cyklu będziemy używać płytek wyposażonych w mikrokontrolery STM32F4, które zawierają wbudowany kontroler CAN.

  1. STM32F429I Discovery  –  płytka ta posiada mikrokontroler CORTEX-M4 zawierający natywną obsługę CAN , i choć posiada kontroler jednak nie posiada transceivera który musimy dołączyć do linii RX i TX  (uwaga nie mylić z UART)

images

Transceiverem może być popularny układ Microchip MCP2551 czy TJA1050  lub SN65HVD230 np taki:

500_500_productgfx_0d017496c7e54c946dfbe0e82ec2e1ae

który można zakupić w sklepie elty.pl, i który polecam ze względu na napięcie pracy 3,3V odpowiednie dla ARM. W przypadku płytki STM32F429I Discovery spotkamy kilka problemów, zasadniczo nie są specjalnie kłopotliwe, ale warto zdawać sobie sprawę z ich istnienia. Mianowicie chodzi o to, że porty na których umieszczono CAN1 i CAN2 kolidują nieco z innymi funkcjami płytki gdyż są jako alternatywne funkcje przykładowo:

  • CAN1 koliduje z konfiguracją wyświetlacza
  • CAN2 koliduje z USB

To niestety była konieczność by w małej obudowie 144pin zmieścić tle funkcji…

Oczywiście nie musimy od razu demontować USB czy LCD by użyć CAN , możemy bez problemu podłączyć transceiver pod piny GPIOB12 i GPIOB13 i bawić się CAN2 , CAN jeden mamy na pinach GPIOA11 i 12 , podpiętych do LCD więc może nam coś krzaczyć jeśli będziemy chcieli użyć CAN i LCD …  oczywiście mamy możliwość remapowania pinów , ale zaś te są też użyte do komunikacji z SDRAM :)

Oczywiście możemy jeszcze użyć kontrolera MCP2515 pracującego na SPI, ale za dużo z nim roboty dlatego tu zajmiemy się niewielkim upośledzeniem płytki :)  ale tym zajmiemy się później.

2. SOM-STM32F429IGT6  — ta płytka to potęga i tu jest lepiej :) przede wszystkim obudowa procka to 176pinów …

HY-STM32F429IG-2

Tu mamy ładnie wyprowadzone oba CANY  i jedynie przyda nam się trochę przewodu.

Obie płytki można dostać w sklepie elty.pl.  Oczywiście by zbudować sieć będziemy potrzebować 2ch płytek  lub więcej … ja użyję w/w ….

Oczywiście każdy sobie może transceiver sam zbudować, nie jest to specjalnie trudne np schemat dla MC2551 wygląda następująco:

cantransceiver

CON1 zawiera zasilanie i piny wejściowe RX/TX CAN  zaś  JP2 to już Wyjście CANL i CANH , dodatkowo JP1 umożliwia włączenie/wyłączenie terminatora „sieci” 120om.


..:: NASZA SIEĆ ZAŁOŻENIA ::..


by zacząć zabawę z CAN , nie będę omawiał sposobów grzebania w systemach samochodowych więc ci co o tym myśleli , mogą od razu zamknąć przeglądarkę :) Moim celem jest pokazanie jak korzystać z dobrodziejstwa CAN , jak wysyłać i odbierać dane i jak ją konfigurować …

Nasza sieć będzie się charakteryzować cechami:

  • 11 i 29 bitowy identyfikator  — użyjemy i CAN standard i CAN Extended
  • 8 bajtów danych  —  nie dużo będziemy przesyłać , ale za to dane mogą być zmieniane „na gorąco”  co nam się przyda do przesyłania na żywo różnych wiadomości
  • P2P  — każdy węzeł będzie widział wszystkie wiadomości.  Tu mała uwaga węzeł nie czyta własnych wiadomości.
  • Łatwość dodawania węzłów  —   można będzie dopinać urządzenia i wysyłać między nimi informacje z czujników …
  • Priorytety — tu sobie ułatwimy i wiadomości z wyższym priorytetem będziemy wysyłać zależnie od wartości ID.  Czyli niższy ID będzie miał wyższy priorytet.
  • Automatyczna retransmisja uszkodzonych wiadomości.
  • Prędkość przesyłu  — ze względu na uproszczenia będziemy wysyłać z prędkościami od 10kbps do 1Mbps , ale wszystkie węzły będą musiały pracować z tą samą prędkością.
  • Połączenie wykonamy za pomocą 1 pary skręconych przewodów … zapeni to też dobrą ochronę przed zewnętrznymi zakłuceniami.
  • nasza sieć bądzie pracować z różnymi poziomami uziemienia

Jak wiec widać zarówno warstwa fizyczna jak i dobranie ID i danych spowoduje łatwe i niewiele wymagające zastosowanie CAN jak też i przyzwoitą odpornośc na zakłócenia i uszkodzenia całości .

Oczywiście ja bedę miał w sieci tylko 2 urządzenia , ale gdy ew zajdzie potrzeba zastosowania większej ilości podłączę dodatkowe oparte o np popularne AVR bez kontrolera CAN  gdzie zastosuję kontroler MCP2515 :

500_500_productgfx_ed4c408c9a59940d8304128677b3e7a4

który jest również dostępny w ofercie sklepu elTy.pl.


2 urządzenia w mojej sieci są spowodowane tym że CAN składa się co najmniej z dwóch węzłów połączonych parą skręconych przewodów .

UWAGA !!   przewody powinny być skręcone przynajmniej 1 raz na cal.

Przewód ochronny (uziom) może być dołączony do skrętki , lub osobny , ale nie jest integralność uziomu konieczna do prawidłowego działania sieci, dlatego żę CAN jest medium różnicowym i jak w każdej takiej magistrali ważne są poziomy napięcia miedzy parą przewodów , a nie względem masy.

CAN jest dokładnie opisany w normie określającej ISO 11898.  Maksymalna długość sieci zależy od częstotliwości, liczby węzłów i przewodności przewodów. należy jednak pamiętać że „długa sieć”  to niska prędkość przesyłu. Nasza para przewodów będzie skrętką przesyłową dlatego musimy zadbać o terminację na obu jej końcach , dla naszej sieci 120om dzięki czemu całkowita wartość rezystancji mierzona między przewodami przesyłowymi wyniesie 60om.

Nasza sieć CAN oparta bedzie na uproszczeniach wiec każdy węzeł będzie widział wszystkie wiadomości i każdy będzie mógł nadawać swoją wiadomość przy pomocy RAMKI CAN, ale tylko w momencie kiedy sieć będzie w stanie spoczynku. I tylko od indywidualnego ustawienia węzła będzie zależeć czy dana wiadomość będzie odebrana czy zignorowana.


..:: Przykładowy węzeł CAN ::..


Budowa węzła jak wspominałem nie jest skomplikowana w przypadku użycia nowoczesnych mikrokontrolerów z wbudowanym kontrolerem CAN  i w zasadzie składa się z mikrokontrolera i transceivera CAN :

przechwytywanie

Na schemacie wyżej widzimy uproszczoną konstrukcję węzła czyli właśnie od lewej -> mikrokontroler, transceiver i złącze CAN którym w ogólnie przyjętym standardzie jest złącze typu DB9.

Warto nadmienić że  w przypadku mikrokontrolerów STM32 I/O dla CAN są pinami TTL/CMOS 5V Tolerant co właśnie powoduje łatwość projektowania interfejsu. Nasze mikrokontrolery są wyposażone w 2 kontrolery CAN , co tez nie jest bez znaczenia bo możemy wysyłać informacje do siebie z drugiego kontrolera … traktując go jako osobny węzeł.


…:: Informacje ogólne ::…


Istnieją trzy warstwy fizyczne stosowane w CAN my bedziemy się trzymać z kilku powodów jednej z nich a mianowicie :

  • HI-Speed   – odporna na uszkodzenia i najbardziej popularna w urządzeniach  (ją właśnie zastosujemy)  Ta warstwa fizyczna jest używana w europejskich samochodach.  Ponadto ma możliwość pracy na jednym przewodzie co jest używane przez GM dla sieci Lo-Speed wraz z sgłówną Hi-Speed. Tu nadmienię iż Hi-Speed w samochodach pracuje na szybkości 500kbps dla pojazdów osobowych i 250kbps dla ciężarówek.

Dla przykładu CANopen pracuje z szybkościami 1Mbps , ale odporna na zakłócenia w nim jest aż 125kbps, GM na 1 przewodzie stosuje prędkość 33,33kbps.  1Mbps jest trudny w obsłudze i wymaga specjalnego traktowania , 500 -ka jest prostsza i tańsza . Przejście z jednej warstwy fizycznej na drugą wymaga zastosowania transceivera , ponadto mogą być wymienialne i możliwa jest zmiana prędkości transmisji. Różne warstwy fizyczne nie mogą być stosowane razem jeśli pracują na innych poziomach napięć , ale można je łączyć za pomocą bram i ruterów. Dodatkowo każdy kontroler obsługuje każdą warstwę fizyczną.W przypadku HI-Speed mamy parę skręconych przewodów z terminacją 120om na obu końcach magistrali, węzły można łączyć bezpośrednio do magistrali.

Na magistrali CAN napięcie mieści się w granicach 2,5 do 4V względem ziemi. Nominalnie CAN Lo  zmienia się odd 2,5 do 1V .  Dlatego też różnica ta (lub 0V) między dwoma przewodami to logiczne 1 , a 3V to logiczne 0.  0 jest stanem dominującym zaś 3V recesywne.

 

I to na tyle w tej chwili , wyposażcie się w sprzęt i łaczymy się w następnej części.