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 comments