This section presents our battery-characterization system and our design aids, which consist of a simulation model along with an analytical model (formulas) for some of the quantities.
To make both the discussion and the examples concrete, we focus on the testing and analysis of batteries that power wildlife tracking tags with integrated RF microcontrollers [
6,
9], such as the CC1310 from Texas Instruments [
17]. We use load parameters taken from actual tracking tags that were deployed in large numbers. Specifically, we assume that the tag transmits a 10 mW signal for 8 ms every few seconds (0.5 s to 16 s). This RF microcontroller and many similar ones require a voltage of 1.8 to 3.8 V, allowing Lithium–Manganese batteries to power them directly, as well as several other types of batteries (e.g., pairs of silver–oxide cells). The microcontroller uses either a linear regulator or a switching step-down regulator to regulate the supply voltage down to about 1.7 V. The CC1310’s data sheet specifies the current consumption while transmitting a 10 mW signal using a 3.6 V power supply and the switching regulator as 13.4 mA. This implies that with the switching regulator, the chip consumes
mW while transmitting. If the linear regulator is used, it will consume approximately 28.38 mA to produce the same power at 1.7 V. We assume that the load requires at least 1.8 V to operate correctly, which is the case for the CC1310. We also assume that the no-load battery voltage is 3 V, typical of Lithium–Manganese batteries.
2.1. Battery-Behavior Characterization
System
We designed and built a system to characterize the behavior of miniature batteries under a real or simulated load that is typical for wildlife tracking tags. The system consists of hardware (an analog circuit interfaced to a microcontroller), firmware, and host software that drives the testing and collects the results. The system works either in
simulation mode or in
real-load mode. The system is an enhancement of an earlier and more limited load simulation system [
10]. The software and hardware for this system are open and freely available [
18].
2.1.1. Microcontroller Platform
The hardware consists of a stack of two circuit boards, shown in
Figure 1. The bottom one contains a custom analog circuit that we designed, and the top one is a commercial microcontroller board, the
Adafruit Feather M4 Express [
19]. The Adafruit Feather series offers small form-factor boards (24 by 51 mm) with several different microcontrollers, some with WiFi or other radios, and with extension connectors that have the same or almost the same layout in all the boards. Therefore, extension boards like the one that carries our analog circuit can be compatible with multiple Feather boards; in particular, our board is compatible with at least the Express M4 board and with the WICED WiFi board, costing
$23 and
$35, respectively. The M4 Express board uses a 120 MHz Cortex M4 microcontroller (ATSAMD51J19) with 512 KB Flash and 192 KB RAM.
These Feather boards support the Arduino firmware environment, which is an easy-to-use C++ programming environment that supports numerous microcontroller boards (see, e.g., [
20]). The Express M4 board also supports CircuitPython, a more high-level firmware environment. We used the Arduino environment, due to its performance (it produces native C/C++ binaries) because it allows our firmware to run on many other microcontroller boards and for others to easily modify and enhance our code.
The small form factor of the Feather boards makes the hardware unit compact and reduces the cost of the analog circuit board. The size still allows for easy manual assembly of the custom analog board (one of the authors manually soldered 11 of these boards in a few hours).
2.1.2. Circuit Design
The custom analog section of our load tester and battery simulator is shown in
Figure 2. Connectors JP1 and JP2 connect the circuit to a microcontroller board from the Adafruit Feather series. Connector JP3 is used to connect the battery under test and, in real-load mode, a load. In simulation mode, analog Pin A0 is used to set the current that the simulator draws from the battery in each pulse; it should be driven by a digital-to-analog converter (DAC). Digital pin 5 controls the current sink: when it is low, the simulator draws the current from the battery; when it is high, the simulator draws no current (but a real load might, if one is connected). Pins A2, A3, and A4 should be connected to analog-to-digital converter (ADC) inputs. Pin A2 monitors the actual current drawn by the simulator, pin A3 monitors the battery voltage (in both simulation and real-load modes), and Pin A4 monitors the current drawn by a real load.
Operational amplifier IC1A together with N-channel MOSFET Q1 and resistor R5 form a programmable current sink. When N-channel MOSFET Q2 conducts, it pulls the gate of Q1 to ground, disconnecting the load resistor R5 from the battery. When pin 5 is low, the negative feedback loop keeps the voltage on R5 at the same level as the voltage that the microcontroller’s DAC places on A0. A voltage of v Volts causes R5 to sink Amperes.
The role of capacitor C16 is to amplify the Miller effect of MOSFET Q2, in order to slow down the turn-on of the current sink. Without it, the current drawn by the load starts with a high short (on the order of a microsecond) spike that settles to the programmable level. This spike, which does not occur under actual loads, can potentially stress the battery. The spike is part of the settling of the operational amplifier, in which the negative feedback loop is open before the pulse (the gate of Q1 is grounded).
A simulation of the circuit indicated that without this Miller capacitor, a 35 mA current-sinking pulse starts with a 270 mA spike lasting 1.5 μs. With the 0.1 μF capacitor, the spike is reduced to 40 mA. Oscilloscope measurements verified these findings. The details of the spike depend on the parameters of both the MOSFET and the amplifier; the simulation used models of the actual parts that we use in the actual circuit, DMN1019 and LT1498.
The circuit around IC1B is simply an amplifier that amplifies the voltage developed across the current-sensing resistor R1. The voltage drop across this resistor causes tags to fail while battery voltage is still above the tag’s threshold (around 1.8 V), but only slightly so, about 20 mV above the threshold.
2.1.3. Firmware, Software, and Protocol Design
In simulation mode, the experiment is driven by a host computer running C-sharp (version 7) software that drives the experiment and collects measurement data. In real-load mode, the system monitors the current consumption and battery voltage of an actual tag. In this mode, the load itself controls the power-consumption scheduling, usually using a microcontroller; our system monitors the current consumption and battery voltage at a high sampling rate and transfers a summary of the measurements to the host computer for logging.
In simulation mode, the user configures the host-based software for a specific pulse-repetition rate, pulse duration, and current to be drawn in each pulse. Each current-sinking pulse is initiated by the host. This ensures that if the host software stops or the host itself halts or reboots, the experiment is suspended and the battery is not drained further until the experiment is restarted. This is important since some of these experiments, especially with large batteries, can last days or weeks. In this mode, the firmware waits for a command from the host to start a pulse. During this wait, it monitors battery voltage and records the highest voltage it has seen. When a command to start the sinking current arrives, the firmware sets the DAC output to the correct level, starts the pulse by clearing pin 5, and samples the battery voltage and the current drawn. The samples are time stamped. At the end of the pulse, the firmware sends to the host the highest voltage before the pulse (and resets this variable), the lowest voltage and highest current during the pulse, and all the samples of the current and voltage during the pulse. The firmware samples the ADC at about 12.5 ks/s (this is a limitation of the Arduino library that drive the ADC; the microcontroller can sample at up to 1000 ks/s), giving about 50 current and voltage samples in each 8 ms pulse.
In this mode, the host software stores all the data in a file and can display both the overall graphs of extreme values in each pulse (highest voltage before the pulse, lowest voltage and highest current during the pulse), as well as the detailed measurements during a pulse that the user selects on the screen. The visualization software is written in Python.
In real-load mode, the firmware discovers the timing of current-drawing pulses automatically using a set of rules. The rule that indicates the beginning of a pulse requires 4 consecutive current samples to exceed a threshold of about 5.4 mA; the rule for terminating a pulse requires 4 samples below 4.5 mA, to provide hysteresis. These thresholds are constrained by the operational amplifier’s errors (mainly offset voltage), which are fairly high for the LT1498. A precision amplifier should allow for using much lower thresholds. At the end of each pulse, the firmware sends the same data as in the simulation mode: extreme values before and during the pulse, and high-resolution measurements during and just before the pulse.
The real-load mode also implements facilities to record the current and voltage behaviors when a load behaves abnormally, which is usually caused by some failure or fault. In normal behavior, typical loads consume the current in short pulses that last up to 30 ms or so. When a load experiences a failure, it can consume the current continuously, which can drain the battery. When a pulse lasts longer than a threshold (currently 30 ms), the firmware moves to slow-sampling mode, in which the system reports every millisecond the maximal current and minimal battery voltage observed in the previous millisecond. The host software records these values but can aggregate them if the failure lasts longer than a few seconds.
2.2. Reservoir Capacitor and Current
Limiting Design Procedure
Miniature batteries may be unable to source enough current to power a bursty load. Therefore, energy must be transferred from the battery to an intermediate low-impedance energy storage device, typically a reservoir capacitor. As energy is drawn from the capacitor during an activity pulse, the voltage across it drops. If the capacitor is connected in parallel with the battery, it now presents a low-impedance load, risking concentration polarization in the battery. To avoid this, the reservoir capacitor is typically connected to the battery via a current limiter, usually a simple resistor.
The selection of the capacitor and the limiter should start with a characterization of the load: the length of activity periods, their frequency, the minimum supply voltage required by the load, and the current or power consumption of the load. In most cases, the actual load requires a voltage-regulated supply. When the regulation is linear, we model the load as a constant-current sink. With a switching regulator, we model the load as a constant-power sink. It is best to characterize the load using both data-sheet information and actual experiments with a low-impedance power source (e.g., a lab power supply). In the experiments, the current drawn can be evaluated by our system, or by a combination of a stand-alone current-sensing resistor, an amplifier, and an oscilloscope. The use of both data-sheet information and measurements reduced the chances of errors. Finally, the characterization should also include the voltage of the battery at rest (when little or no current is drawn from it).
Figure 3 shows a model of this topology. A bursty load is connected in parallel with a reservoir capacitor. The load is powered by a battery: here, it is a 3 V battery with a
internal resistance. The load and the capacitor are connected to the battery through a current-limiting resistor: here, it is
. Physically small large-value capacitors are leaky. We model the leakage as a
resistor (This value is based on a particular tantalum capacitor, the 330
, 6.3V Kyocera F950J337KBAAQ2, whose rate leakage is specified as 20.8
at the rated voltage at
, dropping quickly at lower applied voltages and rising with temperature. The 250 k resistor corresponds to about
, with the leakage at 3 V and
, respectively).
Figure 3 models the load as a 50 mW constant-power sink during activity periods. This is about right for a CC1310 RF microcontroller transmitting a 10 mW and using its built-in switching regulator. We can easily switch the load to a constant-current source by replacing the load formula in the model. The model also includes a separate voltage source connected to a periodic pulsed current sink, sinking 1 A for 8 ms every 8 s. This periodic current sink is used to modulate the actual load in simulations.
We also considered limiting the battery current using an integrated current regulator (e.g., 1N5283) or a transistor (JFET, MOSFET, or bipolar) configured as a current-limiting regulator. An ideal current regulator might have an advantage over a current-limiting resistor because as the capacitor recharges, the impedance of the regulator drops, reducing the amount of energy wasted in it. However, true regulation only starts when the voltage across a regulator like the 1N5283 reaches a threshold, around 1 V; below that, the regulator does not conduct or it behaves like a resistor. In our case, the regulator rarely sees a voltage higher than 1 V, so it is not likely to have any advantage. Therefore, this does not appear to be a practical solution.
The rest of this section explains how to size both the reservoir capacitor and the current limiting resistor.
2.2.1. Simulation-Based Design
We advocate choosing the current-limiting resistor and the reservoir capacitor using simulations of the model shown in
Figure 3. The file containing the model is freely available [
18]. The simulation is carried out using the free LTSpice software version 17.0.30 and takes less than a second. After the simulation, the user can visualize waveforms generated by the simulation, like the voltage drop across the load, shown in
Figure 4.
The resistor–capacitor combination is feasible for the given load if the minimum voltage in the simulation stays above the minimum voltage required by the load, plus a reasonable safety margin. In
Figure 4, the voltage drops to about 2.45 V but not below; this is well above the 1.8 V minimum of the CC1310, so the combination is feasible. Reducing the capacitor to
causes the voltage to drop below 0.6 V, so this value is certainly not feasible. Longer activity periods and heavier loads require larger capacitors. Increasing the current-limiting resistor slows down the charging of the capacitor and can also lead to the voltage dropping below the threshold.
Our LTSpice model also evaluates several quantities associated with the simulation. The most important one is the minimum voltage across the load, indicating whether the simulated values are feasible. Another is the maximum current drawn from the battery, which indicates the effectiveness of the current limitation. With the values shown in
Figure 3, the maximum is less than 253
.
Other quantities that the model computes include
where
E represents energy,
I current,
V voltage, and the integrals are over time. The model also computes the ratio of the last three to the first. These ratios indicate how much energy was transferred from the battery to the load and how much was wasted in the limiter or due to leakage. With the values in
Figure 3, these ratios are 54% (only a little over half the energy was transferred to the load), 6.5%, and 33%.
2.2.2. Sizing the Reservoir Capacitor
Analytically
The required capacitance can also be analyzed analytically, at least to obtain a good starting value for the simulation. In constant-power mode, the
mW power consumption translates into a 0.386 mJ energy consumption over the 8 ms activity period. The energy in a capacitor is
, so the voltage
at the end of the pulse satisfies the equation
where
is the voltage on the capacitor at the beginning of the pulse (hopefully the voltage of the battery when it is not under load). If we assume that
and we constrain
, for example, we obtain
or
so
In constant-current mode, the calculation is carried out a little differently. During an 8 ms transmission, the amount of charge consumed from the reservoir capacitor is
. Using the
capacitor equation, we find that
We can again solve for the limit on
C,
or
2.2.3. Safety Margins
We remind the reader that the values suggested by these techniques are based on many assumptions, both on the load (e.g., that its power consumption during an activity period is constant) and on the resistor and capacitor. The actual values selected should include safety margins to account for deviation of the actual capacitance from the nominal one (typically 10% or 20%), for possible variation in capacitance due to voltage and temperature, and so on.
2.3. Battery-Aware Scheduling
We show below that current limiting does not completely eliminate concentration polarization. That is, even with a current limiter, miniature batteries experience transient reductions in their ability to deliver power. We therefore consider another mechanism to avoid catastrophic failure of the load: skipping activity periods when the supply voltage has not sufficiently recovered to allow the capacitor to safely power the load for another activity period.
The mechanism is implemented in the firmware of the load. The firmware measures the supply voltage before starting the actual power-hungry activity (e.g., generating a radio signal). If it is significantly close to or above the expected starting voltage, the firmware executes the activity period (pulse). Otherwise, one or more activity periods are skipped and the firmware schedules a wakeup to some future time. Upon waking up, the firmware measures the voltage again, and so on, until either voltage recovers and the load can proceed to the actual activity, or until the system fails or enters brownout shutdown due to the voltage dropping too low.
The efficacy of this mechanism depends on the ability of the system to measure its supply voltage and to sleep until a scheduled wakeup, both using very little energy, because during the transient battery failure, these actions are powered mainly by the reservoir capacitor. Our focus in this paper is not on the implementation of this mechanism and in evaluating its energy requirements, but on demonstrating that it is effective under the assumption that it can be implemented in an energy-efficient manner.