影响单片机功耗的几个主要因素
eeskill 2022-01-19

最近一周一直在做pic单片机功耗问题。由于项目使用电池供电,所以功耗问题显得非常重要。根据数据手册以及网络上的资料,影响单片机功耗主要由以下几个因素:

1:所有I/O引脚保持为高阻输入高点平或低电平

2:关闭比较器和CVref(可编程偏上参考电压)、WTD、T1OSC、BOR(欠压复位)等

3:PORTB片内弱上拉

4:所有不用的模块全部关闭,在用到时再打开

5:MCLR引脚必须处于逻辑高电平

pic单片机在执行SLEEP指令后进入睡眠省电模式。进入SLEEP模式后,主振荡停止,如果看门狗在烧写时打开了,看门狗定时器将被清并保持运行。I/O口,周边模块和内部RAM将保持原来状态,所以如果要求睡眠后有很低功耗,应该在进入SLEEP前把IO口置为高阻抗的输入状态,不用的模块也要关闭。另有些周边模块与主时钟有关,如在异步模式下的USART,将不工作。

如何解决pic单片机的功耗问题

唤醒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(电压过低复位)。若要省电的话不妨以此参考。此次试验是单片机没有任何外围电路的情况下测得,当然外围电路比较复杂,设计省电模式其它电路的耗电也要考虑。若要非常省电,那么每个功能是否开启都是锱珠必较的。

声明: 本文转载自其它媒体或授权刊载,目的在于信息传递,并不代表本站赞同其观点和对其真实性负责,如有新闻稿件和图片作品的内容、版权以及其它问题的,请联系我们及时删除。(联系我们,邮箱:evan.li@aspencore.com )
0
评论
  • 相关技术文库
  • 单片机
  • 嵌入式
  • MCU
  • STM
  • 51单片机三种模拟串口的方法

    随着单片机的使用日益频繁,用其作前置机进行采集和通信也常见于各种应用,一般是利用前置机采集各种终端数据后进行处理、存储,再主动或被动上报给管理站。这种情况下下,

    昨天
  • 指令集与操作系统的关系

    1、首先讨论各种单片机与操作系统的关系说到单片机,大家第一时间想到的应该是51单片机,对吧。不错,更高级一点的AVR,把他称为单片机,我们也还觉得可以接受。那么

    昨天
  • 8051指令系统的7种寻址方式

    寻址方式:寻址就是寻找操作数的地址。绝大多数指令执行时都需要操作数,因此就存在如何确定操作数地址的问题。所谓寻址方式就是通过什么途径获取操作数的方式。根据指令操

    昨天
  • 在51系列中data,idata,xdata,pdata的区别

    从数据存储类型来说,8051系列有片内、片外程序存储器,片内、片外数据存储器,片内程序存储器还分直接寻址区和间接寻址类型,分别对应code、data、xdata

    昨天
  • stm32的JTAG模式和SWD模式

    一、JTAG模式这种模式一般有10pin的、14pin的和20pin的,尽管引脚数和引脚的排列顺序不同,但是其中有一些引脚是一样的。值得注意的是,不同的IC公司

    昨天
  • 计数器如何用作定时器?计数器溢出又是什么?

    计数器从一个生活中的例程看起:一个水盆在水龙头下,水龙没关紧,水一滴滴地滴入盆中。水滴持续落下,盆的容量是有限的,过一段时间之后,水就会逐渐变满。那么单片机中的

    昨天
  • AVR自编程是如何实现的?

    BOOT区的由来基于一个简单的道理,即单片机的程序是保存在FLASH中的,要运行程序就必须不停的访问FLASH存储器。对于一般的FLASH存储器,数据的写入需要

    昨天
  • STM32 的14组过滤器

    STM32普通型芯片的CAN有14组过滤器组(互联型有28组过滤器组),用以对接收到的帧进行过滤。每组过滤器包括了2个可配置的32位寄存器:CAN_FxR0和C

    昨天
  • ARM中关于cmp的详细用法

    一、关于cmp的详细用法假设现在AX寄存器中的数是0002H,BX寄存器中的数是0003H。执行的指令是:CMPAX,BX执行这条指令时,先做用AX中的数减去B

    前天
  • 基于单片机的扫频激振技术

    振弦式传感器是目前应力、应变测量中较为先进的传感器之一。振弦式传感器的输出是频率信号,信号处理过程中无须进行A/D及D/A转换,因此,抗干扰能力强,信号传输距离

    前天
  • 基于MSI的N进制计数器设计

      1绪论  计数器是数字逻辑系统中的基本部件,它是数字系统中用得最多的时序逻辑电路,其主要功能就是用计数器的不同状态来记忆输入脉冲的个数。除此以外还具有定时、

    前天
  • 一种基于嵌入式实时操作系统和ARM的新型数据采集装置

      0引言  数据采集技术是信息科学的一个重要分支。随着计算机科学技术的飞速发展和普及,数据采集技术己经渗透到雷达、通信、水声、遥感、地质勘探、振动工程、语音处

    前天
下载排行榜
更多
EE直播间
更多
广告