打印

浅谈单片机低功耗处理

[复制链接]
481|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
gggg7|  楼主 | 2022-5-26 14:21 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
一、什么是低功耗处理
我们在研发电子产品的时候,经常会涉及到功耗的问题。因为电子产品肯定是要供电的,供电的方式最常用的几种是:220V交流直插供电、用直流适配器供电和电池供电。无论是哪种供电方式,只要用到单片机,最终都是要转成低压直流给单片机供电的。而单片机如果不做好低功耗处理的话,电量的消耗会大很多,续航能力也会大大缩短。如果是220V或者适配器供电,那还好点,最多是电费多一点,而如果是用电池供电的,续航能力差的话就需要频繁更换电池。像烟雾报警,红外报警,智能门锁这些产品,一般都是用电池供电的,因为使用和触发的频率不是很高,安装的位置也不适合用适配器供电。这个时候,低功耗处理就显得尤为重要了。
而功耗虽然指的是功率,但是我们常常用电流去衡量,因为单片机的工作电压是有范围的,因此,正常工作的情况下,电压是基本固定的,而在相同的电压下,电流的大小直接决定了功耗的大小,电流越大功耗就越大。因此,我们做低功耗处理最终的目标就是要把电流降下来。
再说一些题外话,很多电子产品,特别是那种不是一直在高速工作,大多数情况下都是在休眠状态,只有触发了某些特定条件才会唤醒工作的产品,比如上面说到的报警器和门锁。这些产品在电池满电量的情况下能用的时间,是可以估算的。一般的做法是,直接把电池的容量除以休眠时的电流,因为在不触发的时候,整个电路工作的电流都是很小的,比如智能门锁,只有在开门唤醒的时候,需要发射和接受无线信号,需要驱动电机的时候电流会比较大,大部分时间这些模块都是不工作的,消耗的电流其实很小。所以,用这种估算的方式,也是有一定的合理性的,很多公司发布产品的时候说这个东西能用多久,其实也是这样算出来的。再说说电池容量,电池容量的单位是毫安时,理论上来说,如果工作电流是1mA,那它能工作多少个小时,就是多少毫安时,而实际上,容量的减少会使得电压降低,当电压低于某个值的时候,单片机就不能工作。因此,一个电池的额定容量往往不是能用的容量。
二、单片机要怎样做才能把整个电路的电压降到最小
如果一个电路里面只有一个单片机以及单片机最基本的外围电路,那么它的功耗是很低的,特别是一些专门用于低功耗产品的单片机,比如stm8L系列,stm32L系列,TI430系列,RJM8L系列等等。但是如果你以为你用了超低功耗的单片机就一定能降低功耗的话那你就错了,无论是用什么单片机,在程序上和电路上都是要一些处理才能把功耗控制在比较低的范围。
程序的处理方法主要有以下几点:
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、电路的布局要合理。电路设计也是很关键的一点,不合理的布局可能会造成额外的阻抗,包括外形、散热等问题也是,可能会造成功耗的增加。具体就不多说了,我懂的可能还没你们多。


使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

54

主题

55

帖子

1

粉丝