飞思卡尔AD问题的交流
0赞
近期在做关于AD采集实际电压的问题。本来按照书上的例子写了试试,发现很多不一样的地方。更有甚者,欺人太甚!!
当然啦,在挣扎之后发现良多。所以希望和大家共享下
。希望大神勿喷,指点指点。AD的其他的问题稍作修改即可,最气人的是下面这个例子:void AD_Init(void) {
ATD0CTL2=0Xc0;
ATD0CTL3=0X20;//关键地方
ATD0CTL4=0X13;
ATD0CTL5=0Xa0;
ATD0DIEN=0X00;
}
这里的ATD0CTL3=0X20;书上的解释它是定义列队长度、和结果寄存器的先进先出和处于冻结模式的寄存器。
给这个寄存器做如上定义:队列长度为4,其他默认。(最高位未标明!)结果发现,AD值不准确。采集到的值严重超过量程。(至今未解,于此求教大神指点。)
但是把该寄存器做如下定义:
ATD0CTL3=0X80;居然有用,疑似巧合,特意将ATD0CTL3=0X00;发现结果仍出错。让群友发来的数据手册上依然未标明最高位。不知是资源不足导致的后果还是其他,如是前者,希望各位童鞋本着开源精神能共享资源。
其次查到的关于AD精准测量的其他事例很具有实际意义,特和大家共享:
误差是这样的:
如果基准是2.45-2.55V,分压1:14.
当被测电压为30V,分压点位2V(不考虑电阻误差),基准无误差,最小分辨率:2/4096 * 2.5 * 15 = 0.0183V
当被测电压为30V,分压点位2V(不考虑电阻误差),基准有误差,最小分辨率:2/4096 * 2.45 * 15 = 0.0179V
两者偏差: 0.000366V
如果考虑进电阻1%误差:
分压点电压理论2V,最大最小1.963V,最大2.0367V。
单单考虑电阻的误差
2.5/1024 * 15 - 2.5/1024 * (13860/1010 + 1) = 0.00068V
将AD基准和电阻误差叠加的最大误差:
2.55/1024 * (13860/1010 + 1) = 0.03666V
2.55/1024 * (13860/990 + 1) = 0.03725V
2.55/1024 * (14140/1010 + 1) = 0.03735V
2.55/1024 * (14140/990 + 1) = 0.03806V
正常误差值:2.5/1024 * 15 = 0.0366V
误差在考虑电阻1%精度和基准0.05偏差的情况下,AD结果偏差0.002以内,这样来说远小于0.03(我的要求)。如此推算不是12位AD就可以了吗
当然这个是理想化
