Communities

Writing
Writing
Codidact Meta
Codidact Meta
The Great Outdoors
The Great Outdoors
Photography & Video
Photography & Video
Scientific Speculation
Scientific Speculation
Cooking
Cooking
Electrical Engineering
Electrical Engineering
Judaism
Judaism
Languages & Linguistics
Languages & Linguistics
Software Development
Software Development
Mathematics
Mathematics
Christianity
Christianity
Code Golf
Code Golf
Music
Music
Physics
Physics
Linux Systems
Linux Systems
Power Users
Power Users
Tabletop RPGs
Tabletop RPGs
Community Proposals
Community Proposals
tag:snake search within a tag
answers:0 unanswered questions
user:xxxx search by author id
score:0.5 posts with 0.5+ score
"snake oil" exact phrase
votes:4 posts with 4+ votes
created:<1w created < 1 week ago
post_type:xxxx type of post
Search help
Notifications
Mark all as read See all your notifications »
Q&A

Post History

60%
+1 −0
Q&A Does output impedance of the unbuffered DAC in STM32G4 vary [appreciably] with code?

Without anything more from ST, you can only go with the bounds in the datasheet. The range of 9.6 kΩ to 13.8 kΩ isn't that large. That's the same as saying 11.7 kΩ ±2.1 kΩ or ±18%. A proper desi...

posted 2mo ago by Olin Lathrop‭

Answer
#1: Initial revision by user avatar Olin Lathrop‭ · 2026-07-05T22:53:36Z (2 months ago)
Without anything more from ST, you can only go with the bounds in the datasheet.

The range of 9.6 k&Omega; to 13.8 k&Omega; isn't that large.  That's the same as saying 11.7 k&Omega; &plusmn;2.1 k&Omega; or &plusmn;18%.  A proper design tolerates the 18% variation.

I guess what you're really asking is whether that 18% variation is mostly a fixed value, or does it change depending on the code the D/A is set to.  The latter would be harder to tolerate.  Unfortunately, a strict interpretation of the datasheet says the variation could happen at any time.

However, while it's dangerous in the general case, the question of whether the range is due to fixed part values or also a function of the code is a matter of topology.  That distinction isn't going to change from part to part.  One tactic would be to simply measure the output impedance of one part over a range of codes and see if it changes significantly.  If not, then it's structural and very unlikely to change over different codes in a different part of the same model and version.

Another way to look at this is what mechanism can cause up to 18% variation from nominal, but definitely not more.  Initial part variation of resistors on a silicon chip explain this very well.  The types of A/Ds that have varying output impedance depending on code would have much larger output impedance variations.

Keep in mind that even if the 18% is only from part variations, they can still occur during operation due to temperature changes, and possibly over time due to aging.

So in summary, while we can make a quite good guess that the impedance is not a function of the code, you have to design the circuit to tolerate the 18% variation anyway.

Depending on what you do with the D/A output, just a series resistor might be good enough.  It raises the overall impedance, but lowers the range as a fraction of nominal.  Of course the obvious answer is to use an external buffer if you really need to have a low impedance version of the D/A output signal.  If you really really need drive capability at 0 output, run the negative supply of the amp from a small charge pump.  I've done exactly that in a few real products using a "rail to rail" CMOS low-offset opamp and a -500 mV power supply created from a charge pump.  In my cases the charge pump was driven from a spare PWM output of a microcontroller that was already there for other reasons.