This is an old revision of the document!
Electronic devices are being deployed in an ever-increasing array of roles: monitoring, wearables, and IoT devices are just a small sampling of the varying ways that these devices are becoming part of every day life. However, with more devices comes a greater demand to power them all, which is becoming an increasingly critical issue.
For small or mobile devices, the primary energy source has usually involved batteries in some fashion, but these are also the components with the shortest lifespan and most frequent need for replacement. The need to replace (much less dispose of) batteries for an ever-growing array of devices is quickly becoming a concern, particularly in applications where accessing the devices themselves is expensive or impractical (such as a nanosatellite deployed into orbit).
At the simplest level, batteryless devices replace a battery (or other power source) with an energy collector (solar, thermal, etc.) and at least one capacitor to both store power and drive the load. Depending on design needs and the task to be performed, two primary methods of energy management may be used:
It should be noted that the circuit designed above is the simplest implementation: more complicated configurations (such as Federated Energy Storage) are discussed in their own article. Regardless of the energy configuration used, however, it is likely that processing will consume more power than is available in a single cycle: as a result, an intermittent device will often save (checkpoint) the current system state periodically, in order to resume as needed after power loss until the processing is complete.
Most batteryless devices are small, embedded circuits and so face the same limitations in memory, storage, and processing capability shared by their more typical kin. While there are unique challenges when utilizing an intermittent power source compared to typical embedded devices, they also share many common limitations and restrictions: certain programming conventions that are suitable for a typical desktop/cloud application (e.g. recursive functions) are impractical or ill-advised in an embedded device, and alternative methods such as bitwise operations must often be used for tracking simple state variables.
Larger capacitors have a longer charge time and energy leakage, so capacitor sizing will depend not only on power requirements, but on desired response time. Alternative methods of energy storage can counteract some of these drawbacks, but come with their own implementation and complexity requirements.
By their very nature batteryless systems must reckon with transient, unpredictable power supplies and long periods of downtime. There are varying ways to approach handling a variable energy supply as noted above, but all intermittent systems must be prepared to handle a complete loss of power in some fashion. This is further complicated by the fact that most programming languages (and most programs) are designed and built around the assumption of consistent uptime: the relatively short uptime of most intermittent power supplies means a device can spend all its uptime reinitializing (instead of performing useful work) if not properly accounted for.
To this end, most intermittent devices employ checkpointing in some fashion, saving the application's current state before power is lost, and using that to resume the same process(es) once sufficient power is available. Where a checkpoint is taken, as well as what data is saved for the checkpoint itself will depend on the application, power budget, and importance of the checkpointed data. These checkpoints also require non-volatile memory for storage, each of which has its own unique considerations and drawbacks.
Depending on the application, collected data may need to be processed within a given time limit to be of any use. It is entirely possible for a device to collect data, but be unable to process it within the limit for various reasons: as a result, a device should be able to account for this possibility in situations where it is relevant.
The lack of consistent power means that communication between two batteryless devices can be challenging, as there is no guarantee both parties will have enough power to be active at a given time. Most common communication protocols are also not designed around intermittent computing, often with reset/termination timers that are shorter than a given device's recharge period. As a result some method must be used to either synchronize communicating devices in some fashion, or maintain the state of a given communication between devices after interruption.
Discussion