I think we're looking at this wrong. This is unverified, although the voltage measurements and the comments in the thread seem to suggest it's true. Update - everything seems to be correct. I have yet to go through a whole charge cycle, waiting for better weather, but the voltages seem to be correct.

If you assume that there is only one control board, which seems reasonable since they're surface mount and so being produced in some quantity somewhere, then the whole problem simplifies.

Now you have to not read the manual so that you never hear the concept of "cell tension". That's just a red herring introduced by Zivan to throw Dave off the track.

If the control boards are all the same, then the change is on the power board. The only one I've seen is the resistor near the input.

We now have two variables, the power board resistor and the setting of the U-Pot.

// value in K ohms of the resistor(s) on the power board - my board

#define POWER_BOARD_RESISTOR 470f

// the value of the U POT - easiest plan is to leave it at one end (zero) or the other (2).

#define U_POT_RESISTANCE 2f

// given the power board resistor value and the resistance of the pot

// we have two components of the voltage divider that gets us the max

// and min voltage readings for this controller.

// The remaining component is the 6.8K (R9) on the NG3 schematic which is

// in series with the 0-2k pot.

// Lets say the resistance on the power board is Rp and on the control

// board the sum of 6.8k and the pot is Rc

// The minimum voltage we can read is when the output of the voltage divider

// is the same as the 1.954V reference.

// This is given by (Rp + Rc)/Rc*Vout

// Vout is 1.954 so:

float rc = 6.8 + U_POT_RESISTANCE;

float minVoltage = (POWER_BOARD_RESISTOR + rc)/rc*1.954;

// Now Dave as stated an inverse gain of 100k/15k

// 0.15

// suspiciously, given an A/D range of 5V 5*0.15 = 0.75V

// 1.954 + 0.75 = 2.704 which is remarkably close to the 2.71V input to U11A

// on the NG3 schematic

// For the sake of argument, let's assume that the max voltage, the point

// where the A/D will read 5V is at 2.71V.

// Repeating the calculation above:

float maxVoltage = (POWER_BOARD_RESISTOR + rc)/rc*2.71;

// The voltage range - a minor optimization

float voltageRange = maxVoltage - minVoltage;

Now, the digital pot just scales linearly:

// the digital pot bits scale linearly

digital_pot_bits = (unsigned char)(constant_voltage-minVoltage)/voltageRange*256;

And the voltage from the A/D just falls out from all of this:

// now the voltage can be calculated from the A/D readings...

voltage = ((float) voltage_bits)/1024*voltageRange + minVoltage;

So, what's up with the current? Is it the same on a 115V and 230V charger, or is it different?