A project log for Minimalist Li-Ion Discharger/Capacity meter.

What you need to grade your scavenged cells for building balanced packs.

Daren SchwenkeDaren Schwenke 01/28/2019 at 09:000 Comments

Voltage calibration.

The ADC in the Nano as setup uses its 5v regulator as the scale for measurements.  Running the Nano from a PC USB port will likely result in less than 5v for this scale.  If you do that, you will need to compensate for it.  

Running it from a 12v wall wart or cheap USB charger mostly eliminates this issue, but you probably want to check anyway.  So...

Measure the voltage on the Nano at the +5v pin with respect to ground.

Put this value in the .ino as Vcc.

// float Vcc = 4.88; // When run from PC USB
float Vcc = 5.02; // When run from 12v

Measure the voltage across a cell.  Compare this to the reported voltage.  

If the ADC is reporting slightly off, you can adjust the value for Vcc in either direction a tiny bit until the reported voltage matches your meter.

Current calibration.

Reliably measuring resistance of less than 5 ohms can be problematic.  It is ultimately much simpler to drop a known voltage across your resistor and measure the current that flows.

Tap in to between the cell negative terminal and the power mosfet with a current meter.

Set Discharge_Rate to 2000 in the .ino.  With a 3 ohm resistor the current maxes out at ~1.2A.  Setting the Discharge_Rate higher ensures that no PWM happens during calibration.  Some meters don't like it.

float Discharge_Rate = 2000; // Discharge rate in mA.  Will Adjust PWM to meet this.

Insert a cell.  Wait for the cycle to start.  Let things stabilize for 20 seconds or so.

Compare the current read by the Nano (via USB logging) with the current read by the meter.

If the current reported by the Nano is higher than the measured current, reduce the value set for that resistor in Res_Value.  If it's 10% higher, reduce the value by 10% and such.  Repeat until they match.

float Res_Value[4] = {3.18,3.02,3.18,3.18};  // Resistor Value in Ohm

Then repeat this for all four channels.  

As with all 4 value arrays in the code, the values correspond to the 4 channels of the discharger.

Set the current back to 1000, so current control happens again.

float Discharge_Rate = 1000; // Discharge rate in mA.

Enjoy your calibrated cell discharger.