用单片机+ADC0804实现电压的AD转换AD采样,LCD1602显示电压

一、A/D转换器简介

集成A/D转换器品种繁多,选用时应综合考虑各种因素选取集成芯片。一般逐次比较型A/D转换器用的比较多,ADC0804就是这类单片集成A/D转换器。ADC0804是一款8位、单通道、低价格A/D转换器。主要特点是:模数转换时间大约100us;方便TTL或CMOS标准接口。工作电压:+5V,属于连续渐进式(Successive ApproximaTIon Method)的A/D转换器。

单片机内集成的A/D转换,一般都有相应的特殊功能寄存器来设置A/D的使能标志,参考电压,转换频率,通道选择,A/D输入口的属性(模拟量输入还是普通的I/O口),启动,停止控制等。有了这些寄存器,使得我们控制单片机的模拟量采集变得非常方便。

A/D转换的基本原理是:将参考电平按最大的转换值量化,再利用输入模拟电平与参考电平的比例来求得输入电平的测量值(V测=V参*(AD量化值/AD转换的最大值))。有些MCU A/D转换的参考电平可以选择由一个外部引脚输入,这样使得用户可以对A/D转换进行更好的控制。值得注意的一点就是A/D转换的输入电平必须比参考电平低或相等,不然测试的结果就会有很大的偏差。

二、ADC0804芯片的介绍

主要特点

(1)模数转换时间大约100us;

(2)方便TTL或CMOS标准接口;可以满足差分电压输入;

(3)具有参考电压输入端;

(4)内含时钟发生器;

(5)单电源工作时(0~5)V输入电压范围是0~5V;

(6)不需要调零。

1、A/D转换概念
即模数转换,输入模拟量(比如电压信号),输出一个与模拟量对应的数字量(常为二进制形式)。例如参考电压VREF为5V,采用8位的模数转换器时,当输入电压为0V时,输出的数字量为0000 0000,当输入的电压为5V时,输出的数字量为1111 1111.当输入的电压从0V到5V变化时,输出量从0000 0000到1111 1111变化。这样每一个输入电压值对应一个输出数字量,即实现模数转换。

2、分辨率概念
分辨率是指使输出数字量变化1时的输入模拟量,也就是使输出数字量变化一个相邻数码所需输入模拟量的变化值。
分辨率与A/D转换器的位数有确定的关系,可以表示成FS/2^n。FS表示满量程输入值,n为A/D转换器的位数。例如对于5V的满量程,采用4位的ADC时,5V/16=0.3125V(也就是说当输入的电压值每增加0.3125V,输出的数字量增加1);采用8位的ADC时,分辨率为5V/256=19.5mV(也就是说当输入的电压每增加19.5mV,则输出的数字量增加1);当采用12位的ADC时,分辨率则为5V/4096=1.22mv(也就是说当输入的电压每增加1.22mV,则输出的数字量增加1)。显然位数越多,分辨率越高。

3、ADC0804引脚功能

CS:芯片片选信号,低电平有效。即CS = 0时,该芯片才能正常工作,高电平时芯片不工作。在外接多个ADC0804芯片时,该信号可以作为选择地址使用,通过不同的地址信号使用不同的ADC0804芯片,从而可以实现多个ADC通道的分时复用。

WR:启动ADC0804进行ADC采样,该信号低电平有效,即WR信号由低电平变成高电平时,触发一次ADC转换。

RD:低电平有效,即RD=0时,ADC0804把转换完成的数据加载到DB口,可以通过数据端口DB0~DB7读出本次的采样结果。

VIN(-)和VIN(+):模拟电压输入端,单边输入时模拟电压输入接VIN(+)端,VIN(-)端接地。双边输入时VIN(+)、VIN(-)分别接模拟电压信号的正端和负端。当输入的模拟电压信号存在“零点漂移电压”是,可在VIN(-)接一等值的零点补偿电压,变化时自动从VIN(+)中减去这一电压。

VREF/2:参考电压接入引脚,该引脚可外接电压也可悬空,若外接电压,则ADC的参考电压为该外接电压的两倍,如不接,则VREF与VCC公用电源电压,此时ADC电压即为电源电压VCC的值。

CLKIN:外电路提供时钟脉冲输入端,外接RC振荡电路产生模数转换器所需的时钟信号,时钟频率CLK=1/1.1RC,一般要求频率范围100KHz~1460KHz。

CLKR:内部时钟发生器外接电阻端,与 CLKIN 端配合可由芯片自身产生时钟脉冲,其频率为 1/1.1RC。

AGND和DGND:分别接模拟地和数字地。

INTR:转换结束输出信号,低电平有效,当一次A/D转换完成后,将引起INTR=0,实际应用时,该引脚应与微处理器的外部中断输入引脚相连(如51单片机的INT0,INT1脚),当产生INTR信号有效时,还需等待RD=0才能正确读出A/D转换结果,若ADC0804单独使用,则可以将INTR引脚悬空。

DB0~DB7:输出A/D转换后的8位二进制结果。

ADC0804 的两模拟信号输出端,该输出端具有三态特性,能与微机总线相接,用以接受单极性、双极性和差摸输入信号。

4、ADC0804的时序
https://wenku.baidu.com/view/823c5913964bcf84b9d57b78.html(长按二维码进入)

ADC0804 转换器的工作时序如下图 所示。

AD转换器的设计接口电路图:

图中,ADC0804 数据输出线与AT89C51 的数据总线直接相连,AT89C51 的RD 、
WR 和INT1直接连到ADC0804,由于用P1.0 线来产生片选信号,故无需外加
地址译码器。当AT89C51 向ADC0804 发WR (启动转换)、RD (读取结果)信号时,
只要虚拟一个系统不占用的数据存储器地址即可。

工作原理如下:

ADC0804 是属于逐次逼近式(Successive Approximation Method)A/D 转换器,这类型的 A/D 转换器除了转换速度快(几十至几百 us)、分辨率高外,还有价钱便宜的优点,普遍被应用于微电脑的接口设计上。

以输出 8 位的 ADC0804 动作来说明“连续渐进式 A/D 转换器”的转换原理,动作步骤如下表示(原则上先从左侧最高位寻找起)。

第一次寻找结果:10000000 (若假设值≤输入值,则寻找位=假设位=1)
第二次寻找结果:11000000 (若假设值≤输入值,则寻找位=假设位=1)
第三次寻找结果:11000000 (若假设值>输入值,则寻找位=该假设位=0)
第四次寻找结果:11010000 (若假设值≤输入值,则寻找位=假设位=1)
第五次寻找结果:11010000 (若假设值>输入值,则寻找位=该假设位=0)
第六次寻找结果:11010100 (若假设值≤输入值,则寻找位=假设位=1)
第七次寻找结果:11010110 (若假设值≤输入值,则寻找位=假设位=1)
第八次寻找结果:11010110 (若假设值>输入值,则寻找位=该假设位=0)

这样使用二分法的寻找方式,8 位的 A/D 转换器只要 8 次寻找,12 位的 A/D 转换器只要 12 次寻找,就能完成转换的动作,其中的输入值代表模拟输入电压 Vin。

内部结构

 

内部结构

 

三、ADC0804 作用与用途如下:

Vin(+)、Vin(-):两个模拟信号输入端,可以接收单极性、双极性和差模输入信号。

DB0-DB7:具有三态特性数字信号输出端,输出结果为八位二进制结果。

CLKIN:时钟信号输入端。
CLKR:内部时钟发生器的外接电阻端,与 CLK 端配合可由芯片自身产生时钟脉冲,其频率计算方式是:fck=1/(1.1RC)。

ADC0801~0805 片内有时钟电路,只要在外
部“CLKI”和“CLKR”两端外接一对电阻电容即可产生A/D 转换所要求的时钟,其
振荡频率为fCLK≈1/1.1RC。其典型应用参数为:R=10KΩ,C=150PF,fCLK≈640KHZ,
转换速度为100μs。若采用外部时钟,则外部fCLK 可从CLKI 端送入,此时不接R、C。
允许的时钟频率范围为100KHZ~1460KHZ。
INTR (引脚5): INTR 是转换结束信号输出端,输出跳转为低电平表示本次转换已经完成,可作为微处理器的中断或查询信号。如果将CS 和WR 端与INTR 端相连,则ADC0804 就处于自动循环转换状态。

CS:片选信号输入端,低电平有效。

CS =0 时,允许进行A/D 转换。WR 由低跳高时A/D 转换开始,8 位逐次比较
需8×8=64 个时钟周期,再加上控制逻辑操作,一次转换需要66~73 个时钟周期。
在典型应用fCLK=640KHZ 时,转换时间约为103μs~114μs。当fCLK 超过640KHZ,转
换精度下降,超过极限值1460KHZ 时便不能正常工作。

WR:写信号输入端,低电平启动 AD 转换。

RD:读信号输入端,低电平输出端有效。

INTR:转换完毕中断提供端,AD 转换结束后,低电平表示本次转换已完成。

VREF/2:参考电平输入,决定量化单位。参考电压VREF/2 可以由外部电路供给,从“VREF/2”端直接送入,VREF/2 端电压值应是输入电压范围的二分之一。所以输入电压的范围可以通过
调整VREF/2 引脚处的电压加以改变,转换器的零点无需调整。

VCC:芯片电源 5V 输入。

AGND:模拟电源地线。

DGND:数字电源地线。

ADC0804 典型接法。

打开ADC0804的数据手册,我们可以看到以下典型的电路接法:

 

2.png
图4
 

我们可以用仿真软件画出来:

3.png
图5
接下来,我们分析一下上图的工作原理:

①ADC0804的片选端CS连接U2锁存哭的Q7输出端,我们可通过控制锁存器来控制CS,这样接的原因是TX-1C实验板扩展的外围太多,没有多余的I/O口独立控制ADC0804的CS端,所以选择U2。

② VIN(+)接电位器的中间滑动端,VIN(-)接地,因为这两端可以输入差分电压,即它可测量VIN(+)与VIN(-)之间的电压,当VIN(-)接地时,VIN(+)端的电压即为ADC0804的模拟输入电压。VIN(+)与电位器之间串联一个10kΩ电阻,目的是限制流入VIN(+)端的电流,防止电流过大而烧坏A/D芯片,当用短路帽短接插针ADIN后,电位器的中间滑动端便通过电阻R12与VIN(+)连接,此时调节电位器的旋钮,其中间滑动端的电压便在0~VCC变化,进而ADC0804的数字输出端也在0x00~0xFF变化。

③ CLKR,CLR,GND之间用电阻和电容组成RC振荡电路,用来给ADC0804提供工作所需的脉冲,其脉冲的频率为1/(1.1RC),按芯片手册上说明,R取10kΩ,C取150pF,TX-1C实验板上为了减少元件种类和焊接方便,C选用的是104磁片电容。大家在设计自己的电路时,可选择150pF电容,否则会影响A/D的转换速率。

④ VREF/2端用两个1kΩ的电阻分压得到VCC/2电压,即2.5V,将该电压作为A/D芯片工作时内部的参考电压。

⑤WR#、 RD#分别接单片机的P3.6和P3.7引脚,数字输出端接单片机的P1口。

⑥ 将AGND和DGND同时连接到实验板的GND上。我们在设计产品时,若用到A/D和D/A,一般这些芯片都提供独立的模拟地(AGND)和数字地(DGND)引脚,为了达到精度高,稳定性好的目的,最好将所有器件的模拟地和数字地分别连接,最后将模拟地与数字地仅在一点连接。

⑦ INTR#引脚未连接,TX-1C实验板上读取A/D数据未用中断法,因此可不接该引脚。数字芯片在操作时首先要分析它的操作时序图,图4.4.6是ADC0804的启动转换时序图。

ADC0804转换时序图:

分析上图5可知,CS先为低电平,WR#随后置低,经过至少tW(WR#)L时间后,WR#拉高,随后A/D转换器被启动,并且在经过(1~8个A/D时钟周期+内部TC)时间后,模/数完成转换,转换结果存入数据锁存器,同时INTR自动变为低电平,通知单片机本次转换已结束。关于几个时间的大小在芯片手册中都有说明。

我在写单片机程序启动A/D转换时就要遵循上面的时序,由于TX-1C实验板未用中断读取A/D数据,因此我们在启动A/D转换后,稍等一会儿时间,然后直接读取A/D的数字输出口即可。读取结束启动一次A/D转换,如此循环下去。力4.4.7是ADC0804读取数据时序图。

4.png
图6
分析上图可知,CS先为低电平,WR#随后置低,经过至少tW(WR#)L时间后,WR#拉高,随后A/D转换器被启动,并且在经过(1~8个A/D时钟周期+内部TC)时间后,模/数完成转换,转换结果存入数据锁存器,同时INTR自动变为低电平,通知单片机本次转换已结束。关于几个时间的大小在芯片手册中都有说明。

我在写单片机程序启动A/D转换时就要遵循上面的时序,由于TX-1C实验板未用中断读取A/D数据,因此我们在启动A/D转换后,稍等一会儿时间,然后直接读取A/D的数字输出口即可。读取结束启动一次A/D转换,如此循环下去。力下图是ADC0804读取数据时序图。

5.png

图7

分析上图可知,当INTR#变为低电平后,将CS#先置低,在RD#置低至少经过tACC时间后,数字输出口上的数据达到稳定状态,此时直接读取数字输出端口数据便可得的数字信号,读走数据后,马上将RD#拉高,然后再将CS#拉高,INTR#是自动变化的,当RD#置低tR1时间后,INTR#自动拉高,我们不必人为去干涉。

图6和图7是ADC0804启动转换和读取数据的时序图,这是启动一次和读取一次数据的时序图,当我们要连续转换并且连续读取数据时,有没有必要每次都把CS#置低再位高,因为CS#是片选信号,置低表示该芯片可被操作或处于能够正常工作状态,所以在写程序时,只要一开始将CS#置低,以后当要启动转换和读取数据时只需操作WR#和RD#即可。

 四、ADC0804工作过程及原理

下面图8给出的其实就是使ADC0804正确工作的软件编程模型。由图可见,实现一次ADC转换主要包含下面三个过程:

1.启动转换:由图6中的上部“FIGURE 10A”可知,在CS信号为低电平的情况下,将WR引脚先由高电平变成低电平,经过至少tW(WR)I 延时后,再将WR引脚拉成高电平,即启动了一次AD转换。

注:ADC0804使用手册中给出了要正常启动AD转换WR的低电平保持时间tW(WR)I的最小值为100ns,即WR拉低后延时大于100ns即可以,具体做法可通过插入NOP指令或者调用delay()延时函数实现,不用太精确,只要估计插入的延时大于100ns即可。

2.延时等待转换结束:依然由图6中的上部“FIGURE 10A”可知,由拉低WR信号启动AD采样后,经过1到8个Tclk+INTERNAL Tc延时后,AD转换结束,因此,启动转换后必须加入一个延时以等待AD采样结束。

注:手册中给出了内部转换时间“INTERNAL Tc”的时间范围为62~73个始终周期,因此延时等待时间应该至少为8+73=81个时钟周期。比如,若R为150K, C为150pF,则时钟频率为Fclk=1/1.1RC=606KHz,因此时钟周期约为Tclk=1/Fclk=1.65us。所以该步骤至少应延时81*Tclk=133.65us. 具体做法可通过插入NOP指令或者调用delay()延时函数实现,不用太精确,只要估计插入的延时大于133.65us即可。

3.读取转换结果:由图6的下部“FIGURE 10B”可知,采样转换完毕后,在CS信号为低的前提下,将RD脚由高电平拉成低电平后,经过tACC的延时即可从DB脚读出有效的采样结果。

注:手册中给出了tACC的典型值和最大值分别为135ns和200ns,因此将RD引脚拉低后,等待大于200ns后即可从DB读出有效的转换结果。具体做法可通过插入NOP指令或者调用delay()延时函数实现,不用太精确,只要估计插入的延时大于200ns即可。

ADC0804手册给出的ADC转换时序图

图8 ADC0804手册给出的ADC转换时序图

 

ADC0804手册给出的电器特性表

  图9  ADC0804手册给出的电器特性表

  对采样值进行运算变换,换算出实际的滑动变阻器输入电压值。 对于任何一个A/D采样器而言,其转换公式如下:

转换公式

 

五、ADC0804在单片机中的简单应用举例

下面我们做个仿真:将电位器的输出电压进行AD转换,然后把转换的结果在1602上进行展示。

AD转换程序:
用ADC0804芯片实现对电压的采集;
用LCD1602显示电压值;
采集误差位0.05V;
附件包含完整程序和仿真实际;
文件中含有ADC0804芯片介绍。

仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)

 

引用:

https://blog.csdn.net/Wan_shibugong/article/details/92425576
http://www.elecfans.com/dianyuan/578199.html
http://news.eeworld.com.cn/mcu/2018/ic-news111941990.html
https://www.docin.com/p-1213954251.html

资源标识:2300_AD转换

生成海报
点赞 0

创世纪

单片机学习,电子制作DIY学习与分享,各种新鲜的,有趣的,好玩的,一起来吧!机器人、无人机、树莓派/Raspberry Pi、arduino、极客、创客等

暂无评论

相关推荐

微信扫一扫

微信扫一扫

微信扫一扫,分享到朋友圈

用单片机+ADC0804实现电压的AD转换AD采样,LCD1602显示电压