ADC采样时内部的采样电容会充电,这时有个额个的充电电流流过R15,导致R15分压增加,结果就是ADC读出来的数偏小。外部加电容只适用于低采样速率的情况,采样频率高了这种方法也会失效。外面加个高输入阻抗的运放作个缓冲就很有必要了。 |
楼上正解。 一般采样会有一个充电过程,最好在信号和A/D间加入缓冲。你同事用电容是预充电,靠这个电容供给A/D信号。 |
---|
| 很多时候我们都以为ADC的高阻抗输入的,工作电流应该几近没有,
但实际是当ADC打开采样的那一小段时间,电流是很大的,给内部采样电容充电。楼主可以试下在连续高密度采样下系统的工作电流是多少。
你的同事加了个电容,一是可以稳住信号,二是AD采样时可提供相应的电流。
如果没有电容,你开启采样时那么大的电阻电流很受限制的。 | | —- |
理论上确实是阻抗引起的。MCU的ADC一般输入阻抗在几十K左右,这是由ADC性质决定的(应该是TH电路的输入阻抗)。所以并个小电容可以提供几个us的TH时间参数。 |
2.如何提高转换精度
模拟电源(VDDA)和电压参考(VREF)
有的单片机ADC模块会引出单独的电源引脚和电压参考引脚,最好用LDO给这些引脚供电,或者用磁珠和滤波电容把这部分电源从数字部分隔离出来。
输入信号的输出阻抗
下图是ADC采样简化等效电路。ADC采样和保持电路的等效输入电阻电容Radc,和Cadc,手册中都会给出。在采样期间,开关SW会接通外部的信号输入电路,给采样电容Cadc充电至和输入信号相等(接近),之后SW断开,ADC对采样电容上的电压进行转换。如果采样时间过短,或者输入信号的输出阻抗过大,将导致采样电压不准。在信号源输出阻抗过高时,可以考虑增加一级运放。
高频串扰
如果与模拟输入引脚靠近的IO上有高频翻转的信号,或者PCB上有与输入信号长距离的平行走线,串扰将干扰输入信号。应避免ADC引脚临近信号高频翻转。在ADC输入布线和临近的走线之间用地线隔离开也可以避免ADC精度下降。
过采样(Oversampling)
如果采样频率为fs,那么对于fs/2以内的信号频率既可以获得完整信息。过采样是用远高于所需的采样频率去采样,这样噪声就会均摊在整个采样频带内。我们用数字滤波器可以滤除有用信号频带之外的噪声,从而使频带内的信噪比提高,获得更高的分辨率。对多次转换结果进行平均也可以提高结果的精度。
过采样(Oversampling)
如果采样频率为fs,那么对于fs/2以内的信号频率既可以获得完整信息。过采样是用远高于所需的采样频率去采样,这样噪声就会均摊在整个采样频带内。我们用数字滤波器可以滤除有用信号频带之外的噪声,从而使频带内的信噪比提高,获得更高的分辨率。对多次转换结果进行平均也可以提高结果的精度。
参考资料: ADI: Data Converter Introduction ADI: MT-001 TUTORIAL Taking the Mystery out of the Infamous Formula, “SNR = 6.02N + 1.76dB,” and Why You Should Care ST: AN1636 UNDERSTANDING AND MINIMISING ADC CONVERSION ERRORS ST: AN2834 Application note How to get the best ADC accuracy in STM32 microcontrollers NXP: How to Increase the Analog-to-Digital Converter Accuracy in an Application NXP: Cookbook for SAR ADC Measurements
- AD的输入阻抗精度 如果AD的输入阻抗5K,精度要求是0.1,那么就要求分压电阻在5Ω以下,如果AD的输入阻抗15K,精度要求是1,那么就要求分压电阻在150Ω以下
- 源阻抗是会造成误差的
- 一般电阻分压即可,看AD的输入电流有多大这可能照成分压电阻过大造成的误差,但如果分压电阻过小也有可能由于源驱动能力有限而使测量偏小,如果要求较高加一级跟随器比较好;如果源阻抗较高要加一级放大直接按2:1缩小信号的幅度就可以了
- 如果AD的输入阻抗足够高,简单地用两个电阻分压,如果AD输入阻抗比较低,两个电阻分压后加跟随器
- 大概概括以下ADC输入阻抗问题:
- SAR型ADC: 这种ADC内阻都很大,一般500K以上,即使阻抗小的ADC阻抗也是固定的,所以即使只要被测源内阻稳定只是相当于电阻分压可以被校正
- 开关电容型入TLC2543之类,要求很低的输入阻抗用于对内部采样电容快速充电;这时最好有低阻源否则会引起误差。实在不行可以外部并联一个很大的电容,每次被取样后大电容的电压下降不多;因此并联外部大电容后开关电容输入可以等效为一个纯阻性阻抗,可以被校正
- flash型直接比较型,大多高速ADC都是直接比较型也称闪速型,flash一般都是低阻抗的,要求低阻源。对外表现纯阻性可以和运放直接连接
- 双积分型,大多数输入阻抗极高几乎不用考虑阻抗问题
- sigma-delta(σ-Δ)型,这时目前精度最高的ADC类型,也是最难伺候的一种ADC,重点讲一下要注意的问题:
- a. 内部缓冲器的使用,σ-Δ型adc属于开关电容型,输入必须有低阻源,所以为了简化外部设计,内部大多集成有缓冲器,缓冲器打开则对外呈现高阻,使用方便,但要注意了,缓冲器实际是个运放,那么必然会有上下轨的限制,大多数缓冲器都是下轨50mV,上轨AVCC-1.5V;这种应用中共模输入范围大大的缩小,而且不能测到0V;一定要特别小心一般用在电桥测量中,因为共模范围都在1/2VCC附近;不必过分担心缓冲器的零漂,通过内部校零寄存器很容易校正的
- b. 输入阻抗问题,σ-Δ型adc属于开关电容型,输入在低阻源上工作良好,但有时候为了抑制共模或抑制奈奎斯特频率外的信号,需要在输入端加RC滤波器,一般datasheet上会给一张最大允许输入阻抗和C和Gain的关系表;这时很奇怪的一个特性是C越大则最大输入阻抗必须随之减小,刚开始可能很多人不解,其实只要想一下电容充电特性就很容易明白的。还有一个折衷的办法是把C取很大,远大于几百万倍的采样电容Cs(一般420pf),则输入等效纯电阻,分压误差可以用gain offset寄存器校正
- c. 运放千万不能和σ-Δ型ADC直连,前面说过开关电容输入电路,电路周期用采样电容从输入端采样,每次和运放并联的时候会呈现低阻和运放输出阻抗分压照成电压下降,负反馈立即开始校正,但运放压摆率SlewRate有限不能立刻响应,于是造成瞬间电压跌落,取样接近完毕时相当于高阻运放输出电压上升,但压摆率使运放来不及校正结果是过冲。而这时整数最关键的采样结束时刻,所以运放和SD型ADC连接必须通过一个电阻和电容连接形成低通,而RC的关系又必须服从5.c里面所述规则
- d. 差分输入和双极性的问题,SD型ADC都可以差分输入,都支持双极性输入,但这里的双极性并不是指可以测负压,而是vi-vi两脚之间的电压。假设vi接AGND,那么负压测量范围不会超过-0.3v;正确的接法是vivi-共模都在-0.3VCC之间差分输入。一个典型的例子是电桥,另一个例子是vi接vref,vi对vi-的电压允许双极性输入
- sigma-delta(σ-Δ)型,这时目前精度最高的ADC类型,也是最难伺候的一种ADC,重点讲一下要注意的问题:
1:SAR型ADC 这种ADC内阻都很大,一般500K以上。即使阻抗小的ADC,阻抗也是固定的。所以即使只要被测源内阻稳定,只是相当于电阻分压,可以被校正。
2:开关电容型,如TLC2543之类。他要求很低的输入阻抗用于对内部采样电容快速充电。这时最好有低阻源,否则会引起误差。实在不行,可以外部并联一很大的电容,每次被取样后,大电容的电压下降不多。因此并联外部大电容后,开关电容输入可以等效为一个纯阻性阻抗,可以被校正。
3:FLASH.html”>FLASH型(直接比较型)。大多高速ADC都是直接比较型,也称闪速型(FLASH),一般都是低阻抗的。要求低阻源。对外表现纯阻性,可以和运放直接连接
4:双积分型大多输入阻抗极高,几乎不用考虑阻抗问题
5:Sigma-Delta型。这是目前精度最高的ADC类型,也是最难伺候的一种ADC。重点讲一下要注意的问题:
a.内部缓冲器的使用。SigmaDelta型ADC属于开关电容型输入,必须有低阻源。所以为了简化外部设计,内部大多集成有缓冲器。缓冲器打开,则对外呈现高阻,使用方便。但要注意了,缓冲器实际是个运放。那么必然有上下轨的限制。大多数缓冲器都是下轨50mV,上轨AVCC-1.5V。在这种应用中,共莫输入范围大大的缩小,而且不能到测0V。一定要特别小心!一般用在电桥测量中,因为共模范围都在1/2VCC附近。不必过分担心缓冲器的零票,通过内部校零寄存器很容易校正的。
b.输入阻抗问题。SigmaDelta型ADC属于开关电容型输入,在低阻源上工作良好。但有时候为了抑制共模或抑制乃奎斯特频率外的信号,需要在输入端加RC滤波器,一般DATASHEET上会给一张最大允许输入阻抗和C和Gain的关系表。这时很奇怪的一个特性是,C越大,则最大输入阻抗必须随之减小!刚开始可能很多人不解,其实只要想一下电容充电特性久很容易明白的。还有一个折衷的办法是,把C取很大,远大于几百万倍的采样电容Cs(一般4~20PF),则输入等效纯电阻,分压误差可以用GainOffset寄存器校正。
c.运放千万不能和SigmaDelta型ADC直连!前面说过,开关电容输入电路电路周期用采样电容从输入端采样,每次和运放并联的时候,会呈现低阻,和运放输出阻抗分压,造成电压下降,负反馈立刻开始校正,但运放压摆率(SlewRate)有限,不能立刻响应。于是造成瞬间电压跌落,取样接近完毕时,相当于高阻,运放输出电压上升,但压摆率使运放来不及校正,结果是过冲。而这时正是最关键的采样结束时刻。
所以,运放和SD型ADC连接,必须通过一个电阻和电容连接(接成低通)。而RC的关系又必须服从5.c里面所述规则。
d.差分输入和双极性的问题。SD型ADC都可以差分输入,都支持双极性输入。但这里的双极性并不是指可以测负压,而是Vi+ Vi-两脚之间的电压。假设Vi-接AGND,那么负压测量范围不会超过-0.3V。正确的接法是Vi+ Vi- 共模都在-0.3~VCC之间差分输入。一个典型的例子是电桥。另一个例子是Vi-接Vref,Vi+对Vi-的电压允许双极性输入 ———————————————— 版权声明:本文为CSDN博主「wzk456」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/wzk456/article/details/27596235
- 单片机AD采集测量范围0~2.56V,现在要测量一个24V~30V的锂电池电压,打算分压,然后AD采集,请问分压电阻如何选择呢?试了好几组电阻值,测出的电压值都比实际电压偏高好多差到0.4~0.5V了,不知该如何选择?程序没有问题,单片机也没有问题,使用精准电压源芯片提供2.5V电压,AD采集值计算结果很准,只是用电阻分压AD采集值就会差很多。还有就是如果是和电阻精度有关,为什么用万用表测出来也和理论计算值接近,唯独AD采集结果偏高好多?
- 首先,分压电阻的取值必须合理,阻值太小会过热,取值太大会有严重的温漂,要计算一下取值的功耗。其次,电阻的材质必须用高精度的金属膜电阻。最后,务必注意AD的输入电阻参数,如果输入电阻不够大,就会构成明显的分压,这时需要用运放加一级缓冲。
- 万用表的输入阻抗是10M左右
单片机自带的ADC一般十几K左右
如果分压电阻阻值太大可以加一个放大器做缓冲就可以了 - 数字万用表的内阻较高,对信号源内阻要求不高。AD的输入阻抗一般较低,对信号源内阻的要求较高,且在采样时才接入电路,而万用表测得是均值,无法测得瞬态值,所以无法表现出差异。考虑到AD输入阻抗不足的影响,要么用软件做校正,要么加运放缓冲,看你对精度的要求了。如果只是电池欠电检测,那么要求的精度不高,软件校正一下即可。如果是用于充电管理,那么显然对精度有较高要求,同时又是批量产品的话,那么加运放缓冲为佳。
再补充点内容:
现在的MCU都是CMOS工艺的,采样时AD对外等效为一个RC回路,加上成本的制约,片内AD类型被限制,故而一般MCU片内AD的等效输入阻抗往往不够高。对于分压型测量高压,不管被测目标的内阻多小,分压电阻的引入就构成了信号源内阻。前帖说过,分压电阻取值过低会带来额外的功耗,甚至令采样电阻发热,对低功耗设计也不利。所以,分压电阻不能一味减小,应在合理取值后,再通过其它手段解决精度问题。对于软件校正,除了采用校正算法外,还要加长采样时间设置(如果该AD支持的话),这样对采样电压的稳定建立有好处,精度自然可以改善,而楼主的应用完全不在乎较长的采样时间。加运放缓冲,可以简单的解决问题,但要注意运放的选型,须用低压型轨到轨运放。前面说过,AD对外等效为一个RC回路,再加上有个采样率参数,如果电容充电未完成就进行采样,误差就会产生。而信号源内阻越大,电容的充电时间就会越长,故而在特定的采样率下,如果信号源内阻一旦不满足AD等效RC回路的充电完成时间要求,即信号源的内阻足够低,那么AD的等效输入阻抗还会随着信号源的内阻上升而下降,进一步劣化了精度问题。这就是为什么AD前往往需要加运放做缓冲的原理,也是为什么要在信号源内阻较高时尽量延长采样时间的原因。**
- 电池内阻很低不假,但AD不是直接接到电池上的,通过电阻分压,那么分压电阻就构成了信号源内阻。有些MCU的AD输入阻抗很低,只有几十K欧,自己算算,这样的输入阻抗接入电阻分压网络,如果分压电阻取值较高会如何?
多大的AD输入阻抗算高?答案是至少M欧级,有些MCU甚至可以做到十M欧级。但普遍而言,因成本的限制,很多廉价MCU片内AD的输入阻抗着实不高。 - 事实上,有些MCU片内AD的输入阻抗只有几K。分压电阻的取值与AD输入阻抗在同一量级就会引起很大误差,小学算数就能解,即便小一个数量级,那也要看要求的转换精度,对于1LBS的精度而言,还是差远了。正是因为很多AD的输入阻抗不够大的问题,加缓冲驱动在这个时候都是必要的
- AD输入阻抗高不高,不仅跟万用表比(数字表的实质也是AD),绝对值也能讲。前面都说了,M欧级的才算大,这是跟常见信号源内阻比较的结果,几十K欧的输入阻抗跟几K的信号源内阻比都太小了,已经影响了测量结果,何况还有几K欧的输入阻抗呢
- 分压电阻未必能降的很低,功耗必须考虑,尤其是电池供电设备。再说,功耗跟使用成本相关。
- 运放本身当然不是随意加了就提高了精度,而是降低了信号源内阻可以使AD的精度提高。
- 为什么会偏高呢?应该是偏低啊,ADC时引脚有输入阻抗,它去测量电阻分压时就是并联,
整体电阻减少,分得到的电压应该偏小才是。
回答下这个问题吧:
“可是为什么万用表测量结果和采集值差那么多呢?如果有分压啥的,
那万用变测量的电压值难道不该是已经分完压的吗?可实际万用变测量值和理论的电阻分压值几乎一致。”
那是你R1 R2取值问题,不能说明万用表阻抗不影响电阻分压。
第1组:R2=1.2k,R1=100;
R2太小基本上不会影响分压,要知道万用表阻抗可是M级的,
用它去并联个100的电阻,并联电阻基本上也是100,
所以它的影响可以忽略。
第2组:R1=11k,R2=1k;
R2还是太小,和第1组情况一样。
第3组:R1=4.7m,R2=390k;
R2的大小已经可以影响万用表并联的电阻了,但是R1太大了,
R1的电阻可是占了电源电压的92%以上啊。
你可以试一下R1=390k,R2=780k;
我试过,用万用表分别测试R1、R2,然后在测试电源电压,发现R1电压加上R2电压小于电源电压。
这就是测试R1时和万用表阻抗并联降低了电阻,测试的电压也就会比R1真实的电压小。
测试R2也一样,所以R1电压加上R2电压小于电源电压。
我赞同用软件的方式修正。就是先通过测试把单片机ADC引脚的阻抗计算出来,
然后用并联串联分压公式修正结果。 - 对IO可配置型MCU,为稳妥起见,都是要先将IO配置成高阻输入态
- 很多低端带AD的MCU不支持IO类型配置,但就AD而言(包括但不限于MCU内置AD),输入阻抗是必须考虑的,等效RC回路和采样率的影响很大
- 缓冲用运放未必一定要轨到轨,具体由其供电范围和要求的输出范围决定。同MCU同电源的话,那确实需要。如果前级线性度好,缓冲可以省略,或者采用曲线拟合的办法来修正。至于说运放的其它参数,诸如压摆率、输入失调系数等,要看信号的频率、精度要求、输入幅值范围等,都是常规的运放选型原则。电压测试算法,这个同样要看具体情况,不存在什么普适的好算法,不同应用要求不同,适用不同。
- 电阻分压大家都非常了解,不用多说。比如如何从一个12V的电压得到6V的电压,两个分压电阻相等即可,不管是1Ω还是1M理论上都是可以的。但是,如果我们要将这个分压得到的电阻给AD端口采样,恐怕就不是那么随意了。R1取多少合适?R2取多少合适?R3需不需要?需要的话取多大合适?(当然还有滤波,这里先不提了。电压跟随的问题也暂不考虑,因为一加基本就解决了 没有讨论意义了)希望大家多多指教,更希望权威人士给大家讲讲课。不胜感激
| 由于大多ADC工作过程中需要吸收一定的电流(内部采用开关电容结构,等效输入阻抗较小);R3的后端最好增加一级电压跟随器。 | | —- |
ADC有 电压源和电流源两种的,其中电流源的R3电阻会引起电压检测值失真,所以肯定是越小越好,最好不用。电压源的不存在这个问题,但是如楼上各位所说,电容采样的时候难免会抽一点点电流,如果分压电阻过大的话,也会有失真,一般可以加电容或者buffer。 |
---|
分压电阻不能太小,否则耗电大。
也不能太大,要远小于ADC的输入漏电流导致的误差。
当然,电阻右边对地并联一个电容是必须的。
普通的ADC输入,直流阻抗是很高的,也就是平时基本没有输入电流。
但是采样瞬间交流阻抗比较低,可能是1K的量级,所以并联一个电容就可以了。
R1, R2的主要目的是衰减输入信号,对输入信号分压,R3与ADC的输入阻抗一起对输入信号再次分压,若R3后端连接一个电容到地,则R3与这个电容形成一阶低通抗混滤波。R1和R2的取值最好使其分压不怎么受后级的R3和ADC的输入阻抗(要查DATASHEET)影响,当然太小会太耗电,且对前级的负担加大;R3最好比ADC的输入阻抗小很多,这样不会影响直流精度,抗婚滤波的截至频率是最高采样率的1/2. 若ADC转换后由软件来校准的话,前面的通过取值达到的简化计算造成的误差都是可以补偿的。 |
---|
同样是AD,也有不同的设计,有些里面已经带了跟随,那电阻就看你的电路需求,一般来说电阻太大太小都不利于做比例分压,因为这些电阻精确度不高。
AD里面没有内置跟随的,那你就要看AD的转换方式,是积分式的还是其他方式的,不同的方式要求驱动电流不一样,建议是加跟随。
你这个ADC输入模型,如果采样直流或者低速的信号,明显是高阻的,除了漏电流是不确定的,和芯片工艺有关,其它就是一个RC网络(直流阻抗很大的),只要外部有电容,能提供取样瞬间的充电电流,瞬间电压不下降就可以了。这些MCU,我一向是RC分压加滤波电容,精度很好的。 |
---|
风之牧 发表于 2014-7-10 18:52
请问为什么说它直流阻抗很大?这个我不是太理解,希望您能指点一下
不考虑漏电流,内部就是:
引线等效电阻,小于250欧姆
采样开关电阻,小于3K
采样保持电容,4.4PF
当采样开关闭合,以上3个器件串联,RC网络,电容这么小,基本是高阻,如果是直流,更是高阻了。
当采样开关断开,输入是开路的高阻。
就是输入阻抗的问题,输入阻抗越大对分压电路的影响越小。输入阻抗就相当于到地的那个分压电阻上并联了一个电阻,具体假设下,如分压电阻两个都是10K,AD的输入阻抗也是10K的话,这个时候的分压后的电压就是不是1/2了,而是1/3了,如果这个换个1M的并联,那对分压的电压影响就非常小了,用运放电压跟随就有这效果。 |
---|
R1和R2的取值遵循的原则:一是不能超过R1和R2的额定功率值,二是在保证不超过额定功率值的情况下尽可能小,因为电阻太大热噪声就大,这些热噪声会影响信噪比的。 RR3是必不可少的,ADC有内部的缓冲级,这个电阻限流保护ADC缓冲级。取值根据你滤波器的截止频率和电阻热噪声考虑。 |
---|
- 输入电容。一般ADC内部结构如下图所示,输入电容C用于储存输入信号。但是这个电容会跟输入的滤波电容分压,从而影响输入采样的精度。但一般经过计算,这个输入电容引起的误差非常小,可以忽略不计。(电容分压影响计算更加详细的讲解在硬件三人行视频课程():史上最全模电教程,第1部ADC信号链课程,《低速模数混合电路设计入门视频教程》)
- 输入漏电流。如下图所示,ADC在上电后,在输入口上存在漏电流。漏电流作用于输入的串联电阻RFT1,这样就会在电阻上产生压降,从而使得采样精度受到影响。这里的电阻较小,产生的误差只有10uV,试想如果电阻有10K级别,那么这里产生的压降就是mV级,对精度的影响就很大了。