视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
adc0804文档
2025-10-03 15:14:19 责编:小OO
文档
试验  模拟/数字转换芯片ADC0804的使用

1、实验目的

    1.了解并测试模/数芯片ADC0804性能。

   2.学习A/D芯片ADC0804的接线和转换的基本原理。

2、试验内容

2.1 模拟/数字转换的一些背景知识介绍

  模拟/数字转换就是我们通常所说的A/D转换,它将输入的模拟信号(如电压)转换成控制芯片(如单片机,ARM)所能识别的二进制形式,然后经过运算,既可以还原出输入模拟信号的值。

   A/D转换是一种非常重要的技术手段,是单片机等控制芯片与外界信号的接口部分,图1给出了一种常用的嵌入式设计模式。

图1:一种常用的基于A/D芯片的嵌入式设计模式

由图1可见,这种设计模式包含以下几个环节。

外界信号:外界信号的范围十分广泛,自然界的一切信号,比如声音,温度甚至是血糖浓度等都可以规类为外界信号。

传感器:因为大多数外界信号都不是电信号,因此需要通过各种传感器将这些外界信号转换成电信号,例如:通过热电耦可以将温度转换成一个电压值。

模拟电路:设计模拟电路的原因主要有以下两点

1.由于外界信号的复杂性,使得传感器直接输出的电信号可能会存在一些问题(如不稳定),这些不稳定信号如果直接送到A/D芯片进行采样,则最终结果可能使得最后的显示值来回乱跳,而无法确定待测的外界信号到底是多少。因此,可能需要设计一套模拟电路对传感器输出的不稳定电信号进行滤波等处理,去除干扰,使得进入A/D转换芯片的电压值为一个稳定的信号。

2.每一个A/D转换芯片都有一个参考电压,只有输入的模拟电压值在这个参考电压的范围内才能进行正确的转换,例如:本试验将ADC0804芯片的参考电压设置成0V~5V,因此如果输入的电压值大于5V,则转换出的结果永远为0xFF,若输入的电压值小于0V,则转换出的结果永远为0,这样便无法正确的还原出被测信号的大小。基于上述原因,我们可能需要设计一套模拟电路,传感器的输出电压值进行一些变换(放大,缩小),使得送到A/D转换芯片的电压值在转换芯片的参考电压范围内。

A/D转换芯片:即模拟/数字转换芯片,它将输入的模拟电压信号转换成单片机等控制处理器能够识别的数字二进制形式。

处理器芯片:处理器芯片有很多中(比如51单片机,ARM或者是PC上的奔腾处理器,AMD处理器)这些处理器虽然架构不一样,但是有个共同的特点,就是它们能够运行程序,因此它们能通过程序对A/D芯片送入的二进制形式的电压值进行处理,通过运算将其还原成待测的外界信号值,控制显示部件(如LCD,八段数码管)将这个值显示出来。例如:假如ADC0804输出的二进制值0x80,则根据A/D转换公式可以推出ADC0804的输入电压大小为(0x80/0x100)*5V=2.5V。假设信号经过模拟电路缩小了8倍,则可以推出传感器的输出电压为2.5V*8=20V,再根据传感器的转换公式(一般手册会给出)即可得到输入的外界信号的值。

显示:显示的作用是将计算出的待测外界信号的值展示给测量人员,显示的形式有很多种,如LCD,八段数码管,上位机软件等。

    通过上面的介绍,大家一定对这种基于A/D芯片的嵌入式设计模式有了一个大致的了解,其实现时中很多应用都是遵循了这种设计模式,比如常用的数字万用表,数字温度测量仪,血糖测量仪等。

本试验也遵循了这种设计模式,只不过它省略了传感器和模拟电路部分,首先通过滑动变阻器调节输入到ADC0804芯片的电压值(ADC0804芯片的参考电压调节成0V~5V,而滑动变阻器产生的电压范围也为0V~5V,因此没有必要设计额外的模拟电路),然后通过51单片机进行运算处理得到这个输入电压值,最后再控制八段数码管将这个电压值显示出来,实际上是实现了一个简易的数字电压测量表。图2是试验框图。

图2:本试验示意图

    接下来我们首先介绍实现本试验的电路设计,然后介绍软件实现方法。

2.2 硬件设计

本部分,我们首先介绍ADC0804芯片的一些相关知识,然后介绍基于ADC0804和51单片机实现A/D转换的电路设计。

2.2.1 ADC0804芯片介绍

图3:ADC0804规格及引脚分配图

本试验采用的A/D芯片为ADC0804,它是CMOS 8位单通道逐次渐近型的模/数转换器,其规格及引脚图如图3所示,根据手册我们可以得到各个引脚的大致功能如下:

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

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

/RD:低电平有效,即/RD=0时,可以通过数据端口DB0~DB7读出本次的采样结果。

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

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

CLKR和CLKIN:外接RC电路产生模数转换器所需的时钟信号,时钟频率CLK = 1/1.1RC,一般要求频率范围100KHz~1.28MHz。

AGND和DGND:分别接模拟地和数字地。解释下区别

   /INT:中断请求信号输出引脚,该引脚低电平有效,当一次A/D转换完成后,

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

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

2.2.2 外围电路设计

图4:ADC0804的外围电路

图4为ADC0804外围电路原理图,其中,AVCC=5V,引脚VREF/2悬空,因此ADC转换的参考电压为AVCC的值,即5V。VIN-接地,而VIN+连接滑动变阻器VR1的输出,因此VIN+的电压输入范围为0V~5V,正好处于参考电压范围内。

引脚CS_1, WR_1和RD_1分别连接单片机的P3_5,P3_6以及P3_7脚,而DB0~DB7连接单片机的P2脚(详细的引脚分配情况见本试验的另一个文档???)

下面介绍一些电路设计方面的知识

初学者看到这里可能会有这样的疑问,就是“图4的外围电路为什么是这样设计?CLKR引脚为什么要外接一个电阻R36和一个电容C15?引脚CLKIN为什么要外接一个电容C15?)。

其实这里并没有任何神秘的地方,我们仔细看看ADC0804的手册就知道答案了,手册(本试验所属的文件夹中包含了这个pdf文件)的第12页有一段内容为“Testing the A/D Conveter”,该段介绍了一个简易的芯片测试方法,其中的“FIGURE 18”就给出了进行这个简易试验的原理图,以及计算公式。如图5所示

图5:ADC0804手册给出的参考电路图

大家仔细看看,图5给出中的手册中的参考电路图是不是和图4的原理图如出一辙?的确,我们就是参考了手册的推荐电路从而确定了ADC0804的外围电路的设计。手册中甚至连RC电路的电容和电阻的取值都给出来了,照搬就是了!真的是没有任何神秘之处!

下面介绍一下datasheet对电路设计以及软件编写的重要作用。

根据我们多年的设计经验,当我们的电路中需要用到某一块芯片的时候,往往首先去下载它的手册,也就是datasheet,有很多专门提供datasheet下载的网站,推荐一个我们常用的网址:http://alldatasheet.com/。进入该页面后输入我们所要查询的芯片名称(如这里的ADC0804)即可得到该芯片的datasheet。

芯片的datasheet会介绍你所需要的芯片信息,从典型外围电路的搭建,到芯片的封装,电气特性以及软件编程模型。一般来说,直接copy手册中给出的推荐外围电路即可。当然,若是阅读完手册后还是无法确定外围电路的搭建,则可以直接联系生产这块芯片的公司的技术服务部门(这里可以联系AD公司),他们肯定给你提供一套完整详尽的电路解决方案的(包括外围电路的设计以及甚至是软件的示例代码)。这也就是现在比较流行的单芯片解决方案的含义所在,芯片提供商提供一块芯片后往往会提供一套基于该芯片的完整解决方案,该解决方案包括基于这块芯片的电路设计,软件设计。产品制造厂商只要根据这个解决方案做及少的改动,即可以设计出满足自身需要的产品来!

2.2 软件设计

下面我们介绍软件的编写。

本试验的软件需要实现一下几个步骤

1.控制ADC0804芯片进行正确采样,读取采样结果。

2.对采样值进行运算变换,换算出实际的滑动变阻器输入电压值。

3.将该电压值通过八段数码管显示出来,从而实现一个简易的数字电压测量表功能。

其中第三个步骤涉及到八段数码管显示相关知识,其内容在本套学习板的“”试验中有详细的介绍。

下面我们主要介绍实现前两个步骤的方法。

步骤一:控制ADC进行正确采样,读取正确的采样值。

前面我们已经提到了芯片的datasheet对于硬件设计以及软件编程的重要性。同样,要使得ADC0804正常工作,我们依然首先需要仔细的阅读其使用手册。

仔细阅读手册后,我们发现了在手册的第7页给出了一个时序图(Timing Diagrams),如图6所示

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

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

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

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

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

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

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

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

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

步骤二:对采样值进行运算变换,换算出实际的滑动变阻器输入电压值。

    对于任何一个A/D采样器而言,其转换公式如下:

             

其中:

:输入ADC的模拟电压值。

:ADC转换后的二进制值。本试验的ADC0804为八位。

:ADC能够表示的刻度总数。ADC0804为八位ADC,因此

:ADC参考电压值,本试验ADC0804的被设置为5V

因此,对于本试验,转换公式为

         

步骤三:将该电压值通过八段数码管显示出来,从而实现一个简易的数字电压测量表功能。

涉及到八段数码管显示相关知识,其内容在本套学习板的“”试验中有详细的介绍。

综上所述,我们给出了完成单次采样的详细流程图,如图8所示

图8:ADC0804完成单次采样的软件控制流程图

下面给出程序的主程序代码

详细的代码见本试验文件夹中的源程序部分,代码中有非常详细的注释。下载本文

显示全文
专题