多频率的正弦波低频信号发生器的设计.docx
- 文档编号:24031741
- 上传时间:2023-05-23
- 格式:DOCX
- 页数:17
- 大小:2.10MB
多频率的正弦波低频信号发生器的设计.docx
《多频率的正弦波低频信号发生器的设计.docx》由会员分享,可在线阅读,更多相关《多频率的正弦波低频信号发生器的设计.docx(17页珍藏版)》请在冰豆网上搜索。
多频率的正弦波低频信号发生器的设计
机械与电子工程学院
接口技术课程设计报告
题目:
多频率的正弦波低频信号发生器的设计
摘要:
本系统利用单片机AT89C51采用程序设计方法产生正弦波,再通过D/A转换器DAC0808将数字信号转换成模拟信号,滤波放大,最终由示波器显示出来,能产1Hz,10Hz,100Hz,1000Hz的波形。
通过键盘来控制正弦波频率的变化,并通过数码管显示其数值,系统大致包括信号发生部分、数/模转换部分以及显示部分三部分,其中尤其对数/模转换部分和波形产生和变化部分进行详细论述。
关键词:
单片机AT89C51、DAC0808、74HC573
1.设计任务及要求
(1)设计任务为多频率的正弦波低频信号发生器
(2)要求正弦波低频信号发生器产生1Hz,10Hz,100Hz,1000Hz的波形,频率可由开关选择。
2.方案选择
信号发生电路方案论证:
方案一:
通过单片机控制D/A,输出正弦波。
此方案输出的波形不够稳定,抗干扰能力弱,不易调节。
但此方案电路简单、成本低。
方案二:
使用传统的锁相频率合成方法。
通过芯片IC145152,压控振荡器搭接的锁相环电路输出稳定性极好的正弦波。
此方案,电路复杂,干扰因素多,不易实现。
方案三:
利用MAX038芯片组成的电路输出波形。
MAX038是精密高频波形产生电路,能够产生准确的正弦波周期性波形。
但此方案成本高,程序复杂度高。
综合考虑以上三种方案,本设计选择方案一。
3.硬件系统设计
3.1总体系统设计思路
本设计系统由主控制模块、数模转换模块、显示模块、控制模块共四个模块组成。
主控芯片使用AT89C51单片机,数模转换模块采用DAC0808实现,显示模块采用4个数码管构成,利用键盘控制正弦波频率的改变。
系统整体模块如图1所示。
图1系统整体模块
3.2电路构成介绍
利用单片机AT89C51采用程序设计方法产生正弦波,再通过D/A转换器DAC0808将数字信号转换成模拟信号,滤波放大,最终由示波器显示出来,能产1Hz,10Hz,100Hz,1000Hz的波形。
通过键盘来控制正弦波频率的变化,并通过数码管显示其数值,系统大致包括信号发生部分、数/模转换部分以及显示部分三部分,其中尤其对数/模转换部分和波形产生和变化部分进行详细论述。
3.2.1单片机最小系统
AT89C51是片内有ROM/EPROM的单片机,因此,这种芯片构成的最小系统简单﹑可靠。
用AT89C51单片机构成最小应用系统时,只要将单片机接上时钟电路和复位电路即可,如图89C51单片机最小系统所示。
由于集成度的限制,最小应用系统只能用作一些小型的控制单元。
其应用特点:
(1)有可供用户使用的大量I/O口线。
(2)内部存储器容量有限。
(3)应用系统开发具有特殊性。
图2AT89C51单片机最小系统
3.2.2波形产生电路设计
由单片机采用编程方法产生正弦波波形、通过D/A转换模块DAC0808在进过滤波放大之后输出。
单片机的P2口连接DAC0808的八位数据输入端,DAC0808的输出端接放大器,经过放大后输出所要的波形。
DAC0808的为八位数据并行输入的,DAC0808的引脚图如图3所示,其结构图如图4所示:
图3DAC0808引脚图
图4DAC0808的内部结构
其连接电路图如下:
图5波形产生电路
如图所示,VEE接-5V电压,COMP端与VEE之间接0.1uF电容,VREF(+)通过5K电阻接+5V电源,VREF(-)接地。
输出端IOUT连接运算放大器反向输入端。
运算放大器同相输入端接地。
3.2.3频率显示电路的设计
通过4个74HC753连接4个数码管显示输出的正弦波的频率,其电路图如下:
图6正弦波频率显示
如上图所示,74HC753输入端接单片机的P0口,其LE端分别接单片机的P3.1—P1.4。
通过软件控制可以显示波形的频率。
3.2.4键盘显示电路的设计
由于本系统所用按键少,其连接电路图如下:
图7键盘
图中独立键盘引出的线接单片机的P1.0-P1.1,开关的功能如图所示。
P11每按一次频率×10,P22每按一次频率÷10。
3.2.5系统整体电路
系统整体电路图如图8所示;
图8整体电路图
单片机AT89C51采用程序设计方法产生正弦波,再通过D/A转换器DAC0808将数字信号转换成模拟信号,最终由示波器显示出来,能产1Hz,10Hz,100Hz,1000Hz的波形。
通过键盘来控制正弦波频率的变化,并通过数码管显示其数值。
4.软件系统设计
软件的流程图:
本系统采用AT89C51单片机,用编程的方法来产生正弦波波形,设置初始值,并通过编程来切换波形频率的改变。
具体功能有:
(1)正弦波波形的显示;
(2)频率增减。
软件调试后,通过编程器下载到AT89C51芯片中,首先初始化函数,接着键盘扫描,定时器初始化,分离函数,最后显示出正弦波频率。
软件的流程图如下:
图9软件的流程图
5.系统调试与存在的问题
5.1Proteus仿真结果
仿真结果如下所示:
图10频率为1Hz时波形图
AT89C51采用程序设计方法产生正弦波,再通过D/A转换器DAC0808将数字信号转换成模拟信号,最终由示波器显示出来,能产1Hz。
图11频率为10Hz时波形图
AT89C51采用程序设计方法产生正弦波,再通过D/A转换器DAC0808将数字信号转换成模拟信号,最终由示波器显示出来,能产10Hz。
图12频率为100Hz时波形图
AT89C51采用程序设计方法产生正弦波,再通过D/A转换器DAC0808将数字信号转换成模拟信号,最终由示波器显示出来,能产100Hz。
图13频率为1000Hz时波形图
AT89C51采用程序设计方法产生正弦波,再通过D/A转换器DAC0808将数字信号转换成模拟信号,最终由示波器显示出来,能产1000Hz。
5.2结果分析
本系统通过对AT89C51加载程序使其输出正弦波波形,同时可以通过按键正弦波频率。
设置初始频率为1Hz,当第一次按下K键时,选择要改变正弦波的频率为10Hz,第二次按下K键时,选择要改变正弦波的频率为100Hz,第三次按下K键时,选择要改变正弦波的频率为1000Hz,第四次按下K键时,正弦波的频率恢复到初始状态1Hz,同时输出各个频率对应的波形,能正确显示波形及其频率。
5.3存在问题
刚开始用4位数码管显示的时候,正弦波频率到了100Hz和1000Hz的时候数码管就会不停地闪烁。
之后换用74HC573连接静态数码管,前面的问题得到解决,不过当正弦波频率到了1000Hz以后,有时候按下×10键就回不到程序要求的1Hz。
6.心得体会
在本次设计的过程中,我发现很多的问题,虽然以前还做过这样的设计但这次设计真的让我长进了很多。
对于单片机设计,其硬件电路是比较简单的,主要是解决程序设计的问题,而程序设计是一个很灵活的东西,它反映了你解决问题的逻辑思维和创新能力,它才是一个设计的灵魂所在。
因此在整个设计过程中大部分时间是用在程序上面的。
很多子程序是可以借鉴书本上的,但怎样衔接各个子程序才是关键的问题所在,这需要对单片机的结构很熟悉。
因此可以说单片机的设计是软件和硬件的结合,二者是密不可分的。
要设计一个成功的电路,必须要有耐心,要有坚持的毅力。
在整个电路的设计过程中,花费时间最多的是各个单元电路的连接及电路的细节设计上,如在多种方案的选择中,我们仔细比较分析其原理以及可行的原因。
这就要求我们对硬件系统中各组件部分有充分透彻的理解和研究,并能对之灵活应用。
完成这次设计后,我在书本理论知识的基础上又有了更深层次的理解。
最后还要在此感谢各位毕业设计的指导老师们和我的组员们,他们在整个过程中都给予了我充分的帮助与支持。
参考文献
[1]郭文川主编.单片机原理与接口技术.中国农业出版社,2007.8
[2]郭天祥.51单片机C语言教程.北京:
电子工业出版社,2009.1
[3]郑学坚,周斌.微型计算机
附录1:
程序
#include
#include
#defineucharunsignedchar
ucharcodeSINX[]={
0x7F,0x82,0x85,0x88,0x8B,0x8F,0x92,0x95,0x98,0x9B,0x9E,0xA1,0xA4,0xA7,0xAA,0xAD,
0xB0,0xB3,0xB6,0xB8,0xBB,0xBE,0xC1,0xC3,0xC6,0xC8,0xCB,0xCD,0xD0,0xD2,0xD5,0xD7,
0xD9,0xDB,0xDD,0xE0,0xE2,0xE4,0xE5,0xE7,0xE9,0xEB,0xEC,0xEE,0xEF,0xF1,0xF2,0xF4,
0xF5,0xF6,0xF7,0xF8,0xF9,0xFA,0xFB,0xFB,0xFC,0xFD,0xFD,0xFE,0xFE,0xFE,0xFE,0xFE,
0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFD,0xFD,0xFC,0xFB,0xFB,0xFA,0xF9,0xF8,0xF7,0xF6,
0xF5,0xF4,0xF2,0xF1,0xEF,0xEE,0xEC,0xEB,0xE9,0xE7,0xE5,0xE4,0xE2,0xE0,0xDD,0xDB,
0xD9,0xD7,0xD5,0xD2,0xD0,0xCD,0xCB,0xC8,0xC6,0xC3,0xC1,0xBE,0xBB,0xB8,0xB6,0xB3,
0xB0,0xAD,0xAA,0xA7,0xA4,0xA1,0x9E,0x9B,0x98,0x95,0x92,0x8F,0x8B,0x88,0x85,0x82,
0x7F,0x7C,0x79,0x76,0x73,0x6F,0x6C,0x69,0x66,0x63,0x60,0x5D,0x5A,0x57,0x54,0x51,
0x4E,0x4B,0x48,0x46,0x43,0x40,0x3D,0x3B,0x38,0x36,0x33,0x31,0x2E,0x2C,0x29,0x27,
0x25,0x23,0x21,0x1E,0x1C,0x1A,0x19,0x17,0x15,0x13,0x12,0x10,0x0F,0x0D,0x0C,0x0A,
0x09,0x08,0x07,0x06,0x05,0x04,0x03,0x03,0x02,0x01,0x01,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x02,0x03,0x03,0x04,0x05,0x06,0x07,0x08,
0x09,0x0A,0x0C,0x0D,0x0F,0x10,0x12,0x13,0x15,0x17,0x19,0x1A,0x1C,0x1E,0x21,0x23,
0x25,0x27,0x29,0x2C,0x2E,0x31,0x33,0x36,0x38,0x3B,0x3D,0x40,0x43,0x46,0x48,0x4B,
0x4E,0x51,0x54,0x57,0x5A,0x5D,0x60,0x63,0x66,0x69,0x6C,0x6F,0x73,0x76,0x79,0x7C};//正弦波信号
#defineuintunsignedint
#defineFosc11059200//晶振频率11059200
#defineALL65536//最长基数长度65536
ucharLED1_BUF=0xff,LED2_BUF=0xff,LED3_BUF=0xff,LED4_BUF=0xff;//数码管显示
ucharTIMER0_H,TIMER0_L;//定时器0的初值设置
ucharNUM=0;//计数变量
uintFREQ=1;
uinta;
//bitFLAG=0;//频率调节标志
sbitF_UP=P1^0;//频率上调按钮
sbitF_DOWN=P1^1;//频率下调按钮
voiddelay(uchart);//延时函数
voiddisplay();//显示函数
voidcalculate_F();//频率变化,计算定时初值
voiddiscrete();//分离频率用于显示
voidkey_scan();//键盘扫描函数
voidinit();//初始化函数
voidtimer0();//定时器0的终端服务函数
voiddelay(uchart)//函数功能:
延时
{
uchari,j;
while(t--)
{
for(i=0;i<10;i++)
for(j=0;j<10;j++)
;
}
}
voidcalculate_F()//函数功能:
频率计数函数,当频率变化,计算出定时器0的初值
{
floattemp;
temp=ALL-Fosc/11.0592/256/FREQ;
TIMER0_H=(uint)temp/256;
TIMER0_L=(uint)temp%256;
}
voidkey_scan()//函数功能:
键盘扫描函数
{
//a=k;
if(F_UP==0)
{delay(5);
if(F_UP==0)
{
TR0=0;
a++;
//k=a;
while(F_UP==0);
if(a>3)
{
a=0;
}
//FLAG=1;
}
}
if(a==0)
{FREQ=1;}
if(a==1)
{FREQ=10;}
if(a==2)
{FREQ=100;}
if(a==3)
{FREQ=1000;}
voidinit()//函数功能:
定时器初始化函数
{
TMOD=0x01;
TH0=TIMER0_H;
TL0=TIMER0_L;
ET0=1;
EA=1;
TR0=1;
calculate_F();
discrete();
display();
}
voiddiscrete()//函数功能:
参数分离函数
{
LED1_BUF=FREQ/1000;
LED2_BUF=FREQ/100%10;
LED3_BUF=FREQ%100/10;
LED4_BUF=FREQ%10;
}
ucharcodeDSY_CODE[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
voiddisplay()//函数功能:
数码管显示函数
{
P3=0Xf1;
P0=DSY_CODE[LED1_BUF];
delay(5);
P3=0xf2;
P0=DSY_CODE[LED2_BUF];
delay(5);
P3=0xf4;
P0=DSY_CODE[LED3_BUF];
delay(5);
P3=0xf8;
P0=DSY_CODE[LED4_BUF];
delay(5);
}
voidtimer0()interrupt1//函数功能:
定时器0中断函数
{
//TR0=0;
TH0=TIMER0_H;
TL0=TIMER0_L;
P2=SINX[NUM];
NUM++;
//TR0=1;
}
main()//函数功能:
主程序入口
{
init();
while
(1)
{
key_scan();
calculate_F();
discrete();
display();
}
}
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 频率 正弦波 低频 信号发生器 设计