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

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

站在硬件的角度,最近才意识到原来软件上一直容易犯的一个毛病是睡眠前没有把所有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的配置,改起来其实很舒服的)。

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

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

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

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

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

文章知识点与官方知识档案匹配,可进一步学习相关知识Java技能树首页概览91767 人正在系统学习中

来源:张巧龙

声明:本站部分文章及图片转载于互联网,内容版权归原作者所有,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2020年11月1日
下一篇 2020年11月1日

相关推荐