基于51单片机的高频函数信号发生器Word格式.docx
- 文档编号:7932214
- 上传时间:2023-05-09
- 格式:DOCX
- 页数:22
- 大小:296.07KB
基于51单片机的高频函数信号发生器Word格式.docx
《基于51单片机的高频函数信号发生器Word格式.docx》由会员分享,可在线阅读,更多相关《基于51单片机的高频函数信号发生器Word格式.docx(22页珍藏版)》请在冰点文库上搜索。
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]张洪润,易涛.单片机应用技术教程(第二版).北京:
[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<
reg52.h>
#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<
x;
i++)
for(j=0;
j<
120;
j++);
}
//写指令函数*****************************************************
voidwritezl(unsignedcharzl)
{
rs=0;
rw=0;
//满足写指令的条件;
P2=zl;
delay(5);
eg=1;
eg=0;
//写数据函数**************************************************
voidwritesj(unsignedcharsj)
rs=1;
//满足写数据的条件;
P2=sj;
//初始化程序**************************************************
voidinitial()
writezl(0x38);
//显示模式设置;
writezl(0x0c);
//开显示,不开光标,光标不闪烁;
writezl(0x06);
//写数据时,每写一个数据,指针后移动一位,但是整屏不动;
writezl(0x80+0x00);
//在显示器的第一行第一位开始写数据;
//显示函数********************************************************
voiddisplay()
{inti;
for(i=0;
3;
writesj(table[i]);
writezl(0x80+0x04);
writesj(table2[chh/10]);
writezl(0x80+0x05);
writesj('
.'
);
writezl(0x80+0x06);
writesj(table2[chh%10]);
writezl(0x80+0x07);
V'
writezl(0x02);
//清除指针,但是不清楚显示内容;
writezl(0x80+0x40);
//跳转到下行的第一位开始置显示;
F'
writezl(0x80+0x41);
r'
writezl(0x80+0x42);
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);
H'
writezl(0x80+0x49);
z'
writezl(0x80+0x50);
'
/*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)
i
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 51 单片机 高频 函数 信号发生器