软硬件低功耗设计( 二 )


避免IO漏电
“漏电”是什么意思呢?漏水大家一定熟悉吧,容器开了个口,水往低处流嘛,一样的道理,MCU与模组或者与其他芯片之间免不了要进行通讯,拿最基本的串口来说,下面表格的连接方式通讯肯定没问题…
但是考虑一下,如果一个MCU不需要工作,下电以降低功耗之后会发生什么事情?

软硬件低功耗设计

文章插图
主MCU的RX一般会保持高电平以等待串口下降沿的到来,直连之后,这个高电平便会“漏电”到你下电的MCU,引起功耗的增大,设计中要避免这种IO直连的设计 。
TX
RX
RX
TX
GND
GND
以上这种情况,可以采用信号隔离的方式处理,方法也很多种,简单介绍一种:
不需要工作时候,隔离芯片是没有电的,需要使用的时候,供电即可 。
硬件设计小结
关于硬件的设计是方方面面的,大家伙一定要注意硬件设计上的低功耗考虑,成熟的电路也越累越多,小飞哥列举的不过皮毛,欢迎大家一起交流更多好的方案与考虑 。
软件设计
低功耗从硬件上能够解决一部分,但单纯依靠硬件肯定是不行的,需要软件的密切配合,才能达到最好的效果 。
软件设计通常需要考虑一下几种情况
GPIO引脚的模式配置
对于GPIO的模式,就拿STM32来说,模式多达8种,4种输入,4种输出,那应该配置为什么模式,系统功耗才会比较低呢?
仅讨论产品休眠模式下,GPIO的配置,正常工作按照需要该怎么配置就怎么配置就可以了~
对于没有用到的GPIO,需要配置为模拟输入状态
从中,可以看到有个选项,意思是,为了省电,不用的GPIO可以配置为模拟输入模式 。
前面说了模式那么多,为什么选择模拟输入模式呢?
模拟输入模式:信号从左边编号1的端口进入,从右边编号2的一端直接进入ADC模块 。这里我们看到所有的上拉、下拉电阻和施密特触发器,均处于断开状态,因此“输入数据寄存器”将不能反映端口上的电平状态,也就是说,模拟输入配置下,CPU不能在“输入数据寄存器”上读到有效的数据 。
用到的IO同样需要关注,先来看一个由于IO配置不正确导致的功耗问题 。
休眠模式一般能通过专门设计的唤醒引脚或者中断触发唤醒,例如,通过串口中断唤醒MCU,进而通讯获取数据等,由于串口协议起始位是低电平,所有MCU的RX要保持高电平才能更好地检测到数据,但如果仅仅是设置了输入模式,恐怕还不够,对比一下下面的配置结果:
软硬件低功耗设计

文章插图
仅仅配置了输入模式,硬件设计无上拉,软件未配置上拉,结果电流测出来有29uA,而正确的电流应该在0.7uA以下
再来看配置为上拉输入之后,电流降为0.63uA,恢复正常 。
对于比较简单的MCU来说,GPIO模式可能比较少,并没有模拟输入的配置,设置下拉配置也没有,只有上拉,那也不用慌,对于此类MCU,可以配置为输入上拉或者输出低模式,输入上拉肯定没问题的,但是配置为输出低的时候要注意了,看下图:
此时若配置为了输出低,会产生什么结果?WC,竟然多了VCC/R6的消耗,很明显,此时配置输出低是不合适的,若外部无连接,配置输出低是没问题的 。
关于GPIO的配置还有很多,要参考具体的外设进行适当的配置 。
关掉不需要的外设
在休眠状态下,除了保留必要的功能外,应该关掉所有不需要的外设的时钟源,避免造成额外的功耗消耗 。
降低时钟频率