低频信号发生器设计论文.doc

上传人:本田雅阁 文档编号:2052274 上传时间:2019-02-08 格式:DOC 页数:25 大小:589.51KB
返回 下载 相关 举报
低频信号发生器设计论文.doc_第1页
第1页 / 共25页
低频信号发生器设计论文.doc_第2页
第2页 / 共25页
低频信号发生器设计论文.doc_第3页
第3页 / 共25页
亲,该文档总共25页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《低频信号发生器设计论文.doc》由会员分享,可在线阅读,更多相关《低频信号发生器设计论文.doc(25页珍藏版)》请在三一文库上搜索。

1、 基 于 单 片 机 的低 频 信 号 发 生 器设 计 论 文摘要本文以STC89C52单片机为核心设计了一个低频函数信号发生器。信号发生器通过硬件电路和软件程序相结合,可输出正弦波、方波、三角波、三角波、梯形波,波形的频率在一定范围内可改变.波形和频率的改变通过软件控制。介绍了波形的生成原理、硬件电路和软件部分的设计原理。本系统可以产生最高频率1440HZ的波形。该信号发生器具有体积小、价格低、性能稳定、功能齐全的优点。关键词:低频信号发生器;单片机;D /A转换; AbstractThis paper takes STC89C52 microcontroller as the core

2、design of a frequency function generator.The signal generator through a combination of hardware circuit and software program.Can output sine wave, square wave, triangle wave, triangle wave, trapezoidal wave,The frequency of the waveform can be changed in a certain range。The waveform and frequency ar

3、e changed by software control,This paper introduces design principle of generating principle, hardware circuit and software part of waveforms,This system can produce the maximum frequency of 1440HZ waveform,The signal generator has the advantages of small volume, low price, stable performance, compl

4、ete functions.Keywords:low-frequency signal generator chip microcomputer D /A conversion一、设计选题及任务设计题目:基于单片机的信号发生器的设计与实现 任务与要求: 设计一个由单片机控制的信号发生器。运用单片机系统控制产生方波、三角波、正弦波。信号发生器所产生的波形的频率可调节。并可通过软件任意改变信号的波形。基本要求: 1.产生三种以上波形。如正弦波、三角波、矩形波等。 2.信号频率小于50KHz。并且频率可调节。二、系统概述 2.1方案论证和比较方案一:采用模拟电路搭建函数信号发生器,它可以同时产生方波

5、、三角波、正弦波。但是这种模块产生的波形偏差较大,并且频率不易调节。方案二:使用集成信号发生器发生芯片,它可以生成最高几十MHZ的波形。但是该方案所用芯片价格昂贵,不适合本次设计。方案三:采用STC89C52单片机和DAC0832数模转换器生成波形,加上一个低通滤波器,生成的波形比较纯净。它的特点是可产生满足条件的波形,频率容易调节,频率能达到设计的1KHZ以上。在低频范围内稳定性好、操作方便、体积小、耗电少。经比较,方案四既可满足课程设计的基本要求又能充分发挥其优势,电路简单,易控制,性价比高,所以采用该方案。 2.2工作原理 数字信号可以通过数/模转换器转换成模拟信号,因此可通过产生数字信

6、号再转换成模拟信号的方法来获得所需要的波形。89C51单片机本身就是一个完整的微型计算机,具有组成微型计算机的各部分部件,只要将89C51再配置按键以及数模转换及波形输出、放大电路等部分,即可构成所需的波形发生器,其信号发生器构成系统框图如下图所示: 系统框图 STC89C52是整个波形发生器的核心部分,通过程序的编写和执行,产生满足条件的信号,并从按键接收命令,进行各种波形的转换。当数字信号电路到达转换电路,将其转换成模拟信号也就是所需要的输出波形。 波形ROM表是将信号一个周期等间距地分离成64个点,储存在 单片机得RON内,具体ROM表是通过MATLAB软件生成的。3、 系统设计与分析3

7、.1系统硬件电路设计 3.1.1主控电路设计中主要采用STC89C52型单片机,它具有如下优点:(1)拥有完善的外部扩展总线,通过这些总线可方便地扩展外围单元、外围接口等;(2)该单片机内部拥有4K字节的FLASH ROM程序存储器空间和256字节的RAM数据存储空间,完全可以满足程序的要求。由于该芯片可电擦写,故可重复使用。如果更改程序内容,可将芯片拿下重新烧写;(3)该单片机与工业标准的MCS51型机的指令集和输出引脚兼容。中断系统是使处理器具有对外界异步事件的处理能力而设置的。当中央处理器CPU正在处理某件事的时候外界发生了紧急事件,要求CPU暂停当前的工作,转而去处理这个紧急事件。在波

8、形发生器中,用两个开光直接与外部中断0和外部中断1的管脚相连,其中S1开光用来改变波形,S2开光用来改变频率。在程序主函数中,我们写了个死循环一直输出一个默认的波形,在本程序中设定为正弦波。当S1或S2按下又抬起时,程序会暂时跳出死循环,进入中断处理程序,从而对波形和频率进行改变。时钟电路。由于频率较大时,三角波、正弦波、方波等波中每一点延时时间为几微秒,故延时时间还要加上指令时间即可得到指定频率的波形,该电路用11.0592MHz晶振。 主控电路图3.1.2 数/模转换电路由于单片机产生的是数字信号,要想得到所需要的波形,就要把数字信号转换成模拟信号,所以该文选用价格低廉、接口简单、转换控制

9、容易并具有8位分辨率的数模转换器DAC0832。DAC0832主要由8位输入寄存器、8位DAC寄存器、8位D/A转换器以及输入控制电路四部分组成。但实际上,DAC0832输出的电量也不是真正能连续可调,而是以其绝对分辨率为单位增减,是准模拟量的输出。DAC0832是电流型输出,在应用时外接运放使之成为电压型输出。根据对DAC0832的数据锁存器和DAC寄存器的不同的控制方式,DAC0832有三种工作方式:直通方式、单缓冲方式和双缓冲方式。本设计选用直通方式。DAC0832的数据口和单片机的P0口相连。CSDA:片选信号输入线(选通数据锁存器),低电平有效;WR:数据锁存器写选通输入线,负脉冲(

10、脉宽应大于500ns)有效。由ILE、CS、WR1的逻辑组合产生LE1,当LE1为高电平时,数据锁存器状态随输入数据线变换,LE1的负跳变时将输入数据锁存。数模转换电路3.1.3运算放大电路和低通滤波电路LM324的5管脚与DAC0832的(IOUT2)12管脚相连,LM324的6管脚与DAC0832的(IOUT1)11管脚相连,LM324的7管脚与DAC0832的REF(9)管脚相连。第一级运算放大器的作用是将DAC0832输出的电流信号转化为电压信号V1,第二级运算放大器的作用是将V1通过反向放大电路-(R2/R1)倍。在第二个运算放大器的输出端连了一个低通滤波器。如果不加低通滤波器,也能

11、够生成波形,但是产生的信号中毛刺很多,加一个低通滤波器不仅起到的滤波的作用,还起到了平滑的作用。实验表明,此时的输出波形效果不错。3.2系统软件设计 软件设计上,根据功能分了几个模块编程。模块主要有:主程序模块,外部中断0模块,外部中断1模块,液晶显示模块。主程序: 主程序先是进行一些初始化的工作,然后根据波形标志a,b,c,d,e的值进入相应的while 循环。这样写的好处是输出的波形频率可以达到1K多HZ。在while循环中,单片机根据地址标志位不停地查表,然后把查得的值赋给DAC0832的数据口,然后地址标志位加一,并判断地址标志位是否等于64,如果是就置0再往下执行,如果不是直接往下执

12、行。然后根据频率标志位进行相应的延时。主程序流程图中断服务程序: 本程序中两个外部中断分别起到了控制波形和频率的作用。在程序中还加入了消抖部分。四、安装调试及测量数据分析 4.1调试过程 1、不通电,用万用表根据电路图仔细检查各线路连接是否正常; 2、首先是调试单片机部分,DA转换芯片和运算放大器芯片不接。用STC_ISP_V483软件通过串口下程序。看是否可以正常下载程序; 3、装上DA装换芯片和运算放大器芯片,给单片机下一个输出正弦波的测试程序,通过示波器看输出是否正常; 4、给单片机下载一个完整的程序,分别按下S1,看波形是否改变,按下S2,看频率是否改变。 4.3出现的问题与解决的方法

13、: 1、刚开始写的测试程序输出的波形失真很大。我们想可能是波形的ROM表里的数据值过小,导致DA转换芯片输出的误差很大。因而将波形的ROM表里的数据值调大,在测试时发现波形偏差小了许多。 2、调试波形的时候我们发现矩形波的失真比较大,于是我们想到可能是低通滤波器的截止频率太低了,因而我们将RC低通滤波器的电阻由1K换成了100欧姆,效果好了很多。4.4系统仿真波形:矩形波三角波正弦波4.5调试所用仪器 1、示波器 2、直流稳压电源 3、万用表五、结语 在本次信号发生器的设计中,涉及到一个典型的控制过程,通过单片机控制一个模数转换器DAC0832产生所需要的电流,然后使用运算放大器LM324可以

14、将其电流输出线性地转换成电压输出,再将电压经过运算放大器的放大,可以得到足够幅度的信号。通过程序的控制,可以产生一系列有规律的波形。这样一个信号发生装置在控制领域有相当广泛的应用范围。最终做出来的信号发生器满足了题目中的所有要求:1.产生满足条件的波形,正弦波、三角波、矩形波; 2.最大频率为1440Hz,并且频率可以通过按键控制变化。当然在本次系统中,还是存在不足的地方,比如不能实现频率的按一个小的步进调整。并且当频率太小时矩形波会出现失真。 实物图参考文献:【1】 郭天翔.新概念51单片机C语言教程 入门、提高、开发、拓展全.北京.电子工业出版社 2009.1【2】童诗白.模拟电路技术基础

15、M.北京:高等教育出版社,2000.171202.【3】张金.电子系统设计基础.电子工业出版社.2011.1附录:源程序#include #define uchar unsigned char#define uint unsigned intsbit dacs=P22;sbit dawr=P21; sbit lcden=P35;sbit lcdrs=P36;sbit s1=P32; /键盘1sbit s2=P33;/键盘2uchar k=0,p=0; /p用于记录s2按下的次数uchar bxxz=0,num,pinglv; /bxxz用于记录s1按下的次数uchar a=1,b=0,c=0,

16、d=0,e=0; /用a,b,c,d,e的组合分别表示不同的波形uchar num0=0,delay;/num0用于记录定时器进入中断的次数,delay用于记录修改的频率数值uchar code table=WAVE:;uchar code table1=F: Hz;uchar code table2=sine ;uchar code table7=fangbo ;uchar code table4=jvchibo ;uchar code table5=tixingbo ;uchar code table6=sanjiaobo;uchar code table3=1440720 480 360

17、 288 240 205 180 160 144 ;uchar code sin64=135,145,158,167,176,188,199,209,218,226,234,240,245,249,252,254,254,253,251,247,243,237,230,222,213,204,193,182,170,158,146,133,121,108,96,84,72,61,50,41,32,24,17,11,7,3,1,0,0,2,5,9,14,20,28,36,45,55,66,78,90,102,114,128; /正弦波编码uchar code juxing64=255,255,2

18、55,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0; /方波编码uchar code juchi64=0,4,8,12,16,20,24,28,32,36,40,45,49,53,57,61,65,69,73,77,81,85,89,93,97,101,105,109,113,117,

19、121,125,130,134,138,142,146,150,154,158,162,166,170,174,178,182,186,190,194,198,202,206,210,215,219,223,227,231,235,239,243,247,251,255; /锯齿波编码uchar code tixing64=0,13,26,39,52,65,78,91,104,117,130,143,156,169,182,195,208,221,234,247,247,247,247,247,247,247,247,247,247,247,247,247,247,247,247,247,24

20、7,247,247,247,247,247,247,247,247,242,229,216,203,190,177,164,151,138,125,112,99,86,73,60,47,34,21,8;/梯形波编码uchar code sanjiao64=0,8,16,24,32,40,48,56,64,72,80,88,96,104,112,120,128,136,144,152,160,168,176,184,192,200,208,216,224,232,240,248,248,240,232,224,216,208,200,192,184,176,168,160,152,144,136

21、,128,120,112,104,96,88,80,72,64,56,48,40,32,24,16,8,0; /三角波编码 void delayms(uint x) /延时函数,x即为延时的毫秒数uint i,j;for(i=x;i0;i-)for(j=110;j0;j-);void init()/初始化函数 dacs=0;dawr=0;EA=1;IT0=1;EX0=1;IT1=1;EX1=1;TMOD=0x02; /使用定时器方式2进行定时ET0=1;TR0=1;TH0=246;TL0=246;/设定计时数位10void int0() interrupt 0 /外部中断0中断函数EX0=0;

22、delayms(1);if(s1=0)bxxz+;if(bxxz=5)bxxz=0;switch(bxxz)case 0:a=1,b=0,c=0,d=0,e=0;break;case 1:a=0,b=1,c=0,d=0,e=0;break;case 2:a=0,b=0,c=1,d=0,e=0;break;case 3:a=0,b=0,c=0,d=1,e=0;break;case 4:a=0,b=0,c=0,d=0,e=1;break;delayms(1);while(!s1); while(!s1);EX0=1; void int1() interrupt 2 /外部中断1中断函数EX1=0;

23、delayms(1);if(s2=0)p+;if(p=10) p=0;switch(p)case 0:pinglv=1;break;case 1:pinglv=2;break;case 2:pinglv=3;break;case 3:pinglv=4;break;case 4:pinglv=5;break;case 5:pinglv=6;break;case 6:pinglv=7;break;case 7:pinglv=8;break;case 8:pinglv=9;break;case 9:pinglv=10;break;delayms(1);while(!s2);while(!s2);EX

24、1=1; void T0_time() interrupt 1 /定时器中断函数num0+; void write_com(uchar com)/给液晶写命令lcdrs=0;P1=com;delayms(5);lcden=1;delayms(5);lcden=0;void write_data(uchar date)/给液晶写数据lcdrs=1;P1=date;delayms(5);lcden=1;delayms(5);lcden=0;void init_lcd()/初始化液晶lcden=0;write_com(0x38);write_com(0x0c);write_com(0x06);wri

25、te_com(0x01);void desplay_pl()/扫描函数write_com(0x80+0x40+0x02);if(delay=1)for(num=0;num4;num+)write_data(table3num);delayms(5);if(delay=2)for(num=4;num8;num+)write_data(table3num);delayms(5);if(delay=3)for(num=8;num12;num+)write_data(table3num);delayms(5);if(delay=4)for(num=12;num16;num+)write_data(ta

26、ble3num);delayms(5);if(delay=5)for(num=16;num20;num+)write_data(table3num);delayms(5);if(delay=6)for(num=20;num24;num+)write_data(table3num);delayms(5);if(delay=7)for(num=24;num28;num+)write_data(table3num);delayms(5); if(delay=8)for(num=28;num32;num+)write_data(table3num);delayms(5); if(delay=9)for

27、(num=32;num36;num+)write_data(table3num);delayms(5); if(delay=10)for(num=36;num40;num+)write_data(table3num);delayms(5); void main()init();init_lcd();write_com(0x80);for(num=0;num5;num+)write_data(tablenum);delayms(5);write_com(0x80+0x40);for(num=0;num8;num+)write_data(table1num);delayms(5);while(1)

28、while(a!=0) /用于输出正弦波write_com(0x80+0x05);for(num=0;num9;num+)write_data(table2num);delayms(1);while(a!=0)delay=pinglv;desplay_pl();if(num0=delay)num0=0;P0=sink;k+;if(k=64)k=0;num0=0;while(b!=0)/用于输出方波write_com(0x80+0x05);for(num=0;num9;num+)write_data(table7num);delayms(1);while(b!=0) delay=pinglv;d

29、esplay_pl();if(num0=delay)num0=0; P0=juxingk;k+;if(k=64)k=0;num0=0;while(c!=0) /用于输出锯齿波write_com(0x80+0x05);for(num=0;num9;num+)write_data(table4num);delayms(1);while(c!=0) delay=pinglv;desplay_pl();if(num0=delay)num0=0;P0=juchik;k+;if(k=64)k=0;num0=0;while(d!=0)/用于输出梯形波write_com(0x80+0x05);for(num=

30、0;num9;num+)write_data(table5num);delayms(1);while(d!=0) delay=pinglv;desplay_pl();if(num0=delay)num0=0;P0=tixingk;k+;if(k=64)k=0;num0=0;while(e!=0) /用于输出三角波write_com(0x80+0x05);for(num=0;num9;num+)write_data(table6num);delayms(1);while(e!=0) delay=pinglv;desplay_pl();if(num0=delay)num0=0;P0=sanjiaok;k+;if(k=64)k=0;num0=0;25

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

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1