Embedded Systems · Power Management

Sizing Energy Storage for an Intermittently Powered Device

How a harvesting source, a buffer capacitor, and a load with a fixed energy per operation determine whether a device can run at all, and what happens at the boundary.

A device with a battery is limited by charge; a device with a harvester is limited by the integral of its input power over time. The two are not the same problem. A battery can deliver a large current on demand and refill only when someone connects a charger. A harvester delivers whatever the environment provides, which may be zero for long stretches, and a buffer between the source and the load determines how the load’s demands are smoothed.

The energy balance over a window

The first question is whether the average harvested power exceeds the average load power. Over a window $W$:

$$\int_0^W P_{\text{in}}(t),dt \ge E_{\text{load}}(W) + E_{\text{loss}}(W)$$

If the inequality holds for a long window, the device can run indefinitely in the average, provided it can store enough energy to bridge the periods when the input is below the load. If it fails for the long window, no amount of buffering helps; the device is a battery device that happens to recharge, and the recharge extends its life rather than replacing the battery.

The distinction matters because the two cases call for different designs. In the average-positive case, the buffer’s size is set by the longest deficit the device must survive, which is a property of the environment’s variability. In the average-negative case, the buffer is set by the mission duration, and the design is the battery design described in the duty-cycle arithmetic with an extra input term.

Harvesting sources differ enormously in variability. A photovoltaic cell in an indoor office fluctuates by an order of magnitude between a desk lamp and a dark corner, and it produces nothing at night. A thermoelectric generator on a machine produces power proportional to a temperature difference that changes with the machine’s duty cycle. A vibration harvester produces power only while the machine runs. The variability, not the peak, is what sets the buffer.

The buffer as a charge reservoir

A capacitor $C$ at voltage $V$ stores $\tfrac{1}{2} C V^2$. If the device must operate between a minimum voltage $V_{\min}$ and a maximum $V_{\max}$, the usable energy is

$$E_{\text{usable}} = \tfrac{1}{2} C \left(V_{\max}^2 - V_{\min}^2\right)$$

The quadratic dependence is the reason a small increase in the upper voltage buys a disproportionate increase in stored energy, and the reason the lower bound dominates the loss. Operating from 4.2 V down to 3.0 V on a 100 µF capacitor yields about 433 µJ. The same capacitor operated down to 1.8 V yields about 720 µJ, but the load cannot necessarily use the lower voltage, so the usable range is set by the regulator’s input requirement, not by the capacitor.

The capacitor’s equivalent series resistance limits the current it can deliver. A pulse that draws a large current produces a voltage step of $I R_{\text{ESR}}$ on top of the discharge, and that step counts against the minimum voltage. A capacitor sized for energy alone can still brown out on a transmit pulse. That is the same phenomenon as the resistive droop of a battery under a pulse, described in the duty-cycle arithmetic, and it is not fixed by adding capacitance when the ESR is the limit.

A second, less obvious loss is the energy left behind. If the device stops at $V_{\min}$ and waits for the input to raise the voltage, the charge below $V_{\min}$ is never used, and the device is effectively operating from a smaller reservoir than its capacitance suggests. The fraction lost is $V_{\min}^2 / V_{\max}^2$, which for 3.0 V and 4.2 V is about half. That half is the price of the regulator’s minimum input, and it is often the largest single term in the sizing calculation.

Cold start and the minimum operating voltage

A harvesting device that has been dark for a week begins at zero volts, and at zero volts its own control circuitry does not run. The boost converter that would raise the harvester’s low voltage to a usable rail needs a supply to start, and at the beginning there is none.

The standard solution is a cold-start path: a small, inefficient oscillator and charge pump that can operate from a few hundred millivolts and charge the buffer until the main converter can take over. The cold-start path’s efficiency is low, often a few tens of percent, and its minimum input voltage is a hard floor: below it, the device does not start at all, no matter how long the source is available.

The consequence is a threshold behaviour. A source that delivers just below the cold-start threshold produces nothing usable, and a source just above it starts the device. Designs that sit near the threshold exhibit a startup that takes minutes and a device that resets whenever a cloud passes. The engineering response is either to oversize the harvester so the threshold is comfortably exceeded, or to add a small primary cell whose only job is to power the cold start.

/* Hysteresis on the buffer voltage: run until the lower bound, then
   wait for the upper bound. Without the hysteresis the device
   oscillates at the boundary and never completes an operation. */
#define V_LOW_MV   3000
#define V_HIGH_MV  3800

static bool may_run(void)
{
    static bool enabled = false;
    uint16_t v = adc_read_mv(ADC_CH_BUFFER);

    if (!enabled && v >= V_HIGH_MV)
        enabled = true;                 /* enough charge to start a task */
    else if (enabled && v < V_LOW_MV)
        enabled = false;                /* stop before the rail collapses */

    return enabled;
}

The hysteresis band has to be wide enough to contain the energy of one operation. If a task consumes more than the charge between $V_{\text{low}}$ and $V_{\text{high}}$, enabling at the upper bound still runs out mid-task, and the task is interrupted rather than deferred. Sizing the band is therefore the same calculation as sizing the capacitor, done from the other direction: the band must hold at least one atomic unit of work.

Atomicity and progress

A device that loses power mid-operation loses whatever it had not committed. If the operation is a sensor read followed by a radio transmission, losing power between them means the reading is lost and the energy spent obtaining it is wasted. The response is to make each unit of work atomic with respect to power loss, or to checkpoint enough state that the work can resume.

Checkpointing costs energy and non-volatile write endurance. Writing a checkpoint to flash on every step consumes both, and flash’s write energy per byte is not negligible against a harvester’s budget. The alternative is to design the work so that the natural boundaries are the power-loss boundaries: take the reading, store it in a retained or non-volatile buffer, and transmit later. Each step is independently useful, and losing power between steps loses at most the step in progress.

The ordering constraint is that a commit must not be observable until it is durable. A write that is partially complete when power fails leaves a record that looks valid but is not, and the recovery path must be able to detect it. The usual technique is a sequence number or a checksum written last, so that an incomplete record fails validation, which is the same discipline that journaling filesystems use for their metadata, applied to a much smaller store.

The load’s shape

Given a fixed energy budget, the load’s shape determines whether the device can use it. A load that draws a constant 100 µW can run from a buffer of modest size, because the buffer only has to bridge the input’s dips. A load that draws 20 mW for 10 ms once every two seconds has the same average but a peak that is 200 times larger, and the buffer must supply that peak.

The buffer’s size for a pulsed load follows from the tolerable droop over the pulse, $C \ge I_{\text{pulse}} t_{\text{pulse}} / \Delta V$, with the input current subtracted. If the harvester supplies $I_{\text{in}}$ during the pulse, the capacitor’s discharge rate is $I_{\text{pulse}} - I_{\text{in}}$, and the droop is correspondingly smaller. For a harvester that supplies a small fraction of the pulse current, the difference is negligible and the pulse sets the size.

The alternative to a large buffer is to stretch the pulse. A radio that transmits at a lower power for longer, or a sensor that converts more slowly, reduces the peak at the cost of a longer active time and possibly a lower efficiency. Whether that trade pays depends on the harvester’s impedance: a source that cannot deliver a peak current benefits from a stretched load, while a source with a large buffer and a good converter does not.

What the boundary looks like

The transition between “runs indefinitely” and “runs for a while” is not sharp in practice. A device whose average input equals its average load will run, but its buffer voltage performs a random walk driven by the environment’s variability, and the walk eventually crosses the lower bound. The time to cross is a first-passage problem, and it grows rapidly as the average margin increases, so a design that is only just average-positive can exhaust its buffer within the life of the product while a design with a large margin effectively never reaches the bound.

That is why harvesting designs are usually specified with a large margin rather than a tight one, and why the margin is quoted against the worst expected environment rather than the average. The energy accounting is the same as for a battery, with the addition of an input term whose statistics matter as much as its mean. The load’s own peak, which sets the buffer’s ESR and capacitance requirements, follows from the transition and transmit costs described in wake-up latency and its energy cost.

References

  1. Energy Harvesting Technologies — Shashank Priya, Daniel J. Inman; Springer
  2. Intermittent Computing: Challenges and Opportunities — Brandon Lucia, Vito Kortbeek, et al.; LIPIcs, 2017
  3. Energy Harvesting Systems: Principles, Modeling and Applications — Tom J. Kaźmierski, Steve Beeby; Springer