Close

Accuracy/Consistency Concerns

A project log for 12V Battery Tester

A tester that can be used by high school students to test the batteries for capacity.

willbadenwillbaden 01/28/2015 at 01:530 Comments

After deliberating to find a better/more consistent method to read voltage and current, I decided to rewrite the calculations for the voltage and current using double type instead of integer type. Maybe I was losing accuracy/consistency there. So below is what I came up with:

  double tempCalculate ;
  double tempAnalogValue ;
  
  //Save actual Vcc read when compared to on board 1.1V reference
  ActualVoltage = (double)readVcc() / 1000;
    
  CurrentTime = millis();
  //Read battery voltage.  Need to rescale this according to actual sensor used
  tempAnalogValue = analogRead(VoltageSensor);
  
  //calculate the voltage from the pin
  tempCalculate = (tempAnalogValue / 1023) * ActualVoltage;
  
  //calculate the voltage of the 12V source through the voltage divider
  // and prepare to convert back to integer (*100)
  tempCalculate = tempCalculate * 27.25 / 5 * 100;
  
  BatteryVoltage = (int)tempCalculate;
   
  //Read in Current.  Need to rescale this according to actual sensor used
  tempAnalogValue = analogRead(CurrentSensor);
  
  //calculate the voltage from the pin
  tempCalculate = (tempAnalogValue / 1023) * ActualVoltage;
  
  //calculate amperage from 40mV/A with a 2.5V center
  // and prepare to convert back to integer (*10)
  tempCalculate = (tempCalculate - 2.5) / .04 * 10;
  
  BatteryCurrent = (int)tempCalculate;
  
  //Offset current and voltage value according to user definition
  BatteryVoltage = BatteryVoltage + VoltageOffset;
  BatteryCurrent = BatteryCurrent + AmpOffset;

After running this, it still appears that there is drift as the test goes on, so I don't seem to nail down the current and voltage as I thought I could.

Rework on Voltage measurements:

Maybe the voltage divider calculation needs to be more accurate in the scale. Possibly causing a scaled shift as the voltage goes through different values. Or the 1.1V reference is not as accurate as it needs to be.

Rework on Current measurements:

Maybe the robotshop current sensor is not as accurate as I had envisioned. Possibly look into tapping into the shunt ammeter and pipe that information over to the UNO. Or the 1.1V reference is not as accurate as it needs to be.

To shift to a different voltage reference instead of the internal 1.1V reference will just be a matter of adding a chip to the protoshield. This at least would remove the doubt of the 1.1V reference.

Discussions