基于51单片机的高频函数信号发生器.docx

上传人:b****1 文档编号:10767559 上传时间:2023-05-27 格式:DOCX 页数:22 大小:296.04KB
下载 相关 举报
基于51单片机的高频函数信号发生器.docx_第1页
第1页 / 共22页
基于51单片机的高频函数信号发生器.docx_第2页
第2页 / 共22页
基于51单片机的高频函数信号发生器.docx_第3页
第3页 / 共22页
基于51单片机的高频函数信号发生器.docx_第4页
第4页 / 共22页
基于51单片机的高频函数信号发生器.docx_第5页
第5页 / 共22页
基于51单片机的高频函数信号发生器.docx_第6页
第6页 / 共22页
基于51单片机的高频函数信号发生器.docx_第7页
第7页 / 共22页
基于51单片机的高频函数信号发生器.docx_第8页
第8页 / 共22页
基于51单片机的高频函数信号发生器.docx_第9页
第9页 / 共22页
基于51单片机的高频函数信号发生器.docx_第10页
第10页 / 共22页
基于51单片机的高频函数信号发生器.docx_第11页
第11页 / 共22页
基于51单片机的高频函数信号发生器.docx_第12页
第12页 / 共22页
基于51单片机的高频函数信号发生器.docx_第13页
第13页 / 共22页
基于51单片机的高频函数信号发生器.docx_第14页
第14页 / 共22页
基于51单片机的高频函数信号发生器.docx_第15页
第15页 / 共22页
基于51单片机的高频函数信号发生器.docx_第16页
第16页 / 共22页
基于51单片机的高频函数信号发生器.docx_第17页
第17页 / 共22页
基于51单片机的高频函数信号发生器.docx_第18页
第18页 / 共22页
基于51单片机的高频函数信号发生器.docx_第19页
第19页 / 共22页
基于51单片机的高频函数信号发生器.docx_第20页
第20页 / 共22页
亲,该文档总共22页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

基于51单片机的高频函数信号发生器.docx

《基于51单片机的高频函数信号发生器.docx》由会员分享,可在线阅读,更多相关《基于51单片机的高频函数信号发生器.docx(22页珍藏版)》请在冰点文库上搜索。

基于51单片机的高频函数信号发生器.docx

基于51单片机的高频函数信号发生器

 

函数信号发生器设计报告

 

参赛人员:

朱秋

王嘉文

房开兰

指导教师:

***

 

二00九年七月十四日

摘要

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

本函数发生器采用STC89C52单片机作为控制核心,外围采用数字/模拟转换电路(DAC0832)、运放电路(uA741)、倍频电路(CD4046)、按键和LCD显示电路等。

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

函数信号发生器,它具有价格低、性能高和在低频范围内稳定性好、操作方便、体积小、耗电少等特点。

由于采用了uA741运算放大器和滤波电路,使其电路更加具有较高的稳定性能,性能比高。

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

通过按键控制可产生方波、三角波、正弦波,同时用LCD1602显示幅值和频率。

所产生的波形VP-P范围为0~5V,由倍频电路使频率范围为100Hz~1MHz,波形准确并且平滑。

本系统设计简单、性能优良,具有一定的实用性。

 

关键词:

单片机;倍频;调频;调幅;LCD1602

 

Abstract

 

Waveformgeneratorisacommonsignalsource,widelyusedinelectroniccircuits,automaticcontrolsystemsandexperimentsinareassuchasteaching.FunctiongeneratorusedasacontrolcoreSTC89C52single-chip,externaldigital/analogconvertercircuit(DAC0832),operationalamplifiercircuit(uA741),frequency-doublingcircuit(CD4046),andbuttonsandLCDdisplaycircuit.STC89C52circuitandasingle-chipdigitalDAC0832DigitaltoAnalogcomponentoflow-frequencysignalgenerator.Functionsignalgenerator,ithasalowprice,high-performanceandlow-frequencyrangeofgoodstability,convenientoperation,smallsize,lowpowerconsumptionandsoon.UA741Asaresultoftheoperationalamplifierandfiltercircuittocircuitwithhighstabilityandmoreperformance,highperformance.Thiscircuitclears,easytofindfailureerror,simpleandconvenient.

Keyscanbegeneratedthroughcontrolofsquarewave,trianglewave,sinewave,LCDdisplayatthesametimewiththeamplitudeandfrequency.WaveformgeneratedbyVP-Prangeof0~5V,sothatbythemultipliercircuitforfrequencyrange92.592593Hz~217.3913Hz,accurateandsmoothwaveform.Thesystemisdesignedtobesimple,excellentperformance,withacertaindegreeofpracticality.

 

Keywords:

microcomputer;frequency;FM;AM;LCD1602

 

 

一、系统方案

题目要求实现的任务是设计并制作一个函数信号发生器,能产生正弦波,方波,三角波,要求不用DDS和专用的波形产生芯片,频率范围100Hz~1MHz,幅度0~5V,方波占空比可调,实时显示频率和幅度。

根据要求对下面方案进行论证与比较。

1、1信号发生部分

方案一:

采用模拟分立元件或单片压控函数发生器,可产生正弦波,方波,三角波,通过调整外部元件可改变输出频率,但采用模拟器件由于元件分散性太大,即使使用单片函数发生器,参数也与外部元件有关,外接的电阻电容对参数影响很大,因而产生的频率稳定性较差,精度低,抗干扰能力低,成本也高,而且灵活性较差,不能实现任意波形以及波形运算输出等智能化的功能。

方案二:

采用锁相式频率合成方案。

锁相式频率合成是一个高稳定度和精确度的大量离散频率的技术,它在一定程度上解决了既要频率稳定精确,又要频率在较大范围可变的矛盾。

但频率受VCO可变频率范围的影响,高低频率比不可能做的很高,而且只能产生方波或正弦波,不能满足任意波形的要求。

方案三:

采用单片机和数模/转换DAC0832实现波形的产生。

波形的产生是通过STC89C52执行方波波形发生程序,向D/A转换器的输入端按一定的规律发生数据,从而在D/A转换电路的输出端得到相应的电压波形。

通过CD4046与CD4518分频实现倍频,已达到最高1MHz的频率。

在89C52的P2口接5个按扭,通过软件编程来选择各种波形、幅值电压和频率,每种波形对应一个按钮。

此方案的有点是电路原理比较简单,实现起来比较容易。

经比较,方案三能更好地实现题目要求,三种波形的产生可由程序控制,并通过按键选择波形输出,在示波器上显示波形。

波形的周期与频率步进也可以用程序改变,方波占空比通过按键加减,具有线路简单、结构紧凑等优点。

在本设计的基础上,加上LCD显示器,则可通过按钮设定所需要的波形频率,并在LCD上显示频率、幅值电压。

输出波形稳定,精度高,滤波好,抗干扰效果好,连接简单,性价比高。

因此我们设计中采用方案三。

1、2显示部分

方案一:

数码管显示,由于本题要求实时显示输出信号的幅度,频率,而数码管不能显示字符。

方案二:

LED点阵显示,LED点阵显示虽然能显示字符和数字,但显示效果不好,且不易编程。

方案三:

LCD液晶显示,LCD液晶不但能显示字符和数字,而且显示效果较好,容易编程实现。

二、系统设计

2、1总体设计思路

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

以STC89C52单片机为控制核心,P0口接DAC0832信号输入并数模转换,程序控制产生三种波形,通过P1口接8个按键,控制频率、幅值和占空比,由按键选择三种波形的输出。

由uA741运放实现DAC0832输出电流到电压的转换,通过CD4046与CD4060组成的100倍频电路,尽量达到题目频率要求。

在LCD1602上实时显示频率与幅值,波形在示波器上显示。

2、2总体框图

本系统总体框图如图2、1所示。

图2.1系统框图

三、硬件电路

本系统由单片机、波形转换(D/A)电路、显示接口电路、倍频电路等四部分构成。

电路图附在后面。

3、1单片机电路

3、1、1功能与基本原理

功能:

形成扫描码,键值识别、键处理、参数设置;形成显示段码;产生定时中断;形成波形的数字编码,并输出到D/A接口电路和显示驱动电路。

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

复位电路采用上电复位,它的工作原理是,通电时,电容两端相当于短路,于是RST引脚上为高电平,然后电源通过对电容充电。

RST端电压慢慢下降,降到一定程序,即为低电平,单片机开始工作。

产生方波程序思路:

根据定时器溢出的时间,将频率值换算为定时器溢出的次数(T1_over_num)。

使用变量(T1_cnt)暂存定时器T1的溢出次数,当达到规定的次数(T1_over_num)时,将输出管脚的状态取反达到方波的产生。

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

3、1、2资源分配

软、硬件设计是设计中不可缺少的,为了满足功能和指标的要求,资源分配为:

单片机用12M晶振,P0口与DAC0832相连;P1口接八个按键,实现频率、幅度、占空比的调节,以及波形选择;P2口接LCD1602液晶显示器,实时显示频率与幅值。

3、2波形转换(D/A)电路

功能:

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

由一片0832和uA741运放组成。

DAC0832是一个具有两个输入数据寄存器的8位DAC。

目前生产的DAC芯片分为两类,一类芯片内部设置有数据寄存器,不需要外加电路就可以直接与微型计算机接口。

另一类芯片内部没有数据寄存器,输出信号随数据输入线的状态变化而变化,因此不能直接与微型计算机接口,必须通过并行接口与微型计算机接口。

DAC0832是具有20条引线的双列直插式CMOS器件,它内部具有两级数据寄存器,完成8位电流D/A转换,故不需要外加电路。

0832是电流输出型,示波器上显示波形,通常需要电压信号,电流信号到电压信号的转换可以由运算放大器uA741实现。

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

先利用采样定理对各波形进行抽样,然后把各采样值进行编码,收到的数字量存入各个波形表,执行程序时通过查表方法依次取出,经过D/A转换后输出就可以得到波形。

假如N个点构成波形的一个周期,则0832输出N个样值点后,样值点形成运动轨迹,即一个周期。

重复输出N个点,成为第二个周期。

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

这样就控制了输出的波形及其幅值和频率。

具体连接如图3、1所示。

图3、1D/A转换电路

 

3、3显示接口电路

功能:

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

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

当某一按钮按下时,扫描程序扫描到之后,通过P2口将数字信号发送到LCD1602。

LCD1602种专门用于显示字母、数字、符号等点阵式LCD,它的外接电压也是+5V。

扫描利用软件程序实现,当某一按键按下时,扫描程序立即检测到,随后调用子程序,执行相应的功能。

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

图3、2显示接口电路

 

3、4倍频电路

功能:

实现100倍频,使输出频率达到题目要求。

CD4046是通用的CMOS锁相环集成电路,其特点是电源电压范围宽(为3V-18V),输入阻抗高(约100MΩ),动态功耗小,在中心频率f0为10kHz下功耗仅为600μW,属微功耗器件。

CD4518是一个同步加计数器,在一个封装中含有两个可互换二/十进制计数器,其功能引脚分别为1~7和9~{15}.该CD4518计数器是单路系列脉冲输入(1脚或2脚;9脚或10脚),4路BCD码信号输出(3脚~6脚;{11}脚~{14}脚)。

由锁相环CD4046与计数器CD4518实现100倍倍频。

当从14脚输入频率f1的信号时,在3脚(相位比较信号输入信号)、4脚(压控振荡器输出信号)之间接计数器4518,输出端4脚频率f2=100f1。

具体电路连接如图3、3所示。

图3、3倍频电路

四、软件设计及流程

主程序和子程序都放在89S52单片机中。

主程序的功能是:

开机以后负责查键,即做键盘扫描及显示工作,然后根据用户所按的键转到相应的子程序进行处理。

子程序的功能有:

延时子程序程序、中断子程序、调幅子程序、调频子程序、显示等。

主程序流程图为:

五、调试与测试结果

采用分别调试各个单元模块,调通后再进行各单元电路联机统调的方法,提高调试效率。

5、1硬件调试

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

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

经过仔细检查电路线路路径和线路连接问题,最终发现电路在连接时出现未连接牢固的问题,从而得以解决。

2)调试过程中,锁相环倍频电路未能实现100倍频,没有达到预期效果,频率未能达到1MHz。

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

5、2软件调试

由于对51系列单片机编程比较熟悉,在软件的仿真调试过程中没有遇到太大的问题。

各软件功能均正常实现。

六、结束语

经过近几个月的锻炼和学习,我们学到了许多书本上没有的知识,从方案的论证、课题的选择、电路原理,到电路上元器件的焊接、电路的调试,程序的编写,调试下载,一步步,我们收获很大。

在设计中,我们力求硬件电路简单,充分发挥软件灵活方面的特点,满足系统设计要求。

这中间,我们也遇到了许多困难,在老师的帮助下,一个个也都战胜了。

由于我们这个团队接触单片机时间还不长,有很多东西我们还没有学好,学精,所以,设计的方案可能不是最好的,但我们已经尽到我们最大努力来完成此次作品,希望取得好的结果,能学到更加多得知识。

所以,在以后的学习中,我们要更加努力,才能处于不败之地。

在此,要感谢我们的指导老师,给我们进行了很多的辅导,不仅在技术上给了我很大帮助,也在系统需求和设计方面给予了我很大帮助。

老师的谆谆教导,使我们受益匪浅。

七、参考文献

[1]李勋,刘源.单片机实用教程.北京:

北京航空航天大学出版社,2000

[2]李珍付,植桐.单片机原理与应用技术.北京:

清华大学出版社,2003

[3]李朝清.单片机原理及接口技术.北京:

北京航空航天大学出版社,1999

[4]胡汉才.单片机原理及系统设计.北京:

清华大学出版社,2002

[5]万福君,潘松峰.单片机微机原理系统设计与应用.合肥:

中国科学技术大学出版社,2001

[6]陈明英.8051单片机课程设计实训教材.北京:

清华大学出版社,2002

[7]张洪润,易涛.单片机应用技术教程(第二版).北京:

清华大学出版社,2003

[8]张淑清,片微型计算机接口技术及应用.北京:

国防工业出版社,2001

[9]王松武,常用电路模块分析与设计指导.清华大学出版社,2007

八、附录

8、1元件清单

PartTypeDesignator

1MR2

2.2uC5

6.8KR3

10KR1

10kRP1

10uFC1

12MS12

20pS10

20pS11

89S52U1

100KR4

1000pC2

4046U5

CAPC3

CAPACITORPOLC4

CD4518U6

CON5J1

DAC0832U4

SW-PBS5

SW-PBS2

SW-PBS7

SW-PBS3

SW-PBS9

SW-PBS4

SW-PBS1

SW-PBS8

SW-PBS6

uA741U2

8、2电路原理图

8、3程序清单

#include

#defineucharunsignedchar

sbitrs=P3^0;

sbitrw=P3^1;

sbiteg=P3^2;

ucharcodetable[]={"Volt"};

ucharcodetable2[]={'0','1','2','3','4','5','6','7','8','9'};

ucharcodetosin[256]={0x80,0x83,0x86,0x89,0x8d,0x90,0x93,0x96,0x99,0x9c,0x9f,0xa2,0xa5,0xa8,0xab,0xae,0xb1,0xb4,0xb7,0xba,0xbc,0xbf,0xc2,0xc5

0xc7,0xca,0xcc,0xcf,0xd1,0xd4,0xd6,0xd8,0xda,0xdd,0xdf,0xe1,0xe3,0xe5,0xe7,0xe9,0xea,0xec,0xee,0xef,0xf1,0xf2,0xf4,0xf5

0xf6,0xf7,0xf8,0xf9,0xfa,0xfb,0xfc,0xfd,0xfd,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xfd

0xfd,0xfc,0xfb,0xfa,0xf9,0xf8,0xf7,0xf6,0xf5,0xf4,0xf2,0xf1,0xef,0xee,0xec,0xea,0xe9,0xe7,0xe5,0xe3,0xe1,0xde,0xdd,0xda

0xd8,0xd6,0xd4,0xd1,0xcf,0xcc,0xca,0xc7,0xc5,0xc2,0xbf,0xbc,0xba,0xb7,0xb4,0xb1,0xae,0xab,0xa8,0xa5,0xa2,0x9f,0x9c,0x99

0x96,0x93,0x90,0x8d,0x89,0x86,0x83,0x80,0x80,0x7c,0x79,0x76,0x72,0x6f,0x6c,0x69,0x66,0x63,0x60,0x5d,0x5a,0x57,0x55,0x51

0x4e,0x4c,0x48,0x45,0x43,0x40,0x3d,0x3a,0x38,0x35,0x33,0x30,0x2e,0x2b,0x29,0x27,0x25,0x22,0x20,0x1e,0x1c,0x1a,0x18,0x16

0x15,0x13,0x11,0x10,0x0e,0x0d,0x0b,0x0a,0x09,0x08,0x07,0x06,0x05,0x04,0x03,0x02,0x02,0x01,0x00,0x00,0x00,0x00,0x00,0x00

0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x02,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0d,0x0e,0x10,0x11,0x13,0x15

0x16,0x18,0x1a,0x1c,0x1e,0x20,0x22,0x25,0x27,0x29,0x2b,0x2e,0x30,0x33,0x35,0x38,0x3a,0x3d,0x40,0x43,0x45,0x48,0x4c,0x4e

0x51,0x55,0x57,0x5a,0x5d,0x60,0x63,0x66,0x69,0x6c,0x6f,0x72,0x76,0x79,0x7c,0x80};//正弦波数据

ucharb=0,c=0,d=0,e=0,i,k,tl,th;

intww=0,qw=0,bw=9,sw=3,gw=3,n=20,chh=50;//ww为万位数字,qw为千位数字,bw为百位数字,

//sw为十位数字,gw为个位数字.

intt,f,m,choice=1,zk=50;//t为时间变量,f为频率变量,choice为波形类型选择变量,zk为占空比变量,默认占空比为50%//延时程序,延时Xms****************************************************

voiddelay(unsignedintx)

{

inti,j;

for(i=0;i

for(j=0;j<120;j++);

}

//写指令函数*****************************************************

voidwritezl(unsignedcharzl)

{

rs=0;

rw=0;//满足写指令的条件;

P2=zl;

delay(5);

eg=1;

delay(5);

eg=0;

}

//写数据函数**************************************************

voidwritesj(unsignedcharsj)

{

rs=1;

rw=0;//满足写数据的条件;

P2=sj;

delay(5);

eg=1;

delay(5);

eg=0;

}

//初始化程序**************************************************

voidinitial()

{

eg=0;

writezl(0x38);//显示模式设置;

writezl(0x0c);//开显示,不开光标,光标不闪烁;

writezl(0x06);//写数据时,每写一个数据,指针后移动一位,但是整屏不动;

writezl(0x80+0x00);//在显示器的第一行第一位开始写数据;

}

//显示函数********************************************************

voiddisplay()

{inti;

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

writesj(table[i]);

writezl(0x80+0x04);

writesj(table2[chh/10]);

writezl(0x80+0x05);

writesj('.');

writezl(0x80+0x06);

writesj(table2[chh%10]);

writezl(0x80+0x07);

writesj('V');

writezl(0x02);//清除指针,但是不清楚显示内容;

writezl(0x80+0x40);//跳转到下行的第一位开始置显示;

writesj('F');

writezl(0x80+0x41);

writesj('r');

writezl(0x80+0x42);

writesj('e');

writezl(0x80+0x43);

writesj(table2[ww]);

writezl(0x80+0x44);

writesj(table2[qw]);

writezl(0x80+0x45);

writesj(table2[bw]);

writezl(0x80+0x46);

writesj(table2[sw]);

writezl(0x80+0x47);

writesj(table2[gw]);

writezl(0x80+0x48);

writesj('H');

writezl(0x80+0x49);

writesj('z');

writezl(0x80+0x50);

writesj('');

}

/*1键选择发波类型,1为正弦波,2为三角波,3为方波*/

voidkey1(void)

{

if(choice<4)

choice=choice+1;

else

choice=1;}

//幅度加************/

voidkey2(void)

{

if(chh!

=50)

chh++;

elsechh=chh;

}

//幅度减************/

voidkey3(void)

{

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

当前位置:首页 > 工程科技 > 能源化工

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2