测试条件:PIC16F676使用内部4MHzRC振荡,电源电压5V,测试在睡眠下的消耗电流
单片机在外部IO口设置成输入并有固定电平的情况下,程序进入一个NOP指令和跳转指令的死循环后耗电约1.26mA
1.SLEEP之后:WDT开并256分频,每2.3秒左右唤醒一次,所有IO口为数字输入口,直接接高电平或低电平。5V,0.159mA,主要配置:_INTRC_OSC_NOCLKOUT & _WDT_ON & _PWRTE_ON & _MCLRE_OFF & _BODEN
2.上面的程序没动,只是配置& _BODEN_OFF,电流降为8.5μA,其它配置变化对电流消耗影响不大,WDT开与不开只差0.1μA,可见BROWN OUT DOWN功能是个耗电大户。
3.上面的配置、程序没动,所有IO输入口悬空,结果电流变为0.8-1mA,以上均没开电平变化中断,而且手接近单片机电流变的更大。可见虽然IO口看似没有吸收电流,但干扰电平引起单片机内部比较器频繁翻转的电流可以说很惊人。
4.以上配置,仅将WDT分频比改为1:1,各IO口仍然接固定电平,此时单片机WDT约每1.8mS唤醒一次,电流为8.8μA,可见RC的唤醒很省电。
5.以上配置,WDT1:256分频,将所有IO口设置成输出,并输出低电平,IO口不接任何负载,结果电流为9.5μA,与输入相比多了1μA。可见IO口的驱动也是要能量的。
6.以上配置,WDT1:256,各AD输入口设置成AD输入,其它设置成IO输入,均接固定电平,ADON置1,GO为零,此时AD模块开启,转换未开始,转换时钟采用系统时钟的1/8,电流8.8μA基本无变化,转换时钟采用AD独立RC振荡,电流仍为8.8μA,独立RC振荡,GO置1,转换完成后继续AD转换,电流为9.2μA,期间没有空余采样电容的充电时间,可见AD转换并不怎么耗电。
7.关闭AD,开启RA口的弱上拉,有弱上拉的IO悬空,WDT 1:1,电流8.8μA,将弱上拉的IO口其中一脚接地,电流猛增至212.4μA,换算下来一个弱上拉相当于一个24KΩ左右的电阻。
综上所述,耗电大户有两个:第一大户是悬空的输入脚,第二大户为弱上拉时IO口接地。第三大户为BROWN OUT DOWN RESET(电压过低复位)。若要省电的话不妨以此参考。此次试验是单片机没有任何外围电路的情况下测得,当然外围电路比较复杂,设计省电模式其它电路的耗电也要考虑。若要非常省电,那么每个功能是否开启都是锱珠必较的。
用户42895 2006-12-30 20:18
看来还是AVR 比较周到:
1,悬空的输入脚,可以选择性的切断数字输入,从而节省翻转电流。
2,电压范围宽,1.8/2.7~5.5V,极大减少了低压复位的可能性。