RC values for PWM DAC in English
RC values for PWM DAC in English

RC-Glied eines PWM-DAC

Die­se Sei­te er­for­dert Ja­va­script!
Sie ha­ben Ja­va­script de­ak­ti­viert oder Ihr Brow­ser un­ter­stützt kein Ja­va­script.
Die­se Sei­te wird so nicht funk­tio­nie­ren.

Die einfache Schaltung des PWM-DACsDie­se Sei­te be­rech­net die Min­dest­wer­te von R und C für ei­nen PWM-DAC bei ge­ge­be­ner Fre­quenz.

Hier se­hen Sie die wirk­lich über­schau­ba­re Schal­tung. Ein RC-Tief­pass fil­tert das PWM-Si­gnal so dass da­r­aus ei­ne weit­ge­hend AC-freie Span­nung ent­steht.

Es sei an­ge­merkt, dass Sie hier auch Fil­ter hö­he­rer Ord­nung ein­set­zen könn­ten, die kür­ze­re Ein­schwing­zei­ten er­ge­ben wür­den. Die­se füh­ren je­doch auch zu wei­te­ren Feh­lern (Off­set, Ver­stär­kung), hö­he­ren Kos­ten und mehr Lei­ter­plat­ten­flä­che, so dass sehr bald ein rich­ti­ger DAC die bes­se­re und güns­ti­ge­re Wahl wä­re.

Daher be­schränkt sich die­ses For­mu­lar auch auf den Fil­ter ers­ter Ord­nung, dem RC-Glied.

Üb­li­cher­wei­se er­zeugt ein Timer Ihres Mi­cro­con­trol­lers das PWM-Si­gnal. Er zählt pau­sen­los von 0 bis n und der Aus­gang ist 1 ab ei­nem ge­wis­sen Schwell­wert, der dann das Tast­ver­hält­nis be­stimmt.

Der End­wert n ist da­bei kon­stant, so dass wir ei­ne fes­te Fre­quenz er­hal­ten, de­ren Tast­ver­hält­nis nur durch den Schwell­wert be­stimmt wird.

Der Trick bei der Di­men­sio­nie­rung ist, die rich­ti­ge Zeit­kon­stan­te τ zu wäh­len. τ er­rech­net sich aus R×C. Ist τ zu klein er­hal­ten wir ei­ne zu ho­he Wel­lig­keit des Aus­gangs­si­gnals (Ripple), ist es zu groß ver­län­gert sich die Ein­schwing­zeit un­nö­ti­ger­wei­se.

Dieses For­mu­lar ver­wen­det für den Kon­den­sa­tor stets 1 µF, der in den meis­ten re­a­lis­ti­schen Fäl­len ein gu­ter Start­punkt sein dürf­te, nur der da­zu pas­sen­de Wi­der­stand wird so be­rech­net, dass der Ripple klei­ner als ½ LSB ist. Die be­rech­ne­te Ein­schwing­zeit ist die Zeit, die nö­tig ist, bis sich das Aus­gangs­si­gnal auf ½ LSB an­ge­nä­hert hat.

Der Hin­ter­ge­dan­ke da­bei ist, dass sich das Aus­gangs­si­gnal zzgl. Ripple in­ner­halb ei­nes LSB be­wegt.

Sie kön­nen R und C dann nach Be­lie­ben ver­än­dern und se­hen da­r­un­ter das Er­geb­nis. Die Knöp­fe Rmin Be­rech­nen und Cmin be­rech­nen kön­nen da­bei hilf­reich sein.

Mei­ne Pro­phe­zei­ung: wenn Sie bei Ka­pa­zi­tä­ten von 10 nF..10 µF kei­ne re­a­lis­ti­schen Wi­der­stän­de (10 kΩ..10 MΩ) er­hal­ten dürf­te die Schal­tung in der Re­a­li­tät pro­ble­ma­tisch bis un­brauch­bar sein.


Takt­fre­quenz
Hz
PWM-Fre­quenz
Hz
Auf­lö­sung
Bit
Min­dest-Tau
s
To­le­ranz
%
Min­dest-R
Ω
Min­dest-C
F
Tau (ge­än­dert)
s
Ein­schwing­zeit
s
Ripple (VSS)
LSB


Hin­weis:
Taugeändert ist die no­mi­nel­le Zeit­kon­stan­te, al­so R×C.
Die Ein­schwing­zeit ist be­rech­net bei ma­xi­ma­ler Plus-To­le­ranz und der
Ripple ist be­rech­net bei ma­xi­ma­ler Mi­nus-To­le­ranz.


Be­ach­ten Sie auch die To­le­ran­zen der Bau­tei­le! Der Ripple ist am größ­ten bei Mi­nus-To­le­ranz, die Ein­schwing­zeit bei Plus-To­le­ranz.

Des­halb gibt es auch die Mög­lich­keit, ei­ne To­le­ranz an­zu­ge­ben. Die To­le­ranz ist da­bei die Sum­me aus den To­le­ran­zen für R und C. Die Er­geb­nis­se sind dann Safe Values.

Design Prozedur

Die De­sign-Pro­ze­dur mit die­sem For­mu­lar ist wie folgt:

Zahlenbeispiel

Nichts ist an­schau­li­cher als ein re­a­les Bei­spiel! Ge­rech­net mit ide­a­len Wer­ten, al­so 0 % To­le­ranz:

Bei den Vor­ga­be­wer­ten mit 3,6864 MHz Timer-Clock und 8 Bit Auf­lö­sung be­kom­men wir ei­ne PWM-Fre­quenz von 14,4 kHz und ein τmin von 8,872 ms. Dieses müs­sen wir um die To­le­ran­zen von R und C er­hö­hen um si­cher zu sein, al­so wäh­len wir R=12 kΩ (dies ent­sprä­che 35 %).

Ach­tung: auch die Rück­wärts-Rech­nung (Rselected - To­le­ranz) darf nicht zu ei­nem un­zu­läs­sig ho­hen Ripple füh­ren! Dies be­darf ei­ni­ger wei­te­rer Ma­the­ma­tik, die in die­sem For­mu­lar je­doch be­rück­sich­tigt ist. Sie ist aber auch der Grund, wa­r­um Rmin grö­ßer ist als Sie es an­hand des Min­dest-τ er­war­ten wür­den.

Dann er­hal­ten wir ei­ne Ein­schwing­zeit von 66,54 ms. Wenn die To­le­ran­zen von R und C zu­fäl­lig bei­de po­si­tiv sind, müs­sen wir die­se aber noch da­zu schla­gen, al­so ist die worst-case Ein­schwing­zeit um rund 25 % hö­her (20 % C plus 5 % R), al­so min­des­tens 84 ms. Nur das kön­nen wir ga­ran­tie­ren. Es kann bes­ser sein, muss aber nicht.

Wenn wir 25 % To­le­ranz an­ge­ben wird die­se au­to­ma­tisch da­zu­ge­rech­net, so­wohl beim Min­dest-τ als auch bei der Ein­schwing­zeit. Da es ei­nen 11,83 kΩ-Wi­der­stand nicht zu kau­fen gibt müs­sen wir hier trotz­dem ma­nu­ell 12 kΩ ein­stel­len um die end­gül­ti­ge (worst-case) Ein­schwing­zeit zu se­hen.

Na­tür­lich kön­nen Sie auch Kon­den­sa­to­ren mit 5 % und Wi­der­stän­de mit 1 % ver­wen­den (al­so zu­sam­men 6 %), was in ei­ner re­du­zier­ten Ein­schwing­zeit von un­ter 60 ms re­sul­tiert, so­fern das nö­tig sein soll­te und die Mehr­kos­ten to­le­rier­bar sind.

Ich wür­de, wenn mög­lich, die 25 % be­vor­zu­gen, da ich dann nicht auf­pas­sen müss­te, ob der Ein­kauf nicht ei­gen­mäch­tig bil­li­ge­re Al­ter­na­ti­ven be­schafft hat.


Viel­leicht fra­gen Sie sich, wa­r­um sie nir­gends ei­ne Span­nung ein­ge­ben müs­sen (oder kön­nen), aber die Span­nung kürzt sich in al­len Glei­chun­gen he­r­aus. Nur PWM-Fre­quenz und Zeit­kon­stan­te be­stim­men Auf­lö­sung und Ein­schwing­zeit der Schal­tung, egal ob Sie die­se mit 3,3 V, 5 V oder 255 V be­trei­ben.

Ver­wen­den Sie be­vor­zugt Fo­li­en­kon­den­sa­to­ren da ke­ra­mi­sche Kon­den­sa­to­ren (z.B. X7R, von Y5V will ich gar nicht re­den 😉) auch ei­ne er­heb­li­che Span­nungs­ab­hän­gig­keit der Ka­pa­zi­tät auf­wei­sen. Der Ripple wür­de des­halb bei hö­he­ren Span­nun­gen an­stei­gen, mög­li­cher­wei­se bis weit über die rech­ne­ri­schen Wer­te.

Ke­ra­mik-Kon­den­sa­to­ren mit NP0/C0G soll­ten aber auch gut funk­tio­nie­ren.

Grenzen der Schaltung

Na­tür­lich konnen Sie hier the­o­re­tisch auch ei­nen 24-Bit DAC be­rech­nen aber er wird nicht funk­tio­nie­ren! Dies liegt nicht nur an der To­le­ranz der Bau­tei­le, son­dern ins­be­son­de­re auch an der Qua­li­tät der PWM. Sie wird nicht pi­co­se­kun­den­ge­nau schal­ten und auch der In­nen­wi­der­stand (der auch a­sym­me­trisch sein wird, d.h. un­ter­schied­lich ge­gen VCC und ge­gen GND) kann dann nicht mehr ver­nach­läs­sigt wer­den.

Sie wer­den auch se­hen, dass Sie dann Ein­schwing­zei­ten im Be­reich von Jah­ren(!) be­kom­men. Selbst wenn das ak­zep­ta­bel wä­re kä­men da­bei kei­ne 24 Bit Ge­nau­ig­keit he­r­aus.

Dazu kom­men noch Leck­strö­me und Tem­pe­ra­tur-Ab­hän­gig­kei­ten, die selbst bei nur stun­den­lan­ger Wand­lungs­zeit durch­aus ins Ge­wicht fal­len kön­nen.

Ich ge­he da­von aus, dass mehr als 8, 10 oder ma­xi­mal 12 Bit mit die­ser Schal­tung nicht sinn­voll mög­lich sind.

Be­ach­ten Sie auch, dass je­des Bit mehr die PWM-Fre­quenz hal­biert! Dies führt schnell zu un­prak­ti­ka­blen Bau­teil­wer­ten und ho­hen Ein­schwing­zei­ten (sie wird mit je­dem zu­sätz­li­chen Bit et­wa ver­vier­facht!). Bei 12 Bit kann selbst ein 24 MHz-Timer nur noch 5,8 kHz PWM lie­fern was in ei­ner Ein­schwing­zeit von fast 5 s re­sul­tiert. Zu An­zei­ge­zweck­en mag das ak­zep­ta­bel sein, aber für ein au­to­ma­ti­sier­tes Test­sys­tem ist es ein­fach zu lang­sam.

Zu­sam­men­fas­send kann ich sa­gen, ein PWM-DAC kann re­la­tiv ge­nau sein, ist spott­bil­lig aber hat den Nach­teil von be­acht­lich ho­hen Ein­schwing­zei­ten, die ihn für vie­le Fäl­le dis­qua­li­fi­zie­ren. Zudem ist sein Si­gnal eben kein DC-Wert wie bei ei­nem käuf­li­chen DAC son­dern ent­hält im­mer auch ei­nen ge­wis­sen Ripple, was in vie­len Fäl­len aber tat­säch­­lich kein Pro­blem sein mag.

In Au­dio-An­wen­dun­gen wird man aber die PWM-Fre­quenz mög­li­cher­wei­se durch­sin­gen hö­ren...

Falls Sie un­über­leg­ter Weise ei­nen PWM-DAC re­a­li­siert ha­ben und erst nach­her be­mer­ken, dass er nicht taugt, könn­te der LTC2645 ih­nen viel­leicht aus der Pat­sche hel­fen. Er eli­mi­niert prak­tisch die Ein­schwing­zeit, bis zu 12 Bit Auf­lö­sung. An­sons­ten wä­re ein SPI-DAC die bes­se­re Lö­sung.


Rückwärtsrechnung

Diesen Teil ha­be ich nur aus Spaß und Neu­gier­de im­ple­men­tiert (aber auch um zu se­hen, ob die Vor­wärts-Rech­nung kor­rekt ist), er wird in der Pra­xis kaum ge­braucht, aber Sie kön­nen da­mit ei­nen vor­ge­ge­be­nen PWM-DAC auf sei­ne Per­for­mance über­prü­fen.

Geben Sie die PWM-Fre­quenz, R und C so­wie die To­le­ranz ein und Sie se­hen die er­reich­ba­re Auf­lö­sung (d.h. wenn der Ripple ≤ ½ LSB ist) und die Ein­schwing­zeit (bis auf ½ LSB).

Auch hier wird die Auf­lö­sung bei Mi­nus-To­le­ranz und die Ein­schwing­zeit bei Plus-To­le­ranz ge­rech­net so dass die Er­geb­nis­se wie­der Safe Values sind.

Wenn Sie hier ei­ne ge­rin­ge­re Auf­lö­sung be­kom­men als ver­spro­chen, ha­ben Sie mehr als ½ LSB Ripple, wenn Sie mehr als die ver­spro­che­ne Ein­schwing­zeit be­kom­men, kommt der Wert in die­ser Zeit nicht auf ½ LSB an den Ziel­wert he­r­an.

Viel­leicht kom­men Sie auf die Idee, R zu ver­grö­ßern und Sie kom­men schnell auf Traum­wer­te. Be­hal­ten Sie da­bei aber den letz­ten Wert, die min­des­tens er­for­der­li­che Takt­fre­quenz im Au­ge! Wenn Sie die PWM-Fre­quenz nicht ent­spre­chend ver­rin­gern be­kom­men Sie hier schnell un­re­a­lis­ti­sche Wer­te!

 

PWM-Fre­quenz
Hz
R
Ω
C
F
To­le­ranz
%
Auf­lö­sung
Bit
Auf­lö­sung
Cnts
Ein­schwing­zeit
s
Takt­fre­quenz
Hz

Ripple Cancelling

Die Schaltung des PWM-DACs mit Ripple-Cancelling Es sei auch noch an­ge­merkt, es gibt ei­ne Me­tho­de, den Ripple durch Dif­fe­ren­zie­rung des in­ver­tier­ten PWM-Si­gnals er­heb­lich he­r­ab zu set­zen, wie hier ge­zeigt.

Mit den oben er­rech­ne­ten Wer­ten wird der Ripple fast ver­schwin­dend klein. Aller­dings steigt die Ein­schwing­zeit er­heb­lich.

Sie kön­nen dann ent­spre­chend τ deut­lich re­du­zie­ren, bis der Ripple wie­der auf ½ LSB an­steigt und er­hal­ten letzt­lich ei­ne deut­lich re­du­zier­te Ein­schwing­zeit.

Aller­dings ist die­se Schal­tung da­r­auf an­ge­wie­sen, dass die Wi­der­stän­de und Kon­den­sa­to­ren ex­akt gleich sind. Be­reits mi­ni­ma­le Ab­wei­chun­gen im Rah­men der To­le­ran­zen las­sen den Ripple wie­der er­heb­lich an­stei­gen.

Sie müss­ten dann ent­we­der en­ger to­le­rier­te Bau­tei­le ver­wen­den (was die Kos­ten stei­gen lie­ße), oder Sie müss­ten die Bau­tei­le se­lek­tie­ren (was noch teu­rer wer­den wür­de). Ich hal­te die­se Schal­tung für the­o­re­tisch in­ter­es­sant, aber auch für prak­tisch kaum re­le­vant.

Wenn 800 ms nicht rei­chen, tun dies wahr­schein­lich auch 100 ms nicht und sie sind ge­zwun­gen, auf ei­nen rich­ti­gen DAC um­zu­stei­gen, der das min­des­tens 100.000 mal schnel­ler schafft.

Mit den Da­ten aus mei­nem For­mu­lar lässt sich hier kei­ne Di­men­sio­nie­rung ab­lei­ten und wenn Sie mei­nen, es hilft, könn­te ich Ihnen nur emp­feh­len, si­mu­lie­ren Sie es, am bes­ten mit ei­ner Mon­te-Car­lo-Ana­ly­se, um auch den Ein­fluss von To­le­ran­zen zu se­hen.

Das in­ver­tier­te PWM-Si­gnal ist bei vie­len Con­trol­lern oh­ne­hin ver­füg­bar, so dass sich der Mehr­auf­wand auf nur ei­nen Wi­der­stand und ei­nen Kon­den­sa­tor be­schränkt.


Al­le Er­geb­nis­se oh­ne Gewähr. Die Ver­wen­dung er­folgt auf ei­ge­ne Ver­ant­wor­tung. © 2024, Ro­bert Loos