单片机原理与应用(C51编程+Proteus仿真) 课件 8模数和数模转换_第1页
单片机原理与应用(C51编程+Proteus仿真) 课件 8模数和数模转换_第2页
单片机原理与应用(C51编程+Proteus仿真) 课件 8模数和数模转换_第3页
单片机原理与应用(C51编程+Proteus仿真) 课件 8模数和数模转换_第4页
单片机原理与应用(C51编程+Proteus仿真) 课件 8模数和数模转换_第5页
已阅读5页,还剩36页未读 继续免费阅读

下载本文档

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

文档简介

A/D、D/A转换接口设计08

介绍典型的并行A/D、D/A转换芯片与AT89S52单片机的硬件接口设计以及程序设计。08A/D、D/A转换接口设计01单片机与A/D转换器的接口设计02单片机与D/A转换器的接口设计8.1单片机与A/D转换器的接口设计8.1.1模数转换基本知识8.1单片机与A/D转换器的接口设计8.1单片机与A/D转换器的接口设计8.1.1模数转换基本知识模拟量和数字量转换原理1(a)△=(1/8)V(a)(b)(b)△/2=(1/15)V8.1单片机与A/D转换器的接口设计8.1.1模数转换基本知识A/D转换类型2积分型优点:转换精度高,抗干扰性能好,价格便宜。缺点:转换速度较慢,主要用于速度要求不高的场合。

逐次比较型优点:速度较快,精度较高,转换时间在几μs到几百μs之间。

型优点:具有积分式和逐次比较式ADC的双重优点,

线性度好,转换速度和分辨率高。按转换原理分类

8.1单片机与A/D转换器的接口设计8.1.1模数转换基本知识A/D转换类型2按转换精度分类

低精度:8位以下中等精度:9~12位高精度:13~16位超高精度:16为以上按转换速度分类

低速:>1ms中速:1ms~10us高速:10us~1us超高速:<1us分辨率:用数字量的位数表示。8位、12位、16位转换时间:完成一次转换所需要的时间量程:所能转换的输入电压范围转换误差:实际输出的数字量与理论输出数字量之间的差别A/D转换器主要性能指标基于ADC0804的数字电压表仿真实例8.1.2介绍模数转换器ADC0804的使用。一、设计方案二、ADC0804芯片简介三、硬件电路设计四、软件设计五、仿真任务要求:采用单片机设计0~5V数字电压表,数码管实时显示,保留2位小数。一、设计方案分析:单片机采用AT89S520~5V连续可变的电压是一个模拟信号,所以,要先经模数转换器转换为数字量再送入单片机。任务要求:采用单片机设计0~5V数字电压表,数码管实时显示,保留2位小数。图8-3数字电压表设计方案逐次比较型A/D转换器在精度、速度和价格上比较适中,在单片机系统设计中应用较为广泛。本例中采用ADC0804实现0~5V模拟电压的转换。选用4位共阳数码管显示。二、ADC0804芯片简介(1)模拟输入电压范围:0V~5V(2)分辨率:8位(0~255)

(3)

转换时间:100us(4)参考电压:2.5V(5)工作电压:5V(6)逐次比较型模数转换二、ADC0804芯片简介启动转换时序/*****启动A/D转换函数*****/voidstart(){

ADC_CS=0;

ADC_WR=1;_nop_();//延时

ADC_WR=0;//启动AD转换

nop_();ADC_WR=1; }ADC_CSADC_WR二、ADC0804芯片简介读取数据时序/*****读取A/D转换函数*****/unsignedcharreadADC(){

P1=0xff;

ADC_CS=0;ADC_RD=1;_nop_();ADC_RD=0;_nop_();

addat=P1;//读取AD转换值

ADC_RD=1;

returnaddat; }ADC_CSADC_RDP1三

、硬件电路设计任务要求:采用单片机设计0~5V数字电压表,数码管实时显示,保留2位小数。四、

软件设计任务要求:采用单片机设计0~5V数字电压表,数码管实时显示,保留2位小数。(1)ADC0804启动模拟电压采集:调用start()函数。(2)读取ADC0804转换结果:调用readADC()函数。

转换时间:100us

方法3:

等待100us后读取结果方法1:INTR引脚与单片机一个IO口线相连,查询为低电平,读取结果方法2:INTR引脚与单片机的外部中断引脚相连,该引脚由高变低触发中断,在中断服务程序中读取结果四、

软件设计任务要求:采用单片机设计0~5V数字电压表,数码管实时显示,保留2位小数。(3)模数转换的数字量需要转换为电压,然后再送数码管显示。标度变换:将对应的数字量大小转换成有量纲的被测工程量数值。0V5V待求电压(显示的采集电压)0255addat(转换后的数字量)模拟电压=数字量*最大电压/255四、

软件设计任务要求:采用单片机设计0~5V数字电压表,数码管实时显示,保留2位小数。(4)0~5V模拟电压,保留2位小数,显示在数码管上。所以需要把模拟电

压进行百、十、个位分离。bai=dat*Vref/255;//标度变换

shi=dat*10*Vref/255%10;//小数后1位

ge=dat*100*Vref/255%10;//小数后第2位模拟电压=数字量*最大电压/2552.50=128*5/255C语言中:128*5/255=2整数部分128*5*10/255%10=5取电压小数后1位128*5*100/255%10=0取电压小数后第2位四、

软件设计任务要求:采用单片机设计0~5V数字电压表,数码管实时显示,保留2位小数。(5)4位共阳数码管动态显示voiddisplay(uchardat){ucharbai,shi,ge;bai=dat*Vref/255;//标度变换

shi=dat*10*Vref/255%10;//小数后1位

ge=dat*100*Vref/255%10;//小数后2位

w0=1;P0=table[ge];//显示个位

delayms(1);P0=0xff;w0=0;w1=1;P0=table[shi];//显示十位

delayms(1);P0=0xff;w1=0;w2=1;P0=0x7f;//显示小数点

delayms(1);P0=0xff;w2=0;w3=1;P0=table[bai];//显示百位

delayms(1);P0=0xff;w3=0;}/***毫秒延时子函数***/voiddelayms(uintz){

uintx,y;

for(x=z;x>0;x--)

for(y=111;y>0;y--);}ucharcodetable[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x88,0x83,

0xC6,0xA1,0x86,0x8E};//共阳段码任务要求:采用单片机设计0~5V数字电压表,数码管实时显示,保留2位小数。#include<reg52.h>#include<intrins.h>#defineucharunsignedchar#defineuintunsignedintsbitADC_CS=P2^4;//ADC0804片选端sbitADC_RD=P2^5;//ADC0804读信号sbitADC_WR=P2^6;//ADC0804启动信号sbitw0=P2^0;//个位sbitw1=P2^1;//十位sbitw2=P2^2;//小数点sbitw3=P2^3;//百位voiddelayms(uintz);//延时函数voidstart();//启动一次AD转换ucharreadADC();//读取AD转换结果voiddisplay(uchardat);//数码管显示ucharcodetable[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92, 0x82,0xF8,0x80,0x90};//共阳段码uchari=0,addat,Vref=5;voidmain(){while(1){

start();//启动A/D转换

display(addat);//显示,也是延时

readADC();//读取A/D转换

}}五、仿真1在KeilC中编写、编译代码,生成hex文件。任务要求:采用单片机设计0~5V数字电压表,数码管实时显示,保留2位小数。五、仿真2在Preteus中绘制电路图,加载hex文件运行。任务要求:采用单片机设计0~5V数字电压表,数码管实时显示,保留2位小数。8.1单片机与A/D转换器的接口设计二、基于ADC0804的数字电压表仿真实例任务要求:设计0~5V数字电压表,通过数码管实时显示,保留2位小数。ADC0804芯片简介(1)高阻抗状态输出(2)分辨率:8位(0~255)(3)存取时间:135ms(4)转换时间:100ms(5)总误差:-1~+1LSB(6)工作温度:ADC0804C为0度~70度;ADC0804L为-40度~85度(7)模拟输入电压范围:0V~5V(8)参考电压:2.5V(9)工作电压:5V(10)输出为三态结构(11)逐次比较型模数转换8.1单片机与A/D转换器的接口设计软件滤波#definea10ucharvalue;ucharfilter(){

ucharnew_value;

new_value=readADC();

if((new_value-value>a)||(value-new_value>a)returnvalue;returnnew_value;}1.限幅滤波法将本次采样值与上次采样值进行比较,若它们的差值超出允许范围,则认为本次采样值受到了干扰,应予易除。8.1单片机与A/D转换器的接口设计软件滤波#defineN11ucharfilter(){

ucharvalue_buf[N],temp;ucharcount,i,j;for(count=0;count<N;count++;)

{

value_buf[count]=readADC();delay();

}2.中值滤波法对被测参数连续采样N次(N应为奇数);将这些采样值进行排序(增序或降序);选取中间值为本次采样值。for(j=0;j<N-1;j++)//排序(增序)

{for(i=0;i<N-j;i++){if(value_buf[i]>value_buf[i+1]){

temp=value_buf[i];

value_buf[i]=value_buf[i+1];

value_buf[i+1]=temp;

}

}}returnvalue_buf[(N-1)/2];//返回中值}8.1单片机与A/D转换器的接口设计软件滤波#defineN12ucharfilter(){uintsum=0;for(count=0;count<N;count++){sum+=readADC();delay();}return(uchar)(sum/N);}3.算数平均滤波

N个连续采样值(分别为X1至XN)相加,然后取其算术平均值作为本次测量的滤波器输出值。8.1单片机与A/D转换器的接口设计软件滤波#defineN12ucharvalue_buf[N];//N的值可根据具体实际情况进行选取uchari=0;ucharADCRESULT;ucharfilter(){ucharcount;uintsum=0;value__buf[i++]=readADC();//读取模数转换结果if(i==N)i=0;for(count=0;count<N;count++)sum+=value__buf[count];return(uchar)(sum/N);}4.滑动平均滤波法

把n个采样值看成一个队列,队列长度为n,每进行一次采样,就把最新的采样值放入队尾,而扔掉原来队首的一个采样值,这样在队列中始终有n个”最新”采样值。对队列中的n个采样值进行平均,得到新滤波值。8.2单片机与D/A转换器的接口设计8.2.1D/A转换器概述D/A转换器的基本原理1

8.2单片机与D/A转换器的接口设计8.2.1D/A转换器概述D/A转换器的参数指标2分辨率用输入数字量的位数表示D/A转换器的分辨率DAC常可分为8位、10位、12位以及16位。建立时间从输入数字量变到输出达到终值误差±(1/2)LSB时所需的时间。快速的D/A转换器的建立时间可达1μS转换精度表示D/A转换器实际输出的模拟量与理论输出模拟量之间的差别。误差值应低于LSB/28.2单片机与D/A转换器的接口设计8.2.1D/A转换器概述D/A转换器的参数指标2输出形式电流输出模数转换器电压输出模数转换器接口形式带锁存器模数转换器不带锁存器模数转换器在输出端加运算放大器即可转换为电压输出接口时要另加锁存器可直接在数据总线上,而不需另加锁存器。基于DAC0832的波形发生器设计8.2.2介绍数模转换器DAC0832的使用。任务要求:设计波形信号发生器,通过按键控制产生三角波和锯齿波。一、DAC0832芯片简介二、硬件电路设计三、软件设计四、仿真一、DAC0832芯片简介分辨率8位;单电源供电,从+5V~+15V均可正常工作;基准电压的范围为±10V;电流建立时间为1μs;电流输出;可单缓冲输入、双缓冲输入或直接数字输入。一、DAC0832芯片简介直通方式单缓冲方式一、DAC0832芯片简介双缓冲方式

当需要两路模拟量同步输出时可采用双缓冲方式。0832(1)0832(2)P25=0;P26=1;P24=0;P24=0;P27=1;P27=1;

送x

P25=1;P24=1;P25=1;P26=0;P24=0;P24=0;P27=1;P27=1;

送Y

P24=1;P26=1;P27=0;P27=0;P24=0;P24=0;

送x送Y

P27=1;X数据锁存到0832(1)8位DAC寄存器Y数据锁存到0832(2)8位DAC寄存器X、Y数据同时输出到8位D/A转换器一、DAC0832芯片简介单极性输出方式双极性输出方式参考电压输出为负电压输出为正电压转换的数字量D/A转换器的分辨率一、DAC0832芯片简介D/A转换器控制时序DAC0832的一次转换操作时序为:DAC0832的连续转换操作时序为:二

、硬件电路设计任务要求:设计波形信号发生器,通过按键控制产生三角波和锯齿波。三、

软件设计任务要求:设计波形信号发生器,通过按键控制产生三角波和锯齿波。(1)三角波产生产生原理

单片机将数字量0~255按每次递增1的方式送至DAC0832数据口,增至255后,再按255~0每次递减的方式送至DAC0832,再重复上述过程。voidTriangle(void){uchari;for(i=0;i<255;i++){

dac0832_data=i;

delayms(1);}for(i=255;i>1;i--){

dac0832_data=i;

delayms(1);

}}(2)锯齿波的产生原理单片机将数字量0~255按每次递增1的方式送至DAC0832数据口,增至255后,再增1则溢出清0,重复上述过程。voidSawtooth(void)

{uchari;for(i=0;i<255;i++)

{

dac0832_data=i;}}三、

软件设计任务要求:设计波形信号发生器,通过按键控制产生三角波和锯齿波。voidDAC0832_start(void){dac_cs=0;dac_wr1=0;}(4)按键控制:

P3.2控制产生三角波

P3.3控制产生锯齿波。①查询方式:

②中断方式:sbitkey1=P3^2;//三角波控制按键sbitkey2=P3^3;//锯齿波控制按键任务要求:设计波形信号发生器,通过按键控制产生三角波和锯齿波。#include<reg52.h>#defineucharunsignedchar#defineuintunsignedint#definedac0832_dataP1sbitdac_cs=P2^0;sbitdac_wr1=P2^1;sbitkey1=P3^2;//三角波控制按键sbitkey2=P3^3;//锯齿波控制按键voiddelayms(uintz);voidDAC0832_start(void);//启动DAC函数voidTriangle(void);//三角波函数voidSawtooth(void);//锯齿波函数voidkeyscan();//按键检测函数ucharflag;voidmain(){DAC0832_start();while(1){

keyscan();

switch(flag)

{

case1:Triangle();break;//三角波

case2:Sawtooth();break;//锯齿波

defaul

温馨提示

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

评论

0/150

提交评论