PWM-Frequenz und Auflösung sind dieselbe Entscheidung
Warum jeder Prescalerschritt Auflösung kostet, wie die APB-Taktverdopplung ganze Projekte um den Faktor zwei verschiebt und was mittenzentrierte PWM bei Motorsteuerungen wirklich bringt.
Eine Formel, ein Zielkonflikt
Ein Timer zählt Takte. Der Prescaler teilt den Eingangstakt, das Autoreload-Register legt fest, bei welchem Zählerstand von vorn begonnen wird. Daraus ergibt sich alles Übrige:
Beide werden um eins vermindert gespeichert – PSC = 0 bedeutet Teiler 1.
Die zweite, weniger beachtete Gleichung ist die wichtigere:
Frequenz und Auflösung sind damit nicht unabhängig voneinander. Wer die PWM-Frequenz verdoppelt, halbiert die Zahl der Tastgradstufen – bei gleichem Takt gibt es keinen Ausweg. Die einzige Stellschraube, die beides verbessert, ist ein höherer Timer-Takt.
| Timer-Takt | PWM-Frequenz | Stufen | Auflösung |
|---|---|---|---|
| 170 MHz | 20 kHz | 8500 | 13,05 bit |
| 72 MHz | 20 kHz | 3600 | 11,81 bit |
| 72 MHz | 100 kHz | 720 | 9,49 bit |
| 16 MHz | 100 kHz | 160 | 7,32 bit |
Die letzte Zeile zeigt die Grenze: 160 Stufen bedeuten, dass der Tastgrad in Schritten von 0,6 % springt. Bei einer LED fällt das nicht auf, bei einer Motorsteuerung sind es hörbare Stufen im Drehmoment und sichtbare Stufen in der Drehzahl.
Der Prescaler ist der Feind der Auflösung
Ein häufiges Muster in Beispielcode: Prescaler auf einen glatten Wert setzen, damit der Timer „1 MHz“ zählt, und dann mit ARR die Frequenz einstellen. Das rechnet sich im Kopf angenehm und wirft Auflösung weg.
Beispiel: 170 MHz Timer-Takt, PWM mit 20 kHz. Mit PSC = 169 zählt der Timer mit 1 MHz, ARR wird 49 – das sind 50 Stufen, also 5,6 bit. Mit PSC = 0 wird ARR = 8499, das sind 8500 Stufen und 13 bit. Dieselbe Frequenz, der Faktor 170 an Auflösung.
Die Regel ist deshalb einfach: Prescaler auf null lassen, solange ARR in den Zähler passt. Erst wenn der benötigte ARR-Wert 65535 übersteigt – bei 16-bit-Timern also unterhalb von etwa 2,6 kHz bei 170 MHz – wird der Prescaler notwendig. Viele moderne Mikrocontroller bieten 32-bit-Timer, bei denen sich die Frage kaum noch stellt.
Rechner: Prescaler, ARR und Auflösung
Takt und Zielfrequenz eintragen – der Rechner liefert Registerwerte, erreichte Frequenz mit Abweichung, Auflösung in Bit und Stufen sowie die Rechenlast der Interrupt-Routine.
fPWM = fTimer / ((PSC+1) · (ARR+1)). Der Rechner sucht den kleinsten Prescaler, bei dem ARR noch in den Zähler passt – jeder Prescalerschritt kostet Auflösung.
Die Taktfalle: welcher Takt gilt eigentlich?
Der häufigste Fehler bei STM32-Timern liegt nicht in der Formel, sondern in der Eingangsgröße. Timer hängen an einem Peripheriebus, und dort gilt eine Regel, die man einmal übersehen und dann lange suchen kann:
Ist der APB-Prescaler gleich 1, entspricht der Timer-Takt dem Bustakt. Ist er größer als 1, wird der Timer-Takt verdoppelt.
Ein Beispiel: Der Systemtakt beträgt 72 MHz, APB1 läuft mit Teiler 2 auf 36 MHz. Ein Timer an APB1 zählt trotzdem mit 72 MHz, nicht mit 36. Wer 36 einsetzt, bekommt die halbe Frequenz – oder wundert sich, warum ein Servo mit 25 Hz statt 50 Hz angesteuert wird und nicht reagiert.
Verlässlich ist nur der Blick in die Taktkonfiguration: Bei den Konfigurationswerkzeugen der Hersteller steht der Timer-Takt gesondert neben dem Bustakt. Wer ohne Werkzeug arbeitet, rechnet ihn aus dem Referenzhandbuch nach – und misst zur Sicherheit einmal mit dem Oszilloskop an einem freien Pin.
Mittenzentriert oder flankenzentriert
Im Normalbetrieb zählt der Timer von null bis ARR und beginnt von vorn. Der Ausgang schaltet also immer zum selben Zeitpunkt ein und je nach Tastgrad später aus – die steigende Flanke liegt fest, die fallende wandert.
Im mittenzentrierten Betrieb zählt er hoch und wieder herunter. Der Puls liegt dann symmetrisch um die Periodenmitte, beide Flanken wandern gleichmäßig nach außen:
Bei Motorsteuerungen ist dieser Preis fast immer gerechtfertigt. Die symmetrische Anordnung reduziert die Oberwellen im Ausgangsstrom spürbar, und bei mehrphasigen Brücken fallen die Schaltflanken der Phasen nicht mehr zusammen – das entlastet den Zwischenkreiskondensator und senkt die Störabstrahlung. Für LED-Dimmung oder Heizungsansteuerung dagegen ist es verschenkte Auflösung.
Totzeit bei Halbbrücken
Sobald zwei Schalter in Reihe an derselben Zwischenkreisspannung liegen, darf es keinen Moment geben, in dem beide leiten. Ein einziger solcher Moment ist ein Kurzschluss über die Versorgung, und er dauert nur so lange, bis etwas durchbrennt.
Fortgeschrittene Timer erzeugen die nötige Totzeit in Hardware – und nur dort gehört sie hin. Eine in Software eingefügte Verzögerung ist von Interrupts abhängig und damit keine Sicherheit. Die Größenordnung ergibt sich aus den Schaltzeiten:
Zu den Schaltzeiten kommen Streuung des Treibers und Laufzeit der Ansteuerung.
Die Totzeit ist kein reiner Sicherheitszuschlag, sie verzerrt auch: Während ihrer Dauer bestimmt die Stromrichtung den Ausgangspegel, nicht der Sollwert. Bei kleinen Tastgraden und hoher PWM-Frequenz kann die Totzeit einen erheblichen Anteil der Periode ausmachen – bei 100 kHz und 500 ns Totzeit sind es fünf Prozent. Regelungen für Motoren kompensieren das rechnerisch.
Die Interrupt-Last mitrechnen
Eine PWM-Periode ist zugleich ein Zeitraster für die Regelung. Bei 20 kHz bleiben zwischen zwei Update-Ereignissen 50 µs – in denen Strommessung, Reglerberechnung und das Setzen der neuen Vergleichswerte Platz finden müssen.
Diese Rechnung wird gern erst gemacht, wenn das System bereits sporadisch ausfällt. Zwei Punkte lohnen die frühe Beachtung: Erstens ist die ISR-Dauer nicht konstant – Verzweigungen, Divisionen und Speicherzugriffe streuen. Ausgelegt wird gegen den längsten Fall, nicht gegen den Mittelwert. Zweitens braucht auch der Rest des Systems Rechenzeit; oberhalb von etwa fünfzig Prozent Last durch eine einzelne ISR wird es eng.
Wenn es knapp wird, ist die Regelung auf jeden zweiten PWM-Zyklus zu legen häufig die einfachste Lösung: Die Schaltfrequenz bleibt hoch genug, um unhörbar zu sein, die Regelrate halbiert sich, und das fällt bei trägen Regelstrecken nicht ins Gewicht.
Checkliste
1. Den tatsächlichen Timer-Takt prüfen, nicht den Systemtakt und nicht den Bustakt. Bei STM32 verdoppelt sich der Timer-Takt, sobald der APB-Prescaler größer als eins ist.
2. Prescaler auf null lassen, solange ARR in den Zähler passt. Jeder Teilerschritt kostet Auflösung.
3. Auflösung gegen die Anwendung prüfen. Unter 8 bit ist für Motorsteuerung meist zu grob, für Beleuchtung ausreichend.
4. Totzeit in Hardware erzeugen, nicht in Software – und den Wert aus den Schaltzeiten des konkreten Treibers ableiten, nicht aus einem Beispielprojekt übernehmen.
5. Erste Messung am Oszilloskop, bevor Leistung an der Brücke liegt. Frequenz, Tastgrad und Totzeit sind in wenigen Sekunden verifiziert – ein Rechenfehler an einer Halbbrücke ist teurer.
Gehäuse und Bauteile aus dem 3D-Druck
Zu jeder Baugruppe gehört ein Gehäuse. Wir konstruieren es parametrisch und drucken es im eigenen Labor – FDM für stabile Funktionsteile, SLA für feine Details. Vom ersten Prototyp bis zur Kleinserie, inklusive Nachbearbeitung und Gewindeeinsätzen. Das Erstgespräch ist unverbindlich.
Telefon: +49 (0) 176 820 42391
Weiterlesen
ADC-Eingangsbeschaltung: Quellimpedanz & Sampling-Zeit – die Strommessung, die in dieselbe Interrupt-Routine gehört.
Wärmeabfuhr & Thermal Vias – wohin die Verlustleistung der Halbbrücke geht.
Alle Engineering Guides
Die Registernamen PSC und ARR sowie die Taktverdopplung am APB beziehen sich auf die STM32-Familie. Andere Hersteller verwenden andere Bezeichnungen, das Rechenprinzip ist dasselbe. Verbindlich sind die Angaben im Referenzhandbuch des eingesetzten Bausteins.