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 or 

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.
  • Discharging: power absent on Vusb and Vext, measured discharge
  • Low battery: power absent on Vusb and Vext, measured discharge, Vbatt reaches low battery threshold.
  • Dead battery: power absent on Vusb and Vext, measured discharge, battery was low, Vbatt dead battery 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 ( and 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.




The link unfortunately does not work - has the site moved?

Posted by M on May 17, 2009 at 07:11 PM PDT #

It has been having outages but seems to be working now.

Posted by Bob on May 23, 2009 at 01:12 PM PDT #


Great article.

I have a simple question, how bad is to always
have the USBHP on the LTC3455 always active (even before enumerating) when charging via a USB port.

Best regards,


Posted by André Rodrigues on June 24, 2010 at 10:07 PM PDT #

Post a Comment:
  • HTML Syntax: NOT allowed



« July 2016