Budgeting a Coin Cell in Microjoules per Operation
A battery-powered sensor node lives or dies on a single sum: how much energy the cell contains, divided by how much each cycle of firmware spends. The cell arrives described in milliampere-hours, which is a charge count and useless for adding things up across different supply voltages. Multiply it by the nominal voltage and it becomes watt-hours; multiply again by 3 600 and it becomes joules, the unit in which a radio transmission, an ADC reading and a year of sleep can finally be summed on one line. That is why an energy budget spreadsheet has a joule column and never a milliampere-hour one.
What Actually Drains the Cell
Sleep Sets the Floor, Radio Sets the Slope
A Coin Cell Cannot Deliver a Pulse
Self-Discharge Is a Fixed Tax
Duty Cycle Is the Only Real Lever
Working a Datasheet Current Down to Joules per Event
Datasheets talk in microamps and milliseconds, marketing talks in years, and the bridge between them is the joule. The workflow below is the one an energy budget is normally built with, and the converter handles the step where the cell rating has to meet the per-event figures.
Turn each current figure into an energy per event
Multiply the current by the supply voltage to get watts, then by the duration in seconds. A 5 mA wake lasting 10 ms on a 3 V rail is 0.005 × 3 × 0.01 = 150 µJ. Do it once per state the firmware enters.
Put the cell's watt-hour rating into the left box
Enter 0.675 for a CR2032, or whatever mAh × V gives for the cell you have chosen, and the joule total appears beside it as you type. Decimal commas are accepted, so a value pasted from a European datasheet needs no editing first.
Reverse it to price a budget back in watt-hours
Once the yearly total is known in joules, the swap arrows put joules on the left and give the watt-hours a cell selection table is indexed by. Both boxes stay live either way, so typing into the right-hand one produces the same result without touching the arrows.
Take the plain figure into the budget sheet
The copy control above a field yields the number with no unit attached, and Ctrl+C inside the field behaves identically — which is what a spreadsheet cell or a firmware constant wants, with nothing to strip before it will parse.
Energy per Operation for Common IoT Radio and Sensor Tasks
Figures below assume a 3 V rail for the sleep and sensor rows and a 3.3 V rail at 40 mA for the LoRa transmit rows, giving 132 mW of radio draw. LoRa airtimes are computed for a 12-byte payload on 125 kHz with coding rate 4/5. The last column divides the 2 430 J of a nominal CR2032 by the event cost, before derating.
| Operation | Energy | In joules | In watt-hours | Count on one CR2032 |
|---|---|---|---|---|
| One second of 2 µA deep sleep | 6 µJ | 0.000006 | 1.67 × 10⁻⁹ | 405 000 000 |
| BLE connection event, empty | 20 µJ | 0.00002 | 5.56 × 10⁻⁹ | 121 500 000 |
| BLE advertisement, three channels | 45 µJ | 0.000045 | 1.25 × 10⁻⁸ | 54 000 000 |
| MCU wake plus sensor read | 150 µJ | 0.00015 | 4.17 × 10⁻⁸ | 16 200 000 |
| A full day of 2 µA sleep | 518 mJ | 0.5184 | 1.44 × 10⁻⁴ | 4 687 days |
| LoRa uplink, SF7 (41.2 ms) | 5.44 mJ | 0.00544 | 1.51 × 10⁻⁶ | 446 600 |
| LoRa uplink, SF12 (1.155 s) | 152 mJ | 0.1525 | 4.24 × 10⁻⁵ | 15 900 |
| NB-IoT message with connection setup | 1.5 J | 1.5 | 4.17 × 10⁻⁴ | 1 620 |
The spread across that table is nearly six orders of magnitude, and it explains most of the architecture decisions in a low-power product. A node that advertises over Bluetooth every second spends 45 µJ a time and could in theory run for over a year on a coin cell; the same node sending one NB-IoT message an hour spends 1.5 J a time and empties the identical cell in about ten weeks. The SF7 and SF12 rows are the same message on the same radio at the same output power — the twenty-eight-fold difference is nothing but airtime.
What the Converter Contributes to the Budget
Nothing Rounds to Zero at the Microjoule Scale
Results carry up to eight decimals and drop into exponent form below a millionth, so a 1.25 × 10⁻⁸ Wh advertising event stays a real number instead of collapsing to a row of zeros.
A Cell Budget and an Event Cost, Same Two Boxes
Cell ratings arrive in watt-hours and firmware costs arrive in joules, and both sides accept typing, so a 0.675 Wh coin cell and a 0.0054 J uplink can be compared without a spreadsheet in between.
Plain Digits for the Energy-Budget Spreadsheet
Copying returns the value on its own, so a converted joule total drops straight into a budget column or a firmware constant without a unit label that would have to be deleted afterwards.
The Unit Menu Reaches kWh for Rechargeable Nodes
Type into either dropdown's search box to reach the kilojoule, the kilowatt-hour or the electronvolt, which covers the energy-harvesting and rechargeable end of a fleet as well as the primary-cell end.
Battery-Life Questions From the Firmware Bench
How do I get from microjoules per event to years on one coin cell?
Build a daily total, then divide. Take every state the firmware enters in twenty-four hours, multiply each event cost by how many times it happens, and add the sleep floor. A node that advertises every two seconds spends 43 200 × 45 µJ = 1.944 J a day on radio plus 0.518 J on sleep, so 2.46 J daily. Against 2 430 J that is 988 days, or about 2.7 years — and against a realistic 65 % deliverable fraction, closer to 1.8 years. Stretching the interval to ten seconds drops radio to 0.389 J and pushes the same cell past four years.
Why can I not use all 225 mAh of a CR2032?
Because that number was measured under conditions your node does not reproduce. The rating comes from a continuous drain of a few hundred microamps at room temperature, run down to about 2.0 V. A real node pulls milliamp pulses through an internal resistance that starts near 10 Ω and can reach several hundred ohms late in life, and each pulse pulls the terminal voltage down by I × R. Once the sag crosses the brown-out threshold the node resets while plenty of chemical capacity remains. Add a 100 µF or larger bulk capacitor to supply the burst, and design the cutoff generously.
The datasheet gives microamps — how do I turn that into joules per day?
Multiply amps by volts by seconds. A 2 µA sleep current on a 3 V rail is 6 µW, and 86 400 seconds later that is 0.5184 J — put 0.000144 in the watt-hour box and the same figure appears. Over a year it becomes 189 J, which is 7.8 % of a CR2032 spent doing nothing at all, or 17.5 mAh if you prefer to work in charge. Take care with mixed rails: a sensor on 1.8 V and a radio on 3.3 V give different joules for the same current, which is precisely why energy rather than current is the quantity worth tracking.
Why budget energy per message instead of current draw?
Because current alone hides the two variables that matter — how long the draw lasts and what voltage it happens at. A radio pulling 40 mA sounds alarming until you notice the SF7 burst lasts 41.2 ms and costs 5.44 mJ, while a 12 mA sensor left powered for two seconds quietly costs 72 mJ, thirteen times more. Energy per message also composes: uplink, downlink windows, sensor warm-up and processing simply add, and the sum divides straight into the cell's joules. Current figures cannot be added like that at all.
What does self-discharge remove from a ten-year budget?
Roughly a tenth, and more if the device runs warm. At about 1 % a year a lithium manganese dioxide coin cell has surrendered near 10 % of its 2 430 J before the firmware touches it, and self-discharge accelerates markedly with temperature, so a node on a sunlit roof does considerably worse than one in a corridor. Lithium thionyl chloride primaries are the usual answer for genuinely long deployments — well under 1 % a year, and a C-size cell holds 30.6 Wh or 110 160 J, some forty-five times a coin cell — at the cost of a passivation layer that has to be depassivated before the first real load.
No comments yet. Be the first to comment!