数字式波形发生器课程方案.docx

上传人:b****3 文档编号:12883493 上传时间:2023-04-22 格式:DOCX 页数:27 大小:2.49MB
下载 相关 举报
数字式波形发生器课程方案.docx_第1页
第1页 / 共27页
数字式波形发生器课程方案.docx_第2页
第2页 / 共27页
数字式波形发生器课程方案.docx_第3页
第3页 / 共27页
数字式波形发生器课程方案.docx_第4页
第4页 / 共27页
数字式波形发生器课程方案.docx_第5页
第5页 / 共27页
点击查看更多>>
下载资源
资源描述

数字式波形发生器课程方案.docx

《数字式波形发生器课程方案.docx》由会员分享,可在线阅读,更多相关《数字式波形发生器课程方案.docx(27页珍藏版)》请在冰豆网上搜索。

数字式波形发生器课程方案.docx

数字式波形发生器课程方案

南华大学电气工程学院

《电子技术课程设计》任务书

 

设计题目:

数字式波形发生器

专业:

电子信息工程

学生姓名:

唐磊

学号:

20084470114

起迄日期:

2018年2月18日~201年3月1日

指导教师:

李月华

教研室主任:

朱卫华

 

2018年3月3日

《电子技术课程设计》任务书

1.课程设计的内容和要求<包括原始数据、技术要求、工作要求等):

1、设计并制作频率可调且具有高稳定度的方波发生器;

2、频率范围:

0.01HZ~100KHZ,频率调节分度为0.01HZ;

3、频率温度度:

10-6/天;

4、具有输出频率设定与显示功能,显示位数为9位;

5、输出波形的占空比应在47%~53%之间;

6、输出幅度为0~12V,分级可调,且能显示幅度,幅度与频率显示交替进行;

7、输出信号上升时间<100ns,下降时间<50ns;

8、输出阻抗<75Ω

 

2.对课程设计成果的要求〔包括图表<或实物)等硬件要求〕:

设计电路,安装调试或仿真,分析实验结果,并写出设计说明书,语言流畅简洁,文字不得少于3500字。

要求图纸布局合理,符合工程要求,使用Protel软件绘出原理图,器件的选择要有计算依据。

3.主要参考文献:

[1]康华光.电子技术基础数字部分<第五版)[M].北京:

高等教育出版社,2006.

[2]大学生电子设计联盟

4.课程设计工作进度计划:

序号

起迄日期

工作内容

1

2018.12.25-12.27

设计电路

2

2018.12.28-12.31

安装调试

3

2018.1.1-1.7

分析实验结果并写出设计说明书

主指导教师

李月华

日期:

2018年11月28日

引言

波形函数发生器是一种常用的信号源,广泛地应用于电子电路、自动控制系统和教案实验等领域。

本函数发生器采用STC89C52单片机作为控制核心,外围采用数字/模拟转换电路

此电路设计清晰,出现故障容易查找错误,操作简单方便。

电路采用STC89C52单片机与一片DAC0832数模转换器组成低频信号发生器。

通过按键控制可分别控制选择输出的幅值和频率,同时用LCD1602显示器显示幅值和频率。

所产生的波形幅值范围为0到12V;本系统设计简单、性能优良,具有一定的实用性。

一、方案设计

1.系统设计

1.1总体设计思路

根据题目要求,经过仔细考虑,充分考虑各种因素,制定整体设计方案:

以STC89C52单片机为控制核心,P1口接DAC0832信号输入并书面转换,程序控制方波的产生,通过P2口接3个按键,控制幅值电压和频率,由按键选择波形的复制电压和频率输出,由TL082运放实现DAC0832输出电流到电压的转换。

在LCD1602上实时显示频率和幅值。

1.2总体框图

按键控制

单片机

TL082运放电路

输出

DAC0832

转换

1602显示

二.硬件电路

本系统由单片机、波形转换

总的硬件电路图为:

1.功能与基本原理

STC89C52外接12M晶振作为时钟频率,并采用电源复位设计。

产生方波程序设计思路:

根据定时器溢出的时间,将频率值换算为定时器溢出的次数,使用变量暂存定时器溢出的次数,当达到规定的次数时,将输出管脚的状态进行改变达到方波的产生。

另外采用查询的方式实现案件的扫描和LCD液晶的显示,中断服务程序实现方波的产生和连续按键的计时功能。

1.189C52单片机简介

89C52的硬件结构:

256字节*8bit内部RAM;2个16位定时/计数器

1.2时钟电路

本次设计采用的是内部时钟方式,即C52内部有一个用于构成震荡器的高增益反相放大器,该高增益反相放大器的输入端为芯片引脚XTAL1,输出端为引脚XTAL2。

这两个引脚跨接石英晶体震荡器和微调电容,就构成一个稳定的自激震荡器,图3.2是C52内部时钟方式的震荡器电路。

图3.2C51内部时钟方式的震荡器电路

电路中电容C1和C2典型值通常选择为30pF左右,晶振的振荡频率的范围通常是在1.2MHz~12MHz之间,晶振的频率越高,则系统的时钟频率也就越高,单片机的运行速度也就越快。

1.3复位电路

89C51的复位是由外部的复位电路来实现的,复位结构如图3.3所示。

图3.3复位结构

复位引脚RST通过一个施密特触发器与复位电路相连,施密特触发器用来控制噪声,在每个机器周期的S5P2,施密特触发器的输出电平由复位电路采样一次,然后才能得到内部复位操作所需要的信号。

2键盘接口电路

本设计中有三个按键,分别为总控制按键、频率转换按键、幅值转换按键。

其与单片机的连接如图所示。

3显示电路

功能:

驱动LCD1602液晶显示,扫描按钮

由LCD1602液晶显示器和三个按钮组成。

当第一个按键按下一次后,程序开始扫描,再由第二个按键控制显示幅值,第三个按键控制显示频率。

有单片机的P0口和P2口将数字信号发送到LCD1602。

LCD1602是专门用于显示字母、数字、符号等点阵式LCD,它的外接电压也是5V.扫描利用软件程序实现,其与单片机的连接如图所示。

4电源电路

单片机采用5V电源,DAC基准电压为15V,运放TL082采用正负15V供电。

因此都采用外接电源供电。

其电路图如图。

5波形转换

功能:

将波形样值的编码转换成模拟值,完成波形输出。

由一片0832和TL082运放组成。

DAC0832是具有20条引线的CMOS器件,它内部具有两级数据寄存器,完成8为电流D/A转换,固不需要外加电路,输出波形为正负电压,0832是电流输出型,示波器上显示的波形,通常需要电压信号,电流信号到电压信号的额转换可以由运算放大器TL082实现。

在D/A转换电路中,很重要的一个参数就是基准电压<参考电压),设计中要求的最大幅值电压为12V,系统可以选用正负15V作为运算放大器供电的电源,同时用正15V作为DAC0832的基准电压。

单片机向0832发送数字编码,产生不同的输出。

利用采样定理,8位D/A转换器对应-15V~15V的电压输出,其输入数字量应为00H~FFH。

在-15V~15V的电压范围内产生波形,方波一个周期分成两个点,一个时钟中断向89C51送一个点,经过D/A转换后输出就可以得到方波。

数字编码0x7f,0x90,0xa1,0xb2,0xc3,0xd4,0xe5分别对应D/A输出的0V,2V,4V,6V,8V,10V,12V。

单片机的晶振控制输出周期的速度,也就是控制输出的波形频率。

这样输出的方波幅值和频率都得到控制。

三、课设所需设备及芯片功能介绍

1.所需设备

单片机最小开发系统,1602液晶屏一块,DAC0832一片,Tl082集成运放一片,PC机一台,其他器件任选。

2.芯片功能介绍

8位D/A转换器DAC0832简介:

DAC0832当今世界在以电子信是8位分辨率的D/A转换集成芯片,与微处理器完全兼容,这个系列的芯片以其价格低廉、接口简单、转换控制容易等优点,在单片机应用系统中得到了广泛的应用。

这类D/A转换器由8位输入锁存器,8位DAC寄存器,8位DA转换电路及转换控制电路构成。

1、DAC0832的引脚及功能:

DAC0832芯片是一种具有两个输入数据寄存器的8位DAC,它能直接与MCS51单片机接口,其主要特性参数如下:

·分辨率为8位;

·电流稳定时间1us。

·可单缓冲、双缓冲或直接数字输入;

·只需在满量程和下调整其线性度;

·单一电源供电<+5V~+15V);

·低功耗,200mW。

为便于DAC0832的使用,特将其应用特性总结如下:

·DAC0832是微处理器兼容型D/A转换器,可以充分利用微处理器的控制能力实现对D/A转换的控制。

这种芯片有许多控制引脚,可以和微处理器控制线相连,接受微处理器的控制,如ILE、/CS、/WR1、/WR2、/XFER端。

·有两级锁存控制功能,能够实现多通道D/A的同步转换输出。

·DAC0832内部无参考电压源;须外接参考电压源。

·DAC0832为电流输入型D/A转换器,要获得模拟电压输出时,需要外加转换电路。

DAC0832的引脚图及逻辑结构如下图:

图1DAC0832结构框图及引脚排列

DAC0832各引脚的功能如下:

DI0~DI7:

数据输入线。

ILE:

数据允许锁存信号,高电平有效;

/CS:

输入寄存器选择信号,低电平有效。

/WR1为输入寄存器的写选通信号。

输入寄存器的锁存信号/LE1由ILE、/CS、/WR1的逻辑组合产生。

当ILE为高电平、/CS为低电平、/WR1输入负脉冲时,在/LE1产生正脉冲;/LE1为高电平,输入锁存器的状态随数据输入线的状态变化,/LE1的负跳变将数据线上的信息锁入输入寄存器。

/XFER:

数据传送信号,低电平有效。

/WR2为DAC寄存器的写选通信号。

DAC寄存器的锁存信号/LE2,由/XEFR、/WR2的逻辑组合产生。

当/XFER为低电平,/WR2输入负脉冲,则在/LE2产生正脉冲;/LE2为高电平是时,DAC寄存器的输出和输入寄存器的状态一致,/LE2负跳变,输入寄存器的内容打入DAC寄存器。

VREF:

基准电源输入引脚。

Rfb:

反馈信号输入引脚,反馈电阻在芯片内部。

IOUT1、IOUT2:

电流输出引脚。

电流IOUT1、IOUT2的和为常数,IOUT1、IOUT2随DAC寄存器的内容线性变化。

VCC:

电源输入引脚。

AGND:

模拟信号地

DGND:

数字地。

2、DAC0832三种数据输入方式:

<1)双缓冲方式:

即数据经过双重缓冲后再送入D/A转换电路,执行两次写操作才能完成一次D/A转换。

这种方式可在D/A转换的同时,进行下一个数据的输入,可提高转换速率。

更为重要的是,这种方式特别适用于要求同时输出

多个模拟量的场合。

此时,要用多片DAC0832组成模拟输出系统,每片对应一个模拟量。

<2)单缓冲方式:

不需要多个模拟量同时输出时,可采用此种方式。

此时两个寄存器之一处于直通状态,输入数据只经过一级缓冲送入D/A转换电路。

这种方式只需执行一次写操作,即可完成D/A转换。

<3)直通方式:

此时两个寄存器均处于直通状态,因此要将

端都接数字地,ILE接高电平,使LE1、LE2均为高电平,致使两个锁存寄存器同时处于放行直通状态,数据直接送入D/A转换电路进行D/A转换。

这种方式可用于一些不采用微机的控制系统中或其他不须0832缓冲数据的情况。

四. 程序编写

#include

#include

#include"LCD_1602_H.h"

#defineucharunsignedchar

#defineuintunsignedint

#defineDAdataP1

ucharcodea[6][7]={"1000.00",//频率显示

"0100.00",

"0010.00",

"0001.00",

"0000.10",

"0000.05"}。

 

ucharcodeSquaretab[7][2]={//输出的幅度数组

{0x7f,0x7f},//0V

{0x90,0x6e},//正负2V

{0xa1,0x5d},//正负4V

{0xb2,0x4c},//正负6V

{0xc3,0x3b},//正负8V

{0xd4,0x2a},//正负10V

{0xe5,0x19}}。

//正负12V

ucharcodedisp1[]={"Voltage:

000V"}。

ucharcodedisp2[]={"Frq:

0000000.00Hz"}。

uinti,num,k,freq=0。

ucharcount,s。

ucharkeytemp=0,keytemp2=0。

sbitDA=P2^3。

sbitWR1=P2^4。

sbitkey1=P2^5。

sbitkey2=P2^6。

sbitkey3=P2^7。

 

voiddelay(uintz>

{

uinti,j。

for(i=z。

i>0。

i-->

for(j=110。

j>0。

j-->。

}

voidT0_time(>interrupt1

{

TH0=(65536-1000>/256。

//定时器装初值精确到1mS

TL0=(65536-1000>%256。

num++。

}

voidkey1_ctr_frq(>//调频控制按键

{

if(key1==0>

{

TR0=0。

_nop_(>。

if(key1==0>

{

keytemp++。

while(!

key1>

{

TR0=1。

if(keytemp==1>//通过按键按下的次数控制频率

{

freq=1。

//选择频率1KHz

}//while

if(keytemp==2>//选择频率100Hz

{

freq=10。

}

if(keytemp==3>//选择频率10Hz

{

freq=100。

}

if(keytemp==4>//选择频率1HZ

{

freq=1000。

}

if(keytemp==5>//选择频率0.1Hz

{

freq=10000。

}

if(keytemp==6>//选择频率0.05HZ

{

freq=20000。

}

if(keytemp>=6>keytemp=1。

write_1602_com(0xc0+7>。

for(k=0。

k<7。

k++>

{

write_1602_data(a[keytemp][k]>。

delay(2>。

}//FOR

}

}

}

}

voidkey2_ctr_vol(>//调幅控制按键

{//控制幅值分别为0V、2V、4V、6V、8V、10V、12V

ucharshi,ge,vol。

if(key2==0>//功能按键

{TR0=0。

_nop_(>。

//精确延时1uS

if(key2==0>

{

keytemp2++。

while(!

key2>

{

TR0=1。

vol=keytemp2*2。

shi=vol/10。

ge=vol%10。

write_1602_com(0x80+12>。

write_1602_data(0x30+shi>。

write_1602_data(0x30+ge>。

 

if(keytemp2>=7>

{

keytemp2=0。

}

}

}

}

}

voidkey3_ctr(>//总控制按键

{

if(key3==0>//功能按键

{

TR0=0。

_nop_(>。

//精确延时1uS

if(key3==0>

{

delay(2>。

while(!

key3>

{

s++。

//if(s==2>DA=1。

if(s>=2>s=1。

}

}

}

}

voidinit(>

{

TMOD=0X01。

//设定定时器0为工作方式1

TH0=(65536-1000>/256。

//进行1ms的精确定时

TL0=(65536-1000>%256。

//定时器装初值

EA=1。

//开总中断

ET0=1。

//开定时器0中断

TR0=1。

init_1602(>。

}

voidmain(>

{

DAdata=0x00。

DA=0。

WR1=0。

init(>。

display_1602(0x80,disp1>。

_nop_(>。

display_1602(0x80+0x40,disp2>。

_nop_(>。

 

while(1>

{

key3_ctr(>。

//if(count==2>count=0。

if(s==1>//总控制按键

{

key1_ctr_frq(>。

key2_ctr_vol(>。

_nop_(>。

if(num==freq>//选频

{

num=0。

count++。

if(count==2>count=0。

switch(keytemp2>

{

case0:

DAdata=Squaretab[0][count]。

break。

case1:

DAdata=Squaretab[1][count]。

break。

case2:

DAdata=Squaretab[2][count]。

break。

case3:

DAdata=Squaretab[3][count]。

break。

case4:

DAdata=Squaretab[4][count]。

break。

case5:

DAdata=Squaretab[5][count]。

break。

case6:

DAdata=Squaretab[6][count]。

break。

}//endSWITCH

}//endif

}//endif

}//endwhile

}//endmain

/////////////////////

液晶1602的初始化程序

#ifndefLCD_1602_H

#defineLCD_1602_H

#defineucharunsignedchar

#defineuintunsignedint

ucharcom_1602,date_1602。

sbitlcd_1602_rs=P2^0。

sbitlcd_1602_rw=P2^1。

sbitlcd_1602_en=P2^2。

sbitlcd_busy=P0^7。

voiddelay_1602(uintx>//延时子函数

{

uinti,j。

for(i=x。

i>0。

i-->

for(j=110。

j>0。

j-->。

}

voidwrite_1602_com(ucharcom_1602>

{lcd_busy=0。

lcd_1602_rs=0。

//选择写命令模式

P0=com_1602。

delay_1602(5>。

//稍做延时以待数据稳定

lcd_1602_en=1。

//使能端给一高脉冲,因为初始化函数中已经将lcden置为0

delay_1602(5>。

//稍做延时

lcd_1602_en=0。

//将使能端置0,以完成高脉冲

}

voidwrite_1602_data(uchardate_1602>

{lcd_busy=0。

lcd_1602_rs=1。

P0=date_1602。

delay_1602(5>。

lcd_1602_en=1。

delay_1602(5>。

lcd_1602_en=0。

}

voiddisplay_1602(ucharaddr,uchar*temp>

{

uchari。

write_1602_com(addr>。

delay_1602(5>。

for(i=0。

i<16。

i++>

{

write_1602_data(temp[i]>。

delay_1602(5>。

}

}

voidinit_1602(void>

{

lcd_1602_rs=0。

//清除读操作

lcd_1602_rw=0。

//初始化写操作

lcd_1602_en=1。

delay_1602(10>。

write_1602_com(0x01>。

delay_1602(10>。

write_1602_com(0x02>。

//光标归位,此处不设置可能出现错误

write_1602_com(0x38>。

//设置16X2显示,5X7点阵,8位数据接口

write_1602_com(0x0c>。

//设置开显示,且显示光标并闪烁

write_1602_com(0x06>。

//写一字符后光标自动加一

}

五、系统调试与测试结果

1.硬件调试

整个硬件调试过程基本顺利,由于采用了分单元模块制作,各单元电路工作稳定,给调试工作带来很大的方便。

1.1放大模块部分在实物模拟时,出现发送信号不稳定、跳变的问题。

经过仔细检查电路线路路径和连线问题,最终发现PCB板子上某些连线存在断路的问题,于是用焊锡焊好,从而得以解决。

1.2调试过程中,由于某些元器件参数的问题,在频率要求上没有达到预期效果,频率最低未能达到0.01H,最高也不能达到100KHZ。

各单元调试通过以后,进行整机调试,调试结果显示,整个系统能够正常工作。

2.软件调试

由于对51系列单片机编程不是很熟悉,在软件的仿真调试过程中请同学帮了忙,在同学的帮助和指导下,调试也顺利完成。

3.调试结果

3.1液晶显示结果图

3.2方波波形图

3.3三角波波形

3.4正弦波波形

3.5实验结果与实际要求对比

3.5.1经液晶显示可得频率范围为0.05Hz~1KHz,频率调节分度为0.01HZ,最大频率和最小频率都没有达到老师的要求,经分析原因是元器件参数的选择原因,焊接电路板时由于找不到7.5K的电阻,就用了8K的电阻代替了。

所以最大频率和最小频率都没有达到老师的要求。

3.5.2具有输出频率设定与显示功能,显示位数为9位;输出波形的占空比应在47%~53%之间;输出幅度为0~12V,分级可调,且能显示幅度,幅度与频率显示交替进行;这三点要求均基本达到。

3.3.3由示波器观察到的方波图形可得的方波稳定准确度高,失真少,只是有一些杂波干扰。

3.5.4频率温度度:

10-6/天;输出信号上升时间<100ns,下降时间<50ns;输出阻抗<75Ω。

这三个要求由于验证不方便,所以没有检测。

3.6设计和调试遇到的主要问题

3.6.1设计时的主要问题是软件方案上,涉及到51单片机编程,由于没有学单片机,对单片机不熟悉,所以编程时很迷茫,这一大模块是在同学的帮助下得以顺利完成的。

3.6.2第一次观察波形时,达到的波形很不稳定,而且不像方波,仔细检查线路才发现PCB板上某些地方由于洗板子时不小心断路了,用焊锡焊接好后,得到了精确度比较高的方波。

六、实验心得

两周的专业综合设计结束了,本次课程设计题目是数字式波形发生器的设计,虽然设计的时间不是很长,但在这短短的两周时间里确实使我学到了很多东西,在李老师的细心教导和同学的帮助下,我初步学会了使用单片机进行编程,也知道了一个单片机的工作过程,与此同时,还在对一些硬件的使用上,电路板的设计上有了很大的进步,对今后的学习有很大的帮助。

设计刚开始时,我通过老师和同学给的教案讲义,学习了本次使用单片机系统的基本工作原理,了解它的强大功能,用了两天的时间学习初步了解了用C语言对单片机进行编程以及进一步复习了数模转换的工作原理,在老师的指导和同学的指点下,很顺利的完成了这个步骤。

其次,我们要进行的就是编写其它部分的程序,主要是按照设计的任务

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

当前位置:首页 > 工程科技 > 冶金矿山地质

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

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