基于单片机的正弦波信号发生器的设计.docx
- 文档编号:6690421
- 上传时间:2023-05-10
- 格式:DOCX
- 页数:16
- 大小:244.71KB
基于单片机的正弦波信号发生器的设计.docx
《基于单片机的正弦波信号发生器的设计.docx》由会员分享,可在线阅读,更多相关《基于单片机的正弦波信号发生器的设计.docx(16页珍藏版)》请在冰点文库上搜索。
基于单片机的正弦波信号发生器的设计
毕业设计
论文题目:
基于单片机的正弦波信号发生器的设计
系部:
电子信息工程系
专业名称:
电子信息工程技术
班级:
08431学号:
33
姓名:
顾伟国
指导教师:
郑莹
完成时间:
2011年5月12日
基于单片机的正弦波信号发生器的设计
摘要:
信号发生器的应用越来越广,对信号发生器的频率稳定度、频谱纯度、频率范围和输出信号的频率微调分辨率提出越来越高的要求,普通的频率源已经不能满足现代电子技术的高标准要求。
因而本设计采用了AT89C51单片机为控制核心,通过D/A转换器DAC0832将数字信号转换成模拟信号,滤波放大,最终由示波器显示出来,能产生1HZ—180HZ的正弦波波形。
通过键盘来控制波形频率变化,并通过液晶屏1602显示其波形以及频率和幅度值的大小。
关键字:
信号发生器;AT89C51;D/A转换器DAC0832
BasedonSCMsinewavesignalgeneratordesign
Abstract:
Signalgeneratorusedmoreandmorewidely,tosignalgeneratorfrequencystability,thespectrumpurity,frequencyrangeandoutputsignalfrequencyfine-tuneresolutionhigherandhigherdemandsareproposed,theaveragefrequencysourcecannothavesatisfiedthehighstandardrequirementofmodernelectronictechnology.SothisdesignUSESAAT89C51ascontrolcore,throughtheD/AconverterDAC0832convertsdigitalsignalsintoanalogsignals,filterandamplification,finallyshownbyoscilloscope1HZ-180HZ,canproducethesinewave.Throughthekeyboardtocontrolthewaveformfrequencyvariation,andthroughtheLCDdisplayofthewaveformand1602frequencyandamplitudevaluesofsize.
Keyword:
Signalgenerator;AT89C51;D/AconverterDAC0832
目录
1、概述4
2、系统设计4
2.1设计构思4
2.2方案设计与论证4
2.2.1信号发生电路方案论证4
2.2.2单片机的选择论证5
2.2.3、显示方案论证5
2.2.4、键盘方案论证5
3、总体系统设计5
3.1、硬件实现及单元电路设计6
3.1.1单片机最小系统的设计6
3.1.2、波形产生模块的设计7
3.1.3、显示模块的设计7
3.2、系统软件的设计流程8
3.2.1、keiluvision3开发环境简介9
3.2.2、proteus7.5软件简介10
3.2.3、keiluvision3与proteus7.5联机调试简介10
4.输出波形的检查与频率的调试10
4.1测试仪器及测试说明10
4.2测试结果11
5、结束语12
参考文献13
致谢14
附录15
1、概述
波形发生器作为电子技术领域中最基本的电子仪器,广泛应用于航空航天测控、通信系统、电子对抗、电子测量、科研等各个领域中。
随着电子信息技术的发展,对其性能的要求也越来越高,如要求频率稳定性高、转换速度快,具有调幅、调频、调相等功能。
传统的LC、RC振荡电路就不可以满足上述的要求了,而基于单片机的信号发生器就可以有效的解决上述问题了。
单片机的最小系统结构简单而且又是通过程序控制信号的发生,这样就可以通过编程来产生正弦波、方波、三角波等波形。
基于单片机的信号发生器的设计,不仅解决了波形类型的选择、频率和幅度的调节等,而且还通过lcd显示屏能够将信号发生器产生波形的频率准确的显示出来。
2、系统设计
经过研究考虑,确定方案:
以AT89C51单片机为控制核心,再通过D/A转换器DAC0832将数字信号转换成模拟信号,滤波放大,最终由示波器显示出来,通过键盘来控制波形的选择和频率的变化,最终输出显示其各自的类型以及数值。
2.1设计构思
1)利用单片机采用软件设计方法产生正弦波
2)键盘选择波形类型
3)波形频率可调
4)显示波形及其频率
2.2方案设计与论证
2.2.1、信号发生电路方案论证
DAC0832是8位全MOS中速D/A转换器,采用R—2RT形电阻解码网络,转换结果为一对差动电流输出,转换时间大约为1us。
使用单电源+5V―+15V供电。
参考电压为-10V-+10V。
在此我们直接选择+5V作为参考电压。
DAC0832有三种工作方式:
直通方式,单缓冲方式,双缓冲方式。
2.2.2、单片机的选择论证
AT89C51单片机是一种高性能8位单片微型计算机。
它把构成计算机的中央处理器CPU、存储器、寄存器、I/O接口制作在一块集成电路芯片中,从而构成较为完整的计算机、而且其价格便宜。
2.2.3、显示方案论证
方案一:
采用LED数码管。
LED数码管由8个发光二极管组成,每只数码管轮流显示各自的字符。
由于人眼具有视觉暂留特性,当每只数码管显示的时间间隔小于1/16S时人眼感觉不到闪动,看到的是每只数码管常亮。
使用数码管显示编程较易,但要显示内容过多,而且数码管不能显示字母。
方案二:
采用LCD液晶显示器1602.其功率小,效果明显,显示编程容易控制,可以显示字母。
以上两种方案综合考虑,选择方案二。
2.2.4、键盘方案论证
采用简单的拨动开关。
拨动开关简单方便,操作简单,但存在抖动的现象,对芯片会产生一定的影响。
3、总体系统设计
该系统采用单片机作为数据处理及控制核心,由单片机完成人机界面、系统控制、信号的采集分析以及信号的处理和变换,采用按键输入,利用液晶显示电路输出数字显示的方案,将设计任务分解为按键电路、液晶显示电路等模块。
图
(1)为系统的总体框图:
图1:
系统总体框图
3.1、硬件实现及单元电路设计
3.1.1、单片机最小系统的设计
AT89C51是片内有ROM/EPROM的单片机,因此,这种芯片构成的最小系统简单﹑可靠。
用AT89C51单片机构成最小应用系统时,只要将单片机接上时钟电路和复位电路即可,如图
(2)AT89C51单片机最小系统所示。
由于集成度的限制,最小应用系统只能用作一些小型的控制单元。
图2:
AT89C51单片机最小系统
3.1.2、波形产生模块的设计
由单片机为控制中心用编程方法产生波形,通过D/A转换器DAC0832再经过滤波放大后输出。
其电路图如下
图3:
波形产生电路
如上图所示,单片机的P0口连接DAC0832的八位数据输入端,DAC0832的输出端接放大器,经过放大后输出所要的波形。
3.1.3、显示模块的设计
通过液晶1602显示输出的波形、频率,其电路图如下:
图4:
液晶显示
如上图所示,1602的八位数据端接单片机的P1口,其三个使能端RS、RW、E分别接单片机的P3.2—P3.4。
通过软件控制液晶屏可以显示波形的种类以及波形的频率。
3.1.4、键盘模块的设计
本系统采用两个拨动开关来调节由单片机产生的正弦波的频率,其连接电路如下:
图5:
拨动开关
图中UP开关,每闭合一次,正弦波的频率将增加1HZ。
与之功能相似的DOWN开关则是使产生的正弦波的频率降低1HZ。
3.2、系统软件的设计流程
本系统采用AT89C51单片机,用编程的方法来产生正弦波,并通过编程来调节正弦波波形的输出频率。
软件设计的流程图如下:
图6:
软件设计流程图
3.2.1、keiluvision3开发环境简介
KeilSoftware公司推出的uVision3是一款可用于多种8051MCU的集成开发环境(IDE),该IDE同时也是PK51及其它开发套件的一个重要组件。
除增加了源代码、功能导航器、模板编辑以及改进的搜索功能外,uVision3还提供了一个配置向导功能,加速了启动代码和配置文件的生成。
此外其内置的仿真器可模拟目标MCU,包括指令集、片上外围设备及外部信号等。
uVision3提供逻辑分析器,可监控基于MCUI/O引脚和外设状态变化下的程序变量。
uVision3提供对多种最新的8051类微处理器的支持,包括AnalogDevices的ADuC83x和ADuC84x,以及Infineon的XC866等。
3.2.2、proteus7.5软件简介
Proteus与其它单片机仿真软件不同的是,它不仅能仿真单片机CPU的工作情况,也能仿真单片机外围电路或没有单片机参与的其它电路的工作情况。
因此在仿真和程序调试时,关心的不再是某些语句执行时单片机寄存器和存储器内容的改变,而是从工程的角度直接看程序运行和电路工作的过程和结果。
对于这样的仿真实验,从某种意义上讲,是弥补了实验和工程应用间脱节的矛盾和现象。
3.2.3、keiluvision3与proteus7.5联机调试简介
KeilC与Proteus联机调试准备工作在一台电脑上联机两个软件为例。
首先进行KeiluVision3软件和ProteusVersion7.1软件,分别进行安装。
a.到官方网站下载一个vdmadi.exe,安装路径选择KeiluVision3
的安装目录(E:
\ProgramFiles\Keil)。
安装完成。
b.Proteus里DEBUG-->(选择)useremotedebugmonitor。
进入
KEIL的project菜单optionfortarget'工程名'。
在DEBUG选项中右栏上部的选择Use并在下拉菜选中ProteusVSMSimulator。
在进入seting,如果同一台机IP名为127.0.0.1,如不是同一台机则填另一台的IP地址。
端口号一定为8000。
注意:
可以在一台机器上运行keil,另一台中运行proteus进行远程仿真。
c.KEIL的编译程序和Proteus的文件一定要放在同一个文件夹中。
d.单击仿真运行开始按钮,KeilC与Proteus连接仿真调试
4.输出波形的检查与频率的调试
4.1测试仪器及测试说明
测试仪器:
示波器、数字万用表
测试说明:
正弦波的输出,通过UP开关及DOWN开关来实现正弦波波形频率的改变,调节滑动变阻器RV1来实现幅度的调控。
测试过程;打开keiluvision3和proteus软件后,导入写好的程序以及模拟仿真电路后,通过两个软件的联调,进行正弦波的模拟仿真测试。
程序经过初始化,液晶屏上只显示“wave:
”和“f:
“,然后便显示出波形类型以及频率的大小。
正弦波的频率可调范围在1—180HZ之间。
正弦波波形仿真图如下:
4.2测试结果
各项指标均能达到要求
1)、能很好的产生正弦波
2)、波形的频率可以调节,频率范围在1—180HZ之间
3)、显示部分基本实现
4)、UP及DOWN开关基本能实现其功能
5、结束语
通过这次毕业设计,使我深刻地认识到学好专业知识的重要性,也理解了理论联系实际的现实意义。
本次的设计是对大学三年所学知识的一次系统的检验,进一步加深了我们对专业知识的理解和提高我们的动手能力。
虽然本次的毕业设计基本上可以达到要求,但其中也存在着很多的问题,例如液晶屏显示频率,频率增大时,液晶屏显示的频率却变小,这主要是程序的编写有点问题,改正之后应该能够解决这样的问题。
此次的毕业设计作品还有很多不完善的地方,我相信在以后的工作和学习中能够彻底的解决这样不完善。
参考文献
【1】周国运主编.《单片机原理及应用(C语言版)(21世纪高等院校规划教材)》中国水利水电出版社,2009
【2】张毅刚、彭喜元主编.《单片机原理及接口技术》.人民邮电出版社,2008
【3】孙俊喜主编.《LCD驱动电路、驱动程序设计及典型应用》.人民邮电出版社,2009
【4】殷瑞祥主编.《电路与模拟电子技术》.高等教育出版社,2003
致谢
在此论文撰写过程中,要特别感谢我的老师郑老师的指导与督促,同时感谢她的谅解与包容。
没有郑老师的帮助也就没有今天的这篇论文。
求学历程是艰苦的,但又是快乐的。
感谢我的班主任郑老师,谢谢她在这三年中为我们全班所做的一切,她不求回报,无私奉献的精神很让我感动,再次向她表示由衷的感谢。
在这三年的学期中结识的各位生活和学习上的挚友让我得到了人生最大的一笔财富。
在此,也对他们表示衷心感谢。
谢谢我的父母,没有他们辛勤的付出也就没有我的今天,在这一刻,将最崇高的敬意献给你们!
本文参考了大量的文献资料,在此,向各学术界的前辈们致敬!
附录
1、附图
总体原理设计图
2、源程序
#include
#include
#defineucharunsignedchar
#defineuintunsignedint
sbitlcdrw=P3^3;
sbitlcdrs=P3^2;
sbitlcde=P3^4;
sbitcs=P3^5;
sbitwr=P3^6;
uchara,n;
#definedac1XBYTE[0xdfff]//X轴0832一级琐存地址
unsignedcharcodetype[256]={
0x80,0x83,0x86,0x89,0x8c,0x8f,0x92,0x95,0x98,0x9c,0x9f,0xa2,0xa5,0xa8,0xab,0xae,0xb0,0xb3,0xb6,0xb9,
0xbc,0xbf,0xc1,0xc4,0xc7,0xc9,0xcc,0xce,0xd1,0xd3,0xd5,0xd8,0xda,0xdc,0xde,0xe0,0xe2,0xe4,0xe6,0xe8,
0xea,0xec,0xed,0xef,0xf0,0xf2,0xf3,0xf4,0xf6,0xf7,0xf8,0xf9,0xfa,0xfb,0xfc,0xfc,0xfd,0xfe,0xfe,0xff,
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xfe,0xfd,0xfc,0xfc,0xfb,0xfa,0xf9,0xf8,0xf7,
0xf6,0xf5,0xf3,0xf2,0xf0,0xef,0xed,0xec,0xea,0xe8,0xe6,0xe4,0xe3,0xe1,0xde,0xdc,0xda,0xd8,0xd6,0xd3,
0xd1,0xce,0xcc,0xc9,0xc7,0xc4,0xc1,0xbf,0xbc,0xb9,0xb6,0xb4,0xb1,0xae,0xab,0xa8,0xa5,0xa2,0x9f,0x9c,
0x99,0x96,0x92,0x8f,0x8c,0x89,0x86,0x83,0x80,0x7d,0x79,0x76,0x73,0x70,0x6d,0x6a,0x67,0x64,0x61,0x5e,
0x5b,0x58,0x55,0x52,0x4f,0x4c,0x49,0x46,0x43,0x41,0x3e,0x3b,0x39,0x36,0x33,0x31,0x2e,0x2c,0x2a,0x27,
0x25,0x23,0x21,0x1f,0x1d,0x1b,0x19,0x17,0x15,0x14,0x12,0x10,0xf,0xd,0xc,0xb,0x9,0x8,0x7,0x6,0x5,0x4,
0x3,0x3,0x2,0x1,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x2,0x3,0x3,0x4,0x5,0x6,0x7,
0x8,0x9,0xa,0xc,0xd,0xe,0x10,0x12,0x13,0x15,0x17,0x18,0x1a,0x1c,0x1e,0x20,0x23,0x25,0x27,0x29,0x2c,
0x2e,0x30,0x33,0x35,0x38,0x3b,0x3d,0x40,0x43,0x46,0x48,0x4b,0x4e,0x51,0x54,0x57,0x5a,0x5d,0x60,0x63,
0x66,0x69,0x6c,0x6f,0x73,0x76,0x79,0x7c};
unsignedchari,j;
unsignedintcounter,step;
sbitkey_up=P2^0;
sbitkey_dw=P2^1;
//定时器0初始化
voiddelay(uintz)//延时子程序
{uchara,b;
for(a=z;a>0;a--)
for(b=110;b>0;b--);
}
voiddelay1(uinty)
{uinti;
for(i=y;i>0;i--);
}
voidwrite_com(ucharcom)//1602写指令
{lcdrs=0;
P1=com;
delay(5);
lcde=1;
delay(5);
lcde=0;
}
voidwrite_data(uchardate)//1602数据
{lcdrs=1;
P1=date;
delay(5);
lcde=1;
delay(5);
lcde=0;
}
voidinit()//初始化
{lcdrw=0;
lcde=0;
wr=0;
cs=0;
write_com(0x38);
write_com(0x0c);
write_com(0x06);
write_com(0x01);
write_com(0x80+0x00);
write_data(0x77);//写wave:
write_data(0x61);
write_data(0x76);
write_data(0x65);
write_data(0x3a);
write_com(0x80+0x40);//写f:
write_data(0x66);
write_data(0x3a);
}
voidwrite_f(uintdate)//写频率
{ucharqian,bai,shi,ge;
qian=date/1000;
bai=date/100%10;
shi=date/10%10;
ge=date%10;
write_com(0x80+0x42);
write_data(0x30+qian);
write_data(0x30+bai);
write_data(0x30+shi);
write_data(0x30+ge);
write_data(0x48);
write_data(0x5a);
}
voidInit_Timer0(void)
{TMOD=(TMOD&0XF0)|0X01;
TH0=0xff;
TL0=0xff;
TR0=1;
ET0=1;
}
main()
{Init_Timer0();
step=2;
EA=1;
init();
while
(1)
{for(n=0;n<255;n++)
{P0=type[n];}
write_f(step);
delay(5);
write_com(0x80+0x05);
write_data(0x73);//写sine:
write_data(0x69);
write_data(0x6e);
write_data(0x65);
write_data(0x20);
write_data(0x20);
if(key_up==0)if(step<4096)step++;
if(key_dw==0)if(step>1)step--;
while((!
key_up)||(!
key_dw));
}
}
//系统OS定时中断服务
voidOS_Timer0(void)interrupt1using2
{TH0=0xff;
TL0=0xff;
counter=counter+step;
dac1=type[(unsignedint)counter>>8];}
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 单片机 正弦波 信号发生器 设计
![提示](https://static.bingdoc.com/images/bang_tan.gif)