目录
摘要:A/D转换是指将模拟信号转换为数字信号,这在信号处理、信号传输等领域具有重要的意义。常用的A/D转换电路有专用A/D集成电路、单片机ADC模块,前者精度高、电路复杂,后者成本低、设计简单。基于单片机的A/D转换电路在实际电路中获得了广泛的应用,论文对这一电路结构进行了详细的研究。
关键词:单片机;AD转换器;电路
(二)前言:在设计一个控制系统时,首先要对系统进行分析明确设计任务和设计要求,作为系统方案设计的依据。合理选着系统的构成方案,合理规划分硬件和软件的功能,以有利于兼顾性能、价格比和缩短开发周期。硬件设计应以在充分满足系统功能的前提下最简单为原则,在系统的运用中,单片机被广泛运用。A/D转换的方法是由传输信号与接收信号图解方法,借助这种方法可以在已知发,接收点和存储的条件下,制造出各式各样的电器产品。
(三)目的要求:一.要求
利用实验台上的ADC0809做A/D转换器,实验箱上的电位器提供模拟电压信号输入,编制程序,将模拟量转换成数字量,用数码管显示模拟量转换的结果。
二.目的
1.掌握A/D转换与单片机的接口方法。
2.了解A/D芯片ADC0809转换性能及编程方法。
3.通过设计了解单片机如何进行数据采集。
三.原理
1. ADC0809读写原理
A/D转换器大致有三类:一是双积分A/D转换器,优点是精度高,抗干扰性好,价格便宜,但速度慢;二是逐次逼近法A/D转换器,精度、速度、价格适中;三是并行A/D转换器,速度快,价格也昂贵。
ADC0809属第二类,是八位A/D转换器。每采集一次需100us。
ADC0809 START端为A/D转换启动信号,ALE端为通道选择地址的锁存信号。实验电路中将其相连,以便同时锁存通道地址并开始A/D采样转换,故启动A/D转换只需如下两条指令: MOV DPTR,#PORT
MOVX @DPTR,A
A中为何内容并不重要,这是一次虚拟写。
在中断方式下,A/D转换结束后会自动产生EOC信号,将其与8031CPU板上的INT0相
连接。在中断处理程序中,使用如下指令即可读取A/D转换的结果:
MOV DPTR,#PORT
MOVX A,@DPTR
2.电路原理
实验板连接:将ADC0809的片选信号CS0809接CS0;电位器的输出信号AN0接0809的ADIN0;EOC接CPU板的INT0.
四.编程要点
学习ADC0809原理(参考教材第8章内容),了解本实验电路原理,数码管显示模拟量参照题目5。
五.基本任务
1.利用实验设备正确接线。画出整体原理图。
2.编制采集模拟电压信号及显示程序,并调试运行正确。
3.画出程序流程图。
(四)总体设计
数据采集,主要由三大模块组成:A/D转换模块,8051单片机模块和七段译码显示模块。
首先,通过实验箱产生0---5V可调电压;然后,将0---5V可调电压输入A/D转换进行数模转换,将0---5V的模拟量转换成00H-----FFH的数字信号,出入到单片机中,作为输入量进行倍率变换,并经软件编程实现动态扫描,最终在七段译码显示管上显示出温度变化。
该方案的前面部分本应用温度传感器,但试验设备不足,便用0---5V电压代替,之后的过程理论上皆可由实验箱和编程实现,所以具有较高的可行性。
开始
A/D转
换启动
延时
取A/D
延时
输出
倍率转
换
BCD码
转换
动态扫
描显示
(五)硬件电路
5.1总体硬件电路图
基于ADC0809的模数转换电路主要由两部分电路组成:单片机最小系统和ADC0809的电路。如图所示ADC0809电路完成模拟量到数字量的转换,单片机完成接收、存储并处理数据的任务。
5.2单片机最小系统电路
5.2.1最小系统电路图
单片机最小系统电路图主要由主要由8051单片机、复位电路和晶振电路组成。
5.2.2 8051单片机简介
●8位CPU。
●布尔代数处理器,具有位寻址能力。
●128B内部RAM数据存储器,21个专用寄存器。
●4KB内部掩膜ROM程序存储器。
●两个16位可编程定时器/计数器。
●32个(4*8位)双向可独立寻址的I/O接口。
●一个全双工UART(异步串行通信口)。
●5个中断源,两级中断优先级的中断控制器。
●时钟电路,外接晶振和电容可产生1.2~12MHz的时钟频率。
●外部程序存储器寻址空间为64KB,外部数据存储器寻址空间为64KB。
●111条指令,大部分为单字节指令。
●单一+5V电源供电,双列直插40引脚DIP封装。
5.2.3 复位电路
复位电路有两种:上电自动复位和上电/按键手动复位。在这里我们采用上电/按键手动复位,如图所示按下按键SW,电源对电容C充电,使RESET端快速达到高电平。松开按键,电容向芯片的内阻放电,恢复为低电平,从而使单片机可靠复位。既可上电复位,又可按键复位。一般R1选470欧姆,R2选8.2K欧姆,C选22uF。
5.2.4 晶振电路
晶振电路的两端接到单片机的18(XTAL2)和19(XTAL1)引脚,晶振采用12MHZ,两端各接一个30pF的电容。如图所示
5.3 模数转换电路
5.3.1 模数转换电路图
模数转换电路主要由ADC0809模数转换芯片、74LS02或非门、CC4013D触发器(ALE引脚4分频)
5.3.2 ADC0809芯片简介
●分辨率为8位
●误差正负1LSB,无漏码。
●转换时间为100us(当外部时钟输入频率Fc=640kHz时)。
●很容易与微处理器连接。
●单一电源+5V,采用单一电源+5V供电时,量程为0~5V。
●无须零位或满量程调整。
●带有锁存控制逻辑的8通道多路转换开关,便于选择8路中的任一路进行转
换。
●DIP28封装
●使用5V或采用经调整模拟间距的电压基准工作。
●带锁存器的三态数据输出。
5.3.3 ADC0809 CLK信号产生电路
ADC0809的CLK(10号引脚)所需的时钟输入信号的典型值为640kHz,鉴于
640kHz频率的获取比较复杂,我们采用在8051的ALE信号的基础上分频的方法。单片机的晶振频率为12MHz时,ALE引脚上的频率大约为2MHz,经4分频后能达到500kHz,4分频是由CC4013两个D触发器实现的,如图所示,在D触发器中,
当Q与D相接时,输出是输入的二分频。所以采用两个D触发器就能实现4分
频。
5.3.4 ADC0809的8路通道的地址锁存电路
地址锁存采用74LS373芯片,如图所示,OE(1号引脚)端接低电平,锁存控制端LE(11号引脚)可以直接与CPU的地址锁存控制信号ALE相连,当LE 为高电平时,Q端等于D端,当LE端从高电平下降到低电平时,输入端D的数据锁入锁存器中。D0~D7与8051的P0.0~P0.7相连。A0,A1,A2分别接ADC0809的A,B,C端,当A0A1A2=000~111时,就实现了对ADC0809的8路通道的选择。
5.3.5 读写控制信号电路
读写控制电路由或非门实现的。74LS02是4输入或非门,其中A,B为输入,
W经或非门后的信号YSA与ADC0809的ALE Y为输出。8051的P2.7(A15)和R
端和START端相连,平时START因译码器输入端P2.7上的高电平而封锁,当单片机执行如下程序后
MOV DPTR,#7FF8H
MOV @DPTR,A
就启动了AD转换。
R经或非门后的信号YOE与ADC0809的OE端相连,但单8051的P2.7(A15)和D
片机执行如下程序后,
MOV DPTR,#7FF8H
MOV A,@DPTR
就可以获取AD的转换结果。
转换数据的传送可以有定时传送方式,查询方式和中断方式,在这里我们采用中断方式。因为ADC0809的转换时间为100us,而单片机执行一条指令的时间为1us,它们之间相差两个数量级。而且采用中断方式的好处在于可以不占用CPU 硬件资源,使CPU可以在转换的过程中完成其他的工作。将ADC0809的EOC引脚经或非门后与8051的INT0相连,这样就能在外部中断子程序中实现对采集来的数据进行存储。
(六)软件设计
6.1 Keil uVison 3 集成开发环境简介
Keil uVison 3 是一套在windows环境下8051单片机整合性开发接口(Intergrated Development Environment,IDE )软件,它具备完善的项目管理系统,提供编译器以编写程序及说明文件,可以协助编写,翻译(包含C语言的编译器C51 Compiler以及A51组译器)除错和测试嵌入式系统程序。其中C51compiler是C语言软件开发系统。与汇编相比,C语言在功能,结构性,可读性和可维护性等方面有明显的优势,而且易学易用,Keil C51软件提供丰富的库函数和功能强大的集成开发调试工具,全Windows界面。另外,重要的一点是只要看一下编译后生成的汇编代码,就能体会到Keil C51生成的目标代码的效率是非常高的。
6.2 主程序
主程序主要是设置数据区的起始地址为60H,模拟路数为8路,设置外部中断方式是下降沿触发,开总中断,向ADC0809写数据启动AD转换。
开始
设数据区的起始地址,模拟路数
设外部中断方式,开总中断
启动AD转换
转换数据结束,触发中断
响应中断服务子程序T0
中断返回
结束
图1 主流程图的设计框架
6.3中断服务程序
中断服务程序主要完成取AD转换结果存储,模拟路数自增1,存储区自增1,判断8路是否转换完毕,若完毕则返回。
T0中断服务程序
取AD转换结果,存储
DPTR,R0自增。R2自减
否
R2=0?
是
中断返回
图2 T0中断服务程序流程图
汇编语言代码
ORG 0000H
LJMP MAIN
ORG 0003H
LJMP INT_T0
ORG 0010H
MAIN:
MOV R0,#60H ;数据区起始地址送R0
MOV R2,#08H ;模拟量路数8路
SETB EA
SETB IT0
MOV DPTR,#7FF8H
MOVX @DPTR,A ;启动AD转换
SJMP $ ;等待中断
INT_T0:
MOVX A,@DPTR
MOV @R0,A
INC DPTR
INC R0
DJNZ R2,LOOP
CLR EA
CLR EX0
RETI
LOOP:
MOVX @DPTR,A ;再次启动
RETI
END
C语言代码
#include
#include
#define uchar unsigned char
#define ADC0809 XBYTE[0x7FF8]//ADC0809的地址
#define STO0809 PBYTE[0x60]//将采集来的8路数据存到内存0x60~0x67中去
uchar data R_data[8]={0};
uchar i=0;
uchar idata *p,*q;
void Init()
{
EA=1; CPU开总中断
EX0=1;
IT0=1;
*p=ADC0809;
*q=STO0809;
ADC0809=0x00; //启动ADC0809
}
void main()
{
Init()
while(1)
{;}
}
void Int_t0 interrupt 0 using 1
{
ACC=*p;
R_data[i]=ACC;
*q=ACC; //存入数据区
p++; //模拟路数加1
q++; //存储区指针加1
i++; //数据区指针加1
if(i==8) //判断是否转换完毕。转换完毕关总中断
{
EA=0;
EX0=0
}
}
(七)操作说明
(八)结束语:
刚开始,我们一点思路没有,但是大家很积极,很快找到了A/D转换这个切入
点。由此入手,我们进入了硬件连接阶段,由于对实验箱不是很熟悉,我们连线时也不是很顺利。我们请教了实验室老师,顺利连好了电路。并且了解到,连电路前要关闭电源并且检查线是否是完好的。
接着,我们进入了程序编写阶段。光是这个A/D转换的接口问题我们就研究了很久,到最后换了几个试验箱才完成了对A/D转换功能的验证。模块程序的编写并不是特别难,但是各个模块间的衔接需要仔细思考才能做好。
(九)参考文献