ADC介绍
51单片机系统内部运算时用的全部是数字量,即 0 和 1,因此对单片机系统而言,无法直接操作模拟量,必须将模拟量转换成数字量。所谓数字量,就是用一系列 0 和 1组成的二进制代码表示某个信号大小的量。用数字量表示同一个模拟量时,数字位数可以多也可以少,位数越多则表示的精度越高,位数越少表示的精度就越低。
ADC简介
ADC(analog to digital converter)也称为模数转换器,是指一个将模拟信号转变为数字信号。单片机在采集模拟信号时,通常都需要在前端加上A/D 芯片。
ADC的主要技术指标:
- 分辨率 : ADC 的分辨率是指对于允许范围内的模拟信号,它能输出离散数字信号值的个数。这些信号值通常用二进制数来存储,因此分辨率经常用比特作为单位,且这些离散值的个数是2的幂指数。例如:12位ADC的分辨率就是12位,或者说分辨率为满刻度的1/(2^12)。一个10V满刻度的12位ADC能分辨输入电压变化最小值是
- 转换误差 : 转换误差通常是以输出误差的最大值形式给出。它表示A/D转换器实际输出的数字量和理论上的输出数字量之间的差别。常用最低有效位的倍数表示。例如给出相对误差≤±LSB/2,这就表明实际输出的数字量和理论上应得到的输出数字量之间的误差小于最低位的半个字。
- 转换速率 : ADC 的转换速率是能够重复进行数据转换的速度,即每秒转换的次数。而完成一次A/D转换所需的时间(包括稳定时间),则是转换速率的倒数。
ADC转换原理
AD 转换器(ADC)将模拟量转换为数字量通常要经过4个步骤:采样、保持、量化和编码。所谓采样即是将一个时间上连续变化的模拟量转换为时间上离散变化的模拟量。如下图所示:
将采样结果存储起来,直到下次采样,这个过程叫做保持。一般采样器和保持电路一起总称为采样保持电路。将采样电平归化为与之接近的离散数字电平,这个过程叫做量化。将量化后的结果按照一定数制形式表示就是编码。 将采样电平(模拟值)转换为数字值时,主要有两类方法:
- 直接比较型 : 就是将输入模拟信号直接与标准的参考电压比较,从而得到数字量。常见的有并行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和AUX时应该配置为单端模式;作为触摸屏应用时,应该配置为差分模式,这可有效消除由于驱动开关的寄生电阻及外部的干扰带来的测量误差,提高转换精度。单端和差分模式输入配置如下图所示:
XPT2046 数据接口是串行接口,其典型工作时序如下图所示,图中展示的信号来自带有基本串行接口的单片机或数据信号处理器。处理器和转换器之间的的通信需要 8 个时钟周期,可采用 SPI、SSI 和Microwire 等同步串行接口。一次完整的转换需要 24 个串行同步时钟(DCLK)来完成。
前 8 个时钟用来通过DIN引脚输入控制字节。当转换器获取有关下一次转换的足够信息后,接着根据获得的信息设置输入多路选择器和参考源输入,并进入采样模式,如果需要,将启动触摸面板驱动器。3个多时钟周期后,控制字节设置完成,转换器进入转换状态。这时,输入采样-保持器进入保持状态,触摸面板驱动器停止工作(单端工作模式)。接着的 12 个时钟周期将完成真正的模数转换。如果是度量比率转换方式(SER/DFR=0),驱动器在转换过程中将一直工作,第 13 个时钟将输出转换结果的最后一位。剩下的 3 个多时钟周期将用来完成被转换器忽略的最后字节(DOUT置低)。
在对XPT2046 进行控制时,控制字节由 DIN 输入的控制字命令格式如下所示:
硬件设计
本实验使用到硬件资源如下:
- 动态数码管
- ADC模块
从上图中可以看出,该电路是独立的,XPT2046芯片的控制管脚接至J33端子上,XPT2046芯片的ADC输入转换通道分别接入了AD1电位器、NTC1热敏传感器、GR1光敏传感器,还有一个外接通道AIN3接在DAC模块的J52端子上供外部模拟信号检测。
软件设计
当前程序框架如下:
- 数码管显示功能
- ADC转换函数
- 主函数
当前开发板设备通道号如下:
- 电位器对应的采集通道命令:0X94
- 光敏电阻对应的采集通道命令:0XA4
- 热敏电阻对应的采集通道命令:0XD4
- 外部输入AIN3对应的采集通道命令:0XE4
1 |
|
1 |
|
1 |
|
相关头文件
1 |
|
1 |
|
1 |
|
电位器电压采集
1 | /************************************************************************************** |
光敏电阻AD采集
1 | /************************************************************************************** |
热敏电阻AD采集
1 | /************************************************************************************** |
外部信号电压采集
1 | /************************************************************************************** |