成都电子机械高等专科学校
毕业设计说明书(论文)
设计(论文)题目:低频函数信号发生器的设计 专 业: 应用电子技术 班 级: 08223 学 号: 20 姓 名: 郝 锐 指导教师: 高 燕
摘 要:信号发生器是一种常用的信号源,广泛地应用于电子电路、自动控制系统和教学实验等领域。目前使用的信号发生器大部分是函数信号发生器,且特殊波形发生器的价格昂贵。所以本设计使用的是AT89c51单片机构成的发生器,可产生三角波、方波、正弦波,波形的频率可用程序控制改变。在单片机的输出端口接DAC0832进行D/A转换,再通过运放进行波形调整,最后输出波形接在示波器上显示。本设计具有线路简单、结构紧凑、价格低廉、性能优越等优点。
关键词:信号发生器;单片机;波形调整
第页 1
目 录
第 1 章 绪 论 .........................................................................................3 1.1 课题背景 ......................................................................................3 第2章 低频信号发生器的方案研究 .........................................................3 2.1 总体方案论证与设计 ...................................................................3 2.2模块结构划分 .................................................................................4 第 3 章 硬件电路的设计 ........................................................................5 3.1 基本原理 ......................................................................................5 3.2各模块具体设计..............................................................................5 3.2.1 AT89C51单片机介绍 ............................................................5 3.2.2 D/A转换电路的设计 ..............................................................7 第 4 章 软件设计 .................................................................................10 4.1 软件总体设计..............................................................................10 4.2 程序流程图 ..................................................................................10 4.2.1 主函数流程图 ......................................................................11 4.2.2 键盘扫描程序 ......................................................................11 4.3 仿真过程 ......................................................................................17 结 论 ......................................................................................................20 参考文献 ..................................................................................................20
第页 2
第 1 章 绪 论
1.1 课题背景
随着电子测量及其他部门对各类信号发生器的广泛需求及电子技术的迅速发展,促使
信号发生器种类增多,性能提高。尤其随着70年代微处理器的出现,更促使信号发生器向着自动化、智能化方向发展。现在,许多信号发生器带有微处理器,因而具备了自校、自检、自动故障诊断和自动波形形成和修正等功能,可以和控制计算机及其他测量仪器一起方便的构成自动测试系统。当前信号发生器总的趋势是向着宽频率覆盖、低功耗、高频率精度、多功能、自动化和智能化方向发展。
在科学研究、工程教育及生产实践中,如工业过程控制、教学实验、机械振动试验、
动态分析、材料试验、生物医学等领域,常常需要用到低频信号发生器。而在我们日常生活中,以及一些科学研究中,锯齿波和正弦波、矩形波信号是常用的基本测试信号。譬如在示波器、电视机等仪器中,为了使电子按照一定规律运动,以利用荧光屏显示图像,常用到锯齿波产生器作为时基电路。信号发生器作为一种通用的电子仪器,在生产、科研、测控、通讯等领域都得到了广泛的应用。 但市面上能看到的仪器在频率精度、带宽、波形种类及程控方面都已不能满足许多方面实际应用的需求。加之各类功能的半导体集成芯片的快速生产,都使我们研制一种低功耗、宽频带,能产生多种波形并具有程控等低频的信号发生器成为可能。
第2章 低频信号发生器的方案研究
2.1 总体方案论证与设计
信号发生器的实现方法通常有以下几种:
方案一:用分立元件组成的函数发生器:通常是单函数发生器且频率不高,其工作不很稳定,不易调试。
方案二:可以由晶体管、运放IC等通用器件制作,更多的则是用专门的函数信号发生器IC产生。早期的函数信号发生器IC,如L8038、BA205、XR2207/2209等,它们的功能较少,精度不高,频率上限只有300kHz,无法产生更高频率的信号,调节方式也不够灵活,频率和占空比不能独立调节,二者互相影响。
方案三:利用专用直接数字合成DDS芯片的函数发生器:能产生任意波形并达到很高的频
第页 3
率。但成本较高。
方案四:采用AT89C51单片机和DAC0832芯片,直接连接键盘和显示。该种方案主要对AT89C51单片机的各个I/O口充分利用. P1口是连接键盘以及接显示电路,P2口连接DAC0832输出波形.这样总体来说,能对单片机各个接口都利用上,而不在多用其它芯片,从而减小了系统的成本.也对按照系统便携式低频信号发生器的要求所完成.占用空间小,使用芯片少,低功耗。 综合考虑,方案四各项性能和指标都优于其他几种方案,能使输出频率有较好的稳定性,充分体现了模块化设计的要求,而且这些芯片及器件均为通用器件,在市场上较常见,价格也低廉,样品制作成功的可能性比较大,所以本设计采用方案四。
2.2模块结构划分
本次设计所研究的就是对所需要的某种波形输出对应的数字信号,在通过D/A转换器和单片机部分的转换输出一组连续变化的0~5V的电压脉冲值。在设计时分块来做,按波形设定、D/A转换、51单片机连接、键盘控制四个模块的设计。最后通过联调仿真,完成相应功能。
具体设计模块如图 键盘控制 51单片机 DA转换 波形设定 模块介绍:
1.波形设定:对任意波形的手动设定
2.D/A转换:主要选用DAC0832来把数字信号转换为模拟信号,在送入单片机进
行处理。
3.单片机部分:最小系统
4.键盘:用按键来控制输出波形的种类和数值的输入
第页 4
第 3 章 硬件电路的设计
3.1 基本原理
复位电路 AT89C51 DA转换 按键 波形显示 电流电压转换 低频信号发生器系统主要由CPU、D/A转换电路、电流/电压转换电路、按键和显示电路、电源等电路组成。其工作原理为当按下第一个按键就会分别出现方波、三角波、正弦波。
3.2各模块具体设计
3.2.1 AT89C51单片机介绍
AT89C51是一种带4K字节闪存可编程可擦除只读存储器(FPEROM—Flash Programmable and Erasable Read Only Memory)的低电压、高性能CMOS 8位微处理器,俗称单片机。AT89C2051是一种带2K字节闪存可编程可擦除只读存储器的单片
第页 5
机。单片机的可擦除只读存储器可以反复擦除1000次。该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器,AT89C2051是它的一种精简版本。AT89C单片机为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。
3.2.1.1 主要技术指标和特性
·与MCS-51 兼容
·4K字节可编程闪烁存储器 ·寿命:1000写/擦循环 ·数据保留时间:10年 ·全静态工作:0Hz-24MHz ·三级程序存储器锁定 ·128×8位内部RAM ·32可编程I/O线 ·两个16位定时器/计数器 ·5个中断源 ·可编程串行通道
·低功耗的闲置和掉电模式 ·片内振荡器和时钟电路
3.2.1.2 外部引脚
VCC:供电电压。 GND:接地。
P0口:P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。当P0口的管脚第一次写1时,被定义为高阻输入。P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。在FIASH编程时,P0 口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须被拉高。
P1口:P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。在FLASH编程和校验时,P1口作为第八位地址接收。
P2口:P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。并因此作为输入时,P2口的管脚被外部拉低,将输出电流。这是由于内部上拉的缘
第页 6
故。P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。P2口在FLASH编程和校验时接收高八位地址信号和控制信号。
P3口:P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。
RST:复位输入。当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。
ALE/PROG:当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。在FLASH编程期间,此引脚用于输入编程脉冲。在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。因此它可用作对外部输出的脉冲或用于定时目的。然而要注意的是:每当用作外部数据存储器时,将跳过一个ALE脉冲。如想禁止ALE的输出可在SFR8EH地址上置0。此时, ALE只有在执行MOVX,MOVC指令是ALE才起作用。另外,该引脚被略微拉高。如果微处理器在外部执行状态ALE禁止,置位无效。
/PSEN:外部程序存储器的选通信号。在由外部程序存储器取指期间,每个机器周期两次/PSEN有效。但在访问外部数据存储器时,这两次有效的/PSEN信号将不出现。
/EA/VPP:当/EA保持低电平时,则在此期间外部程序存储器(0000H-FFFFH),不管是否有内部程序存储器。注意加密方式1时,/EA将内部锁定为RESET;当/EA端保持高电平时,此间内部程序存储器。在FLASH编程期间,此引脚也用于施加12V编程电源(VPP)。
XTAL1:反向振荡放大器的输入及内部时钟工作电路的输入。 XTAL2:来自反向振荡器的输出。
3.2.2 D/A转换电路的设计
DAC0832是CMOS工艺制造的8位D/A转换器,属于8位电流输出型D/A转换器,转换时间为1us,片内带输入数字锁存器。DAC0832与单片机接成数据直接写入方式,当单片机把一个数据写入DAC寄存器时,DAC0832的输出模拟电压信号随之对应变化。利用D/A转换器可以产生各种波形,如方波、三角波、正弦波、锯齿波等以及它们组合产生的复合波形和不规则波形。
第页 7
1.DAC0832主要性能: ◆输入的数字量为8位;
◆采用CMOS工艺,所有引脚的逻辑电平与TTL兼容; ◆数据输入可以采用双缓冲、单缓冲和直通方式; ◆转换时间:1us; ◆精度:1LSB; ◆分辨率:8位;
◆单一电源:5—15V,功耗20mw; ◆参考电压:-10—+10V;
DAC0832内部结构资料:芯片内有两级输入寄存器,使DAC0832具备双缓冲、单缓冲和直通三种输入方式,以便适于各种电路的需要(如要求多路D/A异步输入、同步转换等)。D/A转换结果采用电流形式输出。要是需要相应的模拟信号,可通过一个高输入阻抗的线性运算放大器实现这个供功能。运放的反馈电阻可通过RFB端引用片内固有电阻,还可以外接。
该片逻辑输入满足TTL电压电平范围,可直接与TTL电路或微机电路相接,下面是芯片电路原理图3-20
图3-20 DAC0832电路原理图
如图3-20所示,待转换的8位数字量由芯片的8位数据输入线D0~D7输入,经DAC0832转换后,通过2个电流输出端IOUT1和IOUT2输出,IOUT1是逻辑电
第页 8
平为\"1\"的各位输出电流之和,IOUT2是逻辑电平为\"0\"的各位输出电流之和。另外,ILE、
、
、
和
是控制转换的控制信号。
DAC0832由8位输入寄存器、8位DAC寄存器和8位D/A转换电路组成。输入寄存器和DAC寄存器作为双缓冲,因为在CPU数据线直接接到DAC0832的输入端时,数据在输入端保持的时间仅仅是在CPU执行输出指令的瞬间内,输入寄存器可用于保存此瞬间出现的数据。有时,微机控制系统要求同时输出多个模拟量参数,此时对应于每一种参数需要一片DAC0832,每片DAC0832的转换时间相同,就可采用DAC寄存器对CPU分时输入到输入寄存器的各参数在同一时刻开始锁存,进而同时产生各模拟信号。 控制信号ILE、
、
用来控制输入寄存器。当ILE为高电平,
为低电平,
为负脉冲时,在LE产生正脉冲;其中LE为高电平时,输入寄存器的状态随数据输入线状态变化,LE的负跳变将输入数据线上的信息存入输入寄存器。 控制信号
和
用来控制8位A/D转换器。当
为低电平,
输入负
脉冲时,则在LE产生正脉冲;其中LE为高电平时,DAC寄存器的输入与输出的状态一致,LE负跳变,输入寄存器内容存入DAC寄存器。
DAC0832的数据输出方式在微机应用系统中,通常使用的是电压信号,而DAC0832输出的是电流信号,这就需要由运算放大器组成的电路实现转换。其中有输出电压各自极性固定的单位性输出和在随动系统中输出电压有正负极性的双极性输出两种输出方式。3. DAC 0832同CPU的连接
微处理器与DAC0832之间可以不加锁存器,而是利用DAC0832内部锁存器,将CPU
通过数据总线直接向DAC0832输出的停留时间很短的数据保存,直至转换结束。 DAC0832同CPU的接口如图3-21所示.DAC0832作为微处理器的一个端口,用地址92H的选通作为
和
的控制信号,微处理器的写信号直接来控制
和
第页 9
。
图3-21 DAC0832和CPU连接电路
第 4 章 软件设计
4.1 软件总体设计
应用系统中的应用软件是根据系统功能要求而设计的,能可靠地实现系统的各种功能。
本系统的软件包括以下几个程序模块:初始化程序;键盘扫描程序与处理程序;定时器0服务程序;正弦波发生程序及其服务程序;三角波发生程序;方波发生程序。
4.2 程序流程图
第页 10
4.2.1 主函数流程图
开始 初始化 中断子 程序
无限调用键盘扫描程序
结束 4.2.2 键盘扫描程序 开始 读P1口 有键按下 N Y 软件延时消除振动 确认有,就读取P1口得值 按键是否松开 N Y 进行键值类型判 结束
第页 11
4.2.3 中断子程序
结束 第页 12
开始 定时器初始化 是正弦?波 N Y Y 向DA转换器送值 并指向下一个地址数据 是三角波? 地址大于255 如果c<200 N Y 向DA转换器送c值 向DA转换器送N Y 地址置0 是方波? N Y 算占空比 N C++ N 200 - (c-200)值 C>400 Y C=0 D比设定值小? Y 向DA转换器送0 N 向DA转换器送1 N d>255 Y d置0
其他子程序的相对简单,流程图就不一一画出了。
4.2.4 相应程序
#include #define DA0832 XBYTE[0x7fff] #define uchar unsigned char #define uint unsigned int uint wave_choice=1,c=0,zk=1,k=0,d=0,f=1,b=0,t=0; uchar code tosin[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 };/*正弦波码 */ void time0_int(void) interrupt 1 //中断服务程序 { t=(65536-1000000 / f)/256; TH0 = t / 256; //定时器高八位值 TL0= t % 256; //定时器低八位值 TR0 = 0; if(wave_choice == 1) 第页 13 { DA0832= tosin[b]; //正弦波 b++; if(b>255) b=0; } else if( wave_choice == 2 ) //三角波 { if(c <= 200) { DA0832= c; } else { DA0832= 200 - (c-200); } c ++; if(c>400) c=0; } else if( wave_choice == 3 ) { k = zk * 256 / 100; d ++; if(d <= k) { DA0832= 0x00; } else DA0832= 0xff; if(d>255) d=0; } TR0 = 1; } void key1(){ if(wave_choice<4) wave_choice++; else wave_choice=1; // 方波 第页 14 } void key2(){ if(f<=100) f++; } void key3(){ if(f>1) f--; } void key4(){ if(zk<100) zk++; } void key5(){ if(zk>1) zk--; } void delay(){ uchar i,j; for(i=256;i>0;i--) for(j=256;j>0;j--); } void judge() { uchar Y; P1 = 0xff; if(P1!=0xff) //判断是否有键按下 { delay(); //延时,软件去干扰 if(P1!= 0xff) //确认按键按下X = P1; { Y=P1; //保存列扫描时有键按下时状态 while(P1!=0xff) {;} switch ( Y ) //判断键值(那一个键按下) { 第页 15 case 0xfe: key1(); break; case 0xfd: key2(); break; //对键值赋值 case 0xfb: key3(); break; case 0xf7: key4(); break; case 0xef: key5(); break; } } } } void main(){ TMOD=0X01; TH0 =0XF0;//1S TL0 =0XBE; IE=0x82; TR0=1 ; while(1) { judge(); } } 第页 16 4.3 仿真过程 4.3.1 各个波形 图一 正弦波 图二 三角波 第页 17 图三 方波 4.3.2 波形修改 图四 正弦波增加频率 第页 18 图五 增加方波的占空比 第页 19 结 论 两个月的毕业设计终于要结束了,在这对这回所做的设计和心得来总结一下,在这两个月里按照任务要求,利用单片机做出低频信号发生器.在做的过程中,自学了单片机原理这门课程,在老师和同学的帮助下,对单片机的认识有了进一步的认识和使用.在学习单片机的时候,首先要理解清楚其工作原理和工作时序,那样的话才能对所要求电路进行编程.还有就是在做设计的时候要认真一点,那点错了要换个思维方式在做,找到错误的知识点,在看书或者问老师来解决.在剩下就是谢谢老师和同学们这些天的教导和帮助. 参考文献 [1]何立民.MCS-51系列单片机应用系统设计.北京:北京航空航天大学出版社,1990 [2]穆兰.单片微型计算机原理及接口技术.北京:机械工业出版社,1995 [3]张毅刚.MCS-51单片机应用设计.哈尔滨:哈尔滨工业大学出版社,1990 [4]蒋智勇. 单片微型计算机原理及接口技术.沈阳:辽宁科学技术出版设,1992 [5]韩全立,王建明.单片机控制技术及应用.北京:电子工业出版社,2004 [6]徐仁贵. 微型计算机借口技术及应用.北京:机械工业出版社,1995 [7]房小翠,王金凤.单片机使用系统设计技术.北京:国防工业出版社,1999 [8]张毅坤,陈善久,裘雪红.单片微型计算机原理及应用.西安:西安电子科技大学出版社,1998 [9]任为民. 电子技术基础课程设计.北京:中央广播电视大学出版社,1997 [10]弘道工作室.融会贯通 Protel99电路设计.北京:人民交通出版设,2000 第页 20 因篇幅问题不能全部显示,请点此查看更多更全内容