浅谈单片机低功耗处理

一、什么是低功耗处理
我们在研发电子产品的时候,经常会涉及到功耗的问题。因为电子产品肯定是要供电的,供电的方式最常用的几种是: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、 电路的布局要合理。电路设计也是很关键的一点,不合理的布局可能会造成额外的阻抗,包括外形、散热等问题也是,可能会造成功耗的增加。具体就不多说了,我懂的可能还没你们多。

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

浅谈单片机低功耗处理相关推荐

  1. 浅谈单片机程序设计中的“分层思想”!

    浅谈单片机程序设计中的"分层思想",并不是什么神秘的东西,事实上很多做项目的工程师本身自己也会在用.看了不少帖子都发现没有提及这个东西,然而分层结构确是很有用的东西,参透后会有一种 ...

  2. 浅谈单片机中变量访问的互斥

    本文以stm32为硬件平台,浅谈一下变量访问的互斥. 假设是裸板,主程序和中断服务程序都对某个变量进行修改,那么很可能造成数据的不一致.查了一下,主要有两种解决方法:第一种是关中断,在访问公共资源的时 ...

  3. 浅谈单片机程序设计中的“分层思想”

    "分层思想"并不是什么神秘的东西,事实上很多做项目的工程师本身自己也会在用.看了不少帖子都发现没有提及这个东西,然而分层结构确是很有用的东西,参透后会有一种恍然大悟的感觉.如果说我 ...

  4. 浅谈单片机、ARM和DSP的异同

    犹记得当年读书的时候,老师说单片机.ARM.DSP有互通之处,都是CPU,但听老师讲都听不懂. 我该如何理解他们,并找出他们的异同呢?我们来看看行内人的看法: ICer,从事ARM CPU的SOC设计 ...

  5. 浅谈单片机、ARM和DSP的异同——非常透彻

    http://www.elecfans.com/app/api/focus/index/id/341 犹记得当年读书的时候,老师说单片机.ARM.DSP有互通之处,都是CPU,但听老师讲都听不懂. 我 ...

  6. 51单片机计算机实物焊接,基于51单片机的最小系统焊接图 浅谈单片机最小系统...

    本文主要是关于51单片机的相关介绍,并对基于51单片机的最小系统焊接进行了详尽的阐述. 单片机最小系统 单片机最小系统主要由电源.复位.振荡电路以及扩展部分等部分组成. 对于一个完整的电子设计来讲,首 ...

  7. 初学者浅谈单片机学习 by ffy

    自己是一个刚接触单片机的学生,起初的时候一片混沌,不知道从哪里开始,买的板子也更多的是在讲实例工程,感觉很难上手.学过一段时间stm32板子之后,最近又在重新学习51板子,最近的感觉还不错,也对学习有 ...

  8. 单片机sleep函数的头文件_单片机代码模块化设计思想浅谈

    前言:前段时间分享的文章[单片机裸机代码框架设计思路],很多读者给我留言,觉得很不错,对于初学者而言,这是一个进阶的技巧,对于我而言,这是对自己总结和表达能力的一个提升. 本文章我们再谈谈单片机代码的 ...

  9. **浅谈STM32系列单片机的零基础学习方法**

    浅谈STM32系列单片机的零基础学习方法 *很多朋友想必在零基础学习STM32F1这系列单片机时会感觉无从下手,或者不知道写程序时到底是用库函数好还是寄存器好.* 我个人认为一个零基础的朋友可以通过以 ...

最新文章

  1. 输入几个数字,用逗号隔开系列例题
  2. Windows API入门系列之五 -一个正儿八经的SDK程序
  3. CODEVS.5037.线段树练习4加强版(分块 区间k的倍数)
  4. asp.net与JAVASCRIPT函数的相互调用
  5. SSIS 执行变量中的脚步输出列顺序与SQL查询列顺序不同
  6. 判别学习与生成学习的区别
  7. hdu5279 YJC plays Minecraft 【分治NTT】
  8. php 导出txt 缩进,indent - 缩进文本
  9. bum报文_Vxlan学习笔记——原理
  10. sql中用临时表 或 创建视图那个效率比较快!
  11. Ambari server:无法显示内存,CPU等使用率
  12. 闭包——抽象解释的简单注释
  13. windows使用命令或批处理文件打开远程桌面
  14. vb阶乘计算机代码,速求100的阶乘的代码
  15. 解析力 (2)空间采样 和 奈奎斯特
  16. ACL2021_Enhancing Entity Boundary Detection for Better Chinese Named Entity Recognition
  17. 舔一舔 · 肌霸Kafka
  18. 石膏板建筑材料英国UKCA认证—EN 520
  19. 全方位解析俄语系勒索软件的生态系统
  20. 基于Matlab/Simulink的简单三相交流系统扫频仿真

热门文章

  1. 计算机的随想作文500字,生活随想作文500字 - 五年级 - 中小学生作文网
  2. 灰色关联度分析(Grey Relation Analysis,GRA)原理详解
  3. cam全称_英文缩写,全称
  4. Java程序员的互联网转型之路
  5. C语言午餐,【故事优选C】安详的午餐
  6. 磨金石教育设计干货分享|20个海报设计小技巧,果断打包带走
  7. 得分(Score,ACM/ICPC Seoul 2005,UVa1585)
  8. 用Multisim仿真设计有源、无源,二阶、四阶滤波器
  9. SpringBoot(39) 整合ELK
  10. 初入职场“荒野求生”,五条靠谱的生存指南