耗时半个月,整块电路板在wait模式下的低功耗问题终于符合理论值了!!!
碰到的坑已经不知道有多少了,各种反复进入,然后跳出来,再进去,再换个方式出来,有个词叫不胜枚举,用在这里感觉差不多。举个例子,就拿IIC来说,SCL和SDA上分别有两个上拉电阻,在上个版本中,上拉电阻直接接的电池电源Vcc,在wait模式下,数字电路部分不断电,在休眠时,SCL和SDA都置高,也就没有功率消耗;在backup模式下,数字电路电源控制端的MOS管关闭,整个系统断电,MCU顺利休眠,没问题。但是,在这一期版本中,wait模式没变化,在backup模式中,当SCL和SDA置高时,关闭MOS管竟然关不上!一查,竟然是通过IIC的两个口SDA和SCL漏电过去把MOS管打开了!测试一下,在关闭前把SDA和SCL都置低,数字部分顺利断电,但是这时候两个上拉电阻上消耗的电流就客观了,没办法,只好去掉,然后设置SCL和SDA的IO口为内部弱上拉,勉强解决了整个问题。
还是IIC这里,为了省电,MCU在初始化后需要降频工作,但是在降频后,系统的延时函数不能正常工作了,系统频率降低到原来的几分之一,延时时间就变为了原来的几倍,重新初始化延时函数都没用,这里还需要处理下。这里还不是主要问题,由于降频后延时变慢了,IIC使用的模拟口,时钟是靠延时实现的,为了提高通信速度,就把延时时间变小了。但是,我忘了初始化是在降频前完成的,结果由于没有上拉电阻,IIC通信速度太高,造成通信不稳定,经常把EEPROM中的数据擦除,我查了半天,还一度怀疑J-Tag烧写的时候会把EEPROM的数据擦除。甚至忘了这个EEPROM是外挂器件!
现在谈谈梦的问题。有一个传感器器件,在这次做的二十块板子中,有十块可以正常工作,正常休眠;但是另外十块能正常工作,进入休眠却不行了,电流比平时多了50多mA。查了好几天,因为有一大部分正常工作的,一直认为是焊接不行。周六我来调试,发现不初始化这个传感器模块,休眠电流是正常的,一旦让它工作,就不行了。直到昨天,我们的硬件工程师说他突然想到,会不会是传感器的中断口状态不稳定导致的。传感器是有一个中断输出口,但是我没有使用这个中断,于是在初始化时把这个IO口设置为输出,拉高。偏执的我,还不信,认为没有使用这里就不会有这个问题,因为就算IO口输出,也不会有这么大的电流出来。但是,在他的强制要求下,改了程序,把这个口设置为输入,果然电流降下来了!但是4S芯片有个毛病,就是输入口在休眠模式下会自带150uA的电流,为了进一步优化,我在初始化时把INT口设置为输入,传感器正常工作、休眠,在其休眠后,把INT口再改为输出,置低,另外要把这里的上拉电阻从10k改到100k,唤醒时再重新配置INT口为输入就行了。
总之,不断发现新的问题,然后一个个解决,再碰到原来的问题,换一种方式解决,终于到今天,符合理论上的计算功耗。下一步,优化优化程序,同步问题、传输距离再解决下就可以了。