数字式波形发生器课程方案文档格式.docx
- 文档编号:3962056
- 上传时间:2023-05-02
- 格式:DOCX
- 页数:27
- 大小:2.49MB
数字式波形发生器课程方案文档格式.docx
《数字式波形发生器课程方案文档格式.docx》由会员分享,可在线阅读,更多相关《数字式波形发生器课程方案文档格式.docx(27页珍藏版)》请在冰点文库上搜索。
2018.12.25-12.27
设计电路
2
2018.12.28-12.31
安装调试
3
2018.1.1-1.7
分析实验结果并写出设计说明书
主指导教师
日期:
2018年11月28日
引言
波形函数发生器是一种常用的信号源,广泛地应用于电子电路、自动控制系统和教案实验等领域。
本函数发生器采用STC89C52单片机作为控制核心,外围采用数字/模拟转换电路<
DAC0832)、运放电路<
TL082)、按键和LCD显示电路等。
此电路设计清晰,出现故障容易查找错误,操作简单方便。
电路采用STC89C52单片机与一片DAC0832数模转换器组成低频信号发生器。
通过按键控制可分别控制选择输出的幅值和频率,同时用LCD1602显示器显示幅值和频率。
所产生的波形幅值范围为0到12V;
本系统设计简单、性能优良,具有一定的实用性。
一、方案设计
1.系统设计
1.1总体设计思路
根据题目要求,经过仔细考虑,充分考虑各种因素,制定整体设计方案:
以STC89C52单片机为控制核心,P1口接DAC0832信号输入并书面转换,程序控制方波的产生,通过P2口接3个按键,控制幅值电压和频率,由按键选择波形的复制电压和频率输出,由TL082运放实现DAC0832输出电流到电压的转换。
在LCD1602上实时显示频率和幅值。
1.2总体框图
按键控制
单片机
TL082运放电路
输出
DAC0832
转换
1602显示
二.硬件电路
本系统由单片机、波形转换<
D/A)电路、显示接口电路、键盘接口电路等部分组成。
总的硬件电路图为:
1.功能与基本原理
STC89C52外接12M晶振作为时钟频率,并采用电源复位设计。
产生方波程序设计思路:
根据定时器溢出的时间,将频率值换算为定时器溢出的次数,使用变量暂存定时器溢出的次数,当达到规定的次数时,将输出管脚的状态进行改变达到方波的产生。
另外采用查询的方式实现案件的扫描和LCD液晶的显示,中断服务程序实现方波的产生和连续按键的计时功能。
1.189C52单片机简介
89C52的硬件结构:
256字节*8bit内部RAM;
2个16位定时/计数器<
T0、T1),具有四种工作方式;
5个中断源和2级中断优先权;
一个全双工的串行口,具有四种工作方式;
2个时钟引脚XTAL1、XTAL2外接晶体与片内的反相放大器构成了1个震荡器,它为单片机提供了时钟控制信号;
复位电路等。
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波形转换<
D/A)电路
将波形样值的编码转换成模拟值,完成波形输出。
由一片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<
reg52.h>
intrins.h>
#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>
j-->
。
}
voidT0_time(>
interrupt1
TH0=(65536-1000>
/256。
//定时器装初值精确到1mS
TL0=(65536-1000>
%256。
num++。
}
voidkey1_ctr_frq(>
//调频控制按键
if(key1==0>
TR0=0。
_nop_(>
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。
//精确延时1uS
keytemp2++。
key2>
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>
key3>
s++。
//if(s==2>
DA=1。
if(s>
=2>
s=1。
voidinit(>
TMOD=0X01。
//设定定时器0为工作方式1
//进行1ms的精确定时
//定时器装初值
EA=1。
//开总中断
ET0=1。
//开定时器0中断
init_1602(>
voidmain(>
DAdata=0x00。
DA=0。
WR1=0。
init(>
display_1602(0x80,disp1>
display_1602(0x80+0x40,disp2>
while(1>
key3_ctr(>
//if(count==2>
count=0。
if(s==1>
key1_ctr_frq(>
key2_ctr_vol(>
if(num==freq>
//选频
num=0。
count++。
if(count==2>
switch(keytemp2>
case0:
DAdata=Squaretab[0][count]。
break。
case1:
DAdata=Squaretab[1][count]。
case2:
DAdata=Squaretab[2][count]。
case3:
DAdata=Squaretab[3][count]。
case4:
DAdata=Squaretab[4][count]。
case5:
DAdata=Squaretab[5][count]。
case6:
DAdata=Squaretab[6][count]。
}//endSWITCH
}//endif
}//endif
}//endwhile
}//endmain
/////////////////////
液晶1602的初始化程序
#ifndefLCD_1602_H
#defineLCD_1602_H
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>
//延时子函数
for(i=x。
voidwrite_1602_com(ucharcom_1602>
{lcd_busy=0。
lcd_1602_rs=0。
//选择写命令模式
P0=com_1602。
delay_1602(5>
//稍做延时以待数据稳定
lcd_1602_en=1。
//使能端给一高脉冲,因为初始化函数中已经将lcden置为0
//稍做延时
lcd_1602_en=0。
//将使能端置0,以完成高脉冲
voidwrite_1602_data(uchardate_1602>
lcd_1602_rs=1。
P0=date_1602。
voiddisplay_1602(ucharaddr,uchar*temp>
uchari。
write_1602_com(addr>
for(i=0。
i<
16。
i++>
write_1602_data(temp[i]>
。
voidinit_1602(void>
//清除读操作
lcd_1602_rw=0。
//初始化写操作
delay_1602(10>
write_1602_com(0x01>
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频率温度度:
输出信号上升时间<100ns,下降时间<50ns;
输出阻抗<75Ω。
这三个要求由于验证不方便,所以没有检测。
3.6设计和调试遇到的主要问题
3.6.1设计时的主要问题是软件方案上,涉及到51单片机编程,由于没有学单片机,对单片机不熟悉,所以编程时很迷茫,这一大模块是在同学的帮助下得以顺利完成的。
3.6.2第一次观察波形时,达到的波形很不稳定,而且不像方波,仔细检查线路才发现PCB板上某些地方由于洗板子时不小心断路了,用焊锡焊接好后,得到了精确度比较高的方波。
六、实验心得
两周的专业综合设计结束了,本次课程设计题目是数字式波形发生器的设计,虽然设计的时间不是很长,但在这短短的两周时间里确实使我学到了很多东西,在李老师的细心教导和同学的帮助下,我初步学会了使用单片机进行编程,也知道了一个单片机的工作过程,与此同时,还在对一些硬件的使用上,电路板的设计上有了很大的进步,对今后的学习有很大的帮助。
设计刚开始时,我通过老师和同学给的教案讲义,学习了本次使用单片机系统的基本工作原理,了解它的强大功能,用了两天的时间学习初步了解了用C语言对单片机进行编程以及进一步复习了数模转换的工作原理,在老师的指导和同学的指点下,很顺利的完成了这个步骤。
其次,我们要进行的就是编写其它部分的程序,主要是按照设计的任务
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数字式 波形 发生器 课程 方案