专业课程设计基于DAC的波形发生器设计.docx

上传人:b****6 文档编号:6293615 上传时间:2023-01-05 格式:DOCX 页数:18 大小:765.68KB
下载 相关 举报
专业课程设计基于DAC的波形发生器设计.docx_第1页
第1页 / 共18页
专业课程设计基于DAC的波形发生器设计.docx_第2页
第2页 / 共18页
专业课程设计基于DAC的波形发生器设计.docx_第3页
第3页 / 共18页
专业课程设计基于DAC的波形发生器设计.docx_第4页
第4页 / 共18页
专业课程设计基于DAC的波形发生器设计.docx_第5页
第5页 / 共18页
点击查看更多>>
下载资源
资源描述

专业课程设计基于DAC的波形发生器设计.docx

《专业课程设计基于DAC的波形发生器设计.docx》由会员分享,可在线阅读,更多相关《专业课程设计基于DAC的波形发生器设计.docx(18页珍藏版)》请在冰豆网上搜索。

专业课程设计基于DAC的波形发生器设计.docx

专业课程设计基于DAC的波形发生器设计

波形发生器设计

摘要

本设计使用AT89C51单片机做控制,选择8位D/A转换器DAC0832作D/A转换。

硬件方面,首先51熟悉单片机结构和工作原理,连接单片机最小系统。

以后熟悉D/A转换器工作方法,经过分析后选择DAC0832单缓冲开启控制方法,完成电路框图。

深入依据设计要求完成经过独立按键控制D/A输出,作出电路框图和电路原理图。

软件方面:

设计思绪关键表现在两点上。

一是控制,经过程序控制DAC转换和输出,按键消抖,选择对应立即输出波形。

二是产生波形,依据波形特点编写程序以产生对应波形数字信号。

分别经过C语言和汇编语言实现简易波形发生器,输出方波、正弦波、三角波、梯形波和锯齿波,经过独立按键控制分别输出不一样波形。

以KILL和Proteus为设计平台,仿真测试设计结果正确性。

关键字:

51单片机,DAC0832,单缓冲开启控制方法,波形发生器,C语言设计,汇编语言设计

 

第一章绪论

单片微型计算机简称单片机,是经典嵌入式微控制器(MicrocontrollerUnit),常见英文字母缩写MCU表示单片机,单片机又称单片微控制器,它不是完成某一个逻辑功效芯片,而是把一个计算机系统集成到一个芯片上。

单片机由运算器,控制器,存放器,输入输出设备组成,相当于一个微型计算机(最小系统),和计算机相比,单片机缺乏了外围设备等。

概括讲:

一块芯片就成了一台计算机。

它体积小、质量轻、价格廉价、为学习、应用和开发提供了便利条件。

同时,学习使用单片机是了解计算机原理和结构最好选择。

它最早是被用在工业控制领域。

51单片机是现在最流行8位单片机。

51单片机是对全部兼容Intel8031指令系统单片机统称。

该系列单片机始祖是Intel8031单片机,以后伴随Flashrom技术发展,8031单片机取得了长足进展,成为应用最广泛8位单片机之一,其代表型号是ATMEL企业AT89系列,它广泛应用于工业测控系统之中。

很多企业全部有51系列兼容机型推出,以后很长一段时间内将占有大量市场。

51单片机是基础入门一个单片机,还是应用最广泛一个。

需要注意是52系列单片机通常不含有自编程能力。

 

第二章DAC0832及其特征

2.1D/A转换器和单片机接口探究

D/A转换器和单片机接口含有软硬相依性。

在连接过程中要考虑到数据线、地址线、控制线连接。

2.1.1数据线连接

D/A转换器和单片机接口要考虑到两个问题:

一个是位数,当高于8位D/A转换器和8位数据总线51单片机接口时,51单片机数据必需分时输出,这时就必需考虑数据分时传送格式和输出电压“毛刺”问题;二是D/A转化器内部结构,当D/A转换器内部结构没有输入锁存器时,必需在单片机和D/A转换器之间增设锁存器或I/O口。

最常见是8位带锁存端D/A转换器和8位单片机接口,这时只需要将单片机数据总线和D/A转换器8位数据输入端一一对应即可。

2.1.2地址线连接

通常D/A转换器只有片选信号,而没有地址线。

这时单片机地址线采取全译码或部分译码,经译码器输出控制片选信号,也能够用某一位I/O线来控制片选信号。

也有少数D/A转换器有少许地址线,用于选中片内独立寄存器或选择输出通道,这时单片机实施地址线和D/A转换器地址线对应连接。

2.1.3控制线连接

D/A转换器关键有片选信号、写信号、及开启转换信号等,通常由单片机相关引脚或译码器提供。

通常来说,写信号多由单片机

信号控制;开启信号常常由片选信号和写信号组合形式(LE1、LE2)形成,当单片机实施一条输出指令时,传送地址使转换器片选信号有效,由

实现开启。

(具体实现原理见1.2节)

2.2DAC0832认识

图1.1DAC0832管脚结构

2.2.1DAC0832结构

DAC0832结构图1.1所表示,关键由控制逻辑电路、输入寄存器、DAC寄存器和D/A转换器组成。

由上图逻辑控制电路可知:

LE1=(

+

)ILE

LE2=

+

由LE1控制输入寄存器读入数据,由LE2控制输入寄存器向DAC寄存器传输数据,同时开始D/A转换。

2.2.2DAC0832引脚

DAC0832引脚图1.1所表示:

DI0~DI7:

8位数据输入线,高电平有效。

ILE:

数据锁存许可控制输入线,高电平有效。

片选信号输入线,低电平有效。

输入锁存器写选通输入线,负脉冲有效。

输入锁存器信号就是LE1。

LE1负跳变有效。

数据传送控制信号输入线,低电平有效。

DAC寄存器写选通信号输入线,负脉冲有效。

DAC锁存信号就是LE2,LE2负跳变有效。

模拟电流输出线。

模拟电流输出线,采取单极性输出时,

通常接地。

反馈信号输入线。

反馈电阻

被制作在芯片里,用作外接运放反馈电阻,为D/A转换器提供电压输出。

参考电压输入端。

要求外接一精密电压源,电压范围在-10V~+10V之间选定。

经过

符号来改变输出极性。

:

电源接口。

AGND:

模拟地。

DGND:

数字地。

注:

数字信号高频噪声很大,假如模拟信地和数字地混合话,就会把数字噪声传到模拟部分,造成干扰。

假如分开话,高频噪声能够在电源处经过滤波来消除掉。

2.2.3DAC0832开启控制方法

DAC0832有三种开启控制方法:

(1)直通方法:

信号全部接地,ILE信号引脚接高电平,只要数据传送到数据线上,两级锁存器同时开始工作,并开启D/A转换,即转换器处于非受控状态。

在这种工作方法下,转换器数据线不能直接和单片机数据线(P0.0~P0.7)相连接。

因为P0口分时复用为低8位地址总线和数据总线,对输出无锁存能力,会使转换器输出不确定。

不过能够将ADC数据线连接到某个I/O口上,实施端口输出指令(MOVPxA)即可开启一次D/A转换。

这种方法极少采取。

(2)单缓冲方法:

两级锁存器接收同一个控制,比如将

直接接地,8位ADC锁存器处于非受控状态,只有8位输入锁存器处于受控状态,即此时仅有LE1控制ADC。

这种方法在不要求多个模拟同时输出时采取。

(3)双缓冲方法:

俩个锁存器全部处于受控状态,单片机要对转换器进行两步写操作:

第一次实施指令使LE1有效,称作第一级缓冲,第二次实施指令使LE2有效,称作第二级缓冲。

这种方法优点是数据接收和开启转换能够异步进行,可在D/A转换同时接收下一个转换数据,以提升转换速度,还能够实现多个转换器同时开启转换,同时输出。

第三章硬件设计

3.1开启方法选择

因为本设计要求设计一个波形发生器,要求能产生正弦波、方波、三角波、梯形波、锯齿波,而且由按键控制输出波形。

故各个波形输出并非同时输出,而是由按键控制,单个输出,而且本例只需要一个DAC,假如选择双缓冲方法就会加大无须要难度;直通方法不能有效控制DAC转换,转换时可能会出现数据流失。

故选择单缓冲开启控制方法来驱动DAC0832。

3.2框图设计

依据2.1节判定,选择AT89c51单片机作控制,实现电路框

以下:

图2.1硬件设计框图

3.3电路图设计

依据以上框图,选择+12V基准电压,选择一级集成运放作放大电路,连接A/D转换电路图以下:

图2.2单片机和ADC连接方法

另外加上单片机最小系统,用P1口控制输出波形,电路连接以下:

图2.3电路原理图

第四章程序设计

4.1程序步骤图

4.1.1程序设计思绪

(1)因为要使用到按钮(本例中选择独立按键),必需使用到键盘扫描,首先要进行键盘消抖,然后经过扫描确定是哪个按键被按下,经过I/O口(本例中为P1口)数据判定选择五种波形中哪一个;

(2)依据

(1)中结果,经过编程产生各个波形数字信号;

(3)控制DAC转换数字信号为模拟信号。

程序框图以下:

图3.1程序设计思绪

4.1.2步骤图

在本步骤图中分别以k1、k2、k3、k4、k5代表单片机I/O口P1.0、P1.1、P1.2、P1.3、P1.4;设置flag1、flag2、flag3、flag4、flag5为1时分别代表方波、正弦波、三角波、梯形波、锯齿波。

当确定按键按下时,令相对应flagx=1,然后用连续判定程序来选择将要输出波形。

程序实现了只需按一下按钮便可连续输出对应波形。

步骤图以下:

图3.2程序步骤图

 

4.2用C语言实现

依据程序步骤图用C语言编程,得C语言实现代码为:

#include

#include

#defineDAC0832XBYTE[0x7fff]

sbitk1=P1^0;

sbitk2=P1^1;

sbitk3=P1^2;

sbitk4=P1^3;

sbitk5=P1^4;

intflag1=0;

intflag2=0;

intflag3=0;

intflag4=0;

intflag5=0;

 

unsignedcharcodezhengxian[256]={此处省略为正弦波数字信号};

voiddelay()//延时程序

{

inti;

for(i=0;i<1000;i++);

}

voidpanduan(void)//函数panduan用于扫描按键状态,判定输出波形

{

if(k1==1){//按键消抖

delay();

if(k1==1)//经过赋值flag选择波形

flag1=1;

flag2=0;

flag3=0;

flag4=0;

flag5=0;

}

if(k2==1){

delay();

if(k2==1)

flag1=0;

flag2=1;

flag3=0;

flag4=0;

flag5=0;

}

if(k3==1){

delay();

if(k3==1)

flag1=0;

flag2=0;

flag3=1;

flag4=0;

flag5=0;

}

if(k4==1){

delay();

if(k4==1)

flag1=0;

flag2=0;

flag3=0;

flag4=1;

flag5=0;

}

if(k5==1){

delay();

if(k5==1)

flag1=0;

flag2=0;

flag3=0;

flag4=0;

flag5=1;

}

}

voidboxing(void)//函数boxing用于产生选择好波形

{

if(flag1==1)//产生方波

{

DAC0832=0x00;

delay();

DAC0832=0xff;

delay();

}

elseif(flag2==1)//产生正弦波

{

inti;

for(i=0;i<256;i++){

DAC0832=zhengxian[i];

}

}

elseif(flag3==1)//三角波

{

inti;

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

DAC0832=i;

for(i=255;i>0;i--)

DAC0832=i;

}

elseif(flag4==1)//梯形波

{

inti;

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

DAC0832=0;

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

DAC0832=i;

for(i=255;i>0;i--)

DAC0832=0XFF;

for(i=255;i>0;i--)

DAC0832=i;

}

elseif(flag5==1)//锯齿波

{

inti;

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

DAC0832=i;

}

}

voidmain(){//主函数

P1=0x00;

while

(1)

{

panduan();

boxing();

}

}

4.3用汇编语言实现

在用C语言实现设计以后,我又尝试使用汇编语言完成任务,因为对汇编语言还不够熟悉,只做到了以开关控制矩形波、三角波、梯形波和锯齿波。

程序为:

START:

MOVDPTR,#7FFFH

MOVA,#00

LOOP:

MOVR0,#00

MOVP1,R0

MOVR0,P1

JBP1.0,K0

JBP1.1,K1

JBP1.2,K2

JBP1.3,K3

K0:

AJMPLOOP1

K1:

AJMPLOOP2

K2:

AJMPLOOP3

K3:

AJMPLOOP4

LOOP1:

MOVA,#00;LOOP1:

方波

MOVX@DPTR,A

MOVR1,#255

MOVR4,#255

DEL1:

DJNZR1,$

DJNZR4,DEL1

MOVA,#255

MOVX@DPTR,A

MOVR1,#255

MOVR4,#255

DEL2:

DJNZR1,$

DJNZR4,DEL2

LJMPLOOP

LOOP2:

;LOOP3:

三角波形

UP:

MOVX@DPTR,A

INCA

CJNEA,#0FFH,UP

DOWN:

MOVX@DPTR,A

DECA

CJNEA,#00H,DOWN

LJMPLOOP

LOOP3:

;LOOP4:

梯形波

UP1:

MOVX@DPTR,A;上升阶段

INCA

CJNEA,#0FFH,UP1

MOVX@DPTR,A;上底

MOVR1,#255

DJNZR1,$

DOWN1:

MOVX@DPTR,A;下降阶段

DECA

CJNEA,#00H,DOWN1

MOVX@DPTR,A;下底

MOVR1,#255

DJNZR1,$

LJMPLOOP

LOOP4:

MOVX@DPTR,A;LOOP5:

锯齿波

INCA

MOVR1,#10

DJNZR1,$

LJMPLOOP

END

 

第五章Proteus仿真及结果

将程序代码在Kill中编译输出.HEX文件,烧写进单片机中,用Proteus仿真软件仿真,得到输出波形为:

5.1方波:

 

图5.1输出方波波形

5.2正弦波:

 

图5.2输出正弦波形

5.3三角波:

 

图5.3输出三角波形

5.4梯形波:

 

图5.4输出梯形波形

 

5.5锯齿波:

图5.5输出锯齿波形

设计心得:

经过这次课程设计,让我对单片机结构和功效愈加熟悉了,同时也加强了我对KILL、Proteus熟悉度,让我在实践中利用所学知识,加强了我对单片机相关知识和数电模电知识掌握。

单片机设计是一个复杂过程,需要经历硬件设计和软件设计,硬件设计首先需要依据设计目标画出框图,依据设计需要选择元件连接成电路图。

软件设计则需要依据电路原理图考虑到三条线:

控制线、地址线、数据线,依据所要实现结果画出程序步骤图,依据步骤图编写程序代码。

在KILL中调试排错。

在硬件和软件设计完成后,还需将二者结合,也就是说将程序产生.HEX文件烧写进单片机,硬件和软件必需衔接合适,不然就不能正常运行,必需改变电路结构或改变程序。

比如在这次设计中,针对DAC0832单缓冲开启控制方法程序就不能直接考入直通方法电路中,反之亦然。

电路有很多个连法,程序也是灵活多变,只有正真了解它们原理,才能利用自如。

我在单片机课程中学习了汇编语言,于是在此次设计尝试使用汇编实现目标,发觉自己对汇编代码还不熟悉,对汇编设计思绪还不明确,经验还不足,还需努力,多用多练。

我深知此次在仿真层面设计和真正焊接制作实物还有很大差距,以后日子里还要愈加上进,认真学习知识,熟练利用知识,让自己更上一层楼!

 

参考文件:

[1]李建忠《单片机原理及应用第三版》西安电子科技大学出版社

[2]谭浩强《C语言程序设计第四版》清华大学出版社

[3]阎石《数字电子技术基础第五版》高等教育出版社

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 表格模板 > 合同协议

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1