Powrót do strony głównej

CAN w STM32: przewodnik techniczny po integracji | Embedded

Przewodnik techniczny po integracji interfejsu CAN w projekt sterowania napędem elektrycznym na STM32. Szczegółowa analiza konfiguracji timingów, obsługi błędów i testowania pod obciążeniem. Rekomendacje dla programistów systemów embedded.

Pełny przewodnik po interfejsie CAN w projektach STM32 Motor Control
Advertisement 728x90

# Implementacja interfejsu CAN w STM32 do sterowania napędami elektrycznymi: przewodnik techniczny

Szyna CAN pozostaje standardem de facto dla komunikacji w systemach embedded z rygorystycznymi wymaganiami odporności na awarie. W przeciwieństwie do popularnych UART/I2C, CAN zapewnia różniczkową transmisję danych z sprzętowym przetwarzaniem kolizji poprzez nieinwazyjny arbitraż. W projektach opartych na STM32G431RB (jak w zestawie IHM03) kluczowe jest uwzględnienie cech warstwy fizycznej i kanałowej przy projektowaniu sterowników.

Kluczowe parametry techniczne wpływające na implementację:

  • Prędkość transmisji: Od 125 kbit/s (Low-Speed) do 1 Mbit/s (High-Speed)
  • Topologia sieci: Liniowa z terminatorami 120 Ω na końcach
  • Format ramki: Standard (11-bitowy ID) lub Extended (29-bitowy)
  • Bit stuffing: Automatyczne wstawianie bitów przy sekwencji z 5 identycznych

Wbudowane kontrolery CAN w STM32 (bxCAN) obsługują wszystkie tryby pracy, ale wymagają precyzyjnego ustawienia parametrów czasowych (SJW, BS1, BS2). Błąd w obliczeniu prescalera baud rate doprowadzi do utraty synchronizacji przy wysokim obciążeniu szyny.

Google AdInline article slot

Projektowanie interfejsu CAN dla STM32 Motor Control

Modyfikacja projektu PMSM Control

Do integracji CAN w istniejący projekt sterowania napędem było potrzebne:

  • Dodać do projektu bibliotekę CAN ze STM32CubeMX
  • Skonfigurować taktowanie peryferii CAN poprzez RCC
  • Zaimplementować bufor pierścieniowy do odbioru/wysyłki wiadomości
  • Zsynchronizować przetwarzanie ramek CAN z głównym cyklem sterowania silnikiem

Krytyczny moment — podział czasu między przetwarzaniem PWM a CAN. Przy użyciu FreeRTOS utworzono oddzielne zadanie o priorytecie wyższym niż zadanie sterowania silnikiem, ale niższym niż przerwań bezpieczeństwa.

Struktura bazy danych CAN

Opracowano strukturę podobną do DBC do zarządzania wiadomościami:

Google AdInline article slot
typedef struct {
    uint32_t id;
    uint8_t dlc;
    void (*handler)(uint8_t*);
} can_msg_t;

const can_msg_t can_db[] = {
    {0x123, 8, handle_motor_status},
    {0x246, 4, handle_control_cmd},
    // ... inne wiadomości
};

Każda wiadomość jest powiązana z konkretną funkcją obsługi poprzez tabelę dyspozytornią. Umożliwiło to uniknięcie monolitycznego switch-case i uprościło dodawanie nowych typów ramek.

Praktyczna implementacja i testowanie

Debugowanie warstwy fizycznej

Podczas pierwszych testów obserwowano błędy CRC spowodowane:

  • Nieprawidłowym umiejscowieniem terminatorów (zainstalowane tylko na jednym końcu)
  • Przekroczeniem długości szyny (ponad 40 m przy prędkości 1 Mbit/s)
  • Użyciem nieekranowanej skrętki

Rozwiązanie:

Google AdInline article slot
  • Instalacja terminatorów 120 Ω na obu końcach linii
  • Obniżenie prędkości do 500 kbit/s dla długości 60 m
  • Zastosowanie ekranowanego kabla o impedancji 120 Ω

Analiza oscyloskopowa potwierdziła poprawność sygnałów różniczkowych (CAN_H=3.5V, CAN_L=1.5V w stanie dominującym).

Testowanie pod obciążeniem

Przeprowadzono testy stresowe przy 80% obciążeniu szyny:

  • Maksymalna przepustowość: 700 kbit/s (teoretyczny limit dla ramek 8-bajtowych — 750 kbit/s)
  • Opóźnienie przetwarzania ramki: < 100 µs
  • Współczynnik błędów: 0 przy długości szyny do 30 m

Krytyczny błąd wystąpił przy jednoczesnej transmisji 3 wiadomości o wysokim priorytecie (niskim ID). Rozwiązano to poprzez konfigurację filtrów CAN_RX, dzieląc wiadomości na banki filtracji.

Co ważne

  • Timingi szyny: Precyzyjne obliczenia BS1/BS2 są krytyczne dla stabilnej pracy na wysokich prędkościach
  • Arbitraż priorytetów: Niskie ID mają przewagę — planuj hierarchię wiadomości z wyprzedzeniem
  • Obsługa błędów: Zaimplementuj mechanizm restartu kontrolera CAN po osiągnięciu stanu error passive
  • EMC: Ekranowanie kabla i uziemienie ekranu na obu końcach jest obowiązkowe w warunkach przemysłowych
  • Testowanie: Używaj analizatorów CAN (np. PCAN-USB) do weryfikacji protokołu

Integracja interfejsu CAN w projekt sterowania napędem elektrycznym na STM32 wymaga głębokiego zrozumienia zarówno cech sprzętowych peryferii, jak i specyfiki protokołu. Udana implementacja otwiera drogę do tworzenia rozproszonych systemów sterowania z możliwością późniejszej integracji z platformami IoT i analizą AI.

— Editorial Team

Advertisement 728x90

Czytaj dalej