前端传感器制作完成,硬件没有问题,各个模块测试顺利达到预期。为了保证前端传感器在1600mAh的电池供电下,稳定工作5年以上,我们设置:每天一小时传输一次温度数据,单片机在LPM3下,zigbee断电,tmp100在shutdown模式,所有不用的I/O设置输入(高阻态,或者相应的电平)。预期工作电流23mA,节电状态1.5uA左右。 插曲:TMP100无法读到正常数据,固件总是认为硬件有问题,好说,作为硬件好好把官方例程下入单片机要是成功了,读到数据了,那就证明硬件没问题了嘛,再耐心的告诉固件看看官方程序初始化是否和你一样,耐心考虑一下,问题解决了就好。最后注意TMP100的ADD1,2的连接,对应手册中不同的地址,需要根据硬件更改。固件按照你的引导,找到了自己程序中相关位设置的问题,ok闯过一关。 小结:我们是做项目,不是你不服我,我不服你,互相指责错误的怄气(固件和硬件);在同事不耐心的条件下,我们(硬件)一定要耐心,自己要会写程序,验证自己的设计没有问题,并耐心帮助分析问题,引导固件找问题。学会说话,态度和缓,为了把自己的产品做好,这是责任。 事件一:进入节电状态,耗电仍然为18mA,zigbee工作指示灯微亮。经过我在CCS下初始化单片机IO与zigbee相连的端口,可以正常关断zigbee,指示灯也不再微微亮。怀疑是和zigbee通信口在LPM3处于不定状态,会通过此处供电,在固件中进入LPM3时设置一下相关连接的端口,问题可以解决。但是感觉说不通,UART在进入LPM3后,已经没有时钟源,更谈不上端口供电,但是从引脚电平上看,这两个端口确实有1.725V的电平,单片机的TX线上电平匹配电阻也有压降,就算单片机设置TX,RX为高阻态,也是如此。经过几个连接口的依次排查,终于发现了是一个zigbee复位用的引脚处情况,这个脚 上电有个1ms的低电平就ok,但是LPM3之后,这个脚不处理,电就要从这里进去(单片机作为供电了)。在LPM3下,zigbee是不工作的,所以复位引脚也要拉到低电平,zigbee才算完整的关断了(供电口已经关闭)。 小结:作为硬件,把所有脚都设置了,就发现问题解决,那么一定是某个引脚造成的,和固件好好沟通引脚的设置,就能发现问题,依次排除,定位问题源头。解决问题中间,发现可控制LDO关断的引脚,没有下拉,LDO内部也无下拉,没有单片机控制会造成一个不定的电平,容易让电源部分自动工作,造成电损耗。 发现问题后,我还傻傻的要给复位口加上个电源监控芯片……前辈立即指出zigbee可控就是最好的,你把这个加了芯片,就不可控了。呵呵……当时临近下班,工作一天我脑袋真是傻了吧。其实硬件上能少改动就少改,否则成本不说,同时很容易引入更多未知的问题。 事件二:zigbee问题解决,系统省电模式电流也下降到170uA左右,同时我的电池容量测试也完成,到系统无法正常工作的电压时,正好为1600mAh左右,按照任务书要求,忽略省电模式功耗,可以用上六万多天。我以为ok了,但是前辈说,根据手册中的数据,系统处于低功耗状态要求系统耗电之和是能达到1.5uA左右的,现在太大。我承认这一点,为了进一步达到手册的标称,我尝试了拆下指示灯的限流电阻,其实属于无用功。前辈说,低功耗问题,每一个电阻都不能放过,我就每个电阻测量压差,低功耗状态下仍然没有发现什么压差。最后,我和固件一商量,搞个比较彻底的,这个时候只有单片机和TMP在工作,单片机不工作不可能,问题肯定在TMP上,那就拆了TMP试试。 拆了,呀!功耗一下到了1.3uA,属于正常LPM3功耗啊!嗯,一定就是tmp了,难道是SDA,SCL口的上拉电阻(其实这个时候没有考虑固件的运行情况,固件修改直接把单片机进入LPM3模式,因为有各种判断,拆下外设程序会停在判断的位置,所以都被屏蔽了)。难道是这两个口供电?然上拉电阻并没有压差,TMP100正常状态功耗45uA左右,shutdown后,基本1uA都不到啊!而且固件试了shutdown的效果,确实是45uA的差距。拆了两个上拉电阻,擦了,现有功耗是225uA啦!(因为无法给tmp100写数据,它就在自己的默认状态工作)。 下面更是纠结,甚至在前辈的建议下,我也想用zigbee一样的控制供电方式控制TMP100供电,但是就涉及到更改电平匹配问题,改动太大。前辈说TMP供电用单片机IO供电,就可以控制了,是啊,这个是有点临时投机取巧的方式,但是也是值得一试的,但是改好后,发现每次操作tmp100断电再重启,读不出数据了,因为我曾经遇见过类似现象,于是提醒,重新初始化一遍TMP100,它应该没有断电记忆的功能。可以读出数据了,但是功耗仍然无法下降。 接下来,我挨个设置了430的对外IO,6s一次低功耗变到正常工作状态,保证无引脚影响了,系统电流在45uA到46.1uA左右波动了。我把这个现象告诉固件,他开始屏蔽程序中的一些设置,从225uA到什么都屏蔽掉还剩LPM3后,成为45uA,因为屏蔽太多,没有了shutdown模式,所以相当于TMP100在一直工作,单片机只有LPM3,这个电流是正常的。偶然间,固件屏蔽了AD初始化,系统电流下去了,1.3uA出现。 问题定位在此处,固件认为AD明明在ENC位做了关闭处理,AD转换不应该继续了,耗电不会在AD了,正常工作也不能关闭AD初始化这边啊。我就和他说,既然问题在AD这个子程序中,那我们就一个个试试其中的子函数,屏蔽掉哪一条后,电流就小了,就解决问题了。别急,我们先不要考虑正常运行的情况,专心找到问题点,关键点越来越近了。我们一位一位的对,固件说总不会是这个ADref的原因吧,结果屏蔽后,就出现45uA了,擦,就是这个地方……固件再次用正常制作的板子(可以配置TMP100)和有shutdown模式的固件,ok,电流降到1.3uA,再试了几个板子,都ok!问题顺利解决~ 小结:其实我们发现几个数值上的变化,也能换个方向考虑,225uA,45uA,170uA,和出现这些数据时我们做的固件上处理,无论如何,问题解决,周一可以┢┦aΡpy了……嗯,能得到什么知识……
|