《单片机系统设计仿真与应用》课件第6章_第1页
《单片机系统设计仿真与应用》课件第6章_第2页
《单片机系统设计仿真与应用》课件第6章_第3页
《单片机系统设计仿真与应用》课件第6章_第4页
《单片机系统设计仿真与应用》课件第6章_第5页
已阅读5页,还剩52页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

6.1A/D和D/A器件工作原理6.2ADC0809数据采集6.3用DAC0832产生任意波形

6.4用DAC0832控制直流电机转速6.5小结习题

6.1.1ADC0809的结构和工作原理

ADC0809是8位逐次逼近式单片A/D转换芯片,可对8路0~5 V的输入模拟电压信号分时进行转换。ADC0809的分辨率为8位,转换时间约100 

s,含锁存控制的8路多路开关,输出有三态缓冲器控制,单5 V电源供电。

1.ADC0809的引脚和内部结构

ADC0809的引脚和内部结构如图6-1所示。6.1A/D和D/A器件工作原理图6-1ADC0809的引脚图和内部结构图

ADC0809芯片有28条引脚,采用双列直插式封装,其引脚分布如下:

(1)电源线(4条)。

(2)输入线(11条)。

模拟输入中的一路,在ALE有效时被锁存。选通8路模拟输入的真值表如表6-1所示。

(3)输出线(8条)。表6-1ADDA、ADDB、ADDC真值表

2.ADC0809的工作原理

ADC0809的工作过程是:首先输入3位地址,并使ALE=1,将地址存入地址锁存器中。此地址经译码选通8路模拟输入之一到比较器。主要控制信号说明如图6-2所示。图6-2ADC0809控制信号6.1.2DAC0832的结构和工作原理

DAC0832是8位双缓冲器A/D转换芯片,可对8路0~5 V的输入模拟电压信号分时进行转换。单电源供电,从+5~+15 V均可正常工作。基准电压的范围为-10~+10 V;电流建立时间为1 ms;CMOS工艺,低功耗20 mW。

1.DAC0832的引脚和内部结构

DAC0832的引脚和内部结构如图6-3所示。图6-3DAC0832的引脚图和内部结构图

DAC0832的输出方式为电流输出:IOUT1+ IOUT2= 常数。

DAC0832是电流输出,为了取得电压输出,需在电流输出端接运算放大器,RFE即为运算放大器的反馈电阻端。运算放大器的接法如图6-4所示。

DAC0832输出电压值为-D×VREF/255。其中,D为待转换的8位输入数据。图6-4运算放大器接法

2.DAC0832与8051的接口电路

DAC0832的与CPU的连接可采用三种方式:直通方式、单缓冲方式和双缓冲方式。

1)直通方式

直通方式是指D7~D0上一出现数字量,DAC即可将它们转换成模拟量,见图6-5。图6-5直通方式

2)单缓冲方式

所谓单缓冲方式就是使0832的两个输入寄存器中有一个处于直通方式,而另一个处于受控的锁存方式,或者说两个输入寄存器同时受控的方式。在实际应用中,如果只有一路模拟量输出,或虽有几路模拟量但并不要求同步输出的情况,就可采用单缓冲方式。单缓冲方式的电路有多种形式,其中一种接线如图6-6所示。图6-6单缓冲方式

3)双缓冲方式

所谓双缓冲方式,就是把DAC0832的两个锁存器都接成受控锁存方式。双缓冲DAC0832的连接如图6-7所示。图6-7DAC0832的双缓冲方式连接6.1.3单片机与DAC0832和ADC0809的接口设计

1.原理图设计

单片机与DAC0832和ADC0809的接口原理图如图6-8和图6-9所示。图6-8顶层原理图图6-9ADC/DAC子原理图

2.原理图说明

对于ADC0809和单片机的接口说明:

(1)CLOCK引脚接单片机的端口P3.4,单片机利用定时器在该端口产生固定频率的方波。

(2) ADC0809的转换结果,一方面由单片机读取进行数据处理。

(3)使用了ADC0809的两路输入模拟量,模拟量采用可变电阻调节。对于DAC0832和单片机的接口说明:

(1) DAC0832与8051的连接采用单缓冲方式,两个输入寄存器同时受控。

(2)放大器选用UA741,将电流输出转换为电压输出。

(3) DAC0832的片选信号通过74LS138提供,为使片选信号有效,必须使P2.7和P2.4为高电平。此原理图中所使用的元器件根据其名称可在Proteus中查找得到。6.2.1设计要求

将模拟量转换为数字量,具体要求如下:

(1)共有两路模拟信号,信号电压范围为0~5 V,轮流采集。

(2)将两路模拟信号的转换结果,用LED灯显示,并送数码管显示。

(3)报警功能。分别设定每一路的上限值和下限值,当超过设定界限值时,通过指示灯闪烁或喇叭发声,表示报警。

(4)将采集的数据存入内存。

(5)分别采用查询方式和中断方式实现。6.2ADC0809数据采集6.2.2设计说明

本设计仅完成功能(1)和功能(2),并采用查询方式实现。

ADC0809的工作过程参见图6-2,下面再作简单说明:首先输入3位地址,并使ALE=1,将地址存入地址锁存器中,此地址经译码选通8路模拟输入之一到比较器。6.2.3设计源码

根据程序流程图,可以写出ADC0809采集数据的源程序,如例6-1。图6-10程序流程图【例6-1】ADC0809采集源码。

#include<reg51.h>

#include<absacc.h>

#defineucharunsignedchar

//下面地址定义中包含使能138芯片的信息

#definePA8255XBYTE[0x80fc]//8255端口A的地址

#definePB8255XBYTE[0x80fd]//8255端口B的地址

#definePC8255XBYTE[0x80fe]//8255端口C的地址

#defineCOM8255XBYTE[0x80ff]//8255命令字的地址//ADC0809引脚定义

sbitAD_EOC=P2^1;

sbitAD_selA=P3^2; //只使用2路模拟信号输入

sbitAD_OE=P3^3;

sbitAD_CLK=P3^4;

sbitAD_ST=P3^5;

voiddelay(ucharx);

voidinit_8255(void);/*************采集数据函数:使用AD器件采集数据*****************/

//使用ADC0809采样通道0/1输入模拟信号,转换后进行显示

voidadc_0809(void)

{

ucharled_table[16]={0x3f,0x6,0x5b,0x4f,0x66,0x6d,0x7d,

 0x7,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};

//0~F共16个数,用于段控 staticucharcnt=0; //用于交替选择通道0和通道1

uchartmp=0;

if(((cnt++)%2)==0)

{

AD_selA=0;//选择通道0

}

else

{

AD_selA=1; //选择通道1 }

AD_ST=0;AD_ST=1;AD_ST=0; //启动转换

while(AD_EOC==0);//等待转换结束

AD_OE=1;

//允许输出

delay(2);

//下面几行代码将AD转换输出到数码管上

for(tmp=0;tmp<100;tmp++) //显示结果延时一段时间

{ PB8255=0x0f;

PA8255=led_table[(P1&0x0f)]; //读取低4位并显示在一个数码管上

delay(5);

PB8255=0x0e;

PA8255=led_table[((P1>>4)&0x0f)];

//读取高4位并显示在一个数码管上

delay(5);

}

AD_OE=0; //关闭输出}

/*************中断处理函数:使用AD器件采集数据*****************/

//T0定时器中断提供时钟信号,一次定时10/36 ms,作为AD采样时钟:约20 kHz

voidTimer0_Int(void)interrupt1using1

{

AD_CLK=!AD_CLK; //ADC0809采样时钟信号,约20 kHz

}

/*************定时器初始化函数*****************/

voidTime_init(void)

{ TMOD=0x02;TH0=0x6;TL0=0x6;

//定时器模式与初值设定

IE=0x82; //开中断

TR0=1; //启动定时器0

}

/*************main函数:循环采集并显示数据*****************/

voidmain(void)

{ init_8255();

//8255命令字,PA/PB均为输出,PC低4位输入,高4位输出

Time_init();

//定时器初始化,为DA转化提供时钟

while(1)

{

adc_0809();

}

}6.2.4仿真结果

将例6-1编译下载后进行仿真,仿真结果如图6-11和图6-12所示。图6-11数码管上显示的仿真结果从图6-11可以看出,数码管上交替显示FF和80,这是输入的两路模拟量经模数转换器转换后得到的数字量。该数字量也可以由子图中的LED灯表示出来,如图6-12所示,根据图中LED灯的亮灭情况可知,前者代表数值0x80,后者代表数值0xff。图6-12LED灯显示的模数转换结果6.3.1设计要求

设计并输出模拟信号,具体要求如下:

(1)模拟信号为锯齿波,周期为1 s。

(2)模拟信号为正弦波,周期为1 s。

(3)模拟信号为三角波,周期为1 s。

(4)交替产生上述三种波,周期为3 s。6.3用DAC0832产生任意波形6.3.2设计说明

本设计仅完成设计要求(1),产生锯齿波,周期为1 s。其他设计要求,在理解设计要求(1)的基础上,由读者自行完成。

图6-13为产生锯齿波的流程图。图6-13产生锯齿波的流程图6.3.3设计源码

根据程序流程图,可以写出DAC0832产生锯齿波的源程序,如例6-2。

【例6-2】DAC0832产生锯齿波源码。

#include<reg51.h>

#include<absacc.h>

#defineucharunsignedchar

//下面地址定义中包含使能138芯片的信息

#defineDAC0832XBYTE[0x90ff]//DAC0832的地址

//函数声明

voiddelay(ucharx);/*************使用DA器件生成锯齿波*****************/

//向DAC0832反复递增输出0~255的数字量,经模数转换及电流到电压的转换后输出锯齿波

//输出电压值为:-I/255*VREF

voiddac_0832(void)

{

ucharI=0;

for(I=0;I<255;I++)

{

DAC0832=I;

delay(2);

}

}//主函数

voidmain(void)

{

while(1)

{

//数模转换DAC

dac_0832();

}

}6.3.4仿真结果

将源程序编译下载后进行仿真,仿真结果如图6-14所示。图6-14数字示波器显示的由数拟转换得出的锯齿波6.4.1设计要求

控制直流电机的转速为5档,5档的输入电压分别为:+1 V、+2 V、+3 V、+4 V和+5 V。具体设计要求如下:

(1) 5档转速自动轮换运行,每档转速运行的时间均为2 min。

(2)使用5个按键来控制5档转速,每个按键对应着1档转速,这样当按下某个按键时,则直流电机就以相应的转速运转。

(3)使用一个按键来控制5档转速,系统运行后直流电机首先以1档转速运行。6.4用DAC0832控制直流电机转速6.4.2设计说明

直流电机的转速跟驱动电压值呈线性关系,驱动电压值越大,直流电机的转速也就越高。

本设计仅完成设计要求(1),5档转速自动轮换运行,每档转速运行的时间均为2 min。设计要求(2)和设计要求(3)则在掌握设计要求(1)和矩阵键盘原理的基础上,很容易实现,设计流程图如图6-15所示。图6-15软件流程图6.4.3设计源码

根据程序流程图,可以写出DAC0832控制直流电机转速的源程序,如例6-3。

【例6-3】DAC0832控制直流电机转速源码。

voiddac_0832_dc(void)

{

ucharI=0;

for(I=0;I<5;I++)

{

DAC0832=255*(I+1)/5;

delay_min(2);//延时2 min

}

}6.4.4仿真结果

将源程序编译下载后进行仿真,仿真结果

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论