- codename: Shockpad
- Measuring the impedance of a coin cell
- Current pulses, source impedance, and LTSpice
The two transceivers I'd like to compare are:
The Bluefruit EZ-Key from Adafruit
The LightBlue Bean from Punch Through Design
First, let's understand the voltage input requirements of each module.
The EZ-Key lacks a formal datasheet, but the FAQ states:
- Voltage: ~3V
Meanwhile, the LightBlue Bean Datasheet states:
- Voltage: 2.0V to 3.6V
EZ-Key Voltage
To determine the EZ-Key's minimum voltage, I powered the module from a bench supply and paired it to my PC. I then reduced the supply voltage, very slowly, until my PC reported that the link was lost. I repeated the experiment three times to confirm my results. I found that the EZ-Key's minimum input voltage was 2.4V, slightly higher than the LightBlue Bean's value.
Current measurement circuit
This is known as low-side current measurement. Low-side measurement is slightly simpler than high-side because the power supply and oscilloscope are allowed to use a standard ground reference (earth ground). All current passing through the radio module must pass through R_SENSE before returning to the power supply; therefore, DUT_GND will not be equal to earth ground. To be precise, the voltage at DUT_GND, which we'll call V_SENSE, can be computed as:
- V_SENSE = R_SENSE*DUT_CURRENT
So, if the value R_SENSE is known, then current draw can easily be calculated as
- DUT_CURRENT = V_SENSE/R_SENSE
Choosing R_SENSE
Some thought, and experimentation, are involved in the selection of R_SENSE. Recall that V_SENSE is the ground reference for the radio module. So, the module's operating voltage is:
- V_DUT = V1 - V_SENSE
That is, V_SENSE robs from V_DUT. Recall that EZ-Key requires 2.4V to operate. If V1 = 3.0V and 100 ohms is chosen for R_SENSE, then the EZ-Key module will experience a self-induced brownout (V_DUT < 2.4V) at any current draw above 6mA. So, to avoid brownouts, R_SENSE should be small. But, is there such a thing as too small? The smallest resolution on my oscilloscope is 20mV/division. So, I target V_SENSE ~= 50mV for a measurable value that's unlikely to disturb the circuit. If the DUT's current draw is unknown, start with a very low value resistor (0.1 ohm or 1.0 ohm) and increase resistance progressively until a reasonable signal is obtained. But, there's one more possible complication with R_SENSE.
Dealing with wide dynamic range
For some devices, radio transceivers chief among them, the procedure outlined above can leave you in a pickle. Problems arise when devices idle along at a relatively low current draw, but periodically draw large bursts of current for very short duration. It is not uncommon to see a 1:100 ratio between the idle current and the burst. In this case, an R_SENSE chosen for the idle period may produce a brownout during the burst, but an R_SENSE chosen for the burst will render the idle current too small to measure. Different R_SENSE values are needed for each domain. To accomplish this, I like to attach two resistors in parallel; one is sized for each operational mode. I watch a few burst/idle cycles to get a sense of the timing, and then I remove the lower value resistor immediately following a burst event. Sure, the DUT will brownout when the next burst occurs, but I'll have already captured my measurement by stopping/triggering my oscilloscope.
EZ-Key measurements:
I observed a baseline current draw of 24mA for the EZ-Key module. This agrees with the FAQ's claim of "25mA at all times." Every 30-40ms, I observed an 88mA burst of current lasting 150us. This was significantly higher than the FAQ's claim of "an extra 2mA on average during transmission." R_SENSE was 2.5 ohms for these measurements.
In summary, here are the EZ-Key's values, in table form
In summary, here are the EZ-Key's values, in table form
Mode of Operation (name) | Current Draw (mA) | Duration (ms) |
Active | 88 mA | 0.15 ms |
Idle | 24 mA | 39.85 ms |
Total | 40 ms |
LightBlue Bean measurements:
Before taking current measurements, I used the BeanLoader interface to reprogram the module. I began with a low power profile called "bean sleep", but I modified the code slightly (to eliminate the red LED flash). The module was programmed to "sleep" for a duration of 2s, and so I was surprised to see current bursts every 40ms. It seems that "sleep" refers to execution of user code rather than the radio itself. Regardless of the user code settings, the radio appears to maintain a 40ms connection interval; this is likely to avoid exceeding the connection timeout duration on the host. I observed a baseline current draw of 29uA. Every 40ms, I observed a 24mA burst of current lasting 500us. R_SENSE was again 2.5 ohms for the burst measurement. But, to measure the 29uA sleep current, I had to change to R_SENSE = 220 ohms.
In summary, here are the LightBlue Bean's values, in table form
In my next post, we'll finally get around to the fun bit of determining which batteries meet the needs of these radios. We'll also predict total product run time given a particular battery choice.
In summary, here are the LightBlue Bean's values, in table form
Mode of
Operation (name) |
Current
Draw (mA) |
Duration (ms) |
Active | 24 mA | 0.5 ms |
Idle | 0.029 mA | 39.5 ms |
Total | 40 ms |
In my next post, we'll finally get around to the fun bit of determining which batteries meet the needs of these radios. We'll also predict total product run time given a particular battery choice.
No comments:
Post a Comment