标题: STC8/15系列单片机ADC阻抗匹配问题 [打印本页]

作者: cjjdemon    时间: 2021-2-16 17:20
标题: STC8/15系列单片机ADC阻抗匹配问题
大家新年好,请教各位一个问题。
我最近用STC15W408AS单片机,检测10-15V电压,利用电阻串联分压方式进行,采用4个68K电阻串联,ADC IO采最后一个电阻分压,理论上ADC采得电压应该是在2.5-3.75V 之间。
实际我在测试过程中发现,当被检电压在14V以上(检测值在3.55V以上)时,ADC检测到的电压非常接近万用测的真实值(误差小于1个字),当电压低于14V时,ADC检测到的电压会有明显偏离,电压越低时偏离越明显,电压<12.8V的时候,万用表检测电压已经是3.2V,但ADC检测到的电压还有3.45V。

已经排除68K电阻本身差异,方法是,我不接单片机IO,直接用万用表测量,10-15V范围内,最后一个电阻分压基本是总压的1/4,而且线性度非常好。

自己思考了一下,应该是ADC功能需将IO配置为高阻模式,与分压电阻并联后,影响了分压电阻的整体电阻?那么我应该选多少的阻值是合适的呢,同时要兼顾功耗,太小的阻值功耗太大。或者说STC系列的ADC内部阻抗是多少,外部输入阻抗怎么匹配?

采用电压跟随器的方案就不用说了,就谈电阻分压的方案。


作者: wulin    时间: 2021-2-17 07:11
楼主遇到的这个问题与ADC端口的内部输入阻抗基本无关。ADC端口配置为高阻模式其输入阻抗不小于5M,其影响微乎其微。排除外界因素导致,最有可能是特殊功能寄存器设置不当或AD结果算法不当。当然VCC不稳也是重要因素。
以0通道ADC为例相关寄存器设置
P1M1 = 0x01;//设置P1.0高阻:0000 0001 ADC输入高阻
P1M0 = 0x00;//设置P1.0高阻:0000 0000 ADC输入高阻
P1ASF= 0x01;//设置P1的0通道端口作为模拟输入

十位ADC结果换算成10进制(4舍5入)
毫伏=(参考电压*十位ADC结果*10000/1024+5)/10
强制转换数据类型(32位)运算,得到(4舍5入)mV
ADC_V=(VCC_V*(long)ADC_RESX*10000/1024+5)/10;
因1/4分压,需放大4倍等于实际电压
ADC_V=(VCC_V*(long)ADC_RESX*10000/1024+5)/10*4;
作者: wulin    时间: 2021-2-17 10:25
还有一种算法:取4次ADC之和再按12位ADC4096计算,既相当于平均值滤波,也相当于12位ADC,结果直接代表实际电压,不必再*4。
作者: cjjdemon    时间: 2021-2-17 14:30
wulin 发表于 2021-2-17 07:11
楼主遇到的这个问题与ADC端口的内部输入阻抗基本无关。ADC端口配置为高阻模式其输入阻抗不小于5M,其影响微 ...

我压根就没在MCU里去做这个计算,我直接把ADC采到的数据用串口传出来,自己用公式算的。电压高的时候是对的,精度很好,低的时候就不对,越低偏离越大。
如果高阻状态是5M以上,那么确实跟外部输入阻抗不相关,我再看看是怎么回事。
作者: hhh402    时间: 2021-2-18 12:48
ADC对电源要求很高,你直接USB取电精度肯定是低呀。另外你的分压电阻4个68k太大,你换成5k试试效果应该好一点,至于功耗大就看你的取舍了,想要精度高用STC8单片机,ADC电源是独立的,12位,精度比STC15要高很多。
作者: macadam    时间: 2022-11-25 09:15
学习下,我也是发现采样来的电压与实际偏差有点大,没打到原因
作者: yl1171390799    时间: 2023-2-7 00:18
macadam 发表于 2022-11-25 09:15
学习下,我也是发现采样来的电压与实际偏差有点大,没打到原因

我也遇到类似问题:单片机(STC8)AD 12位采样时,小于2.5v时,采样还算精准,当电压大于2.5后,AD误差比较大,大于30mv(在一段电压范围内,采样值大,在另一段范围内,采样值小),所以想问问,什么原因呀

作者: aking991    时间: 2023-2-7 08:43
我建议你用900K+100K方式分压,这样大小电压都合适,这样配置可测到50V,我所有项目都是这样配置电阻的,大小电压都能测到,基准源也是用这个芯片的内部基准源计算的,很稳定的,如果可以也可以采用中值滤波法去计算会更稳定的
作者: coody_sz    时间: 2023-2-7 10:13
STC15W408AS的ADC整个量程范围精度大约0.5%,就是最大误差大约5个字,并且出现在中间以上部分。
楼主的测量范围是20V则在10V以上最大误差约0.1V,但是楼主数3.2V时还有0.25V的误差,我觉得要查一下应用电路。ADC输入口要对地接一个10nF~100nF电容。
作者: wufa1986    时间: 2023-2-7 10:38
批量一般可以做到3%精度,大于这个就要检查硬件或软件,软件采样太快,频繁切换也可能有这个问题
作者: chinazlf123    时间: 2023-7-23 23:35
STCAD迹513.6KС齵迹
作者: cnfloatleaf    时间: 2023-7-24 01:47
https://blog.csdn.net/shawn_shao/article/details/108508131
推荐你看这篇文章,我想单片机的ADC的原理都是一样的,肯定要考虑ADC的输入阻抗问题,还是应该接一个跟随器,从根本上避免阻抗不匹配的影响。
作者: wufa1986    时间: 2023-7-24 09:51
应该不会这么离谱,当在ADC端口并电容,就可以忽略ADC输入阻抗了,你的电路是不是没有电容
作者: chinazlf123    时间: 2023-7-24 10:06
输入阻抗513.6K
作者: chinazlf123    时间: 2023-7-24 10:06
有时候可能还要更小

作者: 1600277881    时间: 2023-7-24 16:20
有转换通道?还是只采样同一通道, 采样频率是多少?
如果说, 只采样一个通道, 采样频率很低, 在ADC口并个104电容可以解决你的问题。
作者: liyonghua111    时间: 2023-8-2 14:56
根据您的描述,问题可能是由于单片机的IO配置为高阻模式时,与分压电阻并联导致整体电阻变化。这可能会影响到ADC的测量准确性。

针对这个问题,您可以尝试以下方法来改进:

选择合适的分压电阻值:选择较大的分压电阻值可以减少功耗,但同时也会增加电阻本身的误差。您可以尝试使用更小的电阻值,例如10K或20K,以减少电阻的影响。

使用运放进行缓冲:在ADC输入引脚之前添加一个运放作为缓冲,以提供更高的输入阻抗和稳定的信号。这样可以避免分压电阻对整体电阻产生影响,并提高测量准确性。

考虑ADC的参考电压:确保ADC的参考电压稳定且准确,以保证测量的准确性。您可以使用外部参考电压源,如稳压器或者精密参考电压芯片,来提供稳定的参考电压。

此外,建议您参考STC15W408AS的数据手册,查找关于ADC输入阻抗和工作范围的具体信息。如果问题仍然存在,您可以咨询STC15W408AS的技术支持或者其他专业人士,以获取更具体的帮助和建议
作者: ly1972001    时间: 2023-8-2 15:07
先排除问题,把阻值降下来,看精度。




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1