I'm playing with some "precision" (as claimed by manufacturers) opamps and DACs to test how "precise" they are.
So, the components I'm testing are:
- DAC7612U by TI: A two channel 12-bit (1mV/LSB, up to 4095mV) DAC with internal reference and buffered outputs.
- OPA2335 by TI: A single-supply opamp with very low input offset voltage (5uV max).
For testing purposes, I've built the following circuit (Note that all resistors are 0603 case SMD ones with %1 tolerance and the output sections of DAC is taken from datasheet as they're shown):
simulate this circuit – Schematic created using CircuitLab
As you can see, the first block after the DAC is a differential amplifier with unity gain and the last block is a non-inverting amplifier with a gain of 1 or 2 (depending on the state of the analog switch, 1G1357). \$VO_A\$, \$VO_B\$, \$V_{diff}\$ and \$V_{buff}\$ are test/measurement points.
And finally, here are what I got:
- When I reset (zero) both outputs of DAC, I measure about 1mV on both \$VO_A\$ and \$VO_B\$. Quite normal, because zero-scale error is given as 1mV in the datasheet. And, as expected, voltages on \$V_{diff}\$ and \$V_{buff}\$ are in uV range. No problem at this point.
- When I set OUT_A to about 500mV and leave OUT_B untouched, the measurements are correct on all test points.
- This is the one that I have question about: When I set OUT_A to about 3500mV or higher, and leave OUT_B untouched, I measure about 4mV on \$VO_B\$, but it should be about 1mV! If I disconnect the differential amplifier, the measurements are correct on both \$VO_A\$ (the code I loaded in mV) and \$VO_B\$ (about 1mV). If I reconnect the differential amplifier and use lower resistances (e.g. 15k) for all of R1, R2, R3 and R4 then the measurements get worse: \$VO_B\$ increases to 8mV even if the loaded code is zero! One more interesting thing: \$V_{diff}\$ shows \$V_{diff} = VO_A - VO_B + V_{err}\$; where \$V_{err}\$ is the error voltage that I measured on \$VO_B\$ for \$VO_A \ge 2500mV\$ (It's 0mV for \$VO_A \le 2000mV\$).
How can it be? Why does this happen? What should I do?
Sorry for long post. Hope I could explain the problem.