LinkedIn YouTube Facebook
Szukaj

Newsletter

Proszę czekać.

Dziękujemy za zgłoszenie!

Wstecz
Artykuły

CAN od zera część 2: Jak połączyć dwa mikrokontrolery i przesłać pierwszą ramkę?

W poprzednim artykule przedstawiłem komunikację po magistrali CAN bez transceivera, z wykorzystaniem jednego mikrokontrolera. Tym razem zbudujemy pełne połączenie dwóch mikrokontrolerów STM32 poprzez transceivery CAN i prześlemy pierwszą ramkę danych. Projekt realizowany jest bez systemu operacyjnego (bare metal), z użyciem przerwań i FIFO CAN.

Schemat podłączenia dwóch mikrokontrolerów:

Dwa mikrokontrolery są połączone poprzez transceivery protokołem CAN, zgodnie z poniższym schematem blokowym:

Fizyczne połączenie:

Zdjęcie poniżej przedstawia fizyczne połączenie dwóch mikrokontrolerów poprzez transceivery protokołem CAN, za pomocą skręconych przewodów. Dodano także rezystor terminujący, który jest niezbędny do poprawnego działania. Normalnie powinienem dodać dwa rezystory 120Ω na początku i końcu magistrali, lecz w obecnym układzie magistrala jest krótka oraz niska jest prędkość transmisji (250 kbps). W przypadku dłuższej magistrali lub wyższej prędkości transmisji należy zastosować dwa rezystory 120 Ω na końcach magistrali, pomiędzy CAN_H i CAN_L.

Konfiguracja mikrokontrolerów w środowisku CubeIDE:

W obu mikrokontrolerach:

  • użyto CAN1,
  • włączono przerwanie od CAN1,
  • ustawiono bitrate 250 kbps.

Program mikrokontrolera nr 1:

Poniżej znajduje się fragment funkcji obsługi przerwania od CAN:

Nagłówek CAN:

Pętla główna, w której po naciśnięciu przycisku wysyłane są dane po CAN oraz następuje miganie diodą po odebraniu danych po CAN:

Ustawienia filtrów CAN:

Program mikrokontrolera nr 2:

Kod mikrokontrolera nr 2 jest analogiczny – różni się jedynie ID komunikacyjnym oraz wartościami przesyłanych danych.

Nagłówek CAN:

Pętla główna, w której po naciśnięciu przycisku wysyłane są dane po CAN oraz następuje miganie diodą po otrzymaniu danych po CAN:

Ustawienia filtrów CAN:

Przedstawienie działania układu:

Mikrokontroler nr 1 oraz mikrokontroler nr 2 czytają stan przycisku, po naciśnięciu przycisku wysyłają informację po CAN do siebie o częstotliwości i ilości mignięć diodą. Częstotliwość i ilość mignięć jest inna wysyłana przez każdy z mikrokontrolerów.

Przedstawienie przesyłanych danych za pomocą konwertera USB-CAN:

Do odczytu danych wysyłanych po CAN użyłem transceivera USB-CAN od firmy Waveshare. Mikrokontroler nr 1 ma ID 0x11, zaś mikrokontroler nr 2 0x12.

Podsumowanie:

Przedstawiłem prostą implementację CAN pomiędzy dwoma mikrokontrolerami wysyłając dane dotyczące ilości oraz częstotliwości mignięć diodą. W kolejnym artykule zajmę się implementacją CAN z wykorzystaniem RTOS oraz opisaniem mechanizmów potrzebnych do użycia CAN w urządzeniach, które chcemy aby działały bezawaryjnie przez wiele lat.

Udostępniony przez autora artykuł można znaleźć na blogu DMBP

Autor: Mateusz Pluta
Absolwent Politechniki Warszawskiej, specjalizujący się w elektronice przemysłowej. Zainteresowany zagadnieniami z zakresu hardware’u, w szczególności szybkimi interfejsami, kompatybilnością elektromagnetyczną oraz przekształtnikami energoelektronicznymi. Na blogu DMBP dzieli się wiedzą techniczną wynikającą z pasji i doświadczenia.