Low Power Circuit Design for Battery IoT Devices
Low power circuit design fails in a predictable way. The device works, the firmware is correct, and the battery lasts a fraction of the target. By then the hardware is frozen.
This article covers how to avoid that, starting from the budget rather than from the schematic.
Build the energy budget before the schematic
Work in energy per cycle, not average current. Average current hides the structure of the problem.
For one reporting cycle, list every activity, its current, and its duration:
- Wake and initialize
- Sensor read
- Processing
- Radio transmit
- Radio receive window
- Return to sleep
- Sleep for the remainder
Multiply each current by its duration to get charge, sum them, and multiply by cycles per day. Divide usable battery capacity by that number.
Doing this in a spreadsheet before committing to parts is the highest value hour in the whole project. It will usually show one activity dominating, and that is where design effort belongs.
Sleep current is where designs leak
For a device sleeping 99 percent of the time, sleep current sets the runtime. It is also where measured performance most often diverges from the datasheet.
Common causes of excess sleep current:
Floating GPIO. An unconnected input pin can oscillate and draw current continuously. Configure every unused pin as analog input.
Pull-up resistors left active. A 10k pull-up held low draws 300 microamps at 3 V. That single resistor can exceed your entire sleep budget.
Peripheral clocks left enabled. Clocks running to unused peripherals cost current for nothing.
Regulator quiescent current. Many general purpose LDOs draw tens of microamps just to exist. For a design targeting single digit microamp sleep, the regulator choice matters as much as the MCU. For sub-GHz radio power considerations, read our STM32WL LoRa design guide.
External components. Sensors, level shifters, LEDs and their series resistors, and voltage dividers on battery monitoring all draw current continuously unless switched.
Put a MOSFET switch on the supply to anything that does not need to be powered while sleeping. Battery monitor dividers in particular should be switched, since a permanently connected divider is a permanent load.
Measuring sleep current properly
A standard multimeter cannot do this. It lacks the dynamic range to show microamps and milliamps in the same session, and its burden voltage distorts the measurement.
Use a dedicated current measurement tool that logs across a wide dynamic range. Seeing the actual current profile over a full cycle usually reveals something unexpected, most often a peripheral that never went back to sleep.
Measure on real hardware, early, before the design is frozen.
Sizing the battery for pulsed loads
Capacity is only half the specification.
A radio transmitting at high power draws a substantial pulse. Under that pulse the cell's internal resistance produces a voltage drop, and that drop worsens at low temperature and as the cell ages. See our GPS tracker hardware design guide for energy budgeting under pulsed loads.
If the rail dips below your brownout threshold, the device resets mid transmission, and you get a device that works at room temperature on a fresh battery and fails in the field in winter.
Two mitigations:
Bulk capacitance. A capacitor close to the radio supplies the pulse and lets the cell supply the average. Size it against pulse duration and acceptable droop.
Cell selection. Some chemistries have much lower internal resistance than others. Check the pulsed load specification, not just the capacity.
Choosing components for low power
- Regulators with sub-microamp quiescent current for the always on rail
- Sensors with a genuine low power sleep mode, not just a slow sampling mode
- Real time clocks integrated into the MCU rather than external where possible
- Avoid LEDs on production units, or drive them at low duty cycle
Check the datasheet's typical and maximum figures. A typical 1 microamp with a 10 microamp maximum means your production spread includes devices that miss the target.
Firmware patterns that matter
Hardware sets the floor. Firmware determines whether you reach it.
- Interrupt driven rather than polling, always
- Wake on timer or external event, never with delay loops
- Batch operations so the device wakes once and does several things rather than waking repeatedly
- Keep radio receive windows as short as protocol allows (see our LoRaWAN device development guide)
- Reduce clock frequency during light processing, since power scales with frequency
Duty cycling the receiver is often the single largest saving available. A device that listens continuously will consume far more than one that transmits occasionally.
Validating the runtime claim
Do not extrapolate from a short measurement without checking.
Run a device for a full week under realistic conditions, logging battery voltage. Compare the observed discharge with your budget. Discrepancies almost always point to something the budget missed, most often a sleep leak or a retry path that transmits more often than expected.
Test at temperature extremes. Both battery capacity and sleep current change substantially with temperature.
Getting a multi year runtime
Battery life is not a firmware problem discovered at the end. It is a system decision made at the schematic stage, and by the time firmware is being tuned the ceiling is already set.
SRQ Robotics designs battery powered embedded products with energy budgets validated on hardware, including sub-microamp sleep designs and pulsed load characterization. Explore our Embedded & IoT services or contact us if your device is missing its runtime target.
