Prop Limbo! how low (power, voltage) can it go!
Lawson
Posts: 870
I'm currently experimenting with extremely low power solar powered circuits and decided to test if I could use a Propeller in the circuits. Figured the tests would be useful to someone else so I'm sharing my results.
My test setup consisted of a DIP prop on a bread board with boot EEPROM. The brownout detector was disabled for all tests (unless otherwise stated) and reset was pulled high with a 2 Mohm resistor. Initial tests were done with a 100 ohm current shunt, but voltage drop during bootup and resolution were poor. I repeated the tests with the setup in the picture below. The extra breadboard has an op-amp transpedance amplifier that lets me use a 10 Kohm shunt in parallel with two diodes. This gives me 10mV/uA current sensativity, up to about 100uA. At that point the diodes start significant conduction and limit the op-amp voltage swing needed to supply the 1-2mA needed to boot up the propeller. ( "breadboad setup.jpg" shows my setup) I also had the Propeller pre-programmed with the "test blinker.spin" program attached below. This program switches to RCSLOW right after boot up and blinks an LED about once a second to show signs of life. (the LED was disconnected for most of the current tests)
My full data set is in the pictures. Briefly, running at 4.0v the prop and eeprom draw 9uA, with reset held low this jumps to 51uA. At about 2.0v the prop draws 1.5uA, and 1.6uA held in reset. The minimum voltage the propeller would boot with my setup was 1.4v. At this voltage current draw while running was 1.5uA and 1.55uA held in reset. After bootup code kept running on rcslow down to less than 0.9 volts, the outputs are only active down to 1.1v though. Also, running current jumps at 1.0v to 7.5uA.
My next test was the performance of the built in brown out reset. Details in the picture below, but the brown out detector in the propeller shows a rather large negative resistance with current consumption growing to 170uA at 1.6v. This would really cripple the low light start up of a solar powered circuit, so don't use the internal brownout on solar power. (btw, a lot of LDO linear regulators have this same problem)
Finally I tested programming at reduced voltages. With a 3.9 Kohm resistor in series with TX and RX "test blinker.spin" successfully programmed to eeprom at 1.6v. Though at that voltage 5-10uA were entering the system via the prop plug. No extra current was seen on my other successful programming test at 2.5v.
Lawson
My test setup consisted of a DIP prop on a bread board with boot EEPROM. The brownout detector was disabled for all tests (unless otherwise stated) and reset was pulled high with a 2 Mohm resistor. Initial tests were done with a 100 ohm current shunt, but voltage drop during bootup and resolution were poor. I repeated the tests with the setup in the picture below. The extra breadboard has an op-amp transpedance amplifier that lets me use a 10 Kohm shunt in parallel with two diodes. This gives me 10mV/uA current sensativity, up to about 100uA. At that point the diodes start significant conduction and limit the op-amp voltage swing needed to supply the 1-2mA needed to boot up the propeller. ( "breadboad setup.jpg" shows my setup) I also had the Propeller pre-programmed with the "test blinker.spin" program attached below. This program switches to RCSLOW right after boot up and blinks an LED about once a second to show signs of life. (the LED was disconnected for most of the current tests)
My full data set is in the pictures. Briefly, running at 4.0v the prop and eeprom draw 9uA, with reset held low this jumps to 51uA. At about 2.0v the prop draws 1.5uA, and 1.6uA held in reset. The minimum voltage the propeller would boot with my setup was 1.4v. At this voltage current draw while running was 1.5uA and 1.55uA held in reset. After bootup code kept running on rcslow down to less than 0.9 volts, the outputs are only active down to 1.1v though. Also, running current jumps at 1.0v to 7.5uA.
My next test was the performance of the built in brown out reset. Details in the picture below, but the brown out detector in the propeller shows a rather large negative resistance with current consumption growing to 170uA at 1.6v. This would really cripple the low light start up of a solar powered circuit, so don't use the internal brownout on solar power. (btw, a lot of LDO linear regulators have this same problem)
Finally I tested programming at reduced voltages. With a 3.9 Kohm resistor in series with TX and RX "test blinker.spin" successfully programmed to eeprom at 1.6v. Though at that voltage 5-10uA were entering the system via the prop plug. No extra current was seen on my other successful programming test at 2.5v.
Lawson
Comments
I've been down a similar road before, designing a product that detected telephone switchook status while keeping under 50microA. I used a voltage comparator that seemed to be happy at starvation levels of VDD way below datasheet.
The first 48 PCB's worked perfectly, but new batches of the chip just wouldn't perform reliably so the product was dead in the water!
Luckily I was able to supersede the product in time with a more conventional design that didn't break the rules. But I learned my lesson: be careful when working with empirical/non-deterministic designs ...
T o n y
I'll keep that in mind. Still, comparitors are close relatives of op-amps and as such are distinctly analog circuits with bias currents/voltages to screw up when running at out of spec. voltages. The CMOS logic in the propeller is considerably simpler. My test so far show that only operating speed and pin drive strength are compromised at low voltages.
For example one of my circuits has a 74LVC2G14 configured as a relaxation oscillator. It quite happily runs at 2 Hz and 0.75v. I expect that the oscillator would run at lower voltages, but the pin drivers can't source the ~500nA needed for the RC circuit with a supply voltage less than 0.75v. There's also no point, as I need >0.75v to run the LEDs the oscillator drives.
Hell, I even tested this with the propeller. After booting my test program (which runs at rcslow) at >1.4v I could drop Vcc to 1.1v and still see the pin for the LED happily toggling. (now at like 1/2Hz though) I could then temporarily take Vcc down to 0.9v for several minutes and the LED pin would resume toggling once Vcc got above 1.1v.
Basically I intend to only run the propeller at 1.5v or above in my application circuit. Which since the propeller will boot at this voltage, means that it will run at least 12MHz on 1.5v and should have plenty of margin at 20KHz. I haven't tested how temperature effects this though. A 60-80 Celsius ambient temperature might cause problems.
Lawson
There is a TI MSP430 that can run at 0.9V, but it has an on-chip booster to raise the supply voltage.
It's also occurred to me that the 10k pullups for the I2C eeprom might be setting the 1.4v bootup limit I've seen instead of speed limits internal to the propeller. I'll try again with no pullup on the clock and a 100k on the data line in a few days. Some parts need to come in for an upgraded current testing regulator.
Lawson
There's some really interesting results there, great work.
There is some kind of intrinsically safe level at 1.5 volts (subject to 100mA max current and 25mW max power, and not too much energy storage). Perhaps it may be possible to get the Prop into these environments based on your work.
Recall the event that AMD freaks broke the speed record back in '09? They chilled the Phenom II Deneb processor with liquefied Helium and got 6.5 GHz core frequency out of ALL four cores. Crazy... There is a Youtube link - http://www.youtube.com/watch?v=wB0JodKgZ0A - that shows it all, with Phenom II being cryogenically cooled down to -237 F, still breaking out insane speed.
And Tubular, I agree. It's an interesting work. Lawson, great work!
Well, switching to just a 100k pullup on the SDA line didn't get me any significant change in minimum boot voltage. I pinned the threashold down to ~1.375 volts. Signs are pointing to the eeprom as the point of failure at low voltages. First I'm still getting 3.7nS rise times at 1.53 volts. That's hardly slowed down at all, the Prop may still run at 40-80 MHz at 1.5 volts. (I'll have to test that!) Second, I see a ballpark 20 mS current pulse right after I reset the chip below 1.37 volts. This is consistent with the startup current profile listed in the propeller datasheet for no PC and no eeprom. I'll try setting the write protect pin to see if that makes the eeprom happier with low voltages. I might also try moving the eeprom to a seperate supply to see if I can get the prop to boot at 1.1 volts.
With my new current measurement circuit I was also able to see the difference in operating current when my code was running versus blocked at a waitcnt. This was about a 1uA difference. With all 8 cogs running I could easily see the Prop and eeprom drawing <10uA running on rcslow.
Lawson
P.S. added a picture of my new bit of test equipment.
Here's a bit off-topic recommendation - If you still want to attempt to run it deep into the ground, consider trying to find EEPROM within 130nm fabrication process.
Or you can try Ramtron's Ferroelectric RAM (I am also curious about its reliability at voltage below 1.56 Volts DC) - they also come in I2C IO favor, that is if you can stand using SOIC-8 (you can use spare DIP-8 socket to convert it on the cheap). FM24V02 is the one you want, if you only want 32 Kilobytes of firmware space. I know it ain't cheap (It's $6.12 at Mouser), but it's good for 100 trillions of rewriting cycles. I am using a 64 KB one (FM24V05).
And, now for serious suggestion:
If it still won't help and the Propeller you're using is of TQFP or QFN package, you may want to try cryogenic cooling by the Peltier (Thermoelectric cooler - TEC) as there's plentiful of them being sold cheaply at eBay. Test them with 1.5 - 3V first to find which the polarity's the right one for the TEC to chill your Propeller (you will want the thin copper plate you're going to stick onto Propeller's package to be very cold and the heatsink side to be hot - after all, it's a heat pump) and hook 'em up to the programmable lab power supply to control the temperature.
And, if my hunch's not wrong, you still can run Propeller chip at 1.1 - 0.9 V with EEPROM moved to separate power supply rail - in room temperature. After all, some 180nm SOI chips run at 0.85 Volts.
Let me clear up on what I was telling ya. It's the nature of the transistor (alwaya favoring toward the lithography size) and how much it holds its charge each time its gates get hammered open - also, the resistance between gate and Source - Drain (it should be extremely high - glass layers on SOI chips usually take care of it. It have decent capacitance down to 45nm.) The resistance and capacitance are the things that dominate on voltage that can be accepted. Propeller could still operate happily at 0.9V.
My latest info deals with trying to measure the current power supply voltage of the Prop when operating at RCslow and low voltages. My first circuit was a failure. My second circuit consisted of a sigma-delta ADC circuit (using 2Meg, 2.2nF, 2Meg components) measuring the forward voltage of a silicon diode. This worked reading 4900/20000 at 2.3v and about 6300/20000 at 1.4v but it has a significant down side. CMOS inputs normally consume very little power except for when the input voltage is right around the threshold point, the sigma-delta ADC keeps it's sense pin right at this threshold point. This ended up adding about 90uA of current draw at 2.6v and 5uA at 1.5v
A separate confounding problem that doomed my first circuit, is that RCslow changes frequency a lot between 2.6 and 1.4v. My plan now for measuring Vcc is to measure the clock speed of RCslow. To do this I'll setup a simple RC circuit and time how long it takes to discharge from Vcc to the input threshold. The relaxation time should be independent of power supply voltage as the input threshold voltage is a (fairly) fixed percentage of Vcc. (about 41% of Vcc is where supply current peaks, tested at 1.5v and 2.5v)
Lawson
Speaking of EPROMS. An nice (parallel) programmable non-volitile ROM with <5uA quiescent current would be dang'd useful for pattern generation. Know of any that are still in production?
Lawson
Neat idea to take advantage of the clock variation to measure supply voltage. I did something vaguely similar using flashing LEDs as a kind of combined ADC and power-on indicator, but for looking at higher input voltages, see attached. At lower Vin's (than shown on the graph), the graph bends down again - the frequencies are lower but can be distinguished from their higher Vin pairs by their duty cycle. Anyway I digress
The other possibility is to use some other form of micropower VCO, but that adds complexity. I like your approach better
Lawson
P.S. The Prop's EEprom is included in all my current measurements so far. Thus it's quescent current is <1uA at the voltages I tested, better than the Ramtron FRAM.
I looked carefully at your results (interesting!), but I was skeptical of the relatively unsatisfactory performance of the internal brownout detector. I have found much better performance, but I don't know how the discrepancy arises.
In your second graph in your top post, with BOE enabled, your data showed a substantial increase in current at low Vdd. The following is a graph of my results in what should be the same situation. BOE enabled, power supply Vdd decreasing from 3.3V down through the brownout threshold and on down to near zero. In this case the clock setting was RCSLOW, running one cog with a WAITxxx, and that is reflected in the operating current of less than 10 microamps (consistent with the data sheet and what you found for operating current in RCSLOW). But in brownout, I found very smooth and consistent results, a current less than 4 microamps just below threshold, dropping to steadily to zero at lower voltages, no nasty increases. The behavior in brownout is not dependent on the clock mode, but of course the jump in operating current is much more dramatic in higher frequency clock modes. No hysteresis. Very sharp transition at threshold. One thing I must point out, this has to be measured without a prop plug connected; otherwise there is a parasite power condition from the prop plug itself.
The second graph is the same but with the Reset pin held low. Also BOE enabled. Here above threshold I found a current of close to 0.51mA, but that dropped precipitously (semilog scale) down to less than 4µA for Vdd below the internal brownout threshold.
I have not yet tried it without the BOE enabled, as it was in your investigation. This behavior is important for several of my projects too, that involve solar or harvested power. I recall that Chip said he put a lot of effort and silicon real estate into the design of the brownout detector, so I would expect it to be quite well behaved.
I've since found that my 74xx14 based oscillators draw "tons" (100uA range) of current so switched to comparator based oscillators. With the MCP6542 or similar I get quiescent currents in the 1uA range. (though with 1uS edges, the MCP654x family needs to be buffered by a Schmidt triggered input when driving 74xx logic)
On your second graph you show a massive range of current. Did you use a diode for the current shunt or just a small set of resistors?
Lawson
In doing this type of test, I've found a triangle plot is more revealing : ie plot the Vcc going in BOTH directions.
In many circuits, the direction of voltage approach, can make a large difference.
On some tests, we fed a triangle wave generator into the REF pin on a LM317, and using the Generator's Offset and Amplitude controls, we could then cycle the Vcc both ways, between any desired limits (including 0V,as the generator can pull Ref to -1.2v easily ), and at any Slew rate.
This can find the weak spots in any silicon.
Buried in some vendor's eratta, you can find details like Vcc needs to fall BELOW 0.6V, before ramping again.
Companies that should know better, often get this wrong.
It should be relatively easy to shift the EEPROM one diode drop above the Prop, to avoid weak-link confusion ?
For these tests I was using a 6.5 digit autoranging multimeter (HP34401A) that reads currents down to 10 nA. My own concern is more with the operating current, not with actually operating the Prop at low voltage, although I find what you're doing very interesting. My project has to operate an XBee at 3V, and it uses the LTC3108 energy harvester to pump the low thermal voltages up to charge a small lithium battery.
JMG,
The current was well-behaved, practically no hysteresis. I'm well aware of possible gotcha's in the brownout circuits of micros. The SX processor is a case in point. It has very strange behavior when a brownout occurred while executing a sleep command, and another bug at subzero temperatures. I documented those bugs here in relation to the BASIC Stamp.
Propeller-Current-Draw
While in the link mode, here is another relevant discussion from the polar bear(!)
Low-power-usage-of-the-Propeller
Those are some very nice curves. Any chance you could repeat the curve plot with BOE disabled?
I've just built my first LTC3105 circuit, and thinking now how to generate similar kinds of curves. I'm leaning towards a two prop setup, with the "controlling" prop having an R2R DAC output and buffer to generate the operating voltage for the "DUT" prop, and an RS232 enabled multimeter (uA scale) for measuring the current. I don't trust my meter down to 10nA however (its no HP)
I made a current probe similar to Lawson's. It is for the oscilloscope, to visualize the time course of current draw. It has a CAZ op-amp (LTC2054, Vos<5µV, 500kHz GBW) built up as a differential amplifier with a gain of x100, input R of 1kΩ. With a 1Ω shunt, the output is 100mV per mA. The power comes from a pair of CR2032 coin cells in one of those holders that accommodates both, and the black wire is ground for midpoint power, stuck in between the two cells. To turn it off, I pull that out and put a piece of paper under the top tab.
Other observations:
1) The prop kept running as voltage decreased to 1.1 V.
2) The prop would start up from reset for Vdd>=1.6V, but not below (agrees with Lawson)
3) If the operation stops, and voltage increases gradually, operation does NOT resume even at 3.3 V, unless a reset pulse occurs above 1.6V.
One of the next things on my list is to look at the output impedance of the pin driving fets as a function of supply voltage.
While none of the current pieces use a Propeller, I am happy to report that a propeller is well suited to the jewelery. It's very good at keeping some code running on a few micro-amps. (I've made two solar powered quick-starts. They've been blinking for months now on stamp sized solar cells) So look out, future pieces could well be Propeller powered. :cool:
Marty
I agree with Lawson that the current increases significantly as you approach 1.00v, although it appears to me the i/o is still working (at least with multimeter load, not sure what the effective output resistance is but will soon get to that.
One "statis point" that can be successfully recovered from appears to be 1.02v. At this point the current consumption (without eeprom, brown out disabled, 2m2 reset pullup) is around 0.80 uA (800 nA). To test this I am feeding 3v3 in via 2M8 net resistance (drops to around 1.1v effective supply voltage), and it continues to flip a gpio pin once a second or so (waitcnt in between).
I'm looking for a suitable battery that could supply backup power. So far something like a V30H might work for a few years, but I'm going to also look at a simple AAA Eneloop too as this might be hassle-free for longer.
N-fet: 63 ohms @ 1.113v into 1kohm load to Vdd
P-fet: 126 ohms @ 1.113v into 1kohm load to Vss
N-fet: 70 ohms @ 1.052v into 1kohm load to Vdd
P-fet: 161 ohms @ 1.052v into 1kohm load to Vss
which are actually quite a useful strengths. I was expecting higher. By comparison the fet resistances at 3v3 are approx 28 ohms each.
The i/o certainly stops working by the time the voltage reaches 0.99v, but the prop is still working internally, and recovers once back at 1.05v.
My record so far is dipping down to 0.498v and successfully recovering blinking i/o at 1.05v, which I find amazing.
I'm not sure whether the oscillator is still clocking or not as I don't have a way to observe it. I guess one way to test is to have a counter running and output the results once it comes out above 1.05v, and see how many counts have elapsed.
feels a bit like that 'Flatliners' movie...
I think Ken or Chip has said that noise from the internal oscillator can be observed on the power or IO pins when the oscillator is running. If you've got a decent oscilloscope, it might be worth looking for.
Marty