Anelok: saving more power (1/2)
werner at almesberger.net
Wed Apr 29 17:28:18 UTC 2015
Revisiting the "empty" battery
First an update on how deeply Anelok discharged its battery during
the first "solo" run, about a month ago:
I put it to the usual discharge test, discharging into a 15 kOhm
resistor. This is the result:
For comparison, this is the result of the original test from February
and March, with a new battery:
Both batteries were 7 years old Sony cells, so one can compare the
results directly. The initially new battery crashed through 2.4 V
after about 1030 hours, while the one that had spent a productive if
short life in Anelok reached that point after about 500 hours.
So this means that Anelok could use more than half of the battery's
energy content. And that's still before optimizing any capacitors.
So far, so good. But it's still not nice that Anelok is merrily
suckling 0.7 mA (board #2) to 0.9 mA (board #1) from the battery
while doing absolutely nothing useful.
As a reminder, this is the power saving I had implemented so far:
Now I added the remaining two low-power modes:
In "Ready", the boost converter is turned off and the system voltage
drops from 3.3 V to the battery voltage. An unpleasant side effect of
this is that the values returned by the touch sensor increase, making
it appear as if the sensor had been touched, which in turn causes
Anelok to wake up ...
To prevent this, I added a calm period when entering Ready, during
which the driver re-calibrates the sensor until it is idle again.
Upon exit from Ready, the driver restores the previous calibration.
This is far from pretty, but it seems to work most of the time. If
Anelok switches to AAA in a future design, this whole issue will
disappear since the battery voltage would be insufficient for the MCU
and the boost converter can therefore never be stopped in that
The result is better than expected: once the boost converter is off,
Anelok draws only 130 uA on average (I guesstimated around 300 uA).
Last but not least, there is Standby mode, where the pause between
samples of the touch sensor is increased from 10 ms to 50 ms. (I
haven't measured the time the sampling itself takes. Should be a few
milliseconds as well.)
This brings the average current down to about 55 uA (my guess was
something < 100 uA).
With the idle current now pleasantly low, a battery should last for
a month, maybe two.
But we should be able to still go a bit deeper, maybe below 10 uA.
The key to this is to use the crystal oscillator instead of the
power-hungry RC oscillator. Since the crystal doesn't work in one of
my boards, the firmware currently only uses the RC oscillator, but
one could introduce a configuration option to change that. (And of
course try not to break the crystal in the future :)
Next: current-monitoring an Anelok usage session.
More information about the discussion