STM32-Motorsteuerung: Eine praktische Checkliste für die ADC/PWM-Synchronisation

STM32-Motorsteuerung: Eine praktische Checkliste für die ADC/PWM-Synchronisation

Wenn FOC „laut“ oder instabil wirkt: Timing synchronisieren

Problem: Häufig liegt es am Timing: Der ADC tastet die Phasenströme nicht zum richtigen Zeitpunkt relativ zur PWM ab. Mit dieser Checkliste richten Sie PWM-Erzeugung, ADC-Trigger, DMA und die Control-ISR so aus, dass Ihr Regelkreis saubere, deterministische Daten sieht.

Warum Synchronisation wichtig ist

  • Deterministische Abtastung reduziert Rauschen und Jitter, die PI/FOC-Loops destabilisieren.

  • Wiederholbares Timing erlaubt CPU/DMA/ISR-Budgetierung – und schnelleres Debugging.

  • Eine vorhersagbare Phase zwischen PWM und ADC stabilisiert Observer und Gain-Scheduling.

Checkliste

Eine stabile PWM-Basis wählen

  • Center-aligned PWM auf einem Advanced Timer (z. B. TIM1/TIM8) verwenden.

  • Preload für ARR/CCR aktivieren und Updates bei UEV anwenden, damit Duty-Änderungen atomar sind.

  • Totzeit budgetieren und die Abtastung in ein ruhiges Fenster legen.

Den ADC vom Timer triggern (nicht per Software)

  • Hardware-Trigger wählen, der an ein präzises PWM-Ereignis (Compare oder Update) gebunden ist.

  • Über den TRGO/TRGO2 des Timers auf den externen ADC-Trigger routen.

  • Für Phasenströme injizierte Konversionen bevorzugen; Regular-Group für langsamere Kanäle.

Das Sample ins „ruhige“ Fenster legen

  • Abseits der Schaltflanken und nach Totzeit/Blanking sampeln.

  • Bei Shunts: auf die tatsächlich leitende Phase ausrichten; zweites Sample nehmen, wenn Rekonstruktion nötig ist.

  • Sample-&-Hold-Zeit passend zur Quellenimpedanz (Verstärker + Shunt) wählen.

Daten mit DMA bewegen und die ISR schlank halten

  • DMA nutzen, um ADC-Werte in einen kleinen, festen Puffer zu schreiben.

  • Bei PWM- oder Halb-PWM-Raten die DMA-Half/Full-Transfer-Flags verwenden, um die Control-ISR mit frischen Daten zu wecken.

  • Schnelle ISR minimal halten; langsameres in Background/RTOS-Tasks verlagern.

Timing am Prüfstand verifizieren

  • Einen Debug-GPIO am ISR-Ein-/Austritt toggeln und gegen PWM-Flanken messen.

  • Falls möglich, ein Timer-Referenzsignal auf einem freien Kanal ausgeben, um den ADC-Triggerpunkt zu visualisieren.

  • ISR-Jitter über Last/Temperatur/Build-Varianten im Budget halten.

Ströme kalibrieren und skalieren

  • ADC-Offset-Kalibrierung durchführen, bevor die PWM aktiviert wird.

  • Pro-Kanal Offset/Skalierung speichern; beim Bring-up loggen.

  • Plausibilitätscheck der gemessenen Ströme gegen Zwischenkreiswerte und Ihr Motormodell.

Die Regelung schützen

  • Überstrom/Over-/Undervoltage/Over-Temperature entprellen und in definierte Safe States gehen.

  • Fehlerursache + Kontext (Duty, Drehzahlschätzung, Phasenströme) loggen.

Häufige Fallstricke

  • Software-gestartete ADC-Konversionen (nicht-deterministisch).

  • Abtastung zu nah an Schaltflanken oder innerhalb der Blanking-Zeit.

  • DMA-Puffer-Races (Lesen, während DMA schreibt).

  • CCR ohne Preload ändern → Mid-Cycle-Glitches.

  • Repetition-Counter-Verhalten der Advanced Timer übersehen.

Was beim Bring-up geloggt werden sollte

  • PWM-Frequenz, ADC-Trigger-Quelle und Abtastzeit.

  • ISR-Dauer und Jitter (min/avg/max).

  • Strom-Offsets/Skalen und alle Fault-Events.

  • Ein kurzer Scope-Screenshot: PWM-Flanken vs. Sample-Zeitpunkt.

Wo das in Ihrem Projekt passt

Wenn Sie mit Rauschen, instabilen PI-Gains oder Timing-Anomalien kämpfen, beginnen Sie mit der Synchronisation. Sobald die Abtastung deterministisch ist, werden Tuning und Diagnostik deutlich einfacher.

Unsere verwandten Leistungen

  • STM32 Echtzeit-Optimierung | TIM/PWM, ADC, DMA, FPU

  • STM32 Motor-Control Consulting — Remote-Testing & Android-Integration

0 Kommentare

Hinterlasse einen Kommentar

Bitte beachte, dass Kommentare vor der Veröffentlichung freigegeben werden müssen.