一. 硬件规划详解
1)A/D转化原理
通过采样,量化和编码这三个过程来完结, 即首要对输入的模仿电压信号采样,采样完毕后进入坚持时刻,在
这段时刻内将采样的电压量转化为数字量,并按必定的编码方法给出转化成果,然后开端下一次采样。
采样需满意采样定理,即采样频率fs要大于输入信号的最高频率重量fimax的频率,一般取fs = (2~3)fimax,
2) A/D转化器的类型
包含两类,直接A/D转化器和直接A/D转化器,
其间直接A/D转化器包含并行比较型A/D转化器和反应比较型A/D转化器。
直接A/D转化器包含电压-时刻变换型(V-T变换型)和电压-频率变换型(V-F变换型)。
a. 并行比较型A/D转化器原理图:
a.1 原理阐明
三位并行比较型A/D转化器由电压比较器,寄存器和代码转化器三部分组成。用电阻链把参阅电压Vref分压,
得到从1/15Vref~13/15Vref之间的7个比较电平,量化单位为2/15Vref. 然后即将输入的模仿电压一起加到
每个比较器的另一个输入端上,与这7个比较基准进行比较。
a.2 产品介绍
AD公司的AD9012(8位),AD9002(8位),AD9020(10位)。
a.3 特色
由于转化是并行的,其转化时刻只受比较器,触发器和编码电路延迟时刻约束,因而转化速度快;(长处)
跟着分辩率的进步,元件数目要按几何级数添加。(缺陷)
运用这种含有寄存器的并行A/D转化电路时,可以不必附加采样-坚持电路,由于比较器和寄存器这两部分
兼有采样-坚持功用。(长处)
b. 反应比较型A/D转化器
b.1 原理阐明
取一个数字量加到D/A转化器上,所以得到一个对应的输出模仿电压,将这个模仿电压和输入的模仿电压
信号比较,假如两者不持平,则调整所取的数字量,直到两个模仿电压持平停止,终究取的这个数字量
便是所求的转化成果。
b.2 完结计划
计数型和逐次比较型
计数型转化器主要由比较器C,D/A转化器,计数器,脉冲源,操控门G以及输出寄存器等几部分组成,其转化
原理是转化开端前先用复位信号将计数器置0,而且转化信号应停留在Vl=0的状况,这时门G被封闭,计数器
不作业。计时器加给D/A转化器的是全0信号,所以D/A转化器输出的模仿电压V0=0,假如Vi为正电压信号,
比较器的输出电压为1. 依相同办法比较完DA的悉数位数。由于在转化过程中计数器中的数字不停地改动,
所以不宜将计数器的状况直接作为输出信号,为此在输出端设置了输出寄存器,在每次转化完结今后,用
转化操控信号的下降沿将计数器输出的数字置入输出寄存器中,而以寄存器的状况作为终究的输出信号。
这个办法问题是转化速度慢,转化时刻长。适用于转化速度要求不高的场合。
逐次比较型转化器逻辑电路图
C为电压比较器,当Vi>=Vo时,比较器输出为0;反过来输出为1. FFa,FFb,FFc三个触发器组成了三位数码
寄存器,触发器FF1~FF5和门电路G1~G9组成操控逻辑电路。
逐次比较型A/D转化器完结一次转化所需时刻与其位数和时钟脉冲频率有关,位数愈少,时钟频率越高,
转化所需时刻越短。这种A/D转化器具有转化速度快,精度高的特色。其产品主要有ADC0804/0808/0809系列(8位),AD575(10位),AD574A(12位)。
c. 电压-时刻变换型(v-t变换型)
其原理是把输入的模仿电压信号转化成与之成正比的时刻宽度信号,然后在这个时刻宽度里对固定频率的时钟
脉冲计数,计数的成果便是正比于输入模仿电压的数字信号。
d. 电压-频率变换型(v-f变换型)
其原理是把输入的模仿电压信号转化成与之成正比的频率信号,然后在一个固定的时刻距离里对得到的频率
信号计数,所得到的成果便是正比于输入模仿电压的数字量。
3) A/D转化器的参数目标
a. 分辩率
阐明A/D转化器对输入信号的分辩才能。
A/D转化器的分辩率以输出二进制数的位数标明,输出位数愈多,量化单位愈小,分辩率愈高。
b. 转化差错
标明A/D转化器实践输出的数字量与理论输出数字量之间的不同。
c. 转化精度
A/D转化器的最大量化差错和模仿部分精度的一起表现。
d. 转化时刻
A/D转化器从转化操控信号到来开端,到输出端得到安稳的数字信号所通过的时刻。
4) ADC0804阐明
a. 引脚图
Vin(+),Vin(-) – 两个模仿信号输入端,用以承受单极性,双极性和差模输入信号。
DB7~DB0 – 具有三态特性数字信号输出口。
AGND – 模仿信号地
DGND – 数字信号地
CLK – 时钟信号输入端
CLKR – 内部时钟发生器的外接电阻端,与CLK端合作可有芯片本身发生时钟脉冲,其频率为1/(1.1RC)
/CS – 片选信号输入端,低电平有用,一旦有用,标明A/D转化器被选中,可发动作业。
/WR – 写信号输入,低电平发动A/D转化。
/RD – 读信号输入,低电平输出端有用。
/INTR – A/D转化完毕信号,低电平标明本次转化已完结。
Vref/2 – 参阅电平输入,决议量化单位。
Vcc – 芯片电源5V输入。
b.转化时序图
CS先为低电平,/WR随后置低,通过至少tw(/WR)L时刻后,/WR拉高,跟着A/D转化器被发动,而且在通过
(1~8个A/D时钟周期+内部Tc)时刻后,模数完结转化,转化成果存入数据锁存器,一起INTR主动变为
低电平,告诉单片机本次转化已完毕。
读取数据时,当/INTR变为低电平后,将/CS先置低,接着再将/RD置低,在/RD置低至少通过tACC时刻后,
数字输出口上的数据到达安稳状况,此刻直接读取数字输出端口数据便可得到转化后的数字信号,读走
数据后,马大将/RD拉高,然后将/CS拉高,/INTR是主动改动的,当/RD置低tR1时刻后,/INTR主动拉高,
咱们不必以为去干与。
上面的时序图是ADC0804发动一次和读取一次数据的时序图,当咱们要接连转化而且接连读取数据时,就没有
必要每次都把/CS置低再拉高,由于/CS是片选信号,置低标明该芯片可被操作或处于可以正常作业状况,所以
在写程序时,只要一开端将/CS置低,今后当要发动转化和读取数据时只需操作/WR和/RD即可。
二. 程序规划详解
1. 用单片机操控ADC0804进行模数转化
程序功用:
当拧动试验板上A/D周围的电位器Re2时,在数码管的前三位以十进制方法动态显现出A/D转化后的数字量(8位A/D转化后数值在0~255改动)。
程序源码:
#include
#include
#define uchar unsigned char
#define uint unsigned int
sbit dula = P2 ^ 6;
sbit wela = P2 ^ 7;
sbit adwr = P3 ^ 6;
sbit adrd = P3 ^ 7;
uchar code table[] = {
};
void delayms(uint);
void display(uint);
void main()
{
}
void delayms(uint xms)
{
}
void display(uint num)
{
}
程序小结:
1)刚进入主程序后,首要将U2锁存器的输出口的最高方位低电平,意图是将与之相连的ADC0804的/CS片选端
置低选中,由所以接连读取数据,所以一次选中,今后再不必管它。一起要注意,今后但凡操作U2锁存端的当地
都不要再改动A/D的/CS端,在数码管显现程序中,送出位选信号时,始终坚持U2锁存器的最高位为低电平,
上例数码管显现部分程序中“P0=0x7e;P0=0x7d;P0=0x7b;”便是。
2) 进入while(1)大循环后,先发动A/D转化,其间的_nop_()相当于一个机器周期的延时。
3)在发动A/D转化后,还未读取转化成果,就当即先送成果给数码管显现,这样写的意图是为了给A/D转化
留有必定时刻,
4)假如拧动电位器时,数码管数字不动,只要复位一次或从头上电一次,数字才会改写,这时由于转化
时刻不行的原因,解决办法将for(a=10;a>0;a–)中的a增大。