# Implementace rozhraní CAN v STM32 pro řízení elektrických pohonů: technická příručka
CAN sběrnice zůstává de facto standardem pro komunikaci v embedded systémech s přísnými požadavky na odolnost vůči poruchám. Na rozdíl od populárních UART/I2C zajišťuje CAN diferenciální přenos dat s hardwarovou detekcí kolizí prostřednictvím nedestruktivní arbitráže. Pro projekty založené na STM32G431RB (jako v sadě IHM03) je klíčové zohlednit vlastnosti fyzické a kanálové vrstvy při návrhu ovladačů.
Klíčové technické parametry ovlivňující implementaci:
- Rychlost přenosu: Od 125 kbit/s (Low-Speed) do 1 Mbit/s (High-Speed)
- Topologie sítě: Lineární s terminátory 120 Ω na koncích
- Formát rámce: Standard (11bitový ID) nebo Extended (29bitový)
- Bitové vycpávání: Automatická vložka bitů při sekvenci 5 stejných
Vestavěné CAN ovladače STM32 (bxCAN) podporují všechny režimy provozu, ale vyžadují přesné nastavení časových parametrů (SJW, BS1, BS2). Chyba v výpočtu předděliče baud rate vede k ztrátě synchronizace při vysoké zátěži sběrnice.
Návrh rozhraní CAN pro STM32 Motor Control
Modifikace projektu PMSM Control
Pro integraci CAN do existujícího projektu řízení pohonu bylo potřeba:
- Přidat do projektu knihovnu CAN ze STM32CubeMX
- Nastavit taktování CAN periferie přes RCC
- Implementovat kruhový buffer pro příjem/odesílání zpráv
- Synchronizovat zpracování CAN rámců s hlavním cyklem řízení motoru
Kritický moment — rozdělení času mezi zpracováním PWM a CAN. Při použití FreeRTOS byla vytvořena samostatná úloha s vyšší prioritou než úloha řízení motoru, ale nižší než přerušení bezpečnosti.
Struktura CAN databáze
Byla vyvinuta struktura podobná DBC pro řízení zpráv:
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},
// ... další zprávy
};
Každá zpráva je vázána na konkrétní funkci zpracování prostřednictvím tabulky dispečingu. To umožnilo vyhnout se monolitnímu switch-case a zjednodušilo přidávání nových typů rámců.
Praktická implementace a testování
Ladění fyzické vrstvy
Při prvních testech byly pozorovány chyby CRC kvůli:
- Nesprávnému umístění terminatorů (nainstalovány pouze na jednom konci)
- Překročení délky sběrnice (více než 40 m při rychlosti 1 Mbit/s)
- Použití nechráněné křivené dvojice
Řešení:
- Instalace terminatorů 120 Ω na oba konce linky
- Snížení rychlosti na 500 kbit/s pro délku 60 m
- Použití stíněného kabelu se zátěží 120 Ω
Osciloskopická analýza potvrdila správnost diferenciálních signálů (CAN_H=3.5 V, CAN_L=1.5 V v dominantním stavu).
Testování pod zátěží
Byly provedeny stresové testy při 80% zátěži sběrnice:
- Maximální propustnost: 700 kbit/s (teoretický limit pro 8bajtové rámce — 750 kbit/s)
- Zpoždění zpracování rámce: < 100 μs
- Koeficient chyb: 0 při délce sběrnice do 30 m
Kritická chyba nastala při současném odesílání 3 zpráv s vysokou prioritou (nízkým ID). Vyřešeno nastavením filtrů CAN_RX, které rozdělily zprávy do bank filtrů.
Co je důležité
- Časování sběrnice: Přesné výpočty BS1/BS2 jsou kritické pro stabilní provoz ve vysokých rychlostech
- Arbitráž priorit: Nízké ID mají přednost — plánujte hierarchii zpráv předem
- Zpracování chyb: Implementujte mechanismus restartu CAN ovladače při dosažení error passive state
- EMC: Stínění kabelu a uzemnění stínu na obou koncích je povinné pro průmyslové podmínky
- Testování: Používejte CAN analyzátory (např. PCAN-USB) pro ověření protokolu
Integrace rozhraní CAN do projektu řízení elektrických pohonů na STM32 vyžaduje hluboké porozumění jak hardwarovým vlastnostem periferie, tak specifikům protokolu. Úspěšná implementace otevírá cestu k vytváření distribuovaných systémů řízení s možností následné integrace s IoT platformami a AI analýzou.
— Editorial Team
Zatím žádné komentáře.