第一篇:基于51单片机函数信号发生器设计
湘南学院
电子工程设计
题 目: 基于51单片机的函数信号发生器设计
学院(系): 电子信息与电气工程学院 年级专业: 2013级电子信息科学与技术 学 号: 201314110144,201314110106 学生姓名: 周 慧 程迅 指导教师: 王 龙
2016年 4 月 1 日
课程设计任务书
学生姓名:程迅 周慧
专业班级:电子信息科学与技术
(一)班 指导教师:王 龙 工作单位:电子信息与电气工程学院
题 目:
基于51单片机的函数信号发生器的设计 初始条件:
1.运用所学的单片机原理与接口技术知识和数字电路知识; 2.51单片机最小系统; 3.PC机及相关应用软件。
要求完成的主要任务: 系统大致包括信号发生部分、数/模转换部分以及液晶显示部分三部分,通过程序设计方法产生锯齿波、正弦波、三角波、矩形波四种波形,通过按键来控制四种波形的类型选择、频率变化,并通过液晶屏1602显示其各自的类型以及频率值。
1.完成函数信号发生器的设计和调试。
2.撰写课程设计说明书,说明书使用A4打印纸计算机打印,用proteus等仿真软件绘制电子线路图纸。
基于51单片机的函数信号发生器的设计
摘 要
本系统利用单片机STC89C52采用程序设计方法产生锯齿波、正弦波、三角波、矩形波四种波形,再通过D/A转换器DAC0832将数字信号转换成模拟信号,滤波放大,最终由示波器显示出来,能产0Hz—535Hz的波形。通过按键来控制三种波形的类型选择、频率变化,并通过液晶屏1602显示其各自的类型以及数值,系统大致包括信号发生部分、数/模转换部分以及液晶显示部分三部分,其中尤其对数/模转换部分和波形产生和变化部分进行详细论述。
关键词:单片机STC89C52、DAC0832、液晶1602
目录
前言..........................................................................1 第一章 系统设计要求及设计方案..................................................2
1.1 设计要求.................................................................2 1.2 方案设计与论证...........................................................2 1.2.1 信号发生电路方案论证...............................................2 1.2.2 单片机的选择论证..................................................2 1.2.3 显示方案论证.....................................................3 1.2.4 键盘方案论证......................................................3 1.3 系统主要功能.............................................................3 第二章 系统的硬件设计..........................................................4 2.1 总体系统设计.............................................................4 2.2 硬件实现及单元电路设计...................................................4 2.2.1 振荡电路..........................................................4 2.2.2 复位电路设计.....................................................5 2.2.3 波形产生模块设计..................................................6 2.2.4显示模块的设计.....................................................7 2.2.5 键盘显示模块的设计.................................................7 2.3 软件设计流程.............................................................8 第三章 proteus的简介..........................................................9 3.1 proteus介绍.............................................................9 3.1.1 keil调试.........................................................10 3.1.2 proteus仿真调试..................................................10 3.2 测试过程................................................................11 附录一:总电路图..............................................................12 附录二:部分程序..............................................................12
前言
信号发生器是一种常用的信号源,广泛应用于电子电路、自动控制系统和教学实验等领域。信号的产生有模拟电路、专用硬件和软件产生等方法。采用模拟电路搭建函数信号发生器,可产生方波、三角波、正弦波、锯齿波,但不能产生任意波形,存在波形质量差、控制难、可调范围小,电路复杂和体积大等缺点,且频率调节不方便。专用硬件方法产生的信号频率分辨率高、稳定性好、在线调整方便,如目前在通讯系统中应 用广泛的直接数字频率合成(DDS)技术,例如 AD9854是一种典型的信号产生方法,但是价格昂贵。
利用单片机通过程序设计方法产生低频信号,其频率底线较低,具有线路简单、结构紧凑、体积小、价格低廉、频率稳定度高、抗干扰能力强、用途广泛等优点,且如需要产生新的波形时,只需对程序进行修改即可。该系统利用单片机STC89C52和D /A 转换器DAC0832 转换数字信号为 0 ~ 5 V 模拟电压信号,并在 LCD1602 显示,通过示波器就能得知产生的信号波形。
第一章 系统设计要求及设计方案
1.1 设计要求
1)、利用单片机采用软件设计方法产生四种波形 2)、四种波形可通过按键选择输出 3)、波形频率可调 4)、需显示波形的频率
1.2 方案设计与论证 1.2.1 信号发生电路方案论证
方案一:通过单片机控制D/A,输出三种波形。此方案输出的波形不够稳定,抗干扰能力弱,不易调节。但此方案电路简单、成本低。
方案二:使用传统的锁相频率合成方法。通过芯片IC145152,压控振荡器搭接的锁相环电路输出稳定性极好的正弦波,再利用过零比较器转换成方波,积分电路转换成三角波。此方案,电路复杂,干扰因素多,不易实现。
方案三:利用MAX038芯片组成的电路输出波形。MAX038是精密高频波形产生电路,能够产生准确的三角波、方波和正弦波三种周期性波形。但此方案成本高,程序复杂度高。
以上三种方案综合考虑,选择方案一。
1.2.2 单片机的选择论证
方案一:STC89C52单片机是一种高性能8位单片微型计算机。它把构成计算机的中央处理器CPU、存储器、寄存器、I/O接口制作在一块集成电路芯片中,从而构成较为完整的计算机、而且其价格便宜。
方案二:C8051F005单片机是完全集成的混合信号系统级芯片,具有与8051兼容的微控制器内核,与MCS-51指令集完全兼容。除了具有标准8052的数字外设部件,片内还集成了数据采集和控制系统中常用的模拟部件和其他数字外设及功能部件,而且执行速度快。但其价格较贵。
以上两种方案综合考虑,选择方案一
1.2.3 显示方案论证
方案一:采用LED数码管。LED数码管由8个发光二极管组成,每只数码管轮流显示各自的字符。由于人眼具有视觉暂留特性,当每只数码管显示的时间间隔小于1/16s时人眼感觉不到闪动,看到的是每只数码管常亮。使用数码管显示编程较易,但要显示内容多,而且数码管不能显示字母。
方案二:采用LCD液晶显示器1602。其功率小,效果明显,显示编程容易控制,可以显示字母。
以上两种方案综合考虑,选择方案二。
1.2.4 键盘方案论证
方案一:矩阵式键盘。矩阵式键盘的按键触点接于由行、列母线构成的矩阵电路的交叉处。当键盘上没有键闭合时,所有的行和列线都断开,行线都呈高电平。当某一个键闭合时,该键所对应的行线和列线被短路。
方案二:独立点触按键。点触按键体积小,安装方便,成本低。以上两种方案综合考虑,选择方案二。
1.3 系统主要功能
经过考虑,我们确定方案如下:利用STC89C52单片机采用程序设计方法产生锯齿波、正弦波、矩形波锯齿波四种波形,再通过D/A转换器DAC0832将数字信号转换成模拟信号,滤波放大,最终由示波器显示出来,通过按键来控制四种波形的类型选择、频率变化,最终输出显示其各自的类型以及数值。
第二章 系统的硬件设计
2.1 总体系统设计
该系统采用单片机作为数据处理及控制核心,由单片机完成人机界面、系统控制、信号的采集分析以及信号的处理和变换,采用按键输入,利用液晶显示电路输出数字显示的方案。将设计任务分解为按键电路、液晶显示电路等模块。下
图2.1为系统的总体框图
图2.1 总体方框图
2.2 硬件实现及单元电路设计
2.2.1 振荡电路
单片机内部有一个高增益、反相放大器,其输入端为芯片引脚XTAL1,其输出端为引脚XTAL2。通过这两个引脚在芯片外并接石英晶体振荡器和两只电容振荡电路脉冲经过二分频后作为系统的时钟信号,再在二分频的基础上三分频产
4(电容和一般取30pF)。这样就构成一个稳定的自激振荡器。
生ALE信号,此时得到的信号时机器周期信号。
振荡电路如图2.2.1所示:
图2.2.1 振荡电路
2.2.2 复位电路设计
复位操作有两种基本形式:一种是上电复位,另一种是按键复位。按键复位具有上电复位功能外,若要复位,只要按图中的RESET键,电源VCC经电阻R1、R2分压,在RESET端产生一个复位高电平。上电复位电路要求接通电源后,通过外部电容充电来实现单片机自动复位操作。上电瞬间RESET引脚获得高电平,随着电容的充电,RERST引脚的高电平将逐渐下降。RERST引脚的高电平只要能保持足够的时间(2个机器周期),单片机就可以进行复位操作。按键复位电路图如图2.2.2所示。
图2.2.2 复位电路
2.2.3 波形产生模块设计
由单片机采用编程方法产生四种波形、通过DA转换模块DAC0832在进过滤波放大之后输出。
其电路图如下图2.2.3(1):
图2.2.3(1)波形产生电路
如上图2.2.3(1)所示,单片机的P0口连接DAC0832的八位数据输入端,DAC0832的输出端接放大器,经过放大后输出所要的波形。DAC0832的为八位数据并行输入的,其结构图如下图2.2.3(2):
图2.2.3(2)DAC0832的内部结构
2.2.4显示模块的设计
通过液晶1602显示输出的波形、频率。1602的八位数据端接单片机的P0口,其使能端RS、E分别接单片机的P3.5、P3.4。通过软件控制液晶屏可以显示波形的种类以及波形的频率。
其电路图如下图2.2.4:
图2.2.4 液晶显示
2.2.5 键盘显示模块的设计
其连接电路图如下图2.2.5:
图2.2.5 键盘
图中键盘引出的5跟线分别接单片机的P1口,其中P1.0连接按键1用于切换波形,P1.1、P1.2连接按键2、3用于调节波形的频率的增减,P1.3连接的按键用于占空比的升高。
2.3 软件设计流程
本系统采用STC89C52单片机,用编程的方法来产生四种波形,并通过编程 来切换四种波形以及波形频率的改变。
具体功能有:(1)各个波形的切换;(2)各种参数的设定;(3)频率增减等。
软件调通后,通过编程器下载到STC89C52芯片中,然后插到系统中即可独立完成所有的控制。
软件的流程图如下图2.3:
图2.3 程序流程图
第三章 proteus的简介
3.1 proteus介绍
Proteus软件是来自英国Labcenter electronics公司的EDA工具软件,它组合了高级原理布图、混合模式SPICE仿真,PCB设计以及自动布线来实现一个完整的电子设计系统。此系统受益于15年来的持续开发,被《电子世界》在其对PCB设计系统的比较文章中评为最好产品—“The Route to PCB CAD”。Proteus 产品系列也包含了我们革命性的VSM技术,用户可以对基于微控制器的设计连同所有的周围电子器件一起仿真。用户甚至可以实时采用诸如LED/LCD、键盘、RS232终端等动态外设模型来对设计进行交互仿真。
其功能模块:—个易用而又功能强大的ISIS原理布图工具;PROSPICE混合模型SPICE仿真;ARES PCB设计。PROSPICE 仿真器的一个扩展PROTEUS VSM:便于包括所有相关的器件的基于微处理器设计的协同仿真。此外,还可以结合微控制器软件使用动态的键盘,开关,按钮,LEDs甚至LCD显示CPU模型。支持许多通用的微控制器,如PIC,AVR,HC11以及8051。最新支持ARM。交互的装置模型包括:LED和LCD显示,RS232终端,通用键盘,I2C,SPI器件。强大的调试工具,包括寄存器和存储器,断点和单步模式。IAR C-SPY 和Keil uVision2等开发工具的源层调试。应用特殊模型的DLL界面-提供有关元件库的全部文件。
在完成了函数信号发生器的硬件设计和软件设计以后,便进入系统的调试阶段。系统的调试步骤和方法基本上是相同的,但具体细节和所采用的开发系统以及用户系统选用的单片机型号有关,我们选用的是Keil软件进行软件调试,用Proteus软件完成硬件调试。
3.1.1 keil调试
3.1.2 proteus仿真调试
3.2 测试过程
1)、当程序下进去时经过初始化,液晶屏的上只显示“Frequency:”和“0050Hz”,默认状态输出波形为正弦波,按一下按键1时输出为方波,按按键1两下时输出为锯齿波,按按键1三下时输出三角波。按键2、3可以调节频率,三种波形的频率可调范围,分别如下: 正弦波:0—535Hz 方 波:0——535Hz 三角波:0——535Hz 锯齿波:0——535Hz 根据示波器的波形频率的显示计算出三种波形的频率计算公式如下:
正弦波:f= 65536-10^6//(512*FREQ)方 波:f= 65336-10^6/(256*FREQ)三角波:f= 65336-10^6/(256*FREQ)锯齿波:f= 100(+-)n*2Hz.2)、四种种波形的仿真波形图如下:
图3.2(1)方波图形
图3.2(2)正弦波图形
图3.2(3)三角波图形 图3.2(4)锯齿波图形
附录一:总电路图
附录二:部分程序
//调节部分——频率 void freq_ud(void){ unsigned int temp;if(freq_d==0){ FREQ--;
} else if(freq_u==0){ FREQ++;} if(cho==1|cho==3)//锯齿波256次中断一周期,否则他的频率是100(+-)n*2Hz.{temp=0xffff-3906/FREQ;//默认为100hz,切换后频率为50HZ65336-10^6/(256*FREQ)TIME0_H=temp/256;TIME0_L=temp%256;} else if(cho==0|cho==3)//正弦波 三角波默认周期50hz 65536-10^6//(512*FREQ){temp=0xffff-1953/FREQ;TIME0_H=temp/256;TIME0_L=temp%256;}}
//调节部分——方波的占空比
void duty_ud(void)//方波也采用512次中断构成一个周期。{ if(duty_d==0&sqar_num>0)sqar_num--;else if(duty_u==0&sqar_num<255)} //波形发生函数 void sint(void){ if(!flag){ cs=0;P2=sin_num[num++];cs=1;if(num==0){num=255;flag=1;} sqar_num++;} else if(flag){
} void square(void){ if(i++ cs=0;P2=num++;cs=1;} void stw(void){ if(~flag){ cs=0;P2=num++;cs=1;if(num==0){num=255;flag=1;} } else if(flag){ } void main(){ TMOD=0X01;TH0=0xff;TL0=0xd9;IT0=1;//设置中断触发方式,下降沿 EA=1;EX0=1;ET0=1;IP=0X01;//键盘中断级别高 init_1602();//初始化lcd write_command(0x80);//液晶显示位置 delay(5); for(i=0;i { } write_data(value1[i]);delay(5);TR0=1;while(1){ show_frequency();} } //按键中断处理程序。void it0()interrupt 0 { if(chg==0){FREQ=50;if(++cho==4){cho=0;num=0;}}//num=0;所有数据从新开始,保证波形的完整性 else if(freq_u==0|freq_d==0){freq_ud();} else if(cho==1&(duty_d==0|duty_u==0)){duty_ud();} else;} 摘 要: 本系统利用单片机AT89S52采用程序设计方法产生锯齿波、正弦波、矩形波三种波形,再通过D/A转换器DAC0832将数字信号转换成模拟信号,滤波放大,最终由示波器显示出来,能产1Hz—3kHz的波形。通过键盘来控制三种波形的类型选择、频率变化,并通过液晶屏1602显示其各自的类型以及数值,系统大致包括信号发生部分、数/模转换部分以及液晶显示部分三部分,其中尤其对数/模转换部分和波形产生和变化部分进行详细论述。 关键词:单片机AT89S52、DAC0832、液晶1602 Abstract: this system capitalize on AT89s52,it makes use of central processor to generate three kinds of waves, they are triangle wave, and use D/A conversion module, wave generate module and liquid crystal display of 1602, it can have the 1Hz-3KHz profile.In this system it can control wave form choosing, frequency, range,can have the sine wave, the square-wave, the triangular wave.Simultaneously may also take the frequency measurement frequency,and displays them through liquid crystal display of 1602.this design includes three modules.They are D/A conversion module, wave generate module and liquid crystal display of LED module.In this design, the wave generator into wave form module and D/A conversion module are discussed in detail.key word: AT89S52, DAC0832, liquid crystal 1602.目录 1.系统设计 1.1 设计要求 1.2方案设计与论证 1.2.1 信号发生电路方案论证 1.2.2 单片机的选择论证 1.2.3 显示方案论证 1.2.4 键盘方案论证 1.3 总体系统设计 1.4 硬件实现及单元电路设计 1.4.1 单片机最小系统的设计 1.4.2 波形产生模块设计 1.4.3 显示模块的设计 1.4.4 键盘模块的设计 1.5 软件设计流程 1.6 源程序 2.输出波形的种类与频率的测试 2.1 测试仪器及测试说明 2.2 测试结果 3.设计心的及体会 4.附录 4.1 参考文献 4.2 附图 1、系统设计 经过考虑,我们确定方案如下:利用AT89S52单片机采用程序设计方法产生锯齿波、正弦波、矩形波三种波形,再通过D/A转换器DAC0832将数字信号转换成模拟信号,滤波放大,最终由示波器显示出来,通过键盘来控制三种波形的类型选择、频率变化,最终输出显示其各自的类型以及数值。 1.1、设计要求 1、利用单片机采用软件设计方法产生三种波形 2)、三种波形可通过键盘选择 3)、波形频率可调 4)、需显示波形的种类及其平率 1.2方案设计与论证 1.2.1 信号发生电路方案论证 方案一:通过单片机控制D/A,输出三种波形。此方案输出的波形不够稳定,抗干扰能力弱,不易调节。但此方案电路简单、成本低。 方案二:使用传统的锁相频率合成方法。通过芯片IC145152,压控振荡器搭接的锁相环电路输出稳定性极好的正弦波,再利用过零比较器转换成方波,积分电路转换成三角波。此方案,电路复杂,干扰因素多,不易实现。 方案三:利用MAX038芯片组成的电路输出波形。MAX038是精密高频波形产生电路,能够产生准确的三角波、方波和正弦波三种周期性波形。但此方案成本高,程序复杂度高。 以上三种方案综合考虑,选择方案一。 1.2.2 单片机的选择论证 方案一:AT89S52单片机是一种高性能8位单片微型计算机。它把构成计算机的中央处理器CPU、存储器、寄存器、I/O接口制作在一块集成电路芯片中,从而构成较为完整的计算机、而且其价格便宜。 方案二:C8051F005单片机是完全集成的混合信号系统级芯片,具有与8051兼容的微控制器内核,与MCS-51指令集完全兼容。除了具有标准8052的数字外设部件,片内还集成了数据采集和控制系统中常用的模拟部件和其他数字外设及功能部件,而且执行速度快。但其价格较贵 以上两种方案综合考虑,选择方案一 1.2.3 显示方案论证 方案一:采用LED数码管。LED数码管由8个发光二极管组成,每只数码管轮流显示各自的字符。由于人眼具有视觉暂留特性,当每只数码管显示的时间间隔小于1/16s时人眼感觉不到闪动,看到的是每只数码管常亮。使用数码管显示编程较易,但要显示内容多,而且数码管不能显示字母。 方案二:采用LCD液晶显示器1602。其功率小,效果明显,显示编程容易控制,可以显示字母。 以上两种方案综合考虑,选择方案二。 1.2.4 键盘方案论证 方案一:矩阵式键盘。矩阵式键盘的按键触点接于由行、列母线构成的矩阵电路的交叉处。当键盘上没有键闭合时,所有的行和列线都断开,行线都呈高电平。当某一个键闭合时,该键所对应的行线和列线被短路。 方案二:编码式键盘。编码式键盘的按键触点接于74LS148芯片。当键盘上没有闭合时,所有键都断开,当某一键闭合时,该键对应的编码由74LS148输出。 以上两种方案综合考虑,选择方案一。 1.3总体系统设计 该系统采用单片机作为数据处理及控制核心,由单片机完成人机界面、系统控制、信号的采集分析以及信号的处理和变换,采用按键输入,利用液晶显示电路输出数字显示的方案。将设计任务分解为按键电路、液晶显示电路等模块。图(1)为系统的总体框图 图(1)总体方框图 1.4硬件实现及单元电路设计 1.4.1单片机最小系统的设计 89C51是片内有ROM/EPROM的单片机,因此,这种芯片构成的最小系统简单﹑可靠。用80C51单片机构成最小应用系统时,只要将单片机接上时钟电路和复位电路即可,如图(2)89C51单片机最小系统所示。由于集成度的限制,最小应用系统只能用作一些小型的控制单元。其应用特点: (1 有可供用户使用的大量I/O口线。(2 内部存储器容量有限。(3 应用系统开发具有特殊性。 图(2)89C51单片机最小系统 1.4.2 波形产生模块设计 由单片机采用编程方法产生三种波形、通过DA转换模块DAC0832在进过滤波放大之后输出。其电路图如下: 图(3)波形产生电路 如上图所示,单片机的P0口连接DAC0832的八位数据输入端,DAC0832的输出端接放大器,经过放大后输出所要的波形。DAC0832的为八位数据并行输入的,其结构图如下: 图(4)DAC0832的内部结构 1.4.3 显示模块的设计 通过液晶1602显示输出的波形、频率,其电路图如下: 图(5)液晶显示 如上图所示,1602的八位数据端接单片机的P1口,其三个使能端RS、RW、E分别接单片机的P3.2—P3.4。通过软件控制液晶屏可以显示波形的种类以及波形的频率。 1.4.4 键盘显示模块的设计 本系统采用独立键盘,其连接电路图如下: 图(6)键盘 图中键盘独立键盘引出的八跟线分别接单片机的P2口,只用其第四列,因此在程序初始化时P2.7脚给低电平。如图开关3用来切换输出波形、开关7和8用 来调节频率的加减。当按开关7时输出波形的频率增加,按开关8时输出波形的频率减小。 1.5 软件设计流程 本系统采用AT89S52单片机,用编程的方法来产生三种波形,并通过编程 来切换三种波形以及波形频率的改变。 具体功能有:(1)各个波形的切换;(2)各种参数的设定;(3)频率增减等。 软件调通后,通过编程器下载到AT89S52芯片中,然后插到系统中即可独立完成所有的控制。 软件的流程图如下: 图(7)程序流程图 1.6源程序 #include #define uchar unsigned char #define uint unsigned int sbit lcdrw=P3^3;sbit lcdrs=P3^2;sbit lcde=P3^4;sbit d=P2^7;sbit s1=P2^0;sbit s2=P2^1;sbit s3=P2^2;sbit cs=P3^5;sbit wr=P3^6;uchar s1num,a,ys,j;uint fre;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 delay(uint z //延时子程序 { uchar i,j;for(i=z;i>0;i--for(j=110;j>0;j--;} void delay1(uint y { uint i;for(i=y;i>0;i--;} void write_com(uchar com //1602写指令 { lcdrs=0;P1=com;delay(5;lcde=1;delay(5;lcde=0;} void write_data(uchar date //1602数据 { lcdrs=1;P1=date;delay(5;lcde=1;delay(5;lcde=0;} void init(//初始化 { 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;} void write_f(uint date //写频率 { uchar qian,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;} void xsf(//显示频率 { if(s1num==1 { fre=(1000/(9+3*ys;write_f(fre;} if(s1num==2 { fre=(100000/(3*ys;write_f(fre;} if(s1num==3 { fre=(1000/(15+3*ys;write_f(fre;} } void keyscanf({ d=0;if(s1==0 { delay(5;if(s1==0 { while(!s1;s1num++;if(s1num==1 { ys=0;write_com(0x80+0x05;write_data(0x73;//写sine: write_data(0x69;write_data(0x6e;write_data(0x65;write_data(0x20;write_data(0x20;} if(s1num==2 { ys=10;write_com(0x80+0x05;write_data(0x73;//写squrae write_data(0x71;write_data(0x75;write_data(0x61;write_data(0x72;write_data(0x65;} if(s1num==3 { ys=0;write_com(0x80+0x05;//train write_data(0x74;write_data(0x72;write_data(0x61;write_data(0x69;write_data(0x6e;write_data(0x20;} if(s1num==4 { s1num=0;P1=0;write_com(0x80+0x05;write_data(0x20;write_data(0x20;write_data(0x20;write_data(0x20;write_data(0x20;write_data(0x20;write_com(0x80+0x42;write_data(0x20;write_data(0x20;write_data(0x20;write_data(0x20;write_data(0x20;write_data(0x20;} } } if(s2==0 { delay(5;if(s2==0 { while(!s2;ys++;} } if(s3==0 { delay(5;if(s3==0 { while(!s3;ys--;} } } void main({ init(;while(1 { keyscanf(;if(s1num==1 //正弦波// { for(j=0;j<255;j++ { P0=tosin[j];delay1(ys;} } if(s1num==2 //方波// { P0=0xff;delay1(ys;P0=0;delay1(ys;} if(s1num==3 //三角波// { if(a<128 { P0=a;delay1(ys;} else { P0=255-a; delay1(ys;} a++;} if(!(s1&s2&s3 { xsf(;} } } 2、输出波形的种类与频率的测试 2.1、测量仪器及测试说明 测量仪器:稳压电源、示波器、数字万用表。 测量说明:正弦波、矩形波、三角波信号的输出,通过对独立键盘来实现其的不同波形的输出以及其频率的改变。 2.2测试过程 当程序下进去时经过初始化,液晶屏的上只显示“wave:”和“f:“,当开关三按一下是此时输出波形为正弦波,按两下时输出为方波,按三下时输出为三角波。另外两个开关可以调节频率,三种波形的频率可调范围不同,分别如下: 正弦波:1—180HZ 方 波:1——3.3KHZ 三角波:1——180HZ 根据示波器的波形频率的显示计算出三种波形的频率计算公式如下: 正弦波:f=(1000/(9+3*ys 方 波:f=(100000/(3*ys 三角波:f=(1000/(15+3*ys 其中ys为延时的变量。三种波形的仿真波形图如下: 图(8)正弦波图形 图(9)方波图形 图(10)三角波图行 2.3、测试结果 各项指标均达到要求。 测试数据如下: 1)、产生正弦波、方波、三角波基本实现 2)、三种波形的频率都可调,但不能步进的调节,其中方波的可调范围最广为1—3.3KHZ,其他两种波形的频率范围不大1—180HZ 3)、显示部分基本实现 4)、键盘功能实现 3、设计心的及体会 通过这次毕业设计,使我深刻地认识到学好专业知识的重要性,也理解了理论联系实际的含义,并且检验了大学三年的学习成果,进一步加深了我对专业知识的了解和认识以及动手的能力。虽然在这次设计中对于所学知识的运用和衔接还不够熟练,作品完成的还不是很出色。但是我将在以后的工作和学习中继续努力、不断完善。这个设计是对我们过去所学知识的系统提高和扩充的过程,为今后的发展打下了良好的基础。 4、附录 4.1 参考文献 [1] 戴仙金主编 51单片机及其C语言汇编程序开发实例 清华大学出版社,2008 [2] 高吉祥主编 全国大学生电子设计竞赛培训系列教程 电子工业出版社,2007 [3] 杨素行主编 模拟电子技术基础简明教程 高等教育出版社,2007 [4] 蒋辉平主编 单片机原理与应用设计 北京航空航天大学出版社 2007 4.2 附图 图(11)总体原理设计图 函数信号发生器设计设计任务与要求 ⑴ 设计并制作能产生正弦波、矩形波(方波)和三角波(锯齿波)的函数发生器,本信号发生器可以考虑用专用集成芯片(如5G8038等)为核心实现。⑵ 信号频率范围: 1Hz∽100kHz; ⑶ 频率控制方式: ① 手控通过改变RC参数实现; ② 键控通过改变控制电压实现; ③ 为能方便地实现频率调节,建议将频率分档; ⑷ 输出波形要求 ① 方波上升沿和下降沿时间不得超过200nS,占空比在48%∽50%之间;② 非线性误差≤2%; ③ 正弦波谐波失真度≤2%; ⑸ 输出信号幅度范围:0∽20V; ⑹ 信号源输出阻抗:≤1Ω; ⑺ 应具有输出过载保护功能; ⑻ 具有数字显示输出信号频率和电压幅值功能。 【转】 51单片机设计多功能低频函数信号发生器 2010-06-05 17:37 转载自 yeyongan1987 最终编辑 yeyongan1987 51单片机设计多功能低频函数信号发生器 应用89S52单片机和DAC0832进行低频函数信号发生器的设计。本设计能产生正弦波、锯齿波、三角波和方波。这里着重介绍正弦波和锯齿波的生成原理。 ADC0832的介绍:DAC0832是8分辨率的D/A转换集成芯片。与微处理器完全兼容。这个DA芯片以其价格低廉、接口简单、转换控制容易等优点,在单片机应用系统中得到广泛的应用。D/A转换器由8位输入锁存器、8位DAC寄存器、8位D/A转换电路及转换控制电路构成。 D0~D7:八位数据输入端 ILE: 数据允许锁存信号 /CS: 输入寄存器选择信号 /WR1: 输入寄存器选择信号 /XFER:数据传送信号 /WR2: DAC寄存器的写通选择信号 Vref: 基准电源输入端 Rfb: 反馈信号输入端 Iout1: 电流输出1 Iout2: 电流输出2 Vcc: 电源输入端 AGND: 模拟地 DGND: 数字地 DAC0832结构: D0~D7:8位数据输入线,TTL电平,有效时间应大于90ns(否则锁存器的数据会出错); ILE:数据锁存允许控制信号输入线,高电平有效; CS:片选信号输入线(选通数据锁存器),低电平有效; WR1:数据锁存器写选通输入线,负脉冲(脉宽应大于500ns)有效。由ILE、CS、WR1的逻辑组合产生LE1,当LE1为高电平时,数据锁存器状态随输入数据线变换,LE1的负跳变时将输入数据锁存; XFER:数据传输控制信号输入线,低电平有效,负脉冲(脉宽应大于500ns)有效; WR2:DAC寄存器选通输入线,负脉冲(脉宽应大于500ns)有效。由WR1、XFER的逻辑组合产生LE2,当LE2为高电平时,DAC寄存器的输出随寄存器的输入而变化,LE2的负跳变时将数据锁存器的内容打入DAC寄存器并开始D/A转换。 IOUT1:电流输出端1,其值随DAC寄存器的内容线性变化; IOUT2:电流输出端2,其值与IOUT1值之和为一常数; Rfb:反馈信号输入线,改变Rfb端外接电阻值可调整转换满量程精度; Vcc:电源输入端,Vcc的范围为+5V~+15V; VREF:基准电压输入线,VREF的范围为-10V~+10V; AGND:模拟信号地 DGND:数字信号地 DAC0832的工作方式: 根据对DAC0832的数据锁存器和DAC寄存器的不同的控制方式,DAC0832有三种工作方式:直通方式、单缓冲方式和双缓冲方式。本设计选用直通方式。 DAC0832工作时序: DAC0832内部结构图: 当ILE为1时,只有当/CS、/WR1都为0时输入寄存器才允许输入;当/WR2、/XFER也都为0时,输入寄存器里的信息才能写入DAC寄存器。根据实际电路图我们就可以得到DAC0832工作的时序的程序。如下: P37=0;//P37=CS _nop_();//P36=WR P36=0; P0=value;(数据端口信号数值0~255)P36=1;_nop_();P37=1;硬件电路: P0口是数据端口,接上拉电阻(其他端口则不用)。电源质量要好,质量越好的电源,芯片工作就越稳定。 从LM358运放输出的电压最大峰峰值就是12V所以在二级运放的放大倍数要注意跟基准电压想匹配,否则输出信号会很容易失真。 正弦波的生成: DAC0832产生信号的原理可以说是ADC0809AD转换的逆过程,但DAC0832生成的信号是离散的。假设要生成一个Y=Asin(2*pi*f*t)的正弦波。adc0832数据端口给的数据的范围是0~255一共256个。前0~127表示是X轴上方的电压值(也可能是下方)。那么128~255是X轴下方的电压值。那么我们可以得到数据端口的数值的具体量,即value=127sin(2*pi*f*t)+127;假设我在X轴上抽样100个点(0~99),那么value=127sin(pi/50*t)+127;t:0~99.(这个100位的数组可以用MATALB生成)。也可以抽样更多的点,抽样的点越多,得到的信号越保真,但信号的频率会有所下降。抽样的点越少,失真越大,但频率能成大幅度递增。怎么选择,具体情况具体分析。其他的波形也跟正弦波一样。 程序如下: #include void getkey(void){ if(KEY1==0){ //按键按下后为电电平 RCAP2L+=10;//调节频率 if(CY==1){ RCAP2H+=1;} } if(KEY2==0){ RCAP2L-=10;if(CY==1){ RCAP2H-=1;} } } void Timer2_Init(){ T2CON=0x00;TH2=(65536-300)/256;TL2=(65536-300)%256;RCAP2H=0XFE;RCAP2L=0XDA;//稳定在50Hz左右 EA=1;ET2=1;TR2=1;} void T0_service()interrupt 1 { TH0=0XEC;TL0=0X77;keyflag=1;} void Timer2_service()interrupt 5 { TF2=0;//清除中断标志位 dac_cs=0;dac_WR=0;P1=tab[i];dac_WR=1;i++;dac_cs=1;if(i==100)i=0;} void main(){ Timer2_Init();TMOD=0x01;TH0=0XEC;TL0=0X77;EA=1;ET0=1;TR0=1;while(1){ if(keyflag){ keyflag=0;getkey();} } } 本程序需注意:按键是低电平有效。定时器2中断发送数据给DAC0832,0832在得到一个数据后生成相应的电压值。所以他的中断时间决定信号的频率,调节它的中断时间就能调节信号的频率。 其他波形的生成,其他的波形也跟正弦波一样,但锯齿波和三角波可以不用查表法,应用加减计算得到就可以得到。下面介绍的是锯齿波: #include while(1){ DAC_0832();} } DAC0832有着致命的一个缺点就是输出的波形里的含有的频率比较杂乱,常常出现过激的现象。如果你需要精确的信号的话,那么你必须在信号输出端就如滤波器。得到干净的低频函数信号。如果要作为信号源的话最好是能就上一级攻放。效果会好很多。虽然DAC0832不是非常专业的函数信号发生芯片,但是它的输出波形的范围比较广,常常能输出一些,你意想不到得很有意思的信号曲线。 下面发几张示波器观察到得曲线:实验室里手机照的,不是太清晰但还能看。 实验报告 课程名称: 电子系统综合设计 指导老师: 周箭 成绩: 实验名称:低频函数信号发生器(预习报告)实验类型: 同组学生姓名: 一、课题名称 低频函数信号发生器设计 二、性能指标 (1)同时输出三种波形:方波,三角波,正弦波;(2)频率范围:10Hz~10KHz; (3)频率稳定性:(4)频率控制方式: ① 改变RC时间常数; ; ② 改变控制电压V1实现压控频率,常用于自控方式,即F=f(V1),(V1=1~10V); ③ 分为10Hz~100Hz,100Hz~1KHz,1KHz~10KHz三段控制。 (5)波形精度:方波上升下降沿均小于2μs,三角波线性度δ/Vom<1%,正弦波失真度 ; (6)输出方式: a)做电压源输出时 输出电压幅度连续可调,最大输出电压不小于20V 负载RL=100Ω~1KΩ时,输出电压相对变化率ΔVO/VO<1% b)做电流源输出时 输出电流幅度连续可调,最大输出电流不小于200mA 负载RL=0Ω~90Ω时,输出电流相对变化率ΔIO/IO<1% c)做功率源输出时 最大输出功率大于1W(RL=50Ω,VO>7V有效值)具有输出过载保护功能 三、方案设计 根据实验任务的要求,对信号产生部分,一般可采用多种实现方案:如模拟电路实现方案、数字电路实现方案、模数结合的实现方案等。 数字电路的实现方案 一般可事先在存储器里存储好函数信号波形,再用D/A转换器进行逐点恢复。这种方案的波形精度主要取决于函数信号波形的存储点数、D/A转换器的转换速度、以及整个电路的时序处理等。其信号频率的高低,是通过改变D/A转换器输入数字量的速率来实现的。 数字电路的实现方案在信号频率较低时,具有较好的波形质量。随着信号频率的提高,需要提高数字量输入的速率,或减少波形点数。波形点数的减少,将直接影响函数信号波形的质量,而数字量输入速率的提高也是有限的。因此,该方案比较适合低频信号,而较难产生高频(如>1MHz)信号。 模数结合的实现方案 一般是用模拟电路产生函数信号波形,而用数字方式改变信号的频率和幅度。如采用D/A转换器与压控电路改变信号的频率,用数控放大器或数控衰减器改变信号的幅度等,是一种常见的电路方式。 模拟电路的实现方案 是指全部采用模拟电路的方式,以实现信号产生电路的所有功能。由于教学安排及课程进度的限制,本实验的信号产生电路,推荐采用全模拟电路的实现方案。 模拟电路的实现方案有几种: ①用正弦波发生器产生正弦波信号,然后用过零比较器产生方波,再经过积分电路产生三角波。但要通过积分器电路产生同步的三角波信号,存在较大的难度。原因是积分电路的积分时间常数通常是不变的,而随着方波信号频率的改变,积分电路输出的三角波幅度将同时改变。若要保持三角波输出幅度不变,则必须同时改变积分时间常数的大小,要实现这种同时改变电路参数的要求,实际上是非常困难的。 ② 由三角波、方波发生器产生三角波和方波信号,然后通过函数转换电路,将三角波信号转换成正弦波信号,该电路方式也是本实验信号产生部分的推荐方案。这种电路在一定的频率范围内,具有良好的三角波和方波信号。而正弦波信号的波形质量,与函数转换电路的形式有关,这将在后面的单元电路分析中详细介绍。 四、单元电路分析 1、三角波,方波发生器 由于比较器+RC电路的输出会导致VC线性度变差,故采用另一种比较器+积分器的方式 积分器 同相滞回比较器 由积分器A1与滞回比较器A2等组成的三角波、方波发生器电路如图所示。在一般使用情况下,V+1和V-2都接地。只有在方波的占空比不为50%,或三角波的正负幅度不对称时,可通过改变V+1和V-2的大小和方向加以调整。 合上电源瞬间,假定比较器输出为低电平,vO2=VOL=-VZ。积分器作正方向积分,vO1线性上升,vp随着上升,当vp>0时,即vo1≥R2/R3*,比较器翻转为高电平,vO2=VOH=+VZ。积分器又开始作负方向积分,vO1线性下降,vp随着下降,当vp<0时,即vo1≥R2/R3*,比较器翻转为低电平,vO2=VOH=-VZ。 取C三种值:0.1uF 对应10-100Hz; 0.01uF 对应100-1kHz; 0.001uF 对应1k-10kHz。调节R23的比值可调节幅度,再调节R,可调节频率大小。 2、正弦波转换电路 常用方法有使用傅里叶展开的滤波法,使用幂级数展开的运算法,和转变传输比例的折线法。但前二者由于其固有的缺陷:使用频率小,难以用电子电路实现的原因,在本实验中舍弃,而采取最普遍的折线法。 折线法是一种使用最为普遍、实现也较简单的正弦函数转换方法。折线法的转换原理是,根据输入三角波的电压幅度,不断改变函数转换电路的传输比率,也就是用多段折线组成的电压传输特性,实现三角函数到正弦函数的逼近,输出近似的正弦电压波形。由于电子器件(如半导体二极管等)特性的理想性,使各段折线的交界处产生了钝化效果。因此,用折线法实现的正弦函数转换电路,实际效果往往要优于理论分析结果。 用折线法实现正弦函数的转换,可采用无源和有源转换电路形式。无源正弦函数转换电路,是指仅使用二极管和电阻等组成的转换电路。根据输入三角波电压的幅度,不断增加(或减少)二极管通路以改变转换网络的衰减比,输出近似的正弦电压波形。 有源正弦函数转换电路除二极管、电阻网络外,还包括放大环节。也是根据输入三角波电压的幅度,不断增加(或减少)网络通路以改变转换电路的放大倍数,输出近似的正弦电压波形。 有 源 正 弦 函 数 若设正弦波在过零点处的斜率与三角波斜率相同,即 则有,由此,可推断出各断点上应校正到的电平值: 方案一,使用二极管控制形成比例放大器,使得运放在不同时间段有不同的比例系数 方案二,用二极管网络,实现逐段校正,运放A组成跟随器,作为函数转换器与输出负载之间的隔离(或称为缓冲级)。 当输入三角波在T/2 内设置六个断点以进行七段校正后,可得到正弦波的非线性失真度大致在1.8 % 以内,若将断点数增加到12 个时,正弦波的非线性失真度可在0.8 %以内。3 输出级电路 根据不同负载的要求,输出级电路可能有三种不同的方式。 (1)电压源输出方式 电压源输出方式下,负载电阻RL通常较大,即负载对输出电流往往不提出什么要求,仅要求有一定的输出电压。同时,当负载变动时,还要求输出电压的变化要小,即要求输出级电路的输出电阻RO足够小。为此,必须引入电压负反馈 图(a)电路的最大输出电压受到运放供电电压值的限制,如运放的VCC 和VEE 分别为±15V时,则VOPP =±(12 ~ 14)V。若要求有更大的输出电压幅度,必须采用电压扩展电路,如图12(b)所示。 (2)电流源输出方式 在电流源输出方式下,负载希望得到一定的信号电流,而往往并不提出对输出信号电压的要求。同时,当负载变动时,还要求输出电流基本恒定,即要求有足够大的输出电阻Ro。为此,需引入电流负反馈。 图(a)电路的最大输出电压受到运放供电电压值的限制,如运放的VCC 和VEE 分别为±15V时,则VOPP =±(12 ~ 14)V。若要求有更大的输出电压幅度,必须采用电压扩展电路,如图(b)所示。 a)为一次扩流电路,T1 和T2 组成互补对称输出。运放的输出电流IA中的大部分将 图(作为T1、T2 的基极电流,所以IO = βIA。图(b)为二次扩流电路,用于要求负载电流IO 较大的场合。复合管T1、T2和T3、T4 组成准互补对称输出电路。 (3)功率输出方式 在功率输出方式下,负载要求得到一定的信号功率。由于晶体管放大电路电源电压较低,为得到一定的信号功率,通常需配接阻值较小的负载。电路通常接成电压负反馈形式。如用运放作为前置放大级,还必须进行扩流。当RL较大时,为满足所要求的输出功率,有时还必须进行输出电压扩展。 静态时,运放输出为零,– 20V电源通过下列回路:运放输出端→R1 →DZ →b1 →e1 → –20V 向T1 提供一定的偏置电流 R6 ,C3 和R7 ,C4 组成去耦滤波电路。需要注意的是几个晶体管的耐压限流以及最大功率值。 其中调节W可改变晶体管的静态工作电流,从而克服交越失真。 4)输出级的限流保护 由于功率放大器的输出电阻很小,因而容易因过载而烧坏功率管。因此需要进行限流保护。 图(a)是一种简单的二极管限流保护电路,当发生过流(I o过大)时,R3、R4 上的压降增大到足以使D3、D4 导通,从而使流向T1、T2 基极的电流信号I1、I2 分流,以限制I o 的增大。 图(b)是另一种限流保护电路,T3、T4 是限流管。当I o 过大,R5、R6 上的压降超过0.6V时,T3、T4 导通防止了T1、T2 基极信号电流的进一步增大。I o 的最大值为 0.6/R5,R3、R4 用来保护限流管T3、T4。 五、仿真分析 以1KHz为例即C=1nF 三角波方波发生电路 方波下降沿时间4.3μs 三角波峰值 改变RP2 改变RP1 调节占空比 调节偏移量 正弦波转换器 三角波转换正弦波,三角波放大后输出峰峰值10V 静态工作点 改变静态工作点(调节RP45)发生失真 功率放大电路 功率放大波形,输入为之前的正弦波,变阻器衰减后最大不失真输出电压 总电路图,模块形式 衰减前的输入信号与输出信号 由仿真结果来看,基本满足设计要求,准备按仿真电路设计实际电路。 六、仿真心得 在仿真的过程中出现了一下几个问题,但后来都分别排查掉了,希望实际连接时不再犯。 1、运放未接电源导致没有波形 2、变阻器接入阻止过小或过大导致没有信号或失真(尤其需要注意) 3、Lm324故障无法解决导致用了LM353代替第二篇:基于51单片机函数信号发生器设计.
第三篇:函数信号发生器设计
第四篇:51单片机设计多功能低频函数信号发生器
第五篇:低频函数信号发生器设计