TJA105 MCP2515 raspberryPi CanBus

CAN Bus na MCP2515 i raspberryPi używając SocketCan

MCP2515  i raspberryPi

W ciągu moich projektów związanych z siecią CAN zaczynałem od arduino – jak w tym wpisie. Później pojawiły się różne moduły na USB i RS232. Jednak najbardziej przypadł mi do gusty prosty moduł z MCP2515 i TJA105. W połączeniu z raspberryPi dał mi do dyspozycji potężny komputerek z interfejsem CAN. Jest szybki, nie gubi pakietów i banalny w użyciu. W tym wpisie pokażę jak przygotować popularny moduł do użycia z RaspberryPi i jak odebrać pierwsze pakiety używając SocketCan.

 

Przygotowanie modułu MCP2515 i TJA105

Moduł po zakupie gotowy jest do zasilania napięciem 5V. Niestety RaspberryPi akceptuje poziom 3,3V na portach IO (input-output). Trzeba więc tak przerobić moduł, by był gotowy na niższe napięcie. Najprościej byłoby nic nie zmieniać i po prostu zasilić moduł 3,3V. O ile MCP2515 nie stwarza problemu i jest w stanie działać na niższym napięciu, tak układ TJA105 wymaga napięcia 5v.

 

W przyszłym kroku wykonamy poniższe czynności:

  • układ MCP2515 zasilany będzie napięciem 3.3V
  • układ TJA105 zasilany będzie napięciem 5V
  • dzielnik napięcia umożliwi konwersję 5V na 3.3V by oba powyższe układy pracowały bez zarzutu.

 

W pierwszej kolejności nacinamy ścieżkę na dole płytki, odcinając układ TJA105 od gałęzi VCC:
TJA105 MCP2515 raspberryPi CanBus

Następnie podnosimy nóżkę numer 4 – RX pin układu TJA105:
TJA105 MCP2515 raspberryPi CanBus

tu w innym ujęciu TJA105i MCP2515:
TJA105 MCP2515 raspberryPi CanBus

na powyższym zdjęciu widać też przylutowany dzielnik napięcia. Wartości rezystorów to:

  • 68kΩ(683) od strony kondensatora (masa)
  • 39kΩ(393) od strony czerwonego kabla RX (sygnał, +5)

 

Teraz wykonujemy inne połączenia przy użyciu cienkiego przewodu:
TJA105 MCP2515 raspberryPi CanBus

  • biały – wyjście przewodu do napięcia 5v – zasilanie TJA105
  • zielony – przylutowanie przewodu z 5v do kondensatora filtrującego i gałęzi zasilania TJA105
  • niebieski – przewód z podniesionego w poprzednim kroku pinu RX do dzielnika napięcia
  • czerwony – dzielnik napięcia przylutowany do jednego z wyprowadzeń kondensatora
  • żółty – wejście sygnału RX pochodzące od TJA105 odpowiednio dopasowane napięciowo przez dzielnik napięcia i połączone do MCP2515

 

Podłączenie MCP2515 do RaspberryPi

Ok, układ gotowy, teraz czas połączyć go do raspberryPi:

Moduł MCP2515 RaspberryPi
Numer w porcie GPIO
RaspberryPi
Nazwa sygnału
INT  32 IO12
SCK  23 SPI0.CLK
SI  19 SPI0.MOSI
SO  21 SPI0.MISO
CS  24 SPI0.CE0
GND  6 GND
VCC  1 3,3V
„biały”przewód 2 5,0V

 

 

 

 

 

 

 

 

 

Użycie ProtoBoard

Ja dla wygody zamiast przewodów do połączenia użyłem płytki RPi ProtoBoard, wygląda to następująco:

TJA105 MCP2515 raspberryPi CanBus

TJA105 MCP2515 raspberryPi CanBus

Konfiguracja RaspberryPi

Ok, sprzęt gotowy i podłączony do Raspberry. Czas skonfigurować malinkę i odebrać pierwszy pakiet z sieci CAN.

Na wstępie aktywujemy SPI w raspberry – pokazuję jak to zrobić w tym wpisie.

Następnie modyfikujemy plik config.txt:

odnajdujemy sw nim linijkę „dtparam=spi=on” – po aktywowaniu SPI powinna być odkomentowana (Nie zawierać ‚#’ na początku) i zaraz pod nią dopisujemy:

następnie wciskamy Ctrl+X i Y, by zapisać plik.

Krótkie wyjaśnienie powyższego wpisu, umożliwia ewentualne dopasowanie do waszych warunków, ale jeśli od początku robicie wszystko według tego wpisu, tylko dla ciekawości:

  • oscillator: prędkość kwarcu wlutowanego na płytce MCP2515 [Hz]
  • interrupt: miejsce podłączenia PINu INT do RaspberryPi  [numer portu IO]

Ok, restartujemy RaspberryPi – komenda reboot.

Teraz chwila prawdy, sprawdzamy czy wszystko polutowaliśmy poprawnie i czy kable zostały dobrze podłączone:

wywołujemy komendę:

a następnie:

powinniśmy zobaczyć poniższą odpowiedź. Jeśli widzimy „can0” wszystko jest idealnie! Jeśli nie – sprawdzamy połączenia i płytkę. Mi udało się dopiero po drugim sprawdzeniu i poprawie połączeń 😛

MACP2515 raspberrypi CAN interface

SocketCan przy użyciu RaspberryPi i MCP2515

Ok, czas odebrać pakiety. Instalujemy oprogramowanie SocketCan:

Teraz konfigurujemy nasz interfejs podając z jaką prędkością sieci CAN będzie pracował – u mnie będzie to 95k.

socketcan mscp2515 raspberrypi

Jeśli dotrwaliście do tego momentu i wszystkie komendy nie zwróciły żadnych błędów poniższa komenda uruchamiająca dumper pakietów będzie tylko zwieńczeniem starań:

po jej wywołaniu widzimy jak odbywa się ruch w sieci CAN!:
socketcan candump mscp2515 raspberrypi

Gratulacje, teraz możliwości są nieograniczone!
mVn

10 komentarzy

  1. Cześć,

    pracuję nad czymś podobnym. Rozbudowuję fabryczne radio o możliwość odtwarzania z BT + możliwością kontroli odtwarzania z kierownicy ;). Wykorzystuje raspberry pi zero W + 2 x MCP2515. Mam tutaj taką zajawkę https://youtu.be/hC46aexGG74 . Jestem na etapie finalizacji.
    Napisałem obsługę wyświetlacza, bo na początku miałem plan pozbycia się radia fabrycznego, jednak finalnie wyświetlacza nie będę wykorzystywał.

    Na początku projektu, szukając informacji, trafiłem na twój artykuł z Arduino + Can. Artykuł był bardzo pomocny :).

    Pozdrawiam.

    1. Hahaha, ale trafiłeś – właśnie pracuję nad podobnym rozwiązaniem. Zmieniłem telefon i nowy aparat nie ma wyjścia Jack 3.5mm, więc muszę przejść na BT. Obejrzałem filmik – Świetny projekt! Podoba mi się jak płynnie wyświetlasz na BID i nie nakłada Ci się z danymi z radia!

    1. prawdopodobnie można by zasilić z raspberryPi bez kombinowania z dzielnikiem. Tylko z dostępnością ciężko. Ten moduł z poradnika jest dostępny w formie wygodnej, polutowanej płytki na pęczki, czy to na allegro czy na Aliexpressie 😉

  2. Na zdjęciu numer 2 brak jest obok C1 rezystorów a na następnym zdjeciu już są, jakie są ich wartości?

  3. Hej, mam pytanko: w jaki sposób łączysz się z malinką? Chodzi mi o rodzaje połączenia i konfigurację

  4. Witam, czy możesz udzielić mi informacji czy jest możliwość odczytania danych z CAN poprzez gniazdo OBD i ewentualnie, do których pinów w OBD podłączyć moduł MCP. Ogólnie chodzi mi o prawidłowe podłączenie modułu MCP od strony instalacji w samochodzie. Poskładałem raspi z modułem i do momentu wpisania komendy „candump can0” jest ok. Po jej wpisaniu nie dzieje się nic, tzn. nie czyta „ruchu w sieci CAN. Próbowałem podpinać w różnych konfiguracjach do gniazda OBD i nic. W samochodzie natomiast dzieją się różne rzeczy np. włącza i wyłącza się radio lub włączają się światła. Byłbym wdzięczny z pomoc.
    Pozdrawiam 🙂

    1. Hej Marek,

      jasne! dla mojego Opla (generalnie wszystkie Ople z lat ~2004-2008) wszystkie linie są w gnieździe OBD. a wyprowadzone są następująco:
      // \ 1 2 3 4 5 6 7 8 /
      // \9 10 11 12 13 14 15 16/

      #define SPEED CAN_33KBPS
      //Low Speed CAN 33.3kbps
      //LSCAN-H - 1
      //LSCAN-L - GND - 5

      //#define SPEED CAN_95KBPS
      //Medium Speed CAN 95kbps
      //MSCAN-H - 3
      //MSCAN-L - 11

      //#define SPEED CAN_500KBPS
      //High Speed CAN 500kbps
      //HSCAN-H - 6
      //HSCAN-L - 14

      więcej znajdziesz tu: http://www.emvn.pl/siec-can-opel-odczyt-jasnosci/

      pozdrawiam,
      Kamil

Leave a Reply

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *