Implementierung der CAN-Schnittstelle in STM32 für die Steuerung elektrischer Antriebe: Technischer Leitfaden
Der CAN-Bus bleibt der de-facto-Standard für die Kommunikation in eingebetteten Systemen mit strengen Anforderungen an die Fehlertoleranz. Im Gegensatz zu den beliebten UART/I2C-Schnittstellen bietet CAN eine differentielle Datenübertragung mit Hardware-Kollisionsbehandlung durch nicht-destruktive Arbitration. Für Projekte basierend auf STM32G431RB (wie im IHM03-Kit) ist es entscheidend, bei der Gestaltung der Treiber die Spezifika der physischen Schicht und der Datenverbindungsschicht zu berücksichtigen.
Wichtige technische Parameter, die die Implementierung beeinflussen:
- Übertragungsgeschwindigkeit: Von 125 kbit/s (Low-Speed) bis 1 Mbit/s (High-Speed)
- Netzwerktopologie: Linear mit 120-Ohm-Abschlusswiderständen an den Enden
- Rahmenformat: Standard (11-Bit-ID) oder Extended (29-Bit)
- Bit-Stuffing: Automatische Bit-Einfügung nach einer Sequenz von 5 identischen Bits
Die eingebauten CAN-Controller von STM32 (bxCAN) unterstützen alle Betriebsmodi, erfordern jedoch eine präzise Einstellung der Timing-Parameter (SJW, BS1, BS2). Ein Fehler bei der Berechnung des Baudrate-Vorteilers führt unter hoher Buslast zu einem Synchronisationsverlust.
Gestaltung der CAN-Schnittstelle für die STM32-Motorsteuerung
Anpassen des PMSM-Steuerungsprojekts
Um CAN in ein bestehendes Antriebssteuerungsprojekt zu integrieren, waren folgende Schritte erforderlich:
- Hinzufügen der CAN-Bibliothek aus STM32CubeMX zum Projekt
- Konfigurieren der CAN-Peripheral-Taktung über RCC
- Implementieren eines Ringpuffers für das Empfangen/Versenden von Nachrichten
- Synchronisieren der CAN-Rahmenverarbeitung mit der Hauptschleife der Motorsteuerung
Ein kritischer Aspekt ist die Zeitteilung zwischen PWM-Verarbeitung und CAN. Bei Verwendung von FreeRTOS wurde eine separate Aufgabe mit höherer Priorität als die Motorsteuerungsaufgabe, aber niedriger als Sicherheitsunterbrechungen, erstellt.
CAN-Datenbankstruktur
Eine DBC-ähnliche Struktur wurde für das Nachrichtenmanagement entwickelt:
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},
// ... other messages
};
Jede Nachricht ist über eine Dispatch-Tabelle mit einer spezifischen Handler-Funktion verknüpft. Dies vermied einen monolithischen switch-case und vereinfachte das Hinzufügen neuer Rahmentypen.
Praktische Implementierung und Tests
Debugging der physischen Schicht
Bei den ersten Tests wurden CRC-Fehler beobachtet aufgrund von:
- Falscher Platzierung der Abschlusswiderstände (nur an einem Ende installiert)
- Buslänge, die die Grenzen überschreitet (über 40 m bei 1 Mbit/s)
- Verwendung ungeschirmten Twisted-Pair-Kabels
Lösung:
- 120-Ohm-Abschlusswiderstände an beiden Enden der Leitung installieren
- Geschwindigkeit auf 500 kbit/s für 60 m Länge reduzieren
- Geschirmtes Kabel mit 120-Ohm-Impedanz verwenden
Oszilloskop-Analyse bestätigte die Korrektheit der differentiellen Signale (CAN_H=3,5 V, CAN_L=1,5 V im dominanten Zustand).
Lasttests
Belastungstests wurden bei 80 % Buslast durchgeführt:
- Maximaler Durchsatz: 700 kbit/s (theoretisches Limit für 8-Byte-Rahmen — 750 kbit/s)
- Rahmenverarbeitungs-Latenz: < 100 µs
- Fehlerquote: 0 für Buslängen bis 30 m
Ein kritischer Fehler trat bei gleichzeitiger Übertragung von 3 hochprioritären Nachrichten (niedrige ID) auf. Er wurde durch Konfiguration der CAN_RX-Filter behoben, die Nachrichten nach Filterbanken trennen.
Wichtige Erkenntnisse
- Bus-Timing: Präzise BS1/BS2-Berechnungen sind entscheidend für stabilen Hochgeschwindigkeitsbetrieb
- Prioritätsarbitration: Niedrige IDs haben Vorrang — planen Sie Ihre Nachrichten-Hierarchie im Voraus
- Fehlerbehandlung: Implementieren Sie einen CAN-Controller-Reset-Mechanismus beim Erreichen des error-passive-Zustands
- EMV: Kabelabschirmung und Erdung der Abschirmung an beiden Enden sind in industriellen Umgebungen obligatorisch
- Tests: Verwenden Sie CAN-Analysatoren (z. B. PCAN-USB) zur Protokollverifikation
Die Integration einer CAN-Schnittstelle in ein STM32-Projekt zur Steuerung elektrischer Antriebe erfordert ein tiefes Verständnis sowohl der Hardware-Features des Peripheriegeräts als auch der Protokollspezifika. Eine erfolgreiche Implementierung eröffnet die Tür zu verteilten Steuerungssystemen mit potenzieller Integration in IoT-Plattformen und KI-Analytik.
— Editorial Team
Noch keine Kommentare.