前面我们介绍的都是对数字信号的操作也就是 0 和 1 操作,本节我们就来讲解 如何检测外部模拟信号,因为我们使用的
STC89C5x
单片机内部不含
ADC
接口,所以需要外接一个
ADC
转换芯片将模拟信号转换成数字信号供单片机处理。我们开发板上集成了一个
ADC
模数转换电路,选用的
ADC
芯片是
12
位的
AD
芯片-
XPT2046
。本节要实现的功能是:通过
ADC
转换电路采集电位器电压值,将采集转换后的
AD
值通过数码管显示。
一、ADC介绍
我们知道 51
单片机系统内部运算时用的全部是数字量,即 0 和 1,因此对单片机系统而言,无法直接操作模拟量,必须将模拟量转换成数字量。所谓数字量,就是用一系列 0 和 1 组成的二进制代码表示某个信号大小的量。用数字量表示同一个模拟量时,数字位数可以多也可以少,位数越多则表示的精度越高,位数越少表示的精度就越低。
1.ADC简介
ADC
(analog to digital converter
)也称为模数转换器,是指一个将模拟信号转变为数字信号。单片机在采集模拟信号时,通常都需要在前端加上 A/D
芯片。
下面我们看下 ADC
的主要技术指标:
-
分辨率
ADC
的分辨率是指对于允许范围内的模拟信号,它能输出离散数字信号值的个数。这些信号值通常用二进制数来存储,因此,分辨率经常用比特作为单位,且这些离散值的个数是 2 的幂指数。
例如:12 位ADC
的分辨率就是 12 位,或者说分辨率为满刻度的1/(2^12)
。一个10V
满刻度的 12 位ADC
能分辨输入电压变化最小值是
10 V × 1 / ( 2 12 ) = 2.4 m V 10V×1/(2^{12})=2.4mV 10V×1/(212)=2.4mV -
转换误差
转换误差通常是以输出误差的最大值形式给出。它表示A/D
转换器实际输出的数字量和理论上的输出数字量之间的差别。常用最低有效位的倍数表示。例如给出相对误差≤±LSB/2,这就表明实际输出的数字量和理论上应得到的输出数字量之间的误差小于最低位的半个字。 -
转换速率
ADC
的转换速率是能够重复进行数据转换的速度,即每秒转换的次数。而完成一次A/D
转换所需的时间(包括稳定时间)则是转换速率的倒数。
2.ADC 转换原理
AD
转换器(ADC
)将模拟量转换为数字量通常要经过 4 个步骤:采样、保持、量化和编码。所谓采样即是将一个时间上连续变化的模拟量转换为时间上离散变化的模拟量。如下图所示:
将采样结果存储起来,直到下次采样,这个过程叫做保持。一般采样器和保持电路一起总称为采样保持电路。将采样电平归化为与之接近的离散数字电平,这个过程叫做量化。将量化后的结果按照一定数制形式表示就是编码。将采样电平(模拟值)转换为数字值时,主要有两类方法:直接比较型与间接比较型。
- 直接比较型:就是将输入模拟信号直接与标准的参考电压比较,从而得到数字量。常见的有并行
ADC
和逐次比较型ADC
。 - 间接比较型:输入模拟量不是直接与参考电压比较,而是将二者变为中间的某种物理量在进行比较,然后将比较所得的结果进行数字编码。常见的有双积分型
ADC
。
下面就以常用的逐次比较型 ADC
和双积分型 ADC
介绍其工作原理。
- 逐次逼近型 ADC
采用逐次逼近法的AD
转换器是有一个比较器、DA
转换器、缓冲寄存器和控制逻辑电路组成,如下图所示:
基本原理:从高位到低位逐次试探比较,就像用天平秤物体,从重到轻逐级增减砝码进行试探。
逐次逼近法的转换过程:初始化时将逐次逼近寄存器各位清零,转换开始时,先将逐次逼近寄存器最高位置 1,送入DA
转换器,经DA
转换后生成的模拟量送入比较器,称为U0
,与送入比较器的待转换的模拟量Ux
进行比较,若U0<Ux
,该位 1 被保留,否则被清除。然后再将逐次逼近寄存器次高位置 1,将寄存器中新的数字量送DA
转换器,输出的U0
再与Ux
比较,若U0<Ux
,该位 1 被保留,否则被清除。重复此过程,直至逼近寄存器最低位。转换结束后,将逐次逼近寄存器中的数字量送入缓冲寄存器,得到数字量的输出。逐次逼近的操作过程是在一个控制电路的控制下进行的。 - 双积分型 ADC
采用双积分法的AD
转换器由电子开关、积分器、比较器和控制逻辑等部件组成。如下图所示:
基本原理:将输入电压变换成与其平均值成正比的时间间隔,再把此时间间隔转换成数字量,属于间接转换。
双积分法AD
转换过程:先将开关接通待转换的模拟量Vi
,Vi
采样输入到积分器,积分器从零开始进行固定时间T
的正向积分,时间T
到后,开关再接通与Vi
极性相反的基准电压Vref
,将Vref
输入到积分器,进行反向积分,直到输出为0V
时停止积分。Vi
越大,积分器输出电压越大,反向积分时间也越长。计数器在反向积分时间内所计的数值,就是输入模拟电压Vi
所对应的数字量,实现了AD
转换。
二、XPT2046 芯片介绍
XPT2046
是一款 4 线制电阻式触摸屏控制器,内含 12 位分辨率 125KHz
转换速率逐步逼近型 A/D
转换器。XPT2046
支持从 1.5V
到 5.25V
的低电压I/O
接口。XPT2046
能通过执行两次 A/D
转换查出被按的屏幕位置,除此之外,还可以测量加在触摸屏上的压力。内部自带 2.5V
参考电压,可以作为辅助输入、温度测量和电池监测之用,电池监测的电压范围可以从 0V
到 6V
。XPT2046
片内集成有一个温度传感器。在 2.7V
的典型工作状态下,关闭参考电压,功耗可小于 0.75mW
。XPT2046
采用微小的封装形式:TSSOP-16
,QFN-16
和 VFBGA-48
。工作温度范围为-40℃~+85℃
。与 ADS7846
、TSC2046
、AK4182A
完全兼容。
-
主要特性
①工作电压范围为1.5V~5.25V
②支持1.5V~5.25V
的数字I/O
口
③内含2.5V
参考电压源
④电源电压测量(0V~6V
)
⑤内建结温测量功能
⑥触摸压力测量
⑦采用 3 线制SPI
通信接口
⑧具有自动省电功能 -
芯片管脚说明
XPT2046
是一种典型的逐次逼近型模数转换器(SAR ADC
),包含了采样/保持、模数转换、串口数据 输出等功能。同时芯片集成有一个2.5V
的内部参考电压源、温度检测电路,工作时使用外部时钟。XPT2046
可以单电源供电,电源电压范围为2.7V~5.5V
。参考电压值直接决定ADC
的输入范围,参考电压可以使用内部参考电压,也可以从外部直接输入1V~VCC
范围内的参考电压(要求外部参考电压源输出阻抗低)。X
、Y
、Z
、VBAT
、Temp
和AUX
模拟信号经过片内的控制寄存器选择后进入ADC
,ADC
可以配置为单端或差分模式。选择VBAT
、Temp
和