Interest in micropower / energyharvesting Arduino?

What kind of interest is there in a specifically low-power optimized Arduino variant for experimenting with environmentally-powered projects? What would you want to see in such a design? More importantly, does such a thing already exist? I think the closest I've seen is John Luciani's excellent PICO design and related work (can't post a link here since this is my 1st post!)

My day-job is as an electronics engineer doing low-power and self-powered (energy harvesting) sensor networks, so I've got in this habit of thinking in uA even in my home projects :slight_smile: Recently I've been playing with Linear's LTC3108 thermal harvesting chip, and found that e.g. a bodyheat-powered Arduino is feasible. From a 40mm^2 Peltier, usable power is available from a 1.5degC temperature difference, and at 4degC over 1mW is available. Seems like it would be fun to use in some kind of project, but the current Arduinos don't seem designed with extreme low-power stuff in mind.

Some specific hardware features/hacks needed:

Low voltage operation (1.8 ~ 3.3V; ATxxxxxP variant MCU for 0.1uA sleep mode, reduced clockspeed for 3.3V operation)
"
BUS_SENSE" signal to detect if USB/serial is plugged in: if not, cut power to the FTDI232, skip bootloader on startup

Load switching: disconnect power to the board until power source has charged up enough to fully power the board and do something, avoid "over the hump" problem of starting up slowly from 0V.

Wakeup sources: micropower sensors work like a cat, by spending most of their time sleeping. Need ways to be awakened periodically and avoid having to sit in a software delay loop (32KHz timer, RTC, all the hardware INT lines we can get)

Extremely nice to have:

POWER_GOOD signal - warning when the power source is nearly depleted, so the user code can decrease its usage or perform a controlled shutdown.

Interchangeable power supply shields - no good one-size-fits-all solution; scavenging from e.g. piezos, inductors (RFID) and peltiers have very different requirements

RTC (Real Time Clock) - a very power-efficient way to wakeup the circuit at predetermined times or intervals, or perform delays with no/minimal software loops.

Anything else I am missing? Other thoughts?

Sounds interesting, what else you got? ;D

There was a post not too long ago about getting the arduino to its lowest power consumption.
If you really want to go for something low powered then the atmega chips are not the greatest route to go down. There is only so much that can be done to minimise consumption without scrapping all the useful functions of the arduino. Having the arduino at 16Mhz is a big thing you can change to decrease power but most people like it at 16Mhz :wink:

I think solar is the easiest. There is plenty of energy that can be got from even really small solar panels to charge up a battery and run a low power arduino board.

Mowcius

Having the arduino at 16Mhz is a big thing you can change to decrease power but most people like it at 16Mhz

You don't necessarily have to loose high frequency operation you just need to
reduce the amount of time you spend doing it :wink: For 3.3V you would need to
be at 12MHz instead of 16MHz.

(* jcl *)

Some extra software functions and user carefulness will be needed of course... e.g. a sleep function/macro to enter a given atmega power managed mode and power off unused peripherals, power-conscious implementations (or avoidance :wink: of the much-used delay functions. Arduino and C/C++ in general are not the best choice for really squeezing the last drop out of a power budget (at work I'm mainly writing PIC assembler and a little C for msp430s), but if Arduino + power hacks mean the difference between 3 days and 3 months operation from a coin battery, I'm for trying it!

Anymore, there's not a huge difference between the major players (atmel, microchip, ti, freescale, ...) on the low power front. An Atmel/Arduino design definitely won't hit the low power targets the medical-implant and some other folks are hitting, but it should be low enough to do cool stuff. You're right that some of the creature features of Arduino are not low-power friendly - this will take some further investigating. Assuming you achieve it mostly through sleep mode (low processing-time requirements, e.g. once-per-hour environment logger), the only Arduino thing you lose that I know of is the count of seconds since power-on.

Besides that and having to retime the timing/delay and serial functions, any idea what other Arduino functions the low-power hacks might mess with?

The LTC3108 looks like an incredible toy. I need to get hold of one :slight_smile:

Udo

The macros already exist. Arduino is based on AVR-LIBC and this contains power macros.

http://www.nongnu.org/avr-libc/user-manual/group__avr__power.html

Drmn4ea: I already experimented with some low power setups. My biggest issue was not getting down to <5uA. My biggest issues was getting "over the hump". That is: at startup the reset circuit draws to much power. Since my power source had >30k impendance I never got the device to startup on low power. Once running I was always <5uA average.

Since you probably have way more experience in this area: how do you solve this sepcific problem? Of course I can charge a capacitor for the startup. But how do I detect that I am "over the hump" and how do I then connect power to the processor? Preferably with parts available to an amateur.

My (equivalent) setup is:
3V source with 30-50k say 47k impedance, some yet to be conceived device, an Atmel 328P (aka "Arduino") (running at 1Mhz while awake but sleeping most of the time). The old thread is here:
http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1273507808

Any hints would be very much appreciated.

Udo

I can charge a capacitor for the startup. But how do I detect that I am "over the hump" and how do I then connect power to the processor?

I don't think you have to dynamically connect the power. With a reasonable sized capacitor, a "good" "brownout/reset" circuit will hold the CPU in reset (not consuming power to speak of) until the cap reaches the configured voltage. The CPU will then run at "normal" current levels (spec'ed, measurable) until it goes to sleep, after which it will have an "average" current consumption. Your mission is to choose the capacitor size so that it can provide that initial rush of current after reaching the voltage that takes the chip out of reset without dropping below the "lower" voltage that would put the chip back in reset.
I don't know whether the reset/brownout circuits in the AVRs are "good enough" for this (that certainly OUGHT to be one of the features implied by "PicoPower"), but there are better external circuits that a surely sufficient.

Very good point. I will try this.

Thanks a lot, Udo

I double checked with the datasheet. Unfortunately BOD current is >15uA. This would be OK before startup. However it is not OK anymore while running. So I will have to search for some different solution.

I think you hint got me on the right track though. Now I found AVR 180.

Let's see what I can learn from it.

Udo

Now I found this here

Since my controller will be sleeping most of the time it seems that enabling the BOD is exactly what I need. Obviously I will have to try and figure out in hardware. The question that is stated nowhere is: how much current will it draw if POR triggers below the BOD level? If this is >15uA then I will be screwed and have to go for an external ciruit. If it stays below, great :slight_smile:

Udo

Yeah; this is when interpreting the "Low power feature specifications" becomes a challenge. "The power consumption is very low when everything is off, except this feature X that you'll actually need to have turned on for most real applications does not have such good specifications." oops.

The TI MSP430 series, well known for their low power consumption, seems to have a brownout circuit current of less than 1 uA. (F2013 datasheet, LPM4 current consumption including brownout.) There are also external "voltage detector" circuits you can look at using; the famous MN1380 series runs off of about 1uA (and they're not particularly "modern.")

Yes, I read about the TIs. The AVRs have the significant advantage that my software is already completly tested, the toolchain is already working well and I already know all the registers and the assembly language. Otherwise I would be less reluctant to try the TIs. As soon as I can spare some time (which is currently dedicated to my first "big" project) I will try this out and report the results.

Udo

The datasheet say in section
"26.2.13 Current Consumption in Reset and Reset Pulsewidth" that it will draw >50uA on POR @1Mhz.
In section
"8. System Control and Reset"
It seems that POR will always trigger before BOD.
--> I will most probably need an external circuit :frowning:

Udo

@Udo: It's a shame almost no semiconductor companies spec out all the weird stuff their products do during undervoltage / ramp-up.

There are probably better ways to do it using a collection of FETs, etc., but one way I have used to deal with the "over-the-hump" issue is to use a low-power comparator and voltage reference... mine used an LTC1540 (nanopower w/ builtin reference), the resistor divider on the + input set for the desired turn-on voltage and in the megaohms range. IIRC, this chip can source 40mA, so its output could be used directly if your circuit is not too hungry while active.

On its own it can provide maybe 100mV of hysteresis, but more is probably desirable. For this, add a bit of positive feedback (10M or so) from the output to the + input as well. This will keep the comparator from switching off again during reasonable turn-on voltage dips and keep the size of your input cap more manageable.

Finally, although this chip does not suck excessive current during power-up/undervoltage, it can behave oddly. I found using a 1.5-2V or so open-drain voltage detector to ground the + input during undervoltage solves it. Total current consumption of this setup peaked at 2-3uA @ 1.2V or so, then leveled off to about 0.8uA as the voltage increases to a reasonable level. If the turnon/off thresholds are not critical and the operating voltages are high enough to turn a FET fully on, you can probably skip the comparator and pull the same feedback trick with a voltage detector + FET directly.

Thanks for the links!
It sounds like reaching the couple uA range is feasible, maybe without even losing too much functionality. I've got some parts on order; going to see if I can replicate your results without giving up the Duemilanove style USB port and bootloader.

On the applications / peripherals side... I definitely have not thought of all the applications people will come up with, but at some point data will have to be gotten off the board in most cases. Here are a few things (potential shields?) I have played with lately and seem like a good fit power-wise.

Wireless networking - ANT (thisisant.com) TDMA radios. I've used these before, and they do deliver what they promise (persistent bidirectional links at down to ~12uA average). Sparkfun has some nRF24AP1 based products in stock, but the newer AP2 parts are more efficient. I know XBee is very popular among Arduino users, but to my knowlege it's either "on" (~18mA?) or sleeping; no TDMA / hiccup modes.

Display - Kent cholesteric graphic displays (kentdisplays.com) are bistable (2 year image retention without power), inexpensive (128x32 ~ $5 at volume) and available as standard products. (E-Ink would be sweet too, but AFAIK you can't get them off-the-shelf.)

Environment - TI TMP102 temperature sensors (1/16degC/div, I2C, <1uA) and/or Sensirion SHT1x sensors (more pricey, but temp+humidity in one package)

Any other peripherals that are a particularly good fit, or you'd otherwise like to see?

Now this is really good advice. My voltage source is a basically a 3V INPUT with something of maybe 30k pullup and a switch level around 2V. Mileage may vary. So what I am trying to do is to power a controller through the pullup of some other controller. That is something like found here: http://www.dslr-forum.de/showthread.php?t=419146.

However I want to have a crystal oscillator connected in order to get more precision. It follows that I need more power and thus a bigger cap and thus have slower voltage rise. This in turn locks the processor with to much current drain at startup.

I have the impression that the voltage detector approach may require less parts (thus less soldering). So I think I will try this first. Can you recommend any 1.5-2V voltage detector? Maybe a part that stays below 2uA? With some short search at Digikey I found only 6uA parts and this drains a lot from my limited power budget. I will search more but if you already know one I would be happy to learn about such a part.

With regard to the displays: this is incredible. It implies that I might be able to add a display to my batterie less timer. This would be way cool :slight_smile:
Since I do not have a lot of processing power at such lower currents I would be satisfied with a low power equivalent of a LED. Do you know any cheap micropower 1 pixel displays?

I can't remember what I used for a voltage detector, except that it was a SOT23 part from STMicro (STM1031/1061?) IIRC the datasheet claimed 1uA or so over the part's full rated voltage (6V?)...at the 2.x volts where the circuit would normally operate it drew much less. Anyway, this was a few years ago and there are probably better ones available now. Digikey now lists most of them under "PMIC - Supervisors" ... probably the simplest parts you can find will have the best current figures (e.g. avoid "smart", programmable etc.)

I may have misspoke earlier by saying you can easily add hysteresis to a voltage detector: this will only work if its detection voltage is separate (and somewhat lower) than its supply voltage - so that you can trick it by feeding a portion of its higher output voltage back into the detection terminal. The 3-pin ones I am familiar with, both sense and are powered by Vcc directly, so their output can never be higher than Vcc.

Regarding 1-pixel displays: the small Kent display is the most accessible bistable display that I know of, but it's still a lot of overhead for 1 pixel worth of data. If your application is not subject to much mechanical shock, you can probably construct a "flipdot" indicator with a small permanent magnet and a coil or two. Current could be relatively high (depending on the efficiency of the coils - scavenging them from wristwatches may be ideal) but only for very brief periods.

Isn't there a trade off in the MEGAs between voltage and current draw? I seem to remember reading that the 328 draws about 380mA at 3.3v and 270 at 5v... a datasheet will say for sure... also, it would be really cool if you could use the arduino to monitor it's own power supply, perhaps a circuit to generate an interrupt every 8 seconds and the arduino can check how much juice it has and intelligently decide whether to do stuff or wait until power is in greater supply (better for something like solar power vs battery power)

Just my two pence.

Higher voltage implies more current, not less.
Higher frequencies require higher voltage.
This is what the datasheet says.

I am pretty sure that Drmn4ea knows way more than this already.

Udo