Zurück zur Startseite

CAN in STM32: Technischer Leitfaden zur Integration | Embedded

Technischer Leitfaden zur Integration der CAN-Schnittstelle in ein Elektroantriebssteuerungsprojekt auf STM32. Detaillierte Analyse der Timing-Einrichtung, Fehlerbehandlung und Lasttests. Empfehlungen für Entwickler eingebetteter Systeme.

Vollständiger Leitfaden zur CAN-Schnittstelle in STM32 Motor Control-Projekten
Advertisement 728x90

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.

Google AdInline article slot

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:

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},
    // ... 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:

Google AdInline article slot
  • 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

Advertisement 728x90

Weiterlesen