十年硬件老司机,结合实际案例,带你探索单片机低功耗设计!


作者:YJGQDD(阿莫:hailing),整理:晓宇

微信公众号:芯片之家(ID:chiphome-dy)

经过了多年的低功耗硬件设计(公司硬件设计和软件设计是分开的,我一直是做硬件,在面对低功耗生产事故中做硬件的往往很苦逼),其中容易出的一个问题是单片机进睡眠模式前IO没配好,产品上主要出的问题是这些出问题的IO比较隐蔽,当时经过多次测试也没测试出来,后来在生产或现场才发现的概率性功耗偏大的问题。

站在硬件的角度,最近才意识到原来软件上一直容易犯的一个毛病是睡眠前没有把所有IO重新配置一遍,这样容易导致IO低功耗的BUG出现。

这个心得总结起来是:要求在进睡眠模式前把所用的单片机的所有的IO从代码上1个IO接1个IO的配置一遍。不要偷懒,不要多个IO一起配置。

分析

  外设时钟

外设的时钟没关,单片机内部模块没关等,部分单片机进睡眠后自动会关闭,部分不会自动关闭的,没关的话当场测试功耗就偏高,会马上发现的。所以这些在实际生产中都没出过问题。

  IO配置

1个IO接1个IO配置,不要多个IO用类似BIT1|BIT2……,|=0xxx这类一起配置。因为代码上越是直观,出现笔误的概率越低。而且我们核对IO的时候都是一个IO一个IO的去核对配置对不对。所以代码上依次写一下其实花了不了多少时间和代码空间的。花个5到30分钟撑死,但是后续节省的时间和金钱就不好说了。人的总是有惰性的,我自己写代码的时候之前进低功耗前也只是配置了一部分,现在慢慢开始习惯全部配置,很多配置可以复制之前的IO初始化(这个已经养成了1个IO,1个IO的配置,改起来其实很舒服的)。

  案例分析

实际出现的最麻烦,最隐蔽的情况往往跟IO的配置有关,越简单的往往越容易出问题。

1、比如大多数情况下程序从A子程序进入睡眠后IO配置没问题,经过大量测试也没发现问题。但是当某次执行了B后再进睡眠,B中对IO进行了操作,再进睡眠没有把IO改回来,这时问题就可能出现了。而要是执行C,D……等程序再睡眠都不会出IO的隐患。

案例:产品在客户那里发现有50%左右放了一段时间后电池耗光。研发百思不得其姐,多次查看代码没发现问题,之前也没出现死机的问题(死机后会导致不能进低功耗,功耗超高)。派人去现场测试,进过大量测试后发现一个IO部分产品输出高。导致电流多了1mA左右。原因是客户上电做了秒脉冲输出,下电后产品就用电池供电了。户下电前没有配置关闭秒脉冲输出,程序下电后也没有把IO配置回来,导致有50%的概率IO输出高电平。

2、一个产品已经生产了几万台,一直没发现问题。后来换了一家PCB厂家后,生产发现功耗个别产品偏高个10uA左右,研发拿回来分析,发现换了芯片就好了。但是生产出现百分之几的功耗不好的情况,芯片不可能出现这么大概率的损坏。430芯片,走正规供应商的。再一个IO一个IO的查找,通过手摸IO最终发现一个连光耦输入端的IO配置的是输入模式。换了芯片好了是因为焊接过,板子变脏,电阻变小,IO有一个比较固定的偏向与GND的电压,因而没问题。之前没问题可能是板子的阻值比现在的这家小了点,或当时生产的时候湿度大点,或光耦的反向漏电流大些,也是各种可能了。软件发现这个IO本来是配置没问题的,中间不知道哪里配置过或配置别的IO时不小心连这个IO也配置了。总之当时没搜到这个IO的配置哪里改动了,只是在进低功耗前重新配置了下这个IO。

3、产品上使用的一个外购低功耗RF模块的IO问题。使用CC1101和430F2132。都算低功耗的芯片吧。前后找了2家开发模块,第一家2132一个IO没配置好,生产阶段发现部分产品功耗偏高。后来是因为领导的原因换了家做无线的厂家来做这个,还是CC1101+2132方案。照理来说之前犯过错误应该吸取经验教训了吧。并且软件人员也是老手了。结果生产是没问题,发货到客户那里还是发现了个别产品出问题,最后还是发现一个IO没配置好状态。

4、以上心得很简单,但是是付出多次时间+金钱得出的惨痛心得。而且这些都是软件的问题,但是功耗问题往往第一个找个是硬件:你设计的产品功耗偏高,电池没电,你查查看,哪里出问题了。做硬件的又开不到代码,软件人员往往开始还不承认IO配置上有问题,尤其是之前找外面厂家开发的模块,他们的意思是,我做软件xx年了。开发了这么多产品,这么简单的一个产品怎么会出问题,是你们自己的产品没做好才出的问题。苦逼的硬件工程师没办法,只能自己想各种办法找到出问题的那个IO。软件人员经过改代码对比测试才完成,但是软件最后还是不会说自己的代码有问题。

5、关于IO的问题。430单片机IO设置是最弱的,大部分没有上下拉电阻,默认是输入状态,没配置IO就容易出功耗问题,ST的相对好的多,51的IO默认的51状态有上拉电阻,没用到的脚不去配置也不会出问题。空的IO我之前喜欢配置成输出0状态,最近在用STM8S看了下代码发现喜欢配置成上拉输入状态,STM8S没下拉电阻,STM32有,配置成下拉输入状态更好些,不小心碰到不会对外输出电流。

题外话:关于单片机的低功耗模式之前没深入了解STM32,最近才发现进最低功耗的STANDBAY模式RAM中数据对丢失,这点不如8位机,之前用STC的51和STM8系列从不担心ram数据丢失的问题。看STM32L系列进最低功耗也有这个问题,只是可以掉电保的RAM区域分的更多,更大。

推荐阅读

   重磅开源:带屏幕LCD脱机下载器离线下载器!

 【开源方案】2.4G遥控器,接收器全套详细设计资料

 【全开源功放】美国NS公司的经典芯片,LM3886!

 分享一个来自苏泊尔的超低成本隔离交流电压检测+掉电检测二合一电路

  软件神器TortoiseGit,晓宇姐姐教你使用图形化方式管理单片机程序版本!

请戳右下角,给我一点在看!

c8051f单片机低功耗系统设计方法探讨.pdf MSP430系列超低功耗16位单片机原理与应用.pdf PHILIPS51LPC 系列单片机低功耗设计.pdf PHILPS76X单片机低功耗设计方法.pdf PIC单片机在电话远程控制器中的低功耗设计.doc PIC单片机系统低功耗设计方法.pdf 一种PIC单片机低功耗设计方案.pdf 一种单片机系统RAM的低功耗测试方法.pdf 一种基于低功耗单片机的抗干扰l电源.pdf 一种基于低功耗单片机的抗干扰电源.pdf 低功耗单片机的睡眠抗干扰技术.pdf 低功耗单片机系统外中断扩展技术研究.pdf 便携式智能仪器通用低功耗单片机系统设计.pdf 利用低功耗单片机实现串口软件狗.pdf 单片机低功耗技术及应用7.pdf 单片机低功耗方式应用技巧.pdf 单片机低功耗设计3.pdf 单片机便携式系统的低功耗设计方法.pdf 单片机应用系统中的低功耗设计3.pdf 单片机应用系统的低功耗设0计.pdf 单片机应用系统的低功耗设计(2).pdf 单片机应用系统的低功耗设计.pdf 单片机应用系统的低功耗设计1.pdf 单片机应用系统的低功耗设计8.pdf 单片机应用系统的低功耗设计破.pdf 单片机测控系统的低功耗设计.pdf 单片机系统低功耗设计在数据采集系统中的应用.pdf 单片机系统的低功耗设l计与应用.pdf 单片机系统的低功耗设计与应用.pdf 单片机系统的低功耗设计的策略.pdf 单片机系统的低功耗设计策略.pdf 单片机系统的超低功耗设计.pdf 单片机系统设计中低功耗的探讨.pdf 基于80C51系列单片机低功耗便携系统设计.pdf 基于C8051F040单片机的便携式心电监护仪的低功耗设计.pdf 基于hym 8563和单片机低功耗太阳能电池自动跟踪系统的设计.pdf 基于hym8563的80c51系列单片机低功耗系统设计.pdf 基于msp430单片机低功耗rtu设计.pdf 基于MSP430单片机低功耗电流互感器高压端的实现.pdf 基于pic单片机低功耗数据采集系统的设计.pdf 基于PIC单片机低功耗读卡器硬件设计.pdf 基于PIC单片机低功耗键盘接口设计.pdf 基于u盘的单片机低功耗海量存储系统.pdf 基于低功耗单片机的智能综合仪表设计.doc 基于单片机唤醒功能的低功耗定时方法.pdf 基于单片机低功耗温湿度数据采集器的研制2.pdf 基于单片机低功耗甲烷检测系统设计.pdf 基于单片机的嵌入式系统的低功耗设计问题.pdf 基于单片机的电视机低功耗待机控制方法.pdf 基于单片机的超低功耗压力检测控制系统设计.pdf 基于超低功耗单片机MSP430F168的家用动态心电记录器.pdf 实时多任务机制在低功耗单片机系统中的最小实现.pdf 嵌入式单片机应用系统的低功耗技术.pdf 怎样构成低功耗单片机系统.pdf 新一代超低功耗16位单片机TI MSP430系列.pdf 极低功耗的多功能单片机监控电路R5101G.pdf 浅谈低功耗单片机系统的设计.pdf 超低功耗单片机实现智能遥控器设计.pdf
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值