矿石收音机论坛

 找回密码
 加入会员

QQ登录

只需一步,快速开始

搜索
楼主: 闻太师

熟悉ADC的朋友帮看一下

[复制链接]
     
发表于 2018-6-5 11:07:43 | 显示全部楼层
闻太师 发表于 2018-6-5 07:54
再请教个基准源精度的问题:
一个n位的adc,要想达到n位精度,是否意味着基准源的精度需要高于1/2^n。换 ...

做AD转换,对基准源的要求是稳定,不能变来变去。至于准确度(你说的精度),对转换结果的影响是线性的。通俗点说,一个标称2V的基准源,实际可以是2.1V,不准没关系,你能测量出准确值就行。当然,可以用一个准确度非常高的基准源,比如恒温基准芯片,这样可以省去事先测量的步骤。

INL指的是误差,这个误差可以通过实测矫正。不同的电压段这个误差也不一样,一般的应用,在程序里做分段矫正就可以了。只要你的矫正工作做的足够细致,一个具有较大INL的AD芯片,也能做到较高的准确度。

评分

1

查看全部评分

回复 支持 反对

使用道具 举报

     
 楼主| 发表于 2018-6-5 11:25:31 来自手机 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

     
发表于 2018-6-5 12:49:09 | 显示全部楼层
16楼已经告诉您了,要说准确度,不要说精度;或者不确定度也可以。

要想达到n位准确度,要看您对准确度的要求是什么。一般来说,温度对准确度的影响,位数越多影响越大,于是可以设(U/(2^n))/Temp.;U的单位是伏,Temp.的单位是摄氏度。这是一个温度系数的指标,假如您希望在一个较宽的温度范围内仅变化一个字,那么分母Temp.还得乘以这个范围的总数。

得到希望的指标值以后,就可以决定应采用什么样的基准,以满足您采样的要求。

评分

1

查看全部评分

回复 支持 反对

使用道具 举报

     
发表于 2018-6-5 12:56:05 | 显示全部楼层
闻太师 发表于 2018-6-4 22:04
虽然暂时还没搞明白,还是谢谢你。

INL 是 Integral non linearity 的缩写,并非你理解的“最大误差...”

INL为4LSB意味着这个ADC的最大误差为4LSB,也就是采集到的数据的最低两位没有意义。那这个ADC的精度就是10位

这个理解是错误的。

一个理想的 ADC,其输出(code)和输入(通常是电压 V)之间应该是一次函数关系,也就是线性关系,即函数 fADC(Vin) 应当是 fOut = a*Vin+b

但实际上的 ADC 因为工艺和材料原因,不会非常满足上述关系,比如我的 Voltgen 中用的某颗 24 位 ADC,其输入和输出测试结果如下:
cr10742.png

显然,它更满足 fOut = a*Vin^2+b*Vin+c 这样的关系
cr10740.png

那如果用你的尺子做荔枝:

好比一把尺子精度只能到厘米,最小刻度却是毫米,有什么必要呢?”

然而实际上是这样,这把尺子的毫米刻度不是均匀的,从尺子头部(不管哪一头)开始的刻度比较稀 --- 也就是大于 1 毫米,然后这些刻度慢慢变密,也就是说越接近尺子的中部这些刻度之间越窄,逐渐逐渐的小于 1 毫米了。当然,这个变化是非常小的 --- 以我上面的测试看来,该 ADC 的这种变化小于十万分之一。

那么问题来了,这个 ADC 的刻度稀密变化导致的误差已经接近十万分之一,可是它给出的刻度超过千万分之一(这是一个 24 位的 ADC),那么这个一千万分之一的刻度有没有意义呢?有,比如你的尺子,虽然从毫米角度看这些刻度不够准确,但:

1、每一个刻度都是在尺子长度变化方向上单调的,也就是说,尺子刻度上的 3.2 厘米,一定比 3.1 厘米距离 0 更长 --- 虽然不一定长 0.1 厘米,但一定更长对吧?那么起码这个尺子用来对比两个线段谁更长,哪怕这两个线段之间的长度差只有 1 毫米也能对比出来。但如果它的刻度只有 1 厘米还能吗?不能

2、如果我们知道刻度稀密变化存在一种规律,那么可以设法纠正这种变化,使得它更准确,比如通过上面的测量我知道这个 ADC 的刻度稀密变化是一种接近 ax^2+bx+c 的关系,那就用它抵消这个变化就可以了。经过一定算法拟合后,此 ADC 的测量结果误差小于千万分之五,也就是说,我们可以用于精确测量百万分之一了(0~10):
cr10741.png

评分

1

查看全部评分

回复 支持 反对

使用道具 举报

     
发表于 2018-6-5 13:09:52 | 显示全部楼层
闻太师 发表于 2018-6-5 11:25
本来想请教你结果你来了,真是及时雨。
我描述的不太准确,换一种问法:
要想达到n位精度,基准源的温 ...

首先你要给出温度范围,比如你的设备设计在 10~40 摄氏度下工作,或者设计在 -40 to +50 摄氏度下工作,那么对鸡肫温度系数的要求自然也不一样。

然后“达到n位精度”的说法也存在问题,或者说不能这样描述你的要求,再或者说,你希望 ADC 转换出来的结果,每一个 LSB 都是正确的?然而什么是“正确”?

比如假设你的 ADC 是 10bit,你用了一个 1.024V 鸡肫,你认为你的每一个 LSB 都是 1mV...

那么,如果基准电压真值是 1.024001V,假设 ADC 是完美的,则每一个 LSB 实际上是 0.0010000009V,这样“正确”吗?

那么如果基准电压真值是 1.028V,假设 ADC 是完美的,则每一个 LSB 实际上是 0.001004V,这样“错误”了吗?

温度系数的影响也是一样的,假设该 1.024V 鸡肫温度系数 50ppm/°C,那么从 -20 摄氏度闻度变化到 +60 摄氏度,它就会变化 4mV,有问题吗?

评分

1

查看全部评分

回复 支持 反对

使用道具 举报

     
 楼主| 发表于 2018-6-5 14:38:13 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

     
发表于 2018-6-5 15:28:20 | 显示全部楼层
本帖最后由 bg1trk 于 2018-6-5 15:50 编辑
闻太师 发表于 2018-6-5 11:25
本来想请教你结果你来了,真是及时雨。
我描述的不太准确,换一种问法:
要想达到n位精度,基准源的温 ...


楼上两位朋友说的很详细了,您可作为参照。

总之就是一个意思,任何器件都不是理想器件,你的基准电压会漂移,你的AD结果也不是线性的。
基准电压这块主要是温飘,您是做电源不是做仪表,要求没有高到非要用高级基准源的程度。可以选内置基准源的ADC芯片,这样前面担心的那些问题就有厂家给你背锅了,成本也低。
ADC输出矫正的问题,说白了也简单,就是对AD值进行二次处理,使它更接近于理论值。比如说12位ADC芯片、基准电压4.095V,输入1V时输出应该是1000,而你实际得到的值是1003,那么就应该把测量值减小3后再送出去,大概就是这么个意思。
实际的矫正手段,你可以实测大量数据做出误差曲线,比如说得到的是像楼上的那条二次函数曲线,数学表达式就是“OUT=a*V^2+b*V+c”,根据你的实测数据确定a、b、c的值,每个AD值都经过这个公式矫正再送出。
实际常用的还有分段矫正,比如您分析采集回来的数据,发线在某个电压段之内误差差不多都是一个固定值,则在这段电压之内把AD值加减这个固定值再送出。再比如在另一个电压段您发现实际值都是测量值的0.9倍,则把测量值乘0.9再送出去。这样分段加加减减乘乘除除,也能得到相对准确的AD值。

评分

1

查看全部评分

回复 支持 反对

使用道具 举报

     
发表于 2018-6-5 15:40:19 | 显示全部楼层
19楼说的已经非常详细了:
1,一般ADC满足Vcode= G*Vin+b,G为增益,b为偏差(offset);
软件校准时, 先测试一个小个VIN(比如接近10%),再测试一个大的VIN(比如接近80%),然后计算出G,b保存.
此办法可以满足大部分普通应用的ADC校准
2,二次多项式校准,Vcode=ax^2+bx+c
软件校准时, 先测试VIN(比如接近10%),再测试VIN(比如接近20%),再测试VIN(比如接近30%)...再测试VIN(比如接近90%), 最后计算出来二次多项式a,b,c的值保存.
此办法可以满足精确测量的ADC校准.甚至如果计算能力足够强可以使用三次,五次多项式.

评分

2

查看全部评分

回复 支持 反对

使用道具 举报

     
 楼主| 发表于 2018-6-6 07:16:31 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

     
发表于 2018-6-6 09:22:51 | 显示全部楼层
闻太师 发表于 2018-6-6 07:16
谢谢您的精彩回复,好多年不动数学了,有个疑问不知道算不算问题:
假定按二次相矫正,因为有三个未知量a ...

注意19#说的:2、如果我们知道刻度稀密变化存在一种规律,那么可以设法纠正这种变化,使得它更准确,比如通过上面的测量我知道这个 ADC 的刻度稀密变化是一种接近 ax^2+bx+c 的关系,那就用它抵消这个变化就可以了。经过一定算法拟合后,此 ADC 的测量结果误差小于千万分之五,也就是说,我们可以用于精确测量百万分之一了(0~10).

是拟合,不是直接计算出a,b,c的值,拟合是已知各点,从整体上靠近它们,常用的算法是:最小二乘法.

评分

1

查看全部评分

回复 支持 反对

使用道具 举报

     
 楼主| 发表于 2018-6-6 09:24:28 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

     
发表于 2018-6-6 09:47:23 | 显示全部楼层
贴个我常用的校准算法,基本满足一般场合的应用.
u16 ADC_XL=819;        // 低端实际值
u16 ADC_XH=3277;   // 高端实际值
void adccal1(u8 ch)
{
filter();
ADC_YL=After_filter[ch];//低端读取值
DB_printf("ADC_YL%d=%d\r\n",ch,ADC_YL);
}
void adccal2(u8 ch)
{
filter();
ADC_YH=After_filter[ch];//高端读取值
ADC_MA[ch]=(ADC_XH-ADC_XL)*1000/(ADC_YH-ADC_YL); // 扩大1000 倍
ADC_B[ch]=(ADC_YL*ADC_MA[ch])/1000-ADC_XL;
saveadccal();
DB_printf("ADC_YH%d=%d\r\n",ch,ADC_YH);
DB_printf("adc_ma%d=%d b=%d\r\n",ch,ADC_MA[ch],ADC_B[ch]);
}

ADC_MA 为增益,ADC_B为偏差.

评分

1

查看全部评分

回复 支持 反对

使用道具 举报

     
发表于 2018-6-8 12:10:07 | 显示全部楼层
楼主这帖子长知识啊!在和大虾们一问一答中看得我单片机小白是五体投地!
回复 支持 反对

使用道具 举报

     
 楼主| 发表于 2018-6-8 13:49:42 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

     
发表于 2018-6-11 15:56:38 | 显示全部楼层
闻太师 发表于 2018-6-8 13:49
这几位回帖的都是难得一见的高手,我敢说这几个问题很多玩单片机人都说不清楚。对我来说这也是最有价值的 ...


在用的ADC分段矫正函数:


/*********************************************************************************
*   函 数 名: ProcessVoltage_DAC()
*   功能说明: AD值转换为实际电压并分段矫正,用于显示
*   形    参:tmpin
*   返 回 值: 电压值
*   日    期: 2018-5-26
*********************************************************************************/
float ProcessVoltage_ADC(float tmpin)
{
    float Temp;
    Temp = tmpin * 3235* Gin / 4095;            //Vref=3.235V      Gin: 分压比

    /****************下面是分段矫正***************/
    if(Temp<=0.5) Temp = 0.9908 * Temp+0.24;   
    else if(Temp>0.5 && Temp<3.5) Temp = 0.991 * Temp + 0.25;
    else if(Temp<9) Temp = 1.014 * Temp + 0.35;
    else if(Temp<16) Temp = 1.0013 * Temp + 0.2114;
    else if(Temp<26) Temp = 0.990012 * Temp + 0.2167;
    else  Temp = 0.99889 * Temp + 0.3587;
    if(Temp<0) Temp=0;

    return (abs(Temp));                           
}


形参tmpin为每5次转换后取中间值,再累加200次后的平均值。

评分

1

查看全部评分

回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 加入会员

本版积分规则

小黑屋|手机版|矿石收音机 ( 蒙ICP备05000029号-1 )

蒙公网安备 15040402000005号

GMT+8, 2025-4-28 07:51

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表