集成a/d转换器品种繁多,选用时应综合考虑各种因素选取集成芯片。一般逐次比较型a/d转换器用的比较多,adc0804就是这类单片集成a/d转换器。adc0804是一款8位、单通道、低价格a/d转换器。工作电压:+5v,属于连续渐进式(successive approximation method)的a/d转换器。
1、adc0804的管脚图及说明
vin(+)、vin(-):两个模拟信号输入端,可以接收单极性、双极性和差模输入信号。
db0-db7:具有三态特性数字信号输出端,输出结果为八位二进制结果。
clkin:时钟信号输入端。
clkr:内部时钟发生器的外接电阻端,与clk端配合可由芯片自身产生时钟脉冲,其频率计算方式是:fck=1/(1.1rc)。
cs:片选信号输入端,低电平有效。
wr:写信号输入端,低电平启动ad转换。
rd:读信号输入端,低电平输出端有效。
intr:转换完毕中断提供端,ad转换结束后,低电平表示本次转换已完成。
vref/2:参考电平输入,决定量化单位。
vcc:芯片电源5v输入。
agnd:模拟电源地线。
dgnd:数字电源地线。
二、adc0804芯片参数
工作电压:+5v,即vcc=+5v。
模拟输入电压范围:0~+5v,即0≤vin≤+5v。
分辨率:8位,即分辨率为1/2=1/256,转换值介于0~255之间。
转换时间:100us(fck=640khz时)。
转换误差:±1lsb。
参考电压:2.5v,即vref=2.5v。
三、adc0804的转换原理
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次寻找,就能完成转换的动作,其中的输入值代表图1的模拟输入电压vin
adc0804工作过程如下图所示,adc0804的工作时序图(timing diagrams): (欲详细了解工作过程,可以结合adc0804使用手册)
四、adc0804工作过程及原理
图6给出的其实就是使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转换时序图
图7:adc0804手册给出的电器特性表
对采样值进行运算变换,换算出实际的滑动变阻器输入电压值。 对于任何一个a/d采样器而言,其转换公式如下:
五、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连接单片机的p1口。
p0口接数码管的段选线,p2口低四位接数码管的位选线。
程序主要实现以下功能:
(1)控制adc0804芯片对vin(+)引脚输入的电压值进行正确采样,读取采样结果。
(2)对采样值进行模数变换,将转换后数字量后显示在4段数码管上。 c程序如下:
#include 《reg51.h》
#include 《intrins.h》
#define uint unsigned int
#define uchar unsigned char sbit wr=p3^6; sbit rd=p3^7;
uchar code dis[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//共阳显示代码
void delay(uint x) //延时函数 delay(1)延时0.992ms,大约为1ms {
uchar i;
while(x--)
for(i=0;i《120;i++);
void display(uchar db) //数码管显示函数,用于显示模数转换后得到的数字量 {
uchar bw,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]; //第四只数码管一直显示0 delay(5); }
void main() {
uchar i; 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;i《10;i++) //刷新显示一段时间
display(p1); //显示从db得到的数字量
}
}
proteus仿真运行结果如下:
EDA技术发展概况_EDA技术的发展趋势
射频识别(RFID)芯片的应用让汽车驾驶变得更加安全
cdn的关键技术有哪些
数字功放电路图
简述TransCAD的交通可达性分析功能简介
adc0804工作原理
基于RFID智能手机的3G/4G功率放大器
快恢复二极管,快恢复二极管是什么意思
橙子自动化完成由GGV领投的近亿元B轮融资
RX140工程师手册 | 一册在手,“天下”我有!
激光圆管切割机功率越大越好吗
AMD锐龙9 3950X评测 重拾DIY乐趣
如何确定工业主板是否优质
VR技术革新法制教育宣传方式,助力法制教育的普及
Microsoft已经确认Microsoft Edge for Mac上的一个问题
疫情推动智能机器人按下发展“快进键”人机协同依旧是趋势
GSA:预计2021年底全球5G商用的网络将超200张
网孔法(网孔电流法)
怎样将FC-28土壤湿度传感器与树莓派连接
Intel建晶圆厂“抢饭碗” 发力芯片代工意欲何为