Oracle Blog

Blog for ralkire

SPOT Battery Design

The Sun SPOT, our wireless sensor network device, is powered by a small rechargeable
prismatic lithium-ion battery. This battery is similar to the one found in most cell phones and mp3 players. This is some of the what I learned while designing with this battery. To find out more about the Sun SPOT go http://www.sunspotworld.com
or https://spots.dev.java.net.

Our batteries are manufactured by Sanyo. This is a rechargeable lithium-ion 3.7V
720maH (B version) or 770maH (D version) prismatic cell. It is in a prismatic (or rectangular) package and measures 35.8mm wide, 41.5mm tall and 5.5mm thick and weighs 15g.
It has a lithium cobalt dioxide anode, a graphite cathode with
lithium hexaflourophosphate and carbonic acid ester as the
electrolyte. We buy through an OEM which attaches the safety circuit, wiring, connector, protective shell and label to the
battery. Our batteries meet the UL and PSE safety compliance.

This battery is rated by its capacity
and nominal voltage. The capacity is the amount of energy that a
battery can deliver for a single discharge in amp-hours.
That is, a 720maH battery would have the capacity to discharge into
a 720ma load for one hour (1C) or 360ma load for two hours (0.5C) and
so on. Ours has a nominal voltage of 3.7V. The voltage
may go as high as 4.2V when fully charged and will drop quickly
to the nominal voltage and stay there until almost fully discharged.

The safety circuit is mounted on the
battery and acts as an electronic circuit breaker. It will protect
the battery from over voltage during charge, over current during
charge or discharge, short circuit protection and battery
under-voltage. Without the safety circuit, the battery would get hot, very hot, catch fire, vent and possibly explode.

Some tips for our battery:

Don't circumvent the safety circuit. It works very well and makes our batteries safe to use.

Use the right battery charger. It should be current limited to 500ma with a maximum of 4.2V (4.1V is even healthier for the battery. It should charge for an hour and check for full charge. If the battery is fully discharged, it should trickle charge until the battery has recovered. It should not trickle charge after the battery is fully charged.

Discharging a battery to be completely dead can not and should not be recovered. When storing the battery, keep some charge so that it doesn't self discharge completely.

Don't solder to the battery terminals. The heat is bad for the battery, can be bad for anything within a yard of the battery.

Don't expose the battery to extreme temperatures. Even left in a car on a hot summer day can damage the battery. This goes for outdoor installations of SPOTs.

If the battery is not placed in the SPOTs plastic, be mindful that the battery will swell normally, may need to vent and will raise in temperature while charging.

The battery performance can be affected
by temperature, age, charge/discharge cycles and shelf life.

For charging, the temperature needs to
be within 0ºC
to +45ºC,
for discharging between -20ºC
to +60ºC
and for storage between -20ºC
to +35ºC.

This
battery is best stored with 40% charge and kept cold but not frozen.
Storing batteries where it is hot will not only accelerate the self
discharge but also shorten the life of the battery. The following
table was pulled from graphs in the Sanyo's specification of the
battery during storage. The recovered capacity is the remaining
capacity after permanent losses (damage) and residual capacity is
the remaining charge state after self discharge.

If
the battery drops to 2.3V, the low voltage threshold will cause the
safety circuit to open and the battery output will appear flat. This
is considered too low of voltage to safely charge the battery and
should be considered dead. The SPOT indicates low battery when it is
at 3.5V, forces sleep mode on the ARM9 at 3.3V, the power
controller and standby voltage shuts down at 2.9V and the safety
circuit will open when the battery drops to 2.3V. The battery charger
detects battery below 2.85V it will attempt a trickle charge for
about 15 minutes but if it doesn't correct itself, it will not
charge.

Sanyo's
specification says this battery will lose about 20% of it's capacity
after 500 charge cycles. They test this with a 720ma charge/discharge (1C) cycles. We charge with 450ma max and discharge from 70ma to 350ma and tend to last a lot longer than 500 cycles. (350ma if your using it as a SPOT light). These batteries will age and
will gradually lose capacity whether they are being stored or in use.
The SPOT batteries are shipped to us at charged to 30% - 40% capacity
and we do not charge them any more than this when we ship them out.

Most
battery monitors require a deep discharge and full charge cycle to
calibrate the state of charge of the battery although batteries will
last longer if not fully discharged.

At
cold temperatures, the battery will charge to 4% to 6% below normal
capacity at 0ºC and take longer charge. The battery voltage
drops at temperatures below 0ºC making the effective capacity
about 15% less at -10ºC (-0.1V drop) and 44% less at -20ºC
(-0.25V drop). This is for typical SPOT load of 72ma, losses
can double at higher discharge currents of 350ma.

The
battery may generate some self-heating and swell slightly during charge cycles.
This can be seen from the on board temperature sensor.

Internal Resistance

All batteries have an internal resistance, that is, the battery voltage will drop when a load is placed on the battery. As the battery ages or is subjected to damaging conditions, this resistance increases. It will affect battery voltage measurements and must be compensated for during heavy load if the voltage is used to determine a low battery condition.

Most battery manufactures specify the internal resistance as impedance and use a small AC (1000Hz) test signal into the battery and measure the AC voltage to derive the impedance. Our battery measures around 0.05 ohms and is typical for this test.

Another method for calculating the internal resistance is to measure the unloaded and loaded voltages across the battery and divide by the load current. I measured this to be around 0.27 ohms using a java program I wrote. It shut everything I could off and measured the load current and battery voltage. I turned on all the LEDs and the radio to create a higher load and measured the load current and battery voltage. I did get similar results to the following setup we made for the battery.

Charging
the battery

The
battery is charged from USB using an integrated battery charger and
dual switcher IC, Linear Technology LTC3455. The battery is charged
with 4.2V and current limited to about 450ma (high power mode). If the battery has not reached
4.05V after the charge cycle, another cycle is started. If the
battery is below 2.85V, the charger will enter a “trickle
charge” mode to try and recover a nearly dead battery before
attempting a full charge cycle. USB limits current to 100ma until the high power mode is negotiated during USB enumeration. Unfortunately, the switcher supplies somewhat less than this and most is used to run the ARM. It will not get much charge during low power USB mode.

We use power supplies which supply 5V through a USB cable and
don't have the brains to enumerate. If we get USB power and do not
enumerate, we eventually turn high power mode on so that we
can charge the battery. There has been a specification , “Battery
Charging v1.1 Spec and Adopters Agreement” which covers this
issue. As the dust settles, we'll look into being compliant with
it.

Discharging
the battery

A
typical discharge curve for our battery looks like this:

This curve was sampled once per second
with an Agilent 34410A DMM (digital multimeter), a 50 ohm resistor
load and a fully charged battery. The data from the DMM was brought
into a Mathcad application to be plotted. Here is a drawing of our test setup. Sanyo's batteries are -0% +10% of the rated capacity when new we confirmed it with this test.

Monitoring the battery state

The power controller uses the built ADC
to measure battery voltage, charge and discharge current and external
voltages. The current is measured by measuring the voltage drop
across a low ohm sense resistor.

The SPOT uses a pair of Zetex
ZXCT1009 high side current monitor across a 0.1 ohm sense resistor.. These are high side differential amplifers (60X gain) differentially
amplifying (60X). The gain of our current monitor is set to give us full
scale reading at 512ma.

We use a voltage divider to an ADC
channel to measure the battery voltage. Since this divider is on the
battery and itself can consume considerable standby power (>250uA),
we use a high side P-channel MOSFET to switch the divider on during
measurement. We also switch to the less accurate 1.1V internal
reference of the Atmega so we can measure battery voltages down to
1.5V.

All ADC channels are sampled every
50msec while the system is awake. The current sense output is low
pass filtered for an average current during the 50msec sample period.
We also sample USB voltage, Vusb, and external voltage, Vext.

From this information we can deduce:

Charging: power
detected on Vusb or Vext, measured charge into battery

Fully Charged: power detected on Vusb
or Vext, was charging, charge below threshold.

No battery: battery presence detected
when power absent on Vusb and Vext.

There are a variety of techniques for
measuring the present capacity in percentage. The least accurate is derived from the voltage level. The most common technique used today is “coulomb counting” with variations. Coulomb counting is continually sampling the
current flow to and from the battery and maintaining a running sum.
We sample every 50msec with sample rate, S, is 20 samples per second.

The batteries actual full capacity
varies with battery, it varies over time and it varies over
temperature. When a battery is plugged into the SPOT, the initial
state of the battery charge and the history of the battery is
unknown. If the battery of a SPOT is swapped with another battery, the state of charge (SOC) is also unknown. Some battery monitors go with the battery to maintain the
history; however, for a small battery, it isn't practical.

Most monitors require a “calibration
cycle”. The cycle is discharging the battery completely
followed by a full charge. This way it can measure the full capacity
and has a known starting point for the present capacity. This works
for a while but will eventually lose accuracy over time and have to
be repeated. Some companies have used clues from
internal resistance measurements, chemistry curves, etc to improve
the accuracy.

Deep sleep for very long periods of
time can contribute to error in capacity. Most
current sense do not measure actual sleep current with microamp
accuracy and it isn't practical to run the electronics to measure it during sleep anyway. If extreme temperatures occur during this
time, the self discharge may be significantly higher. For periods of
deep sleep, we estimate sleep current and multiply it by the period
the SPOT was asleep.

One inherent issue with coulomb
counting accuracy is that the errors are accumulative. The current
sense circuit is a rail to rail amplifier whose bias offset cause
higher measurement errors during low currents. We saw 5% to 8% error
from the current sense amplifier when compared to the Agilent 34410A
into a static load. The current measurement must be averaged over the
50msec sample period as the current can fluctuate dynamically at high
rates. We use a filter capacitor on the gain resistor to average high
speed current sense. Quantization error from the 10 bit ADC and
analog noise contribute less than a <1% to the sample error at
average currents (70ma).

Improvements in monitoring

With the existing SPOT, there is a
battery class (Ibattery.java and battery.java) which interacts with
the power controller to read the battery data. I am moving more of
the calculation from the power controller into java code.

We explored using later versions of the
current sense amps the ZXCT1010. These have superior bias offset as
compared to their predecessor. Another option is the delta-sigma ADCs
with built in amplifiers to sense current and voltage. We have looked at some other devices like the TI impedance match system.

Monitoring battery capacity is challenging. There are many variables that affect the batteries capacity and state of charge which are difficult to factor in and may not be practical to measure. There are some other angles I'd like to explore and will follow up here.