问题描述:
工程和品质部反应现场安装的水表有水量跳变的情况,就是基表上显示0吨,远程抄读水量的时候电子读数是4400、4000、4440等错误的数字,在排除了传感器板本身晶圆损坏的情况下,发现还有几只表总是存在电子读数错误,而且这种错误发生在上电瞬间的第一次读数的时候,在上电完成后再去读取数据又都是正确的。
问题解决:
本来打算带起示波器到现场去抓取波形进行分析,想了一下比较麻烦,先在实验室进行模拟现场测试看能不能重新问题。先用一个可调电阻,逐渐给单片机加电到3.3v,这个过程中不断采样输出水量,看这个过程中输出水量是否正确。
在逐步加电的过程中果然发现电子读数错误,将0上报为4400等数据,但打压稳定到3.3v后水量就正常了。经过分析发现是ms721在上电的过程中输出的3.3v相对于TI的721和NCN5150慢一些,而采集器端下发的读水量命令在3.3v电压还没有稳定的时候就被单片机解析,然后单片机就去采样读取水量,这个时候应用3.3v不稳定,而采样的AD值是按照3.3v进行计算的,所以计算出来的AD值是错误的。比如正常情况下是3.3v对应255,而在2.6v的时候去采样,那么程序中计算时就是2.6v对应255,所以AD值错误,而根据AD值计算出来的水量当然就是错误的了。
找到问题的原因后,可以从多个方面来解决问题:采集器端稍微做一下延时,等上电稳定后在进行水量的读取;表具端也可以通过调整ms721的配置参数,加大总线电流,让721的STC电容快速充电,加快3.3v稳定电压的输出。
ADC采样的进一步分析:
目前我司批量使用的单片机有LPC1111、LPC824、KL03P24M等,我比较了一下这三种单片机的ADC采样,分别如下:
LPC1111/103关于ADC部分的说明,ADC的参考电压是Vdd,当单片机工作的时候Vdd电压是多少ADC的参考电压就是多少。
实际使用中ADC电路也没有做特别的设计,电路如下:
LPC824对于ADC的描述如下:
可以看到lpc824对ADC采样参考电压跟lpc1111有不同,明确说明了采样参考电压需要配置引脚VREFP和VREFN,实际使用中电路原理图如下:
直接使用Vdd作为ADC可以使计算简化,也可以使外围ADC电路比较简单。KL03P24M不但可以使用VDD作为ADC参考电压,它还可以使用1.2V作为参考电压,在使用1.2V作为ADC比较电压的时候PTB2管脚需要通过一个电容连接到地,1.2V就对应满电压,如果是8bitADC就是255,如果是12bitADC就对应4096。
上图是一个使用KL03P24M 1.2V电压作为ADC采样的参考电压,根据分压原理R9上获得的电压是BAT电压的四分之一,所以要真实反映BAT电压在程序中需要对ADC获得的电压乘以4。