I'm teaching myself EE while designing a 12V DC battery monitor. I'm using a pair of Hall-effect sensors to track charge & load current and looking for the best way to measure the voltage. [An ATmega32u4 will take successive reads with the ADC, compute a 1-second average, and pass that up over USB for logging and analysis.]
The issue of error with ADC really has me spooked. It is essential that I produce meaningful data. There's so many error sources—both in my circuit and in the ADC—that it feels like playing wack-a-mole in the dark. I'm reading lots about calibrating the ADC's reference, but the first step is to pick a method for scaling the input.
My voltage window is 10-15V, specifically a range from 10.5V to 14.4V (3.9V). I came up with two approaches that (hopefully) do what I want:
- A 10V Zener diode on the inverting input of a differential op-amp. Rejecting 10V, my range becomes 0.5V to 4.4V (3.9V) and uses nearly the whole range of my ADC.
- A 20k : 10k voltage divider. Scaled down 3x, my range becomes 3.5V to 4.8V (1.3V)
I wanted to prove to myself which method would render the best granularity. Since I can also obtain 12-bit accuracy by adding four reads and shifting the result, I compared four possibilities: (assuming ADC ref is 5.0V)
- method 1, 0.5-4.4V @10-bit is 800 steps: 4.88mV/step [#3]
- method 1, 0.5-4.4V @12-bit is 3606 steps: 1.22mV/step [#1]
- method 2, 3.5-4.8V @10-bit is 266 steps: 14.65mV/step [#4]
- method 2, 3.5-4.8V @12-bit is 1065 steps: 3.66mV/step [#2]
My question is, do my mV/step figures tell the whole story, or is there some kind of downside to #2 that I'm not seeing?