2013-05-18 11:43:03 superanters 阅读数 4894
  • STM32Cube和HAL库使用初体验-第5季第2部分

    本季课程主要讲解STM32的全新开发方式:使用STM32CubeMX工具做图形化配置,自动生成初始化代码;添加各种中间件;使用HAL库和LL库来操作外设。结合朱老师物联网大讲堂专为nbiot物联网开发而设计的NB476开发板,本季课程能够让大家彻底掌握物联网时代以nbiot和低功耗STM32L4单片机为代表的典型开发模式,实战意义非常重要。

    1265 人正在学习 去看看 朱有鹏

     许多人说PIC单片机一大的优势就是低功耗,那我们就来讨论,讨论低功耗的实现。

1,睡眠(sleep)

   睡眠方式是我们最常用的一种方式来降低功耗,但睡眠期间单片机不能做任何的事情。对于那些没事情就睡着,有事情就做一下的情况睡眠无疑是功耗最低的处理方式。

 比如:

            睡眠+ I/O电平变化中断唤醒 当按键没按下时,单片机睡眠,当按键按下后,执行相应的工作。

            睡眠+数据接收中断唤醒      这样单片机就可以再没有接收到数据时候进入睡眠状态,接收到数据的时候就唤醒然后处理数据。当然首先单片机要有相关的外设比如SPI ,I2C,USART,等这些支持这些通讯的模块。

            睡眠+看门狗唤醒                  这个可以用在需要定时唤醒做事情的场合

2,降低时钟频率

             如果即想功耗低,又想单片机在能低功耗的情况下工作。这无疑是个最好的选择。

            PIC单片机 比如PIC16F1823 /1829可以选择从32MHz到31KHz的内部时钟频率,我们通常可以将单片机设置在 4MHz 以上的频率下工作,如果需要单片机降低功耗的时候可以降低频率比如在31KHz的频率下工作。

           虽然PIC16F1823数据手册中写到,单片机在睡眠电流只有只纳安,在31KHz的电流有几微安。但事实纳安只是个幻想。在项目一个中我使用降频得到的最低功耗是50微安左右,采用睡眠也是50微安。因为在如此低的频率下,功耗主要是流失在I/O口上了。

3,电流大户

      单片机工作时钟频率,要降低功耗首先要不就睡眠(关掉时钟),要么就降低频率。

       最耗电流的模块 就数ADC模块,其实模块的耗电和他比起来就是小巫见大巫。所以要低功耗ADC模块绝对不能开。

       还有个用电大户就是I/O口,I/O要不上拉,要不下拉,不能悬空,除此之外还有其他因素,比如I/0口的输入输出状态,比如和其它芯片连接要串个电阻。

       

2019-11-16 21:35:03 ShenZhen_zixian 阅读数 586
  • STM32Cube和HAL库使用初体验-第5季第2部分

    本季课程主要讲解STM32的全新开发方式:使用STM32CubeMX工具做图形化配置,自动生成初始化代码;添加各种中间件;使用HAL库和LL库来操作外设。结合朱老师物联网大讲堂专为nbiot物联网开发而设计的NB476开发板,本季课程能够让大家彻底掌握物联网时代以nbiot和低功耗STM32L4单片机为代表的典型开发模式,实战意义非常重要。

    1265 人正在学习 去看看 朱有鹏

浅谈单片机低功耗处理

一、什么是低功耗处理
我们在研发电子产品的时候,经常会涉及到功耗的问题。因为电子产品肯定是要供电的,供电的方式最常用的几种是:220V交流直插供电、用直流适配器供电和电池供电。无论是哪种供电方式,只要用到单片机,最终都是要转成低压直流给单片机供电的。而单片机如果不做好低功耗处理的话,电量的消耗会大很多,续航能力也会大大缩短。如果是220V或者适配器供电,那还好点,最多是电费多一点,而如果是用电池供电的,续航能力差的话就需要频繁更换电池。像烟雾报警,红外报警,智能门锁这些产品,一般都是用电池供电的,因为使用和触发的频率不是很高,安装的位置也不适合用适配器供电。这个时候,低功耗处理就显得尤为重要了。
而功耗虽然指的是功率,但是我们常常用电流去衡量,因为单片机的工作电压是有范围的,因此,正常工作的情况下,电压是基本固定的,而在相同的电压下,电流的大小直接决定了功耗的大小,电流越大功耗就越大。因此,我们做低功耗处理最终的目标就是要把电流降下来。
再说一些题外话,很多电子产品,特别是那种不是一直在高速工作,大多数情况下都是在休眠状态,只有触发了某些特定条件才会唤醒工作的产品,比如上面说到的报警器和门锁。这些产品在电池满电量的情况下能用的时间,是可以估算的。一般的做法是,直接把电池的容量除以休眠时的电流,因为在不触发的时候,整个电路工作的电流都是很小的,比如智能门锁,只有在开门唤醒的时候,需要发射和接受无线信号,需要驱动电机的时候电流会比较大,大部分时间这些模块都是不工作的,消耗的电流其实很小。所以,用这种估算的方式,也是有一定的合理性的,很多公司发布产品的时候说这个东西能用多久,其实也是这样算出来的。再说说电池容量,电池容量的单位是毫安时,理论上来说,如果工作电流是1mA,那它能工作多少个小时,就是多少毫安时,而实际上,容量的减少会使得电压降低,当电压低于某个值的时候,单片机就不能工作。因此,一个电池的额定容量往往不是能用的容量。

二、单片机要怎样做才能把整个电路的电压降到最小
如果一个电路里面只有一个单片机以及单片机最基本的外围电路,那么它的功耗是很低的,特别是一些专门用于低功耗产品的单片机,比如stm8L系列,stm32L系列,TI430系列等等。但是如果你以为你用了超低功耗的单片机就一定能降低功耗的话那你就错了,无论是用什么单片机,在程序上和电路上都是要一些处理才能把功耗控制在比较低的范围。
程序的处理方法主要有以下几点:
1、 单片机进入睡眠状态。这个是最基本的,只有睡眠的状态下,功耗才是最低的。但是要注意的是单片机睡眠的方式不止一种,根据需要选择合适的。
2、 所有悬空的IO口都设成推挽低速输出低。注意,是悬空的IO口。也有人说设成浮空输入,我试过几款ST的单片机,都是设成输出低的功耗更小。别的单片机你可以先测试一下,再选择最好的配置方式。
3、 在单片机睡眠之前把不需要用到的时钟关掉。如定时器时钟,串口时钟等。这里说的不需要指的是睡眠的时候不需要用到,但是唤醒状态下需要用到的。如果是一直都没用到的,不初始化也不会打开。
4、 有连接外设的IO口根据实际情况配置引脚。不是所有引脚拉低都能降低功耗的,需要根据情况来定,这一点比较复杂,我讲一些最常见的情况吧。比如有连接LED灯,把灯关掉才是功耗最小的。比如输入引脚,如果睡眠的时候,外设输出的是低电平,单片机最好是用浮空输入,不要用上拉,因为上拉的时候,相当于内部有个电阻一直在工作,会消耗电流。如果外部输入的高电平,根据情况而定,我试过一次,就一个引脚,用浮空和上拉居然相差了一百多uA,我的天,可能跟那个模块的内部电路有关吧。也可以把输入改成输出,有时候也有奇效。比如串口,如果休眠的时候可以考虑把引脚都设成输出低,特别是两个单片机通过串口通讯,如果一边拉高一边拉低,那么中间的限流电阻就会导通,最好是两边都拉低。还有串口有时候不能直接拉低引脚,我之前就试过用stm8,程序上把引脚拉低了,实际上并没有拉低,找了好久才知道是没有反串口初始化,也就是DeInit,在库函数里面是能找到这个函数的,反初始化之后,再配置成普通IO口才能输出低。
5、 控制外设进入睡眠模式或低功耗工作模式。很多外设模块都是有低功耗模式的,如果不需要一直工作,单片机需要让它也进入睡眠模式,如果是需要一直工作的,尽量选择低功耗工作模式。还有一些外设的中断引脚触发极性是可以自己配置的,最好选择上升沿触发。
6、 降低晶振频率。这个我觉得效果不是很大,不知道是我用的单片机本身的频率就不高还是怎样,理论上来说降低频率是可以降低功耗的。
在电路上,降低功耗的方法就比较复杂了,我本身也是更擅长软件方面,硬件上不能给大家更多的建议,我就是说说我知道的一些比较简单的关于IO口的处理方法吧。
电路的处理方法主要有以下几点:
1、 单片机的IO口的电阻选型和电路设计要合理。如果单片机的IO口需要用到电阻,要根据实际情况,选择合适的。其实核心的思想都是尽量不要让电阻处于导通状态,或者导通的时候电流尽量减到最小。比如单片机的IO口如果大部分时间都是处于低点平,又必须要上拉电阻的话,尽量选择阻值大一点的电阻。如果处于高电平的话,尽量不要用下拉电阻。这一点无论是输入还是输出都是一样的。能不加电阻就最好了,但是还有一点需要注意的是有些单片机没有下拉输入,比如stm8,如果一些引脚设成外部中断的时候引脚悬空,会使得单片机不断进入中断,这时候就需要上拉或者下拉电阻稳定IO口的电平。
2、 芯片IC的选型要合理。做低功耗产品的时候,芯片的选型是很重要的,无论是单片机还是其他外设,在预算范围内都应该尽量选择工作电流小的IC。
3、 电路的布局要合理。电路设计也是很关键的一点,不合理的布局可能会造成额外的阻抗,包括外形、散热等问题也是,可能会造成功耗的增加。具体就不多说了,我懂的可能还没你们多。

好了,关于单片机低功耗处理的方法就讲到这里,这些都是在我最近在做项目的时候,因为功耗问题搞得死去活来之后得出的结论。如果还有什么问题或者文中有错误的地方,可以联系我。

2015-01-15 12:33:42 lichenbook 阅读数 1669
  • STM32Cube和HAL库使用初体验-第5季第2部分

    本季课程主要讲解STM32的全新开发方式:使用STM32CubeMX工具做图形化配置,自动生成初始化代码;添加各种中间件;使用HAL库和LL库来操作外设。结合朱老师物联网大讲堂专为nbiot物联网开发而设计的NB476开发板,本季课程能够让大家彻底掌握物联网时代以nbiot和低功耗STM32L4单片机为代表的典型开发模式,实战意义非常重要。

    1265 人正在学习 去看看 朱有鹏

单片机是飞思卡尔KL16,Cortex-M0+内核,LLWU低功耗可以做到2uA以下。项目是用它控制SX1276无线模块传输水表通过串口发来的数据,总线是SPI,还有几根IO线,另外UART负责与水表测量部分通讯。休眠的时候可以把UART禁用,还可以把SWD仿真接口禁用掉,这样程序就无法下载,有时候开机没有延时,单片机就废了。

SX1276休眠模式功耗很低,零点几个uA。之前调试低功耗的时候,SPI口不禁用整体电流反而小些,后来批量生产了900块,测了60块板子,发现三分之一的板子,功耗都偏高,从10uA到100uA都有,2/3的板子电流约3.6uA。后来把单片机换一个,就正常了,所以怀疑是单片机的问题。后来技术总监说可能是IO存在漏电流的问题,于是拼命检查,最后查到与无线模块通讯的SPI口,我就把SPI四根IO禁用,发现电流果然小下来了,后来又测了一块,发现电流反而增加了,感觉很奇怪。

考虑到可能会干扰无线模块,所以SPI一直是保持原来的状态,或者配置成禁用模式(输入态),抱着试一试的态度,把SPI口都配置成了输出高电平,结果电流一下降到了3uA,以前的电流都是慢慢降下来的。我又配置成低电平,结果是一样的,3uA。至此,低功耗的问题解决了。

至于为什么,网上也有帖子介绍经验的。

总结:没有用到的IO口最好不要配置为输入模式,那样可能会有微弱的漏电流。最好配置为特定电平。

2018-05-11 13:43:42 xulikai 阅读数 2195
  • STM32Cube和HAL库使用初体验-第5季第2部分

    本季课程主要讲解STM32的全新开发方式:使用STM32CubeMX工具做图形化配置,自动生成初始化代码;添加各种中间件;使用HAL库和LL库来操作外设。结合朱老师物联网大讲堂专为nbiot物联网开发而设计的NB476开发板,本季课程能够让大家彻底掌握物联网时代以nbiot和低功耗STM32L4单片机为代表的典型开发模式,实战意义非常重要。

    1265 人正在学习 去看看 朱有鹏

 

测试名称:SI4463透传模块休眠功耗测试

测试说明:测试RF63U透传模块的低功耗性能,RF63U使用STC单片机管理SI4463芯片,提供UART与射频的透明传输功能。

测试方案:将电流表串入模块电源线,UART接口与计算机连接,通过计算机发送休眠指令使模块进入休眠状态,观察电流表实时电流数据变化。

测试工具:

电流表                    供电电源                           USB转UART(3.3V)

 

测试步骤

(1)RF63U工作电压范围为2.0~3.6V,故在锂电池上串了两个1N4148二极管;

(2)将电流表串入电源线并切换至uA档;

(3)将模块UART接口与计算机的UART接口连接好;

(4)打开串口调试助手,发送区选择16进制;

(5)给模块上电,此时显示为1024uA,因工作于接收模式时,功耗是10mA左右,超出量程所至。

(6)通过串口调试助手发送休眠指令(16进制)AA BB 01 A0 00 13 19;

(7)电流表显示为0.00uA,似乎哪里不对。因UART接口与计算机连接,计算机的接口的管脚电平信号馈电足够维持模块工作于休眠模式下,因此我们连接的电池电流消耗此时为0;

(8)断开UART接口与计算机的连接线,仅留下电池、电流表、透传模块组成的最小测试系统,电流表从0.00uA逐渐变大,最后稳定于0.12~0.13uA左右。

 

关于断开UART接口后电流表逐渐变大的原因分析:当UART接口与模块连接时,模块休眠时所需要电量使用UART接口的馈电已经足够,电池电量消耗为0,故此电流表显示为0.00,当断开UART接口后,因模块上电容中存储有电能,模块开始消耗电容电量,随着电容电量的消耗,不足的电量则通过电池补充,故此电流表由0.00uA~0.12uA是个逐渐变化、最后趋于稳定的过程。

 

关于电流大小分析:RF63U透传模块主要使用了单片机和SI4463芯片和一些辅助电路,进入休眠模式的本质是单片机控制SI4463进入休眠,然后单片机本身也进入休眠状态。单片机进入休眠状态时官方给出的电流消耗是0.1uA(100nA),SI4463给出的电流消耗是30nA,故此上面的测试结果0.12~0.13uA(即:120nA~130nA)完全符合我们的设计目的。


 

 

 

正常工作模式                             休眠工作模式(UART与计算机连接)

 

休眠工作模式,断开UART连接,电流逐渐上升,稳定于0.12uA

 

2019-08-22 10:37:31 u010058695 阅读数 322
  • STM32Cube和HAL库使用初体验-第5季第2部分

    本季课程主要讲解STM32的全新开发方式:使用STM32CubeMX工具做图形化配置,自动生成初始化代码;添加各种中间件;使用HAL库和LL库来操作外设。结合朱老师物联网大讲堂专为nbiot物联网开发而设计的NB476开发板,本季课程能够让大家彻底掌握物联网时代以nbiot和低功耗STM32L4单片机为代表的典型开发模式,实战意义非常重要。

    1265 人正在学习 去看看 朱有鹏

一、低功耗模式

当CPU不需继续运行时,可以利用多种低功耗模式来节省功耗,STM32支持三种低功耗模式,可以在要求低功耗、短启动时间和多种唤醒事件之间达到最佳的平衡。

  • 睡眠模式SleepMode。在睡眠模式,只有CPU停止,所有外设处于工作状态并可在发生中断/事件时唤醒CPU

 

  • 停机模式StopMode。保持SRAM和寄存器内容不丢失,达到最低的电能消耗。停止所有内部1.8V部分的供电, PLL、 HSI的RC振荡器和HSE晶体振荡器被关闭,调压器可以被置于普通模式或低功耗模式。可以通过任一EXTI从停机模式中唤醒, EXTI信号可以是16个外部I/O口之一、 PVD的输出、 RTC闹钟或USB的唤醒信号

 

  • 待机模式StandbyMode。最低的电能消耗。内部1.8V部分的供电被切断; PLL、 HSI的RC振荡器和HSE晶体振荡器关闭;SRAM和寄存器的内容将消失,但后备寄存器的内容仍然保留,待机电路仍工作。从待机模式退出的条件是: NRST上的外部复位信号、 IWDG复位、 WKUP引脚上的一个上升边沿或RTC的闹钟到时

 

二、低功耗模式基于HAL库的常用API

2.1睡眠模式SleepMode

  • __HAL_RCC_PWR_CLK_ENABLE();//电源管理使能
  • HAL_PWR_EnterSLEEPMode(PWR_MAINREGULATOR_ON, PWR_SLEEPENTRY_WFI);//进入睡眠模式

2.2停机模式StopMode

  • __HAL_RCC_PWR_CLK_ENABLE();//电源管理使能
  • HAL_PWR_EnterSTOPMode(PWR_LOWPOWERREGULATOR_ON,PWR_STOPENTRY_WFI);//进入停机模式
  • ReSysClkConfig_STOP(); //停机唤醒后需要重新配置时钟  

2.3 待机模式StandbyMode

  • __HAL_RCC_PWR_CLK_ENABLE();//电源管理使能
  • PWR_Check_Standby();//检查是否是待机模式
  • __HAL_PWR_CLEAR_FLAG(PWR_FLAG_WU);//清除唤醒标志
  • __HAL_PWR_CLEAR_FLAG(PWR_FLAG_SB);//清除待机标志
  • __HAL_PWR_GET_FLAG(PWR_FLAG_SB);//获得待机模式标志
  • HAL_PWR_EnterSTANDBYMode();//进入待机模式

三、UnusedPin配置原则

1、不用的IO按照外部电路设置成上拉或下拉;

2、设置成浮空输入的功耗最大。

3、不用的管脚模拟输入。

 

 

STM32软件-低功耗

阅读数 32

没有更多推荐了,返回首页