mf314 发表于 2015-1-9 22:14:06

Arduino 低功耗模式下电流与atmega328数据手册不符合的问题

如题,用atmega328自己焊的最小系统,烧pro mini 3.3V的bootloader,在set_sleep_mode(SLEEP_MODE_PWR_DOWN)       和sleep_mode()两条指令后测得电流200微安,与数据手册上给出的“1微安以下”严重不符。

不用arduino的boot直接在AVR环境下测试此二条指令测得电流17微安,还是有出入。
ps之前用atmega8做低功耗实测电流确实可以低到1微安以下。。。
是我的328买的假货?还是有什么玄机还没参透?请知道的朋友指点我一下!

mf314 发表于 2015-1-10 16:33:01

怎么没有人回复啊。。。自己顶顶

darkorigin 发表于 2015-1-10 16:45:36

其实这不用太过纠结
单片机最终还是用来工作而不是低功耗待机的。
低功耗待机可以考虑用一个外部定时器定时激活(比如气象站模式下 定时采集数据回传 平时低功耗状态)平时就直接断电就好了

而且0.2ma的水平对于一块普通的18650来说也小的可怜,一块普通的2400MAH的电池能支撑其很久了
可用电池容量=2.4AH*3.7v*0.8电压转换系数=7.104WH
功耗:0.0002*3.3=0.00066W
算下来时间就很长很长了 转换系数按照0.8其实都算比较保守了 很多高效率的降压芯片可以做到更高

何况现在项目的供电方式可以有多重选择。
比如微波无线输电技术
比如光伏供电方案
比如POE输电方案都是完全可行的 所以很多户外数据采集终端都已经把电池作为备用电源在使用

darkorigin 发表于 2015-1-10 16:46:35

更何况2400MAH的电池已经不算大容量锂电池
现在3400MAH的电池都早就已经市售了

suoma 发表于 2015-1-10 22:05:57

PCB是你自己做的吗?

mf314 发表于 2015-1-11 13:48:10

本帖最后由 mf314 于 2015-1-11 13:54 编辑

darkorigin 发表于 2015-1-10 16:46 static/image/common/back.gif
更何况2400MAH的电池已经不算大容量锂电池
现在3400MAH的电池都早就已经市售了

我要用在可穿戴,电池容量请以几十毫安时计。。。而且相当一部分时间就是在待机的

mf314 发表于 2015-1-11 13:49:26

本帖最后由 mf314 于 2015-1-11 13:51 编辑

好了问题已解决部分,关掉ADC可以省大量电,但是待机功耗还是有19微安,没有达到手册上的标准,外国有人能做到0.35微安。。。降频的效果不是很明显

就先这样吧

李小英 发表于 2015-1-12 15:12:58

我用的atmega644掉电模式只有90uA。

5free 发表于 2015-1-12 19:08:41

我使用 328 内部RC,最小系统待机耗电 27uA,看来不仅仅是我这样,我也怀疑过的328是不是假的

http://www.geek-workshop.com/forum.php?mod=redirect&goto=findpost&ptid=12261&pid=82447

http://www.geek-workshop.com/forum.php?mod=redirect&goto=findpost&ptid=12261&pid=82458

just_be_fine 发表于 2015-4-29 15:51:59

我用的另外一个帖子里的程序测了一下328P最小系统的掉电模式,耗电大概在6-7uA.
http://www.geek-workshop.com/thread-12261-1-1.html

LZ可以参考以下。

http://img2.ph.126.net/foqV9C_-mPrdq7Xt1Rjd1w==/6630928127722731980.jpg

just_be_fine 发表于 2015-4-29 15:55:00

我把那里的代码复制过来一下:
为了方便观察,我将中断时间设置成了4秒,点灯时间为8秒(4x2)#include <avr/sleep.h>
#include <avr/wdt.h>

volatile byte data = 0;

void setup() {
pinMode(13, OUTPUT);
setup_watchdog(8);
// 0=16ms, 1=32ms,2=64ms,3=128ms,4=250ms,5=500ms
// 6=1 sec,7=2 sec, 8=4 sec, 9= 8sec
ACSR |= _BV(ACD); //OFF ACD
ADCSRA = 0; //OFF ADC
Sleep_avr();//Sleep_Mode
}

void loop() {

if (data >= 2) {
    data = 0;
    //-------------------------------
    digitalWrite(13, HIGH);
    delay(100);                      //此处是到达设置唤醒时间允许的程序
    digitalWrite(13, LOW);
    //--------------------------------
    Sleep_avr();
}
else {
    Sleep_avr();//Continue Sleep
}

}

//Sleep mode is activated
void setup_watchdog(int ii) {

byte bb;

if (ii > 9 ) ii = 9;
bb = ii & 7;
if (ii > 7) bb |= (1 << 5);
bb |= (1 << WDCE);

MCUSR &= ~(1 << WDRF);
// start timed sequence
WDTCSR |= (1 << WDCE) | (1 << WDE);
// set new watchdog timeout value
WDTCSR = bb;
WDTCSR |= _BV(WDIE);


}
//WDT interrupt
ISR(WDT_vect) {

++data;
// wdt_reset();

}

void Sleep_avr() {
set_sleep_mode(SLEEP_MODE_PWR_DOWN); // sleep mode is set here
sleep_enable();
sleep_mode();                        // System sleeps here
}

原同学 发表于 2017-8-27 07:50:37

可参考stm32的低功耗配置,引脚不用的要置低

RimeLink 发表于 2020-1-4 11:36:08

本帖最后由 RimeLink 于 2020-1-4 14:09 编辑



Arduino Pro Mini 休眠极限 0.1uA,这是我们测试的结果,如上图所示。请百度搜索“ArduinoLoRa 休眠极限 1.4uA”(抱歉,极客工坊不允许我发送 URL)

RimeLink 发表于 2020-1-4 14:08:33



第 1 步:改制 Arduino Pro Mini
如上图所示,新购的 Arduino Pro Mini 需要卸掉 2 个器件:LDO(低压差稳压器)和电源指示灯处的 1k 电阻。

RimeLink 发表于 2020-1-4 15:23:49

本帖最后由 RimeLink 于 2020-1-4 15:25 编辑

按下表连接 Arduino Pro Mini 和 下载烧录器



设置 Arduino IDE



编译和烧录下述休眠代码
#include <avr/sleep.h>
void setup ()
{
pinMode(LED_BUILTIN, OUTPUT);


intcount;
for (count = 0; count < 5; ++count)
{
    digitalWrite(LED_BUILTIN, HIGH);   // turn the LED on (HIGH is the voltage level)
    delay(200);                     // wait for 200ms
    digitalWrite(LED_BUILTIN, LOW);    // turn the LED off by making the voltage LOW
    delay(200);                     // wait for 200ms   
}

// disable ADC
ADCSRA = 0;

set_sleep_mode (SLEEP_MODE_PWR_DOWN);
noInterrupts ();         // timed sequence follows
sleep_enable();

// turn off brown-out enable in software
MCUCR = bit (BODS) | bit (BODSE);
MCUCR = bit (BODS);
interrupts ();             // guarantees next instruction executed
sleep_cpu ();            // sleep within 3 clock cycles of above


}// end of setup


void loop () { }


页: [1]
查看完整版本: Arduino 低功耗模式下电流与atmega328数据手册不符合的问题