If you’re working on a battery powered project that needs a long service life between charges or battery replacements, you’ll quickly find that every last microwatt of power starts to add up over months of operation. I have worked on some projects in the past that needed to run for months on a single charge of a secondary battery, or a single primary battery that was small enough that simply running the microcontroller at full power would drain the battery in about an hour. These sort of projects are where chasing down every last power draw can make the difference between hitting operational targets and being caught weeks short.
In this scenario, component choice can make a huge difference, where one component may have an order of magnitude greater power consumption than another that does the same job. Parasitic losses from passive elements, such as capacitors and voltage dividers, can also add up quickly if the wrong components are chosen.
Reducing Current Draw
It goes without saying that the best way to improve battery life is to reduce current draw from the circuit. How do you achieve that when you need all those components for your device to work? In this article, we’ll go through that in detail.
Modern microcontrollers generally allow you to shut down peripherals that you are not using, which can reduce your current draw when the microcontroller is awake and processing data. The various sleep states, or levels of sleep, that the microcontroller offers can have significantly different current consumption as well. Some microcontrollers make power management easier than others, so selecting the right controller can be the main determinant of your power budget. Unless you have a powerful radio transmitter, the microcontroller or FPGA in your device is likely going to have the most significant current draw.
When comparing microcontrollers, it’s well worth buying several dev kits and buying or building an EEVBlog µCurrent Gold to measure and log current draw in different states. This can give you very precise numbers, which can help you make the decision of which microcontroller saves the most power. Some sleep states or low levels of current draw advertised in the datasheets of certain microcontrollers can have significant drawbacks, or not be attainable in real world circumstances, and the only way to know is once you start reading the manual and trying to reach those numbers. Just because a microcontroller is in a low energy category doesn’t mean it will not consume a lot of power. An STM32L4 microcontroller running at 120MHz will still consume far more power than an EFM32ZG that has been built for ultra low power, not just ‘less power’.
To attain the desired long battery life, your microcontroller is going to need to spend a lot of time in a sleep state, from which it will likely need to wake itself up occasionally to take a measurement or log/transmit some data. The current draw that your microcontroller can achieve in a sleep state without an external wake up is critical. In my experience, many microcontrollers will advertise their lowest currents proudly, but these will typically be in a state which requires an external wakeup and quite a bit of code to be able to bring the microcontroller up to the point at which it is operational and able to execute code and use peripherals again. This is why it’s important to evaluate the microcontrollers yourself instead of relying on advertised data. Some microcontrollers can even also use low power versions of their peripherals (ADC or UART) to continue to receive data or make readings while the microcontroller is sleeping. The EFM32 series from Silicon Labs can do this, and you would be surprised how much difference that makes. Making the microcontroller capable of receiving data and taking analog sensor readings whilst sleeping—waking itself up only to process the data when those buffers are full—can save you a lot of programming and current draw than could be saved if you bring the microcontroller in and out of sleep just to take a single reading.
Many microcontrollers will allow you to set the clock speed, or even the clock source. Having the option to run code from a real-time clock crystal running at 32.768kHz or lower, can allow you to execute code that is not time critical with a much lower current consumption per clock cycle than running from a MHz crystal.
Getting your microcontroller into a sleep state as quickly as possible after executing code is important, as you don’t want to be wasting battery with the microcontroller doing nothing. If you are waiting for a response from a radio, consider dropping your clock rate to the lowest it can go— with the peripherals you are using—for the radio to continue functioning (i.e., UART, SPI, I2C).
Whilst microcontrollers can consume a lot of power, radio modules can require a great deal more in short bursts when transmitting. This usually leads to larger voltage regulators, which in turn are perhaps less efficient at lower average current draws.
If you’re trying to drop every last microwatt of wasted power, consider putting the radio module on its own switched-mode power supply that is optimized for its peak current draw, then either putting the power supply into a shutdown mode if it’s quiescent current is low enough, or removing power from it completely with a MOSFET. A switched-mode power supply still uses a considerable amount of current even if it is not being actively used. This is because the power supply will continue to switch even with no load, as it needs to replace parasitic losses in capacitors and supply enough energy for the quiescent current of any devices connected to it. Ultimately, this means that the power supply is operating very inefficiently without any load, so it’s best to just remove power from it completely.
It’s better to have your low powered device initiate any communications rather than constantly have the receiver active and listening. This allows you to switch off the radio completely when not in use, and just receive messages in the short period your device is awake. If your device must receive data without first polling for it, plan your protocol such that the transmitter knows when your device is awake and available to receive the message.
Many display options consume a lot of power when active. If you require a persistent display, consider using an E-Ink display, or a Sharp Memory LCD if you need high refresh rates. A custom liquid crystal display can have very low power consumption if you have a fixed set of output parameters to show and are producing the volume to justify a custom display. Temperature or other environmental sensors are great examples of devices that have relatively fixed displays, which could use a custom low current LCD.
If you must have a backlight for your display, consider adding that functionality to a physical button that must be held to enable the backlight, or to turn the backlight off automatically a short time after activation.
Quiescent current is the silent killer of power budgets. You could be wrong if you’ve put some device in a standby state, or the device is sitting there in your circuit passively, and you think it’s not drawing any current. It’s fairly likely that the device is consuming current, which could be just nanoamps, but is probably microamps or more. A device is considered to be in a quiescent state when it has no load or is not performing any activity, but still has power connected.
Voltage regulators are an example of components that can typically be optimized by switching to a more suitable option. If you need to have a regulator connected all the time, such as the one for powering the microcontroller, dig through the datasheets for all the relevant choices for regulators, and look for their Quiescent current (IQ) figures. You’ll quickly find that there is a very wide range of quiescent currents for all voltage regulator options.
If a linear regulator wastes too much energy because you have a significantly higher voltage battery, you might want to consider a very small, very low current linear regulator with a low quiescent current for keeping your microcontroller going in it’s sleep state, with just enough energy to allow you to power up enough peripherals to switch on a more efficient switched-mode power supply. You can then put the inefficient (at higher current loads) linear supply into standby whilst you do work, and then switch it back on as you go to sleep and turn off the switched-mode supply. Depending on and the current draw, and how long your sleep states are, you might even find it more efficient to use a supercapacitor rather than a voltage regulator during sleep. Just be aware that even a supercapacitor has self-discharge, and not only won’t last forever, but will waste energy whenever it has a charge.
Quiescent current is a critical specification to consider when selecting components for a low power budget. If you have a device you just can’t find a low enough quiescent current option for, add a MOSFET to its power rail and simply turn it off when you’re not using it.
Chasing the Final Microamps
Your design might have many more locations at which you can save power. If you have a voltage divider in your circuit—for monitoring a battery for example—change the resistor values to ones in the high hundreds of thousands, if not millions, of ohms ranges. This will allow you a sufficient voltage reference yet cut down on the amount of current you are wasting just to get the voltage reference. If board space and budget allow for it, you can add a MOSFET to each voltage divider so it only consumes current (and therefore gives you a voltage reference) when you are going to be reading it. The same goes for pull down or pull up resistors that will have current flow even when the microcontroller is in a sleep state. Connecting the pull up/down resistors to spare microcontroller pins, or using the resistors built into the microcontroller for this purpose instead, might save you a little bit of current loss.
Capacitors also waste energy passively. Rethink how many decoupling capacitors you really need at each device: will just one do, or do you absolutely need multiple? Can you rearrange your circuit board so multiple devices can share a single decoupling capacitor?
For example, if you have large capacitors for a switched-mode power supply that is not on all the time (e.g., for the radio module in the example above), you can potentially put a MOSFET between the capacitors and ground, so they are only part of your circuit when the power supply or load they are decoupling is active. Depending on the capacitors and battery, this could add days or weeks to your run time if the device is being powered by a small battery for months or years.
If you have reverse-polarity protection in your circuit, and are using a diode, get rid of it immediately, it’s wasting a lot of energy with its forward voltage drop. You can use a MOSFET for the same purpose. Texas Instruments has a great document on using a MOSFET for simple reverse-polarity protection, which you can find here. If you’re using diodes to allow a battery to be used alongside an external power source, you can use a source selector switch integrated circuit or current sharing controller, both generally classed in the ‘ideal diode’ category at your favourite component supplier. The controller IC will use some current, but over the life of the battery charge, it will likely consume less than the voltage drop of the diode will.
A Final Word on Power Budgets
There are typically many routes for optimizing the power budget of your device. Sometimes however, you need to figure out when you are taking things too far. If you add a MOSFET to every device on your board so you can turn it off individually, you might end up adding enough cost to the bill of materials that you could potentially source a larger battery instead. The larger battery might take up more volume, but all of those MOSFETs take up an equally as valuable board space.
If you do want to add a lot of MOSFETs because you must chase every last microamp, be sure to choose transistors with the lowest possible RDS(ON) so you’re not wasting any energy as heat. If I’m taking this approach, I’ll usually get a nice MOSFET array with low resistance that I can run all my devices through without taking up too much board space. If the devices you want to control have full-load currents that are lower than the rating of your microcontroller’s pins, which is about 8mA for most modern ARM controllers, you might be able to connect the devices directly to the microcontroller to either source or sink current through the microcontroller. When the microcontroller sleeps, and the GPIO peripheral shuts down, so will your devices – very convenient!
We’ve talked a lot about reducing unneeded current from devices on the circuit board, but we shouldn’t forget the battery itself. If you’re going to put considerable effort into making every last joule of energy in the battery last, make sure you have considered your battery chemistry as well. Even with primary (non-rechargeable) batteries, you will experience self-discharge. If you expect your device to be running on a battery for years, ensure you have calculated in the losses to the battery capacity of 0.5%-1% per month for an ideal choice, or 1%-2% for a cheap choice. The service temperature of the device will also influence self-discharge, as most battery chemistries will exhibit increased self-discharge as temperature rises. This happens not just above some threshold temperature, but in general—as the temperature goes up, self-discharge also goes up in a linear fashion.
If your service temperature is exceedingly low, as is the case with devices used for monitoring industrial freezers, or for use in especially cold climates (e.g., Canada, Alaska, Nordic countries, and Antarctica), your battery may only have a fraction of its rated capacity available. Depending on the duration of the application, you may find that using the battery’s energy to heat itself gives you more available energy over its service life than just leaving it cold. Certain battery chemistries do far better in the cold than others, and you can most likely rule out secondary (rechargeable) batteries in low temperatures.
Its very easy to spend a lot of time and money chasing every picoamp of power down for your power budget, but this is only going to be a reasonable approach for critical systems where you simply can’t reasonably service the battery. There comes a point when you have taken care of the major power draws in your system, and are seeing rapidly diminishing returns for your engineering time and bill of materials cost. This is a good time to call it ‘good enough’ no matter how fanatical you are about chasing engineering perfection. Sometimes, the user might just have to live with changing batteries a few days early, or connecting a charger a few hours earlier.
About the AuthorMore Content by Mark Harris