Maximum resistor values on a voltage divider driving analog input pins

I am going to have an arduino measure battery voltage. These are the 12V lead acid car type. I'd like to have a measurement range from 10V-50VDC (4 batteries in series, or 1 very dead battery)

I have heard many different opinions on what the arduinos internal impedance on analog input pins, most stating 100k ohm and a little capacitance.

I want to use high value resistors (around 100k) so the power dissipation across the network is very small, i'm not trying to produce a heater. Also, once connected it will remain connected to the battery so I dont want it to be too much of a drain on the battery over time as the battery may go quite some time without charging.

I know about protecting the input with a zener or two catcher diodes. Also have read that using a capacitor in parallel to the input pin to ground may be a good idea.

The battery voltage will not change quickly, but I do want it to be measured within a 1/10 of a volt.

will putting a 90k resistor and a 10k resistor in my network work, or are these values too high for the arduino?
thanks

The Analog i/p works best if the source impedance is < 10K.
If you used 10K, 50V needs to be reduced to 5v. You need 45V dropped across a resistor in series with 10K.
This would give 90K. So you use a 100K POT and adjust it so the wiper is 10K to GND.
50V/100K= 500uA or .0005 Amps drain form 50Volt battery.
This represents very little current to the massive lead acid batteries and not a significant heat lose in the POT.
Do you think this would be acceptable?

Will you be charging the batteries? Charge voltage is significantly higher than 12V - 14.4 is typical and my Trojan batteries want 14.8V. Then if you add the various boost cycles you can get well over 15V per battery, or 60+V for 4 batteries, well over the tolerance of the arduino AD pins.

Back to the original question - I am using an RC circuit in a similar application to filter noise on the battery line. The RC circuit has a 10K R in series with a 2.2uF cap to ground. I based this on documentation that the impedance of the AD ports is on the order of 100M. Will this work?

You can use high-value resistors in a voltage divider feeding the Arduino ADC, with two caveats:

  1. You can get crosstalk between pins when you use source resistances greater than 10K. There are two easy fixes for this:

Software solution: insert a delay in the analogRead code, between setting the mutiplexer to the desired input and starting the ADC conversion. One microsecond per 10K of source resistance above 10K is sufficient. Or equivalently, write your own code to set the multiplexer to the desired channel, and call that code followed by the delay before you call analogRead. Some folks suggest making 2 analogRead calls and throwing away the first result, but that is slower and less effective.

Hardware solution: add a 0.01uF capacitor between the analog input and ground. This solution is fine for monitoring a battery, and for other applications where the voltage being measured changes only slowly.

  1. The input resistance of the Arduino ADC is quoted on the datasheet as 100M ohms typical. So for every 1M of source resistance, you are introducing a potential 1% error.

I used 2 x 4.7M resistors to monitor the voltage of a 9V battery in one of my designs, because the unit had no on/off switch and I needed to keep the standby current low. The theoretical error with this arrangement was about 2.35%, which was acceptable in that design.