STC8H系列单片机ADC基础知识入门教程(四)

目录

一、A/D转换过程

二、ADC转换流程图

三、采样定理

四、ADC基本参数

4.1、分辨率

4.2、采样速率

4.3、转换时间

4.4、量程 

4.5、最低有效位

五、静态参数

5.1、微分非线性

5.2、积分非线性

六、逐次逼近型模数转换器

七、ADC常用分压电路

八、示例代码


一、A/D转换过程

ADC即模数转换器,用来将模拟信号转换成数字信号。转换过程如下:

采样:采样就是把随时间连续变化的模拟量转换为时间离散的模拟量;

保持:将采样电路取得的模拟信号转化为数字信号都 需要一定的时间 (不能做到实时转换),为了给后续的量化编码过程提供一个稳定值,每次取得的模拟信号必须通过保持电路保持一段时间。通过一个电容器就可以存储输入的模拟电压。

量化:模拟信号通过ADC转换成数字信号的过程称为量化

编码:按照一定的规律,把量化后的值用二进制数字表示;

二、ADC转换流程图

三、采样定理

采样定理又称奈奎斯特采样定理,即当采样频率fs大于采样信号最高频率fmax的两倍时,采样后的数字信号完整地保留了原始信号中的信息。在A/D转换中,模拟波形在固定点采样,然后将被采样的值转换成二进制数值。由于转换需要花费一定的时间,因此在一定时间周期内,模拟信号的采样数是有限的。比如说:某ADC在1ms内完成一次转换,那么在一秒钟内它能进行1000次转换。也就是说,在一秒钟的间隔内,可以将1000个不同的模拟值转换成数字形式,采样频率为1kHz。

Nyquist采样定理解释了采样率fs和所测信号频率之间的关系。 阐述了采样率fs必须大于被测信号感兴趣最高频率分量的两倍,该频率通常被称为奈奎斯特频率fN。用公式显示就是fs>2*fN。

1、假设采样率 fs = fN

如下图所示,因为采样率和被测信号频率一致,我们可以理解为周期是一致的,那就是相当于一个正弦波信号一个周期内只能采样到1个点。那么对于一个周期函数而言,每个周期内采样的都是同一个位置的点,最后ADC采样完成并重建出来的信号波形就是不变的一条直线,明显得不到我们想要的结果。

2、假设采样率 fs =(4/3)* fN

那么我们稍微提高一点采样率,变为4/3倍,可以发现在不同周期内,有的时候可以采样到1个点,有的时候可以采样到2个点,但是最后重建出来的线条还是失真严重,因此也不满足。

3、假设采样率 fs = 2*fN

当我们采样率达到2倍信号频率的时候,假如说我们运气比较好正好第一个采样点就在正弦波的波峰或者波谷,那么在被测信号的每个周期内,正好可以分别采样到幅度最大和最小的两个点,最后把所有的点线性连接起来后可以得到三角波,经过适当地函数处理可以恢复成原来的正弦波。

但是我们也发现了问题,如果每个周期采样的两个点并不是位于波峰或者波谷的话,采样过来的信号同样会失真。因此2倍这个数字只是理论值,也是可以通过数学推导推出来的,但是我们实际在使用的时候,比如说用100M带宽的示波器去检测信号,工程上面一般是缩小5倍,也就是最高能检测20M的信号而不失真,一个周期内至少采样被测信号5个点。

四、ADC基本参数

4.1、分辨率

分辨率是ADC最基本的参数,可以用每个模拟信号值的位数(二进制)来表示。一个4位ADC能表示16个不同的模拟信号值,因为2的4次方是16。位数越多,转换的精度越高,分辨率也就越大。注意,ADC的精度并不仅仅取决于分辨率。ADC分辨率越高更重要是说明采样动态范围广。

在最大输入电压一定时,位数越多,量化单位越小,误差越小,分辨率越高。

4.2、采样速率

采样速率就是我们最高的ADC采样频率,也就是数据手册中的Maximum Sampling Frequency。ADC的采样速率必须小于转换速率,常用单位是 Ksps 和 Msps,表示每秒 采样千/百万次(kilo / Million Samples per Second)。

注意上一章节讲的奈奎斯特采样定理,ADC采样频率必须高于被测信号频率的两倍!

4.3、转换时间

转换时间的导数就是转换速率。因为将一个模拟信号值转换成一个数字量不能瞬间完成,这个过程需要一定的时间。下图说明了转化时间的基本概念,在t0时刻进行模拟电压值的转换,但是直到t1时刻才完成转换。

4.4、量程 

作为测量元件,量程一定是需要关注的,指的是允许输入的模拟信号范围。超过量程会导致信号测量不准确,严重的会损坏芯片。

4.5、最低有效位

最低有效位又称最小分辨率,要记住这个参数的英文LSB,满量程值除以ADC的分辨率就是LSB,很好理解,就比如说一个4位的ADC,数字量最高可以表示2的4次方也就是16,满量程5V,那么最小的分辨率就是5/16=0.31V,也就是说这个ADC最小辨认的电压是0.31V,可以用数字量0001表示0.31V这个模拟量。LSB越小表明ADC的精度越高。下图纵坐标是数字量编码,横坐标每一个台阶就代表LSB。

五、静态参数

ADC静态参数包括微分非线性和积分非线性。

5.1、微分非线性

ADC中任意两个相邻码之间所测得的变化值与理想的1 LSB变化值之间的差异。 用通俗易懂的语言来描述这个DNL特性就是说,理论上我们用数字量的台阶去给模拟电压值进行编码的时候,台阶的宽度应该都是一样的,也就是说当ADC输入和输出是呈线性关系的时候,每次模拟输入按照最小分辨率LSB进行步进的时候,数字输出就增加1,也就是0000变成0001的一个过程。但是由于DNL,导致可能当数字输出由1000变成1001的时候,模拟值的变化却不是按照LSB进行增长的,可能会多一点也可能少一点。

5.2、积分非线性

积分大多跟累计误差有关,根据实际的模拟出一条曲线。INL是指ADC器件在所有的数值点上对应的模拟值和真实值之间误差最大的那一点的误差值,表示测量值的绝对误差。下图绿色虚线所示用的表示理想曲线方法是两点法,就是把头和尾用直线连起来。红色虚线是根据实际的情况模拟出的曲线,找到两个曲线纵坐标差距最大的点。

六、逐次逼近型模数转换器

逐次逼近寄存器型(SAR)模数转换器(ADC)占据着大部分的中等至高分辨率ADC市场。SAR ADC的采样速率最高可达5Msps,分辨率为8位至18位。SAR架构允许高性能、低功耗ADC采用小尺寸封装,适合对尺寸要求严格的系统。

尽管实现SAR ADC的方式千差万别,但其基本结构非常简单(见图1)。模拟输入电压(VIN)由采样/保持电路保持。为实现二进制搜索算法,N位寄存器首先设置在中间刻度(即:100… .00,MSB设置为1)。这样,DAC输出(VDAC)被设为VREF/2,VREF是提供给ADC的基准电压。然后,比较判断VIN是小于还是大于VDAC。如果VIN大于VDAC,则比较器输出逻辑高电平或1,N位寄存器的MSB保持为1。相反,如果VIN小于VDAC,则比较器输出逻辑低电平,N位寄存器的MSB清0。随后,SAR控制逻辑移至下一位,并将该位设置为高电平,进行下一次比较。这个过程一直持续到LSB。上述操作结束后,也就完成了转换,N位转换结果储存在寄存器内。

七、ADC常用分压电路

电池电压常用两个电阻分压到合理电压范围内,通过单片机ADC引脚采集输入电压,这种电路是成本最低,检测方式最简单的。一般选择电阻较大,这样功耗较低,需注意ADC的输入阻抗影响,电容的作用就是存储电荷的作用,当然也有滤波,和上面那个电阻组成低通滤波,ADC的采样和转化其实就是ADC内部电容的快速充放电,快速充放电的时候,这个电容可以快速给ADC补给电荷,否则ADC的采样值会有振荡,因为电阻分压的响应速度很慢。电容容值大小可根据实际采集情况选择,一般是PF级别就够了。

根据电阻分压公式,U_adc= U_bat* R5/(R2+R5),其中U_bat为电池电压,U_adc为单片机采集到的经过分压电阻后的电压,根据如上公式可以得到电池电压。

八、示例代码

void main(void)
{
	unsigned char i = 0;
	
	P1M1 = 0X08; P1M0 = 0X00; //设置P13为ADC口
	P_SW2 |= 0x80;
    ADCTIM = 0x3f; //设置ADC内部时序
    P_SW2 &= 0x7f;
    ADCCFG = 0x0f; //设置ADC时钟为系统时钟/2/16
    ADC_CONTR = 0x83; //使能ADC模块,使能ADC3

	while(1)
	{
		ADC_CONTR |= 0x40; //启动AD转换
		_nop_();
        _nop_();
        while (!(ADC_CONTR & 0x20)); //查询ADC完成标志
        ADC_CONTR &= ~0x20; //清完成标志
        adc3 = ADC_RES; //读取ADC结果
		adc_buf[0] = adc3/1000; //获取adc3变量的千位
		adc_buf[1] = adc3%1000/100; //获取adc3变量的百位
		adc_buf[2] = adc3%100/10; //获取adc3变量的十位
		adc_buf[3] = adc3%10; //获取adc3变量的个位
    }
}

作者:芯航路IOT

物联沃分享整理
物联沃-IOTWORD物联网 » STC8H系列单片机ADC基础知识入门教程(四)

发表评论