用单片机+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、极客、创客等

暂无评论

相关推荐

Arduino与Proteus仿真实例-DHT11温度湿度传感器驱动仿真

DHT11温度湿度传感器驱动仿真 DHT11 是一款基本的超低成本数字温度和湿度传感器。 它使用电容式湿度传感器和热敏电阻来测量周围的空气,并在数据引脚上吐出数字信号(不需要模拟输入引脚)。 它使用起来相当简单,但需要仔细定时来抓取数据。

Arduino与Proteus仿真实例-NTC热敏电阻驱动仿真

NTC热敏电阻驱动仿真 热敏电阻是由半导体材料制成的温度传感元件,该材料经过烧结以显示电阻的较大变化与温度的微小变化成比例。 该电阻可以通过使用通过热敏电阻的小且经测量的直流或直流电来测量,以测量产生的电压降。 这些固态温度传感器实际上就像

Arduino与Proteus仿真实例-OLED显示屏(SSD1306)I2C驱动仿真

OLED显示屏(SSD1306)I2C驱动仿真 首字母缩写词“OLED”代表有机发光二极管 - 一种使用 LED 的技术,其中的光由有机分子产生。 这些有机 LED 用于制造被认为是世界上最好的显示面板。 OLED 显示器是通过在两个导体之