您好,欢迎访问三七文档
当前位置:首页 > 临时分类 > ADC0804工作原理其程序
2012年8月6日星期一1/7前言:本文详细说明了ADC0804工作原理及过程,还附有一个ADC0804在单片机中的典型应用,包含原理图,源程序,程序注释详细清楚,这有助于更好地理解与应用ADC0804芯片。1、A/D转换概念:即模数转换(AnalogtoDigitalConversion),输入模拟量(比如电压信号),输出一个与模拟量相对应的数字量(常为二进制形式)。例如参考电压VREF为5V,采用8位的模数转换器时,当输入电压为0V时,输出的数字量为00000000,当输入的电压为5V时,输出的数字量为11111111。当输入的电压从从0V到5V变化时,输出的数字量从00000000到11111111变化。这样每个输入电压值对应一个输出数字量,即实现了模数转换。2、分辨率概念:分辨率是指使输出数字量变化1时的输入模拟量,也就是使输出数字量变化一个相邻数码所需输入模拟量的变化值。分辨率与A/D转换器的位数有确定的关系,可以表示成FS/2n。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时,DAC0804把转换完成的数据加载到DB口,可以通过数据端口DB0~DB7读出本次的采样结果。VIN(+)和VIN(-):模拟电压输入端,单边输入时模拟电压输入接VIN(+)端,VIN2012年8月6日星期一2/7(-)端接地。双边输入时VIN(+)、VIN(-)分别接模拟电压信号的正端和负端。当输入的模拟电压信号存在“零点漂移电压”时,可在VIN(-)接一等值的零点补偿电压,变换时将自动从VIN(+)中减去这一电压。VREF/2:参考电压接入引脚,该引脚可外接电压也可悬空,若外接电压,则ADC的参考电压为该外界电压的两倍,如不外接,则VREF与Vcc共用电源电压,此时ADC的参考电压即为电源电压Vcc的值。CLKIN和CLKR:外接RC振荡电路产生模数转换器所需的时钟信号,时钟频率CLK=1/1.1RC,一般要求频率范围100KHz~1460KHz。AGND和DGND:分别接模拟地和数字地。INTR:转换结束输出信号,低电平有效,当一次A/D转换完成后,将引起INTR=0,实际应用时,该引脚应与微处理器的外部中断输入引脚相连(如51单片机的INT0,INT1脚),当产生INTR信号有效时,还需等待RD=0才能正确读出A/D转换结果,若ADC0804单独使用,则可以将INTR引脚悬空。DB0~DB7:输出A/D转换后的8位二进制结果。补充说明:ADC0804片内有时钟电路,只要在外部“CLKIN(引脚4)”和“CLKR(引脚19)”两端外接一对电阻电容即可产生A/D转换所要求的时钟,其振荡频率为fCLK≈1/1.1RC。其典型应用参数为:R=10KΩ,C=150PF,fCLK≈640KHz,转换速度为100μs。若采用外部时钟,则外部fCLK可从CLKIN端送入,此时不接R、C。允许的时钟频率范围为100KHz~1460KHz。4、ADC0804工作过程如下图所示,ADC0804的工作时序图(TimingDiagrams):(欲详细了解工作过程,可以结合ADC0804使用手册)图6给出的其实就是使ADC0804正确工作的软件编程模型。由图可见,实现一次ADC转换主要包含下面三个过程:1.启动转换:由图6中的上部“FIGURE10A”可知,在CS信号为低电平的情况下,将WR引脚先由高电平变成低电平,经过至少tW(WR)I延时后,再将WR引脚拉成高电平,即启动了一次AD转换。注:ADC0804使用手册中给出了要正常启动AD转换WR的低电平保持时间tW(WR)I的最小值为100ns,即WR拉低后延时大于100ns即可以,具体做法可通过插入NOP指令或者调用delay()延时函数实现,不用太精确,只要估计插入的延时大于100ns即可。2.延时等待转换结束:依然由图6中的上部“FIGURE10A”可知,由拉低WR信号启动AD采样后,经过1到8个Tclk+INTERNALTc延时后,AD转换结束,因此,启动转换后必须加入一个延时以等待AD采样结束。注:手册中给出了内部转换时间“INTERNALTc”的时间范围为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的下部“FIGURE10B”可知,采样转换完毕后,在CS信号为低的前提下,将RD脚由高电平拉成低电平后,经过tACC的延时即可从DB脚读出有效的采样结果。注:手册中给出了tACC的典型值和最大值分别为135ns和200ns,因此将RD引脚拉低2012年8月6日星期一3/7后,等待大于200ns后即可从DB读出有效的转换结果。具体做法可通过插入NOP指令或者调用delay()延时函数实现,不用太精确,只要估计插入的延时大于200ns即可。图6:ADC0804手册给出的ADC转换时序图2012年8月6日星期一4/7图7:ADC0804手册给出的电器特性表对采样值进行运算变换,换算出实际的滑动变阻器输入电压值。对于任何一个A/D采样器而言,其转换公式如下:()maxDsampleVoutVrefD其中:Vout:输入ADC的模拟电压值。Dsample:ADC转换后的二进制值。本试验的ADC0804为八位。maxD:ADC能够表示的刻度总数。ADC0804为八位ADC,因此8max2256DVref:ADC参考电压值,本试验ADC0804的Vref被设置为5V因此,对于本试验,转换公式为()5256DsampleVoutV5、ADC0804在单片机中的简单应用举例如下图所示,本例ADC0804中的VCC=5V,VREF/2引脚悬空(悬空则相当于与VCC共接5V电源),因此ADC转换的参考电压为VCC的值,即5V。VIN-接地,而VIN+连接滑动变阻器RV1的输出,因此VIN+的电压输入范围为0V~5V,正好处于参考电压范围内。引脚CS接地,WR和RD分别连接单片机的P3^6和P3^7引脚,而DB0~DB7连接单片机2012年8月6日星期一5/7的P1口.P0口接数码管的段选线,P2口低四位接数码管的位选线。程序主要实现以下功能:(1)控制ADC0804芯片对VIN(+)引脚输入的电压值进行正确采样,读取采样结果。(2)对采样值进行模数变换,将转换后数字量后显示在4段数码管上。C程序如下:#includereg51.h#includeintrins.h#defineuintunsignedint#defineucharunsignedcharsbitwr=P3^6;sbitrd=P3^7;ucharcodedis[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//共阳显示代码voiddelay(uintx)//延时函数delay(1)延时0.992ms,大约为1ms{uchari;while(x--)for(i=0;i120;i++);}2012年8月6日星期一6/7voiddisplay(uchardb)//数码管显示函数,用于显示模数转换后得到的数字量{ucharbw,sw,gw;//bw,sw,gw分别等于db百位,十位,个位上的数bw=db/100;sw=db%100/10;gw=db%10;P2=0x01;//点亮第一只数码管P0=dis[bw]&0x7f;//最高位置0,点亮第一只数码管的小数点,delay(5);P2=0x02;//点亮第二只数码管P0=dis[sw];delay(5);P2=0x04;//点亮第三只数码管P0=dis[gw];delay(5);P2=0x08;//点亮第四只数码管P0=dis[0];//第四只数码管一直显示0delay(5);}voidmain(){uchari;while(1){wr=0;//在片选信号CS为低电平情况下(由于CS接地,所以始终为低电平),_nop_();//WR由低电平到高电平时,即上升沿时,AD开始采样转换wr=1;delay(1);//延时1ms,等待采样转换结束P1=0xff;//这条语句不能少,我也还不知道为什么rd=0;//将RD脚置低电平后,再延时大于135ns左右(这里延时1us),_nop_();//即可从DB脚读出有效的采样结果,传送到P1口for(i=0;i10;i++)//刷新显示一段时间display(P1);//显示从DB得到的数字量}}Proteus仿真运行结果如下:2012年8月6日星期一7/76、上述Proteus仿真文件下载地址:、参考文献[1]彭伟.单片机C语言程序设计实训100例.北京:电子工业出版社.2009[2]贾振国,许琳.智能化仪器仪表原理及应用.北京:中国水利水电出版社.2011
本文标题:ADC0804工作原理其程序
链接地址:https://www.777doc.com/doc-7005920 .html