RC-Glied eines PWM-DAC
Diese Seite erfordert Javascript!
Sie haben Javascript deaktiviert oder Ihr Browser unterstützt kein Javascript.
Diese Seite wird so nicht funktionieren.
Diese Seite berechnet die Mindestwerte von R und C für einen PWM-DAC bei gegebener Frequenz.
Hier sehen Sie die wirklich überschaubare Schaltung. Ein RC-Tiefpass filtert das PWM-Signal so dass daraus eine weitgehend AC-freie Spannung entsteht.
Üblicherweise erzeugt ein Timer Ihres Microcontrollers das PWM-Signal. Er zählt pausenlos von 0 bis n und der Ausgang ist 1 ab einem gewissen Schwellwert, der dann das Tastverhältnis bestimmt.
Der Endwert n ist dabei konstant, so dass wir eine feste Frequenz erhalten, deren Tastverhältnis nur durch den Schwellwert bestimmt wird.
Der Trick bei der Dimensionierung ist, die richtige Zeitkonstante τ zu wählen. τ errechnet sich aus R×C. Ist τ zu klein erhalten wir eine zu hohe Welligkeit des Ausgangssignals (Ripple), ist es zu groß verlängert sich die Einschwingzeit unnötigerweise.
Dieses Formular verwendet für den Kondensator stets 1 µF, der in den meisten realistischen Fällen ein guter Startpunkt sein dürfte, nur der dazu passende Widerstand wird so berechnet, dass der Ripple kleiner als ½ LSB ist. Die berechnete Einschwingzeit ist die Zeit, die nötig ist, bis sich das Ausgangssignal auf ½ LSB angenähert hat.
Sie können R und C dann nach Belieben verändern und sehen darunter das Ergebnis. Die Knöpfe Rmin Berechnen
und Cmin berechnen
können dabei hilfreich sein.
Meine Prophezeiung: wenn Sie bei Kapazitäten von 10 nF..10 µF keine realistischen Widerstände (10 kΩ..10 MΩ) erhalten dürfte die Schaltung in der Realität problematisch bis unbrauchbar sein.
Hinweis:
Taugeändert ist die nominelle Zeitkonstante, also R×C.
Die Einschwingzeit ist berechnet bei maximaler Plus-Toleranz und der
Ripple ist berechnet bei maximaler Minus-Toleranz.
Beachten Sie auch die Toleranzen der Bauteile! Der Ripple ist am größten bei Minus-Toleranz, die Einschwingzeit bei Plus-Toleranz.
Deshalb gibt es auch die Möglichkeit, eine Toleranz anzugeben. Die Toleranz ist dabei die Summe aus den Toleranzen für R und C. Die Ergebnisse sind dann Safe Values
.
Design Prozedur
Die Design-Prozedur mit diesem Formular ist wie folgt:
Geben Sie die Taktfrequenz Ihres Timers und die gewünschte Auflösung ein. Die PWM-Frequenz wird daraus berechnet. Die Auflösung kann dabei durchaus auch gebrochen sein, d.h. wenn Sie z.B. 2500 Counts benötigen, geben sie hier 11,3 Bits an (log(2500)/log(2)).
2500 Counts bedeutet, Ihr Timer zählt von 0 bis 2499, der Schwellwert liegt irgendwo in diesem Bereich, d.H. Sie können 2500 verschiedene Werte vorgeben.
Ich habe auch die umgekehrte Rechnung offengelassen, Sie können auch die PWM-Frequenz vorgeben und die erforderliche Taktfrequenz wird daraus berechnet.
- Geben Sie eine Toleranz für die Bauteile an (Summe von TolR und TolC in Prozent).
- Sie sehen dann die mindestens erforderliche Zeitkonstante und einen Vorschlag für R und C. C ist dabei zunächst stets 1 µF, nur R wird entsprechend berechnet.
- Passen Sie R und C an um ein τ mit dem erforderlichen Sicherheitszuschlag und einem entsprechenden Ripple zu erhalten (die Berechnen-Knöpfe können ihnen dabei helfen).
- Kontrollieren Sie die Werte anhand der darunter liegenden Angaben und passen Sie R oder C an um innerhalb der geforderten Grenzen von τ und Ripple zu bleiben.
- Sie sehen letztlich auch die nötige Einschwingzeit.
- Eine weitere Erhöhung von R (oder C) bewirkt einen kleineren Ripple, erhöht aber die Einschwingzeit. Probieren Sie es einfach aus und passen Sie es an Ihre Anforderungen an!
Zahlenbeispiel
Nichts ist anschaulicher als ein reales Beispiel! Gerechnet mit idealen Werten, also 0 % Toleranz:
Bei den Vorgabewerten mit 3,6864 MHz Timer-Clock und 8 Bit Auflösung bekommen wir eine PWM-Frequenz von 14,4 kHz und ein τmin von 8,872 ms. Dieses müssen wir um die Toleranzen von R und C erhöhen um sicher zu sein, also wählen wir R=12 kΩ (dies entspräche 35 %).
Achtung: auch die Rückwärts-Rechnung (Rselected - Toleranz) darf nicht zu einem unzulässig hohen Ripple führen! Dies bedarf einiger weiterer Mathematik, die in diesem Formular jedoch berücksichtigt ist. Sie ist aber auch der Grund, warum Rmin größer ist als Sie es anhand des Mindest-τ erwarten würden.
Dann erhalten wir eine Einschwingzeit von 66,54 ms. Wenn die Toleranzen von R und C zufällig beide positiv sind, müssen wir diese aber noch dazu schlagen, also ist die worst-case Einschwingzeit um rund 25 % höher (20 % C plus 5 % R), also mindestens 84 ms. Nur das können wir garantieren. Es kann besser sein, muss aber nicht.
Wenn wir 25 % Toleranz angeben wird diese automatisch dazugerechnet, sowohl beim Mindest-τ als auch bei der Einschwingzeit. Da es einen 11,83 kΩ-Widerstand nicht zu kaufen gibt müssen wir hier trotzdem manuell 12 kΩ einstellen um die endgültige (worst-case) Einschwingzeit zu sehen.
Natürlich können Sie auch Kondensatoren mit 5 % und Widerstände mit 1 % verwenden (also zusammen 6 %), was in einer reduzierten Einschwingzeit von unter 60 ms resultiert, sofern das nötig sein sollte und die Mehrkosten tolerierbar sind.
Vielleicht fragen Sie sich, warum sie nirgends eine Spannung eingeben müssen (oder können), aber die Spannung kürzt sich in allen Gleichungen heraus. Nur PWM-Frequenz und Zeitkonstante bestimmen Auflösung und Einschwingzeit der Schaltung, egal ob Sie diese mit 3,3 V, 5 V oder 255 V betreiben.
Verwenden Sie bevorzugt Folienkondensatoren da keramische Kondensatoren (z.B. X7R, von Y5V will ich gar nicht reden 😉) auch eine erhebliche Spannungsabhängigkeit der Kapazität aufweisen. Der Ripple würde deshalb bei höheren Spannungen ansteigen, möglicherweise bis weit über die rechnerischen Werte.
Keramik-Kondensatoren mit NP0/C0G sollten aber auch gut funktionieren.
Grenzen der Schaltung
Natürlich konnen Sie hier theoretisch auch einen 24-Bit DAC berechnen aber er wird nicht funktionieren! Dies liegt nicht nur an der Toleranz der Bauteile, sondern insbesondere auch an der Qualität der PWM. Sie wird nicht picosekundengenau schalten und auch der Innenwiderstand (der auch asymmetrisch sein wird, d.h. unterschiedlich gegen VCC und gegen GND) kann dann nicht mehr vernachlässigt werden.
Sie werden auch sehen, dass Sie dann Einschwingzeiten im Bereich von Jahren(!) bekommen. Selbst wenn das akzeptabel wäre kämen dabei keine 24 Bit Genauigkeit heraus.
Dazu kommen noch Leckströme und Temperatur-Abhängigkeiten, die selbst bei nur
stundenlanger Wandlungszeit durchaus ins Gewicht fallen können.
Ich gehe davon aus, dass mehr als 8, 10 oder maximal 12 Bit mit dieser Schaltung nicht sinnvoll möglich sind.
Beachten Sie auch, dass jedes Bit mehr die PWM-Frequenz halbiert! Dies führt schnell zu unpraktikablen Bauteilwerten und hohen Einschwingzeiten (sie wird mit jedem zusätzlichen Bit etwa vervierfacht!). Bei 12 Bit kann selbst ein 24 MHz-Timer nur noch 5,8 kHz PWM liefern was in einer Einschwingzeit von fast 5 s resultiert. Zu Anzeigezwecken mag das akzeptabel sein, aber für ein automatisiertes Testsystem ist es einfach zu langsam.
Zusammenfassend kann ich sagen, ein PWM-DAC kann relativ genau sein, ist spottbillig aber hat den Nachteil von beachtlich hohen Einschwingzeiten, die ihn für viele Fälle disqualifizieren. Zudem ist sein Signal eben kein DC-Wert wie bei einem käuflichen DAC sondern enthält immer auch einen gewissen Ripple, was in vielen Fällen aber tatsächlich kein Problem sein mag.
Rückwärtsrechnung
Diesen Teil habe ich nur aus Spaß und Neugierde implementiert (aber auch um zu sehen, ob die Vorwärts-Rechnung korrekt ist), er wird in der Praxis kaum gebraucht, aber Sie können damit einen vorgegebenen PWM-DAC auf seine Performance überprüfen.
Geben Sie die PWM-Frequenz, R und C sowie die Toleranz ein und Sie sehen die erreichbare Auflösung (d.h. wenn der Ripple ≤ ½ LSB ist) und die Einschwingzeit (bis auf ½ LSB).
Auch hier wird die Auflösung bei Minus-Toleranz und die Einschwingzeit bei Plus-Toleranz gerechnet so dass die Ergebnisse wieder Safe Values
sind.
Wenn Sie hier eine geringere Auflösung bekommen als versprochen, haben Sie mehr als ½ LSB Ripple, wenn Sie mehr als die versprochene Einschwingzeit bekommen, kommt der Wert in dieser Zeit nicht auf ½LSB an den Zielwert heran.
Vielleicht kommen Sie auf die Idee, R zu vergrößern und Sie kommen schnell auf Traumwerte. Behalten Sie dabei aber den letzten Wert, die mindestens erforderliche Taktfrequenz im Auge! Wenn Sie die PWM-Frequenz nicht entsprechend verringern bekommen Sie hier schnell unrealistische Werte!
Alle Ergebnisse ohne Gewähr. Die Verwendung erfolgt auf eigene Verantwortung. © 2024, Robert Loos