最近一周一向在做pic单片机功耗问题。由于项目运用电池供电,所以功耗问题显得十分重要。依据数据手册以及网络上的材料,影响单片机功耗首要由以下几个要素:
2:封闭比较器和CVref(可编程偏上参阅电压)、WTD、T1OSC、BOR(欠压复位)等
3:PORTB片内弱上拉
4:一切不必的模块悉数封闭,在用届时再翻开
5:MCLR引脚有必要处于逻辑高电平
PIC单片机在履行SLEEP指令后进入睡觉省电形式。进入SLEEP形式后,主振动中止,假如看门狗在烧写时翻开了,看门狗定时器将被清并坚持运转。I/O口,周边模块和内部RAM将坚持本来状况,所以假如要求睡觉后有很低功耗,应该在进入SLEEP前把IO口置为高阻抗的输入状况,不必的模块也要封闭。另有些周边模块与主时钟有关,如在异步形式下的USART,将不作业。
唤醒SLEEP的条件有许多,如IO口电平改变,AD转化完毕,外部复位、看门狗溢出等,详细请参阅数据手册。
当履行SLEEP指令时,PC+1的指令被预取指,当器材被一个中止条件唤醒时(这个中止的应是已使能的),假如GIE(大局中止使能位)为0,器材将持续履行SLEEP指令下面的指令。假如GIE为1,器材将履行已预取的PC+1指令后跳到0004H的中止进口。所以主张SLEEP后边紧跟着的一条指令最好是个NOP。
外部手动复位MCLR将唤醒器材并RESET,表明状况的标志位意义详见数据手册。
看门狗定时器在SLEEP下溢出将唤醒器材,然后履行SLEEP下面的指令,也有标志位指示状况。
进入SLEEP后,主振动停振,和主振动相关的模块都会中止作业,A/D 。液晶驱动。看门狗等模块仍是要在SLEEP指令履行之前封闭的。这样功耗才会最低。
关于I.O口。在16C926的DATA SHEET里,仍是说到了一些。一切的I/O口,都有确认的接VDD或许VSS,而不能悬空。进入SLEEP前,一切的I/O应该置为输进口,接上拉或下拉。
关于PORTB口有内部上拉功用的应该挑选不上拉。
这个项目便是由于没有封闭BOR在休眠时电流到达50UA而搞了近一周的时刻才发现问题。
下面是一位网友的测验数据:
测验条件: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(电压过低复位)。若要省电的话无妨以此参阅。此次实验是单片机没有任何外围电路的情况下测得,当然外围电路比较复杂,规划省电形式其它电路的耗电也要考虑。若要十分省电,那么每个功用是否敞开都是锱珠必较的。