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.
Es sei angemerkt, dass Sie hier auch Filter höherer Ordnung einsetzen könnten,
die kürzere Einschwingzeiten ergeben würden. Diese führen jedoch auch zu weiteren
Fehlern (Offset, Verstärkung), höheren Kosten und mehr Leiterplattenfläche,
so dass sehr bald ein richtiger
DAC die bessere und günstigere Wahl wäre.
Daher beschränkt sich dieses Formular auch auf den Filter erster Ordnung, dem RC-Glied.
Ü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.
Der Hintergedanke dabei ist, dass sich das Ausgangssignal zzgl. Ripple innerhalb eines LSB bewegt.
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.
Ich würde, wenn möglich, die 25 % bevorzugen, da ich dann nicht aufpassen müsste, ob der Einkauf nicht eigenmächtig billigere
Alternativen beschafft hat.
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.
In Audio-Anwendungen wird man aber die PWM-Frequenz möglicherweise durchsingen hören...
Falls Sie unüberlegter Weise einen PWM-DAC realisiert haben und erst nachher bemerken, dass er nicht taugt, könnte der LTC2645 ihnen vielleicht aus der Patsche helfen. Er eliminiert praktisch die Einschwingzeit, bis zu 12 Bit Auflösung. Ansonsten wäre ein SPI-DAC die bessere Lösung.
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!
Ripple Cancelling
Es sei auch noch angemerkt, es gibt eine Methode, den Ripple durch Differenzierung des
invertierten PWM-Signals erheblich herab zu setzen, wie hier gezeigt.
Mit den oben errechneten Werten wird der Ripple fast verschwindend klein. Allerdings steigt die Einschwingzeit erheblich.
Sie können dann entsprechend τ deutlich reduzieren, bis der Ripple wieder auf ½ LSB ansteigt und erhalten letztlich eine deutlich reduzierte Einschwingzeit.
Allerdings ist diese Schaltung darauf angewiesen, dass die Widerstände und Kondensatoren exakt gleich sind. Bereits minimale Abweichungen im Rahmen der Toleranzen lassen den Ripple wieder erheblich ansteigen.
Sie müssten dann entweder enger tolerierte Bauteile verwenden (was die Kosten steigen ließe), oder Sie müssten die Bauteile selektieren (was noch teurer werden würde). Ich halte diese Schaltung für theoretisch interessant, aber auch für praktisch kaum relevant.
Wenn 800 ms nicht reichen, tun dies wahrscheinlich auch 100 ms nicht
und sie sind gezwungen, auf einen richtigen
DAC
umzusteigen, der das mindestens 100.000 mal schneller schafft.
Mit den Daten aus meinem Formular lässt sich hier keine Dimensionierung ableiten und wenn Sie meinen, es hilft, könnte ich Ihnen nur empfehlen, simulieren Sie es, am besten mit einer Monte-Carlo-Analyse, um auch den Einfluss von Toleranzen zu sehen.
Das invertierte PWM-Signal ist bei vielen Controllern ohnehin verfügbar, so dass sich der Mehraufwand auf nur einen Widerstand und einen Kondensator beschränkt.
Alle Ergebnisse ohne Gewähr. Die Verwendung erfolgt auf eigene Verantwortung. © 2024, Robert Loos

