用STC8A8K64D4的ADC功能误差很大,且外部电压越小误差越大。外部分压电阻是20K和10K,ADC并在10K端,同时时序控制寄存从默认值改成最大值,结果变化不大。不同外部电压输入和ADC得到的结果:
表头 | 表头 | 表头 | 表头 | 表头 |
---|---|---|---|---|
输入电压(V) | 4 | 6 | 9 | 12 |
ADC结果 | 2.27 | 4.55 | 7.99 | 11.4 |
哪位同志知道这是为什么吗?
参考电压稳定吗?ADC采集的电压用万用量的电压和采集计算后的电压相差多少?
关于AD和ADC的区别:一般说ADC指的就是模数转换器,不会有歧义。而说到AD,除了可以表示模数转换外(少数文档使用),还可以表示单片机访问外部扩展存储器的地址总线和数据总线合在一起的简称。举个例子,STC8A8K64S4A12系列单片机的P0口有复用功能是AD0AD7,AD0AD7除了表示访问外部扩展存储器的地址总线A0A7外,还可以表示访问外部扩展存储器的地址总线低8位D0D7。关键要看下手册描述,注意推敲语境,一般在STC的手册中AD指的就是地址总线和数据总线合在一起的简称,ADC指的才是模数转换器,所以看芯片原理图时AD0和ADC0是完全不同的含义。
☆注:STC8A8K64S4A12系列单片机各个引脚的功能都有表示,可以看到AD0AD7,还有ADC0ADC7,含义完全不同,须知。
STC8A8K64S4A12系列单片机集成的是15路12位逐次逼近型ADC,速度可达80万次/秒。该系列单片机设计有专用的ADC电源脚和电压基准引脚,需注意基准引脚电压要小于ADC电源引脚电压。下表介绍下ADC通道关联的引脚分布情况。
☆注:STC8A8K64S4A12系列单片机每一路ADC都有且只有一个IO端口供选择使用。
■ STC8A8K64S4A12开发板ADC硬件电路
STC8A8K64S4A12开发板上设计了2.5V基准电压电路和ADC采集电路,如下图:
ADC | 功能描述 | 对应IO口 | 说明 |
---|---|---|---|
P0.6 | ADC采集通道 | P0.6 | 非独立GPIO |
☆注:独立GPIO表示开发板没有其他的电路使用这个GPIO。P0.6还可能会被用于DAC实验中,所以是非独立GPIO口。
■ STC8A8K64S4A12系列单片机ADC内部结构图
STC8A8K64S4A12系列单片机ADC由多路选择开关、比较器、逐次比较寄存器、12位DAC、转换结果寄存器以及控制寄存器构成。
STC8A8K64S4A12系列单片机ADC是逐次比较型ADC,逐次比较型ADC由一个比较器和DA转换器构成,通过逐次比较逻辑,从最高位开始,依次对每一输入电压与内置DA转换器输出进行比较,经过多次比较,使转换所得的数字量逐次逼近输入模拟量对应值。逐次比较型AD转换具有速度高、功耗低的优点。
☆注:从上图ADC内部结构图可知DA转换器是12位的,所以了解了ADC逐次比较的原理后不难得出这样的结论:正是这个内部的12位DA转换器精度决定了ADC精度也是12位的。
ADC内部结构图的多路选择开关是由ADC控制寄存器ADC_CONTR的B0~B3位控制,该寄存器B6位和B7位分别控制ADC转换启动和ADC电源,该寄存器B5位是转换结束标志位(需软件清零),如下图所示。
针对该问题,我建议从以下几个方面入手解决:
首先,从电路设计方面,需要确保ADC的输入端电压稳定,减小外部干扰信号的影响。可以采用模拟信号线性化处理,设计滤波器,使用信号放大器、仪表放大器和PGA等元器件来滤除噪声、增加信号幅度、提高精度。
另外,针对这个具体问题,可以考虑增加采样保持器来保证采样精度。选择合适的保持电容,确保漏电阻抗较大。因为在低频信号采样过程中,如果A/D转换速度低于输入信号的频率,则需要使用采样保持器。
其次,从程序设计方面,需要对ADC进行校准和调试。校准可以包括零点偏移和增益误差,调试可以采用实验室标准信号源对ADC进行定标和曲线拟合等方法。同时,还需注意ADC时序控制寄存器的设置,确保其能满足要求。
最后,需要对测量数据进行分析。结合具体数据进行异常检测,识别出数据中的错误信息,然后使用合适的方法进行数据处理和分析。例如,可以使用matlab等工具进行曲线拟合,计算出误差值,并针对误差进行修正。
总之,针对该问题,需要从电路设计、程序设计和数据分析三个方面入手,综合采取多种措施来提高ADC的精度。具体措施和方法需要根据实际情况进行选择和调整。