分辨率不等于精度(转)

本文深入探讨了AD转换器中精度与分辨率的区别,通过塑料尺的比喻直观解释了两者之间的概念差异。以AD7416为例,详细说明了分辨率与测量精度之间的关系,并介绍了衡量精度的重要指标DNL和INL。最后,讨论了INL在决定ADC价格方面的重要性。

最近做了一块板子,当然考虑到元器件的选型了,由于指标中要求精度比较高,所以对于AD的选型很慎重。

很多人对于精度和分辨率的概念不清楚,这里我做一下总结,希望大家不要混淆。

我们搞电子开发的,经常跟“精度”与“分辨率”打交道,这个问题不是三言两语能搞得清楚的,在这里只作抛砖引玉了。

简单点说,“精度”是用来描述物理量的准确程度的,而“分辨率”是用来描述刻度划分的。从定义上看,这两个量应该是风马牛不相及的。(是不是有朋友感到愕然^_^)。很多卖传感器的JS就是利用这一点来糊弄人的了。简单做个比喻:有这么一把常见的塑料尺(中学生用的那种),它的量程是10厘米,上面有100个刻度,最小能读出1毫米的有效值。那么我们就说这把尺子的分辨率是1毫米,或者量程的1%;而它的实际精度就不得而知了(算是0.1毫米吧)。当我们用火来烤一下它,并且把它拉长一段,然后再考察一下它。我们不难发现,它还有有100个刻度,它的“分辨率”还是1毫米,跟原来一样!然而,您还会认为它的精度还是原来的0.1毫米么?(这个例子是引用网上的,个人觉得比喻的很形象!)

回到电子技术上,我们考察一个常用的数字温度传感器:AD7416。供应商只是大肆宣扬它有10位的AD,分辨率是1/1024。那么,很多人就会这么欣喜:哇塞,如果测量温度0-100摄氏度,100/1024……约等于0.098摄氏度!这么高的精度,足够用了。但是我们去浏览一下AD7416的数据手册,居然发现里面赫然写着:测量精度0.25摄氏度!所以说分辨率跟精度完全是两回事,在这个温度传感器里,只要你愿意,你甚至可以用一个14位的AD,获得1/16384的分辨率,但是测量值的精度还是0.25摄氏度^_^

所以很多朋友一谈到精度,马上就和分辨率联系起来了,包括有些项目负责人,只会在那里说:这个系统精度要求很高啊,你们AD的位数至少要多少多少啊……

其实,仔细浏览一下AD的数据手册,会发现跟精度有关的有两个很重要的指标:DNL和INL。似乎知道这两个指标的朋友并不多,所以在这里很有必要解释一下。

DNL:Differencial NonLiner——微分非线性度

INL:Interger NonLiner——积分非线性度(精度主要用这个值来表示)

他表示了ADC器件在所有的数值点上对应的模拟值,和真实值之间误差最大的那一点的误差值。也就是,输出数值偏离线性最大的距离。单位是LSB(即最低位所表示的量)。

当然,像有的AD如△—∑系列的AD,也用Linearity error 来表示精度。

为什么有的AD很贵,就是因为INL很低。分辨率同为12bit的两个ADC,一个INL=±3LSB,而一个做到了±1.5LSB,那么他们的价格可能相差一倍。

### 三、ADC分辨率精度的关系 ADC(模数换器)的**分辨率**和**精度**是两个密切相关但本质上同的概念。理解它们之间的关系对于设计和选择合适的ADC系统至关重要。 #### 1. 分辨率的定义及其影响 ADC的分辨率是指其能够分辨输入信号最小变化的能力,通常以位数表示。例如,一个12位ADC可以将模拟输入范围划分为4096(2^12)个离散级别。每个级别的大小等于满量程输入电压除以4096。在理想情况下,ADC的传输函数是一个阶梯状函数,每个台阶的宽度等于分辨率[^1]。 然而,高分辨率直接等同于高精度。即使ADC具有较高的分辨率,实际测量值的准确性仍然受到其他因素的影响,例如噪声、偏移误差、增益误差以及非线性误差等。 #### 2. 分辨率精度的间接影响 虽然分辨率本身决定精度,但它为实现更高的精度提供了基础。在更高分辨率的系统中(如16位或更高),理论上可以检测更小的信号变化。但在实际应用中,系统的整体噪声可能会掩盖这种高分辨率带来的优势。例如,在示波器中,如果模拟电路本身的精度没有提高,单纯追求更高分辨率的ADC是没有意义的[^3]。 此外,某些传感器(如温度传感器AD7416)可能提供10位或更高的ADC分辨率,但其实际测量精度可能仅为±0.25°C。这表明,即使使用更高分辨率的ADC,传感器的整体精度仍受限于其内部结构和环境因素[^4]。 #### 3. 精度的决定因素 ADC的精度仅取决于分辨率,还依赖于多个外部和内部因素: - **噪声**:任何电子系统都存在固有噪声,这会限制ADC的有效精度。 - **偏移误差和增益误差**:这些误差会导致ADC输出偏离理想值。 - **非线性误差**:包括积分非线性和微分非线性,影响ADC在整个输入范围内的精度一致性。 - **温度漂移和老化效应**:随着时间推移和环境变化,ADC的性能可能会发生变化。 #### 4. 实际应用中的权衡 在实际系统设计中,需要根据具体需求平衡分辨率精度。例如,在STM32微控制器中配置ADC时,可以通过设置`ADC_Resolution`参数来选择适当的分辨率(如12位)[^2]。然而,为了实现更高的测量精度,还需要优化外围电路、降低噪声,并进行校准处理。 --- ### 示例代码:STM32 ADC配置 以下是一个基于STM32的ADC初始化代码片段,展示了如何设置ADC的分辨率和其他关键参数: ```c ADC_InitTypeDef ADC_InitStructure; ADC_CommonInitTypeDef ADC_CommonInitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE); ADC_CommonInitStructure.ADC_Mode = ADC_Mode_Independent; ADC_CommonInitStructure.ADC_Prescaler = ADC_Prescaler_Div4; ADC_CommonInitStructure.ADC_DMAAccessMode = ADC_DMAAccessMode_Disabled; ADC_CommonInitStructure.ADC_TwoSamplingDelay = ADC_TwoSamplingDelay_5Cycles; ADC_CommonInit(&ADC_CommonInitStructure); ADC_InitStructure.ADC_Resolution = ADC_Resolution_12b; // 设置分辨率为12位 ADC_InitStructure.ADC_ScanConvMode = DISABLE; ADC_InitStructure.ADC_ContinuousConvMode = DISABLE; ADC_InitStructure.ADC_ExternalTrigConvEdge = ADC_ExternalTrigConvEdge_None; ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_T1_CC1; ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right; ADC_InitStructure.ADC_NbrOfConversion = 1; ADC_Init(ADC1, &ADC_InitStructure); ADC_RegularChannelConfig(ADC1, ADC_Channel_0, 1, ADC_SampleTime_3Cycles); ADC_Cmd(ADC1, ENABLE); ``` --- ### 结论 ADC的分辨率决定了它能够区分的最小信号变化,而精度则反映了测量值与真实值之间的一致性。高分辨率有助于提升潜在的测量能力,但实际精度受多种因素影响。因此,在设计ADC系统时,应综合考虑分辨率、噪声、误差源以及校准机制,以实现最优性能。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值