用ADC转换芯片AD7794对电池电压进行检测,设计在一定时间间隔内对电池电压
进行采样,转换完毕后关闭AD7794进入power-down模式,节省功耗。
程序结构如下
.......
// enable analog power supply
ADCActiveMode(); //AD7794初始化设置
CheckBattery();
......
ADCLowPowerMode(); //设置AD7794寄存器进入低功耗模式
.......
在常温下程序运行一切正常,AD7794的驱动程序经过几十万次测试无一读写错误,
电池电压检测也正确。将整个系统放入高低温老化箱作温度实验(0-60度)。随着温
度降低,故障出现了:在CheckBattery()这个函数中电池电压检测严重小于实际值,
而该函数中转换不止一次,怎么会连续几次都出错呢?温度升高后,检测一切又正常
了。于是怀疑是否是受电池内阻变化影响,或温度对器件影响所致。测量电池电压,
采样信号,系统晶体一切正常。又怀疑是否因温度降低,而导致了AD7794的通道切换
及建立时间的变化,将AD7794初始化设置后延长了时间,程序为:
.......
// enable analog power supply
ADCActiveMode(); //AD7794初始化设置
Delay_ms(20);
CheckBattery();
......
ADCLowPowerMode(); //设置AD7794寄存器进入低功耗模式
.......
但结果一样,无论怎样增加延时值,都无法根除故障。以前做过其他一些ADC的驱动
程序,又想到是否需要对ADC的DATA REGISTER进行一次读操作。程序又改为:
.......
// enable analog power supply
ADCActiveMode(); //AD7794初始化设置
AD7794Read(); //读AD7794 DATA REGISTER
CheckBattery();
......
ADCLowPowerMode(); //设置AD7794寄存器进入低功耗模式
.......
再做温度试验,一切正常了!反复高低温试验都未在出现转换出错的故障!
用户377235 2013-8-24 09:44
用户429601 2012-10-11 17:02