Go Down

Topic: Interest in micropower / energyharvesting Arduino? (Read 11921 times) previous topic - next topic

Drmn4ea

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 :-) 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?

mowcius

#1
Jul 02, 2010, 08:07 pm Last Edit: Jul 02, 2010, 08:08 pm by mowcius Reason: 1
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  ;)

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

jluciani

Quote
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 ;) For 3.3V you would need to
be at 12MHz instead of 16MHz.

(* jcl *)

Drmn4ea

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 ;-) 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?

udoklein

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

Udo
Check out my experiments http://blog.blinkenlight.net

udoklein

The macros already exist. Arduino is based on AVR-LIBC and this contains power macros.
Code: [Select]

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
Check out my experiments http://blog.blinkenlight.net

westfw

Quote
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.

udoklein

Very good point. I will try this.

Thanks a lot, Udo
Check out my experiments http://blog.blinkenlight.net

udoklein

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.
http://www.atmel.com/dyn/resources/prod_documents/doc1051.pdf
Let's see what I can learn from it.

Udo
Check out my experiments http://blog.blinkenlight.net

udoklein

Now I found this here
http://www.atmel.com/products/avr/picopower_sleep.asp?family_id=607

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 :)

Udo
Check out my experiments http://blog.blinkenlight.net

westfw

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.")

udoklein

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
Check out my experiments http://blog.blinkenlight.net

udoklein

#12
Jul 04, 2010, 03:18 pm Last Edit: Jul 04, 2010, 03:18 pm by udoklein Reason: 1
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 :(

Udo

Check out my experiments http://blog.blinkenlight.net

Drmn4ea

@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.

Drmn4ea

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?

Go Up