Note: The -XXdB figures in this post are taken from analysis of LTSpice simulations, not "Real World" measurements.
They should be reasonably indicative of levels of difference between options, but cannot be directly translated into "at the output jacks" values.
Despite all the modding I'm still none the wiser as to exactly which aspect is responsible for the improved behaviour. It's tempting to say that the added capacitance is the primary reason, yet Søren's "factory mod" substantially reduces "hash" with an additional 47uF. This suggests that bulk capacitance is only part of the solution.
Based on the testing I have done with 4 variants (stock + 3 mods) of the vref I'd rank the mods from worst to best:
- factory mod
- factory mod + 470uF
- stock + 470uF
The factory mod alone is a significant improvement over the stock vref but doesn't reach the same level of improvement as the stock + 470uF.
Adding extra capacitance to the "factory mod" almost closes the gap with stock+470uF but not completely.
In an attempt to shed some light I decided to sim the various configurations and measure the peak level of the transient response FFT at a selection of frequencies.
Comparing the original Vref and "factory mod", it's apparent that there is virtually no change in the peak level across the range of 100Hz to 20Kz with the factory mod. This configs Søren's statement that there is no peaking in the "factory" mod. In contrast the stock vref the peak levels starts low but climbs as frequency increases.
The factory mod is a huge improvement over stock, so it would appear that the majority of the improvement comes from reducing peak ripple above 5KHz.
So lets look at the other mods I've tested in the real world.
Adding 470uF to the Factory Mod clearly doesn't alter the attenuation at 100Hz but rolls off progressively through the audio band. This is pretty nice, but as we've seen doesn't really clean up like adding a big cap to the stock vref.
On the other hand adding 470uF to the stock Vref adds creates a pole in the feedback loop, resulting in a peak in noise gain.
This will happen with any bulk capacitance added to the stock vref, so don't think you'll dodge the bullet by stacking on the capacitors. Sorry guys...
Just for reference the sim indicates the following peak values:
330uF - 6.17KHz, -53dB peak
470uF - 5.288KHz, -55.3dB peak
1000uF - 3.67KHz, -58.17dB peak
2700uF - 2.245KHz, -62.6dB peak.
And remember that the peak ripple for the Factory Mod is between -70 and-67dB from 100Hz to 20KHz.
This means the big cap will have ripple at the noise peak that is at least twice the amplitude of the Factory Mod.
An alternative - perhaps
One possible alternative is to embrace the idea that the cap values have to meet the criteria laid out in the Brown Burr app note. This is said to ensure noise gain peaking is minimised.
What I've been trying out in LTSpice is using values based on this relationship, and it seems reasonably effective, if not spectacular.
The equation I've used is:
compensation cap (in mF) = ((2*series_resistor*(total_capacitance_mF/0.000001)/feedback_resistor)*0.000001)
Not all values are useful, and I'd suggest looking at using a series resistor = 0.1R to keep the value of the compensation cap value small. Well under 1uF is a good idea.
What I ended up as "worth trying" is 220nF compensation cap, 0.1R series resistor and 499R feedback resistor, with 22uF//47uF//470uF polymer cap per vref.
As can be seen from the above, the "FrankenMod" in orange is a bit of a mashup of the stock and "Factory Mod" in performance - head from one, part of the leg from the other...
While the low end attenuation is not as good as the stock filter, it's an obvious improvement on the "factory mod", and the performance above 3500kHz has the edge on the stock+470uF option.
From a quick test the 1KHz and JTEST performance is very close to that of the stock vref + 470uF. The harmonics are different as you'd expect and the noise floor is possibly a tiny bit cleaner, but nothing I couldn't put down to vagaries of my testing methods. The noise peaking is not entirely eliminated but occurs as a low "hump" at around 1.7KHz with a peak level of -67.85dB, which should be around 5dB lower than the 2700uF+stock peak. It's also substantially better than the -55.3dB peak level for the stock+470uF.
It's worth having a look at the pics of zfe's white noise tests posted to HiFi-Duino here: https://hifiduino.wordpress.com/2015/07/12/soekris-dac-modding-vref/
"Correct" component selection
The idea for the above tweaks comes from the "Voltage Reference Filters" app note sbva002 which describes the theory of the filter Søren appears to have used for the vref buffer.
- the series resistor and load capacitance form a RC filter with f-3dB = 1/(2 * π * series resistance * Load capacitance)
- to minimise noise gain peaking: feedback resistor * compensation cap = 2 * series resistor * load capacitance,
- to ensure stability: load capacitance * series resistance < 0.5 * feedback cap * compensation cap (app note formulation)
or as zfe points out: feedback resistor * compensation cap > 2 * series resistor * load capacitance
I'm sure that the they should be ≤ and ≥ respectively as it a bit nonsensical having an ideal condition that does not meet the stability condition.
Although the output impedance is low at both high frequencies and DC, it peaks at midband frequencies.
- a peak in output impedance of 0.7 * series resistance occurs near the corner frequency of the RC filter. Reduce series resistance and increase load capacitance to lower the mid-band impedance.