函数信号发生器的设计_第1页
函数信号发生器的设计_第2页
函数信号发生器的设计_第3页
函数信号发生器的设计_第4页
函数信号发生器的设计_第5页
已阅读5页,还剩24页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

绪论1.1课题背景在电子信息时代的今天,不管是在科研、工艺生产,还是教育事业方面,都有随处可见的信号发生设备。因此,随着技术的不断成熟,使得函数信号发生器也在不断的优化。尤其是微处理器出现之后,更是得到了巨大的提高,具体表现在自动修正、自动错误诊断和自动波形生成等方面。就比如说在教学实验室的实验过程中,就常常需要用到信号发生设备,用于产生我们所需要的正弦波、方波、三角波和锯齿波等信号。所以,设计并制作一个性能优良的信号发生设备是非常有必要的。1.2函数信号发生器的研究进展函数信号发生器是指可以根据需求生成指定参数的电测试信号的仪器。因为其种类繁多,特性各异而被应用于各类领域。最主要的使用方面还是基本信号的产生,一开始是通过硬件设备设计出来的信号发生装置,但是随着技术的发展,当前的信号设备已经不能够再满足需求,因此,通过使用软硬件相结合的技术制作出了波形更加稳定、频率精度更高的信号发生设备。除此之外,使用软件来控制波形的产生比较于硬件控制会更加的方便,复杂度也会得到降低。1.3函数信号发生器的实现方法本次设计实现利用单片机AT89C52和8位D/A转换芯片DAC0832共同实现方波、锯齿波、三角波、正弦波这四种常用波形的发生。根据设计的要求,对各种波形的频率和幅度进行程序的编写和控制,并且将所写程序烧录至52单片机的程序存储器中。在程序运行中,当接收到来自外界的指令时,需要输出相对应某种波形时再调用与之相对应的中断服务子程序和波形发生程序,此时,通过程序生成的数字波形信号经电路的数/模转换器DAC0832和运算放大器LM358处理后,从信号发生器的输出端口输出。并且可以通过液晶显示模块LCD1602对输出波形的基本信息进行查看和键盘输入模块实现对几种波形的切换、调频和频率步进值的调控。2函数信号发生器的设计实现2.1设计方案的描述本次设计中我要实现的是能够输出正弦波、方波、三角波和锯齿波等基本波形的信号发生装置。硬件方面,我采用的是AT89C52单片机模块为核心处理模块,用于处理数字信号波形的产生以及按键输入模块输入的指令,除此之外,还有D/A转换器模块和运算放大器模块,用于把数字信号波形转变为模拟信号波形并且放大输出到示波器。与此同时,我还使用了LCD液晶显示模块,用于显示输出信号波形的类型和频率。软件方面,我则是采用C语言编程,用于数字信号波形的产生和核心处理模块和其他各个模块之间的联系。2.2设计思路本次设计通过使用C语言编程来控制AT89C52单片机实现数字信号波形输出到硬件电路,再通过D/A转换器以及放大器实现波形的输出。在大学里,我第一次接触到的单片机就是52单片机,它是一个很好入门并且功能强大的微型计算机,因此我选择了它作为设计的核心控制器。我设计思路的原理框图如图2.1,总体原理为:系统一上电先进行初始化,接下来可以通过按键输入模块进行信号波形选择,此时按键输入的指令输入AT89C52单片机,在程序的控制下找到对应的取码数组产生数字信号波形并且输出象相应的指令到52单片机的P0和P1端口,P0端的指令是用于控制LCD1602显示波形的类型和频率值,而P1端的指令是用于将产生的数字信号波形输入到DAC0832模块中进行模数转换,也就得到了所需要的模拟信号波形,最后通过运算放大器模块放大输出波形即可。LCDLCD1602显示按键输入AT89C52单片机数模转换器DAC0832运算放大器LM358输出波形按键输入AT89C52单片机数模转换器DAC0832运算放大器LM358图2.1函数信号发生器原理框图上图描述的是函数信号发生器设计方案的主要模块:按键输入模块、单片机模块、D/A转换模块、LCD显示模块及运算放大器模块。2.3设计方案的功能介绍当程序烧录至52单片机时经过初始化,默认为输出正弦信号,LCD1602液晶屏上第一行显示“Waveform:”和正弦信号波形图,第二行显示“Fout=10.0Hz”,当开关四按一下是此时输出波形为方波,按两下时输出为三角波,按三下时输出为锯齿波。第一个开关用于控制频率的步进值,另外两个开关可以调节频率。

3硬件设计3.1主要功能模块3.1.1最小系统模块最小系统模块包括了52单片机、电源电路、晶振电路和复位电路。首先是电源电路,我采用的是5V的USB供电线。接下就是晶振电路,我们都知道晶振电路也叫时钟电路,是用于产生时钟信号的。复位电路,根据单片机原理可知,只需给RST引脚2US的持续高电平时间即可复位。图3.1最小系统模块3.1.2数模转换电路模块在这个将数字信号转换成模拟信号的模块,我采用的是DAC0832芯片。DAC0832是8分辨率的D/A转换集成芯片,由8位输入锁存器、8位DAC寄存器、8位D/A转换器及转换控制电路四部分构成。8位输入锁存器用于存放主机送来的数字量,使输入数字得到缓冲和锁存,并加以控制;8位DAC寄存器用于存放存放待转换的数字量,并加以控制;8位D/A转换器输出与数字量成正比的模拟电流,由与门、与非门组成的输入控制的输入电路来控制2个寄存器的选通或锁存状态。DAC0832的主要特性参数:分辨率为8位;电流稳定时间1us;可单缓冲、双缓冲或直接数字输入;只需在满量程下调整其线性度;单一电源供电(+5V~+15V);低功耗,20mW。图3.2数模转换电路图3.3DAC0832内部结构图3.1.3运算放大电路模块运算放大电路模块我选择的芯片是LM358,通过该芯片将取出的模拟量得到对应的电压值。图3.4运算放大电路3.1.4液晶显示模块液晶显示模块是用于显示输出波形的类型和频率值,在这个模块中我采用的芯片是LCD1602,LCD1602的八位数据端接单片机的P0口,RW接地,另外两个使能端E、RS分别接单片机的P2.6—P2.7。具体的芯片资料如图3.5。VSS为电源地;VDD接5V电源;VO需要与地短接显示屏工作;RS为寄存器选择,高电平1时选择数据寄存器、低电平0时选择指令寄存器;RW为读写信号线,高电平1时进行读操作,低电平0时进行写操作;E端是液晶的使能端;D0~D7为8位双向数据端;VCC电源;GND地。图3.5LCD1602显示电路3.1.5按键接口以及LED电路模块按键模块是是用于控制信号输入的类型,当按键按下时,可以通过单片机编程读取闭合的键号,实现相应的信号输出。其步骤主要是a、判断是否有键按下;b、去抖动,延时20ms左右;c、识别被按下的键号;d、处理,实现功能。如图3.6所示,常用的按键电路一般为矩阵式,但是对于此设计,为了方便程序的简单化,我们采用了一般的按键接口,按键输出信号。除此之外,我还设计使用了一个LED指示电路,通过不同颜色的LED标识不同的波形。具体为:KEY1-KEY4表示为波形选择、频率加、频率减、频率的步进值,led0-led3表示为正弦波、方波、三角波、锯齿波。图3.6按键接口电路及LED显示电路3.2硬件原理框图对于该函数信号发生器的设计,我采用的是以AT89C52单片机芯片作为核心处理器,通过编程实现各种不同类型信号的产生,然后通过D/A转换将数字信号转换成模拟信号,接下来通过运算放大器,最终输出到示波器。结构简单,思路井井有条,按照设计的基本要求,我们又可以把整个原理图细分为不同的功能模块,各个功能模块之间相互联系,相互作用,而其中最重要的就是通过单片机程序将各个功能模块构成了一个统一的整体,其整体电路原理框图如图3.7所示:按键按键输入LCD1602显示LCD1602显示单片机AT89C52晶振电路晶振电路波形输出端口LM358放大波形输出端口LM358放大器电路D/A转换时钟复位时钟复位图3.7硬件原理框图4软件设计本次设计通过将四种波形的数据通过P0.0口选择,送往在单片机的程序储存器里,接下来通过调节P0.1和P0.2两个端口来改变这个波形的频率,然后再计算该波形频率的技术初值,开启中断模块,通过DAC0832数模转换器以及LM358运算放大器输出波形。整个电路系统结构紧凑,较为简单,成本较低。4.1主函数设计流程本设计的核心控制芯片采用的是AT89C52单片机,通过编程的方法来产生四种波形,并通过程序来控制四种波形的切换和波形频率的改变。具体功能有:(1)四种波形之间的切换;(2)波形频率参数以及频率步进值参数的设定;(3)频率增减等。软件调试完成后,通过程序下载软件将.hex文件下载到AT89C52芯片中,然后插到焊接好的多功能函数信号发生器系统中即可独立完成所有功能的控制。开始首先程序下载后,会对整个系统进行初始化,再判断是否有按键按下,如果有,则会根据编写好的程序计算相关参数,一方面利用定时中断查表输出波形,另一方面送段选口和位选口数据,使LCD1602显示对应波形类型和频率值,最后反馈回去构成循环,判断按键相关信息,如图4.1。开始系统系统初始化判断是否有按键按下?判断是否有按键按下?S3按下,S3按下,boxing++S2按下S1按下boxing=0boxing=3boxing=2boxing=1延时增f减小延时boxing=0boxing=3boxing=2boxing=1延时增f减小延时减f增大输出正弦波,LCD显示波形输出锯齿波,LCD显示波形输出三角波,LCD显示波形输出正弦波,LCD显示波形输出锯齿波,LCD显示波形输出三角波,LCD显示波形输出方波,LCD显示波形LCD显示fLCD显示fLCD显示f图4.1主函数程序流程图4.2LCD显示程序设计LCD1602在使用之前需要对他进行初始化,也就是复位操作。具体的初始化操作步骤是根据该芯片的使用说明进行的,操作流程如图4.2所示。开始开始写指令38H,显示模式设置写指令38H,显示模式设置写指令01H,显示清屏写指令01H,显示清屏写指令0CH,显示开及光标设置写指令0CH,显示开及光标设置写指令06H,显示光标移动设置写指令06H,显示光标移动设置写指令80H,初始化数据指针写指令80H,初始化数据指针初始化显示为正弦波,频率值为10Hz初始化显示为正弦波,频率值为10Hz图4.2LCD初始化函数程序流程图voidinit_lcd()//LCD初始化函数{ uchari; lcden=0;//默认开始状态为关使能端,见时序图 Lcd_ram(); write_com(0x0f); write_com(0x38);//显示模式设置,默认为0x38,不用变。 write_com(0x01);//显示清屏,将上次的内容清除,默认为0x01. write_com(0x0c);//显示功能设置0x0f为开显示,显示光标,光标闪烁;0x0c为开显示,不显光标,光标不闪 write_com(0x06);//设置光标状态默认0x06,为读一个字符光标加1. write_com(0x80);//设置初始化数据指针,是在读指令的操作里进行的 for(i=10;i<20;i++)//显示初始化 { write_date(table1[i]); } write_com(0x80+0x40); for(i=0;i<9;i++) { write_date(table1[i]); } write_com(0x80+10); write_date(0); write_date(1); write_date(0); write_date(1); write_date(0); write_date(1); write_com(0x80+0x40+0x09); write_date(''); write_date('1'); write_date('0'); write_date('.'); write_date('0'); write_date('H'); write_date('z');}4.3按键扫描程序设计按键扫描模块是用于接收外界输入的频率值增加或者减小指令、波形类型的切换指令的模块,要接收外界的指令,就需要明确按键的功能。首先要明确的是按键扫描模块控制的是波形的类型选择和频率值的改变。而在主函数中系统初始化部分,我定义的就是,系统初始化时,LCD液晶显示屏默认显示的是波形的类型和频率值显示画面,当按键s1按下时,频率值进行自增,频率值+步进值为新的频率值;当按键s2按下时,频率值进行自减,频率值-步进值为新的频率值;当按键s3按下时,进行波形的类型的切换。开始开始按键扫描按键扫描s1按下s2按下s3按下s1按下s2按下s3按下Boxing++Pinlv--Pinlv++Boxing++Pinlv--Pinlv++调用display()调用display()图4.3按键扫描函数程序流程图voidkeyscan()//按键检测函数{ if(s1==0)//按键频率+按下,+bujin { EA=0;//关闭总中断 delay(2);//延时消抖 if(s1==0)//判断按键s1是否还为按下状态 { while(!s1);//判断按键是否松开,若还是按下状态,在此则为等待 pinlv+=bujin;//频率值=频率值+步进值 if(pinlv>10000)//若频率值达到1000Hz,则重新设置值为10Hz { pinlv=100; } display();//调用显示函数,将所输入的波形类型和频率值显示在LCD上 m=65536-(150000/pinlv); a=m/256;//记录定时器高八位的值 b=m%256;//记录定时器低八位的值 EA=1;//开启总中断 } } if(s2==0)//按键频率-按下,-bujin { delay(5); if(s2==0) { EA=0;//关闭总中断 while(!s2); pinlv-=bujin; if(pinlv<100) { pinlv=10000; } display(); m=65536-(150000/pinlv); a=m/256; b=m%256; EA=1;//开启总中断 } } if(s3==0)//按键波形切换按下 { delay(5); if(s3==0) { EA=0;//关闭总中断 while(!s3); boxing++;//波形类型指示变量 if(boxing>=4)//当boxing值为4时,重新赋值为0 { boxing=0; } display(); EA=1;//开启总中断 } } }4.3步进检测程序设计步进检测函数是用于处理外界指令对步进值的设置而编写的。通过这个步进检测函数可以实现步进值的调整,从而控制较大或者较小步幅的频率变化。整个步进检测函数的主控制按键就是s4,通过这个按键进行波形的类型显示和频率的步进值显示两个画面之间的切换。当处于频率的步进值设置画面时,通过按键s1和s2进行步进值的增大或者减小。开始开始按键s4按下按键s4按下h==2h==1h==2h==1LCD显示波形选择画面LCD显示步进值设置画面LCD显示波形选择画面LCD显示步进值设置画面调用display()调用bujindisplay()调用display()调用bujindisplay()图4.3步进检测函数程序流程图voidbujinjiance()//步进检测函数{ if(s4==0)//步进值按键按下 { delay(5);//延时消抖 if(s4==0)//判断按键s4是否还为按下状态 { while(!s4);//判断按键是否松开,若还是按下状态,在此则为等待 h++;//h变量的值用于指示步进值设置画面和波形显示画面 if(h==1)//h==1,LCD显示步进值设置画面 { write_com(0x01); write_com(0x80); write_date('S');delay(1); //stepvalue write_date('t');delay(1); write_date('e');delay(1); write_date('p');delay(1); write_date('');delay(1); write_date('v');delay(1); write_date('a');delay(1); write_date('l');delay(1); write_date('u');delay(1); write_date('e');delay(1); write_date(':');delay(1); bujin1=bujin;//将初始的步进值赋值给步进值变量 bujindisplay();//调用步进值显示函数,显示初始的步进值 } if(h==2)//h==2,LCD显示波形显示画面 { h=0;//将h变量的值重新赋初值为0 bujin=bujin1;//将重新设置好的步进值赋值给步进值变量 init_lcd();//初始化LCD initclock();//初始化时钟信号 display();//调用波形显示函数 } } } if(h==1)//h==1,说明通过s4按键已将显示画面设置为步进值设置画面 { if(s1==0)//按键+按下,+0.1 { delay(5);//延时消抖 if(s1==0)//判断按键s1是否还为按下状态 { while(!s1);//判断按键是否松开,若还是按下状态,在此则为等待 bujin1++;//步进值自增,+1 if(bujin1>=101)//步进值为101时,赋初值为1 { bujin1=1; } bujindisplay();//调用步进值显示函数,显示设置好的步进值 } } if(s2==0)//按键-按下,-0.1 { delay(5); if(s2==0)//判断按键s2是否还为按下状态 { while(!s2);//判断按键是否松开,若还是按下状态,在此则为等待 bujin1--;//步进值自减,-1 if(bujin1<=0)//步进值为0时,赋初值为100 { bujin1=100; } bujindisplay();//调用步进值显示函数,显示设置好的步进值 } } }}4.4步进显示程序设计在上个步进检测函数模块,已经将初始化的或者设置好的步进值通过变量bujin1进行保存。因为在LCD1602上显示时是一位一位的显示,所以在这个步进显示模块中,我需要对该变量进行处理,将步进值按照位数的方式进行分离并且保存。关于分离方式,我采用的是取整和取模方式。bujin1的取值范围为1-100,通过bujin1对100取整将百位的值保存,bujin1对100取余再对10取整将十位的值保存,bujin1对100取余再对10取余将个位的值保存。其中还有一些细节问题,就是位数不一定有三位,就必然会出现有的值高位为0,所以在对LCD写数据时需要对高位进行判断,为0时则将LCD上显示该数据的位置写空,不为0时则正常显示。开始开始定义无符号整型变量bai,shi,ge定义无符号整型变量bai,shi,gege=bujin1%100%10shi=bujin1%100/10bai=bujin1/100ge=bujin1%100%10shi=bujin1%100/10bai=bujin1/100bai==0?bai==0?正常显示百位为空,其他正常显示正常显示百位为空,其他正常显示图4.4步进显示函数程序流程图voidbujindisplay()//步进显示函数{uintbai,shi,ge;bai=bujin1/100;shi=bujin1%100/10;ge=bujin1%100%10;write_com(0x80+11);if(bai==0)write_date('');elsewrite_date(table[bai]);write_date(table[shi]); write_date('.'); write_date(table[ge]);}4.5波形显示程序设计在按键检测模块中对频率值的设置和波形的切换进行了明确的控制,并且也使用了pinlv和boxing这两个变量对频率值和波形指示值进行了保存。在这个波形显示模块,我就是要对保存的这两个值进行处理。关于频率值的处理方式和步进显示模块中步进值的处理方式是一模一样的,都是采用了取整和取余方式,将频率值的各个位进行分离并保存到指定的变量。除此之外,高位值为空的细节,在这个模块中也是有的,而且位数更多,所以在一个或者多个高位为0时,需要通过使用&&运算符来实现不同条件下的写数据方式。在波形类型切换上使用的就是对变量boxing的值进行判断,从而写不同波形的数据到LCD1602上。除此之外,在这个模块中还使用到了两个关于LCD1602数据显示的函数,就是write_com()写数据地址指令函数和write_date()写数据函数,要想将数据显示到LCD1602上是不可能缺少这两个函数的。开始开始定义无符号字符型变量wan,qian,bai,shi,ge定义无符号字符型变量wan,qian,bai,shi,gebai=pinlv/100%10shi=pinlv/10%10wan=pinlv/10000qian=pinlv/1000%10ge=pinlv%10bai=pinlv/100%10shi=pinlv/10%10wan=pinlv/10000qian=pinlv/1000%10ge=pinlv%10wan位为空,其他正常显示wan,qian位为空,其他正常显示wan,qian,bai位为空,其他正常显示正常显示wan位为空,其他正常显示wan,qian位为空,其他正常显示wan,qian,bai位为空,其他正常显示正常显示boxing=3,显示锯齿波boxing=2,显示三角波boxing=1,显示方波boxing=0,显示正弦波boxing=3,显示锯齿波boxing=2,显示三角波boxing=1,显示方波boxing=0,显示正弦波图4.5波形显示函数程序流程图voiddisplay()//波形显示函数{ ucharwan,qian,bai,shi,ge;//定义无符号字符型变量来保存频率的各个位的值 wan=pinlv/10000;//pinlv对10000取整 qian=pinlv/1000%10;//pinlv对1000取整,再对10取余 bai=pinlv/100%10;//pinlv对100取整,再对10取余 shi=pinlv/10%10;//pinlv对10取整,再对10取余 ge=pinlv%10;//pinlv对10取余 write_com(0x80+0x40+0x08);//设置数据地址指针,即为写数据的位置 if(wan==0)//判断万位是否为0 write_date('');//为0,则将该位写空 else//不为0,万位数据正常写 write_date(table[wan]); if(qian==0&&wan==0)//通过&&实现两个条件的结合 write_date(''); else write_date(table[qian]); if(wan==0&&qian==0&&bai==0) write_date(''); else //write_date(table[qian]); write_date(table[bai]); write_date(table[shi]); write_date('.'); write_date(table[ge]); write_date('H'); write_date('z'); if(boxing==0)//对boxing的值进行判断,正弦波 { write_com(0x80+10);//指定LCD1602上写数据的位置 write_date(0); write_date(1); write_date(0); write_date(1); write_date(0); write_date(1); led3=1; led0=0; } if(boxing==1)//对boxing的值进行判断,方波 { write_com(0x80+10);//指定LCD1602上写数据的位置 write_date(2); write_date(3); write_date(2); write_date(3); write_date(2); write_date(3); led0=1; led1=0; } if(boxing==2)//对boxing的值进行判断,三角波 { write_com(0x80+10);//指定LCD1602上写数据的位置 write_date(4); write_date(5); write_date(4); write_date(5); write_date(4); write_date(5); led1=1; led2=0; } if(boxing==3)//对boxing的值进行判断,锯齿波 { write_com(0x80+10);//指定LCD1602上写数据的位置 write_date(6); write_date(6); write_date(6); write_date(6); write_date(6); write_date(6); led2=1; led3=0; }}5系统仿真与电路测试本次设计的函数信号发生器系统硬件的调试采用的是Proteus仿真,将编写好的程序烧录并运行,使用示波器对输出信号波形进行观察。5.1软件仿真对于按键模块,首先确定的是每个按键的功能,只有在确定按键功能之后,才可以将我们所需要设置的按键的功能通过C语言程序真正做到软硬件相结合在一起,实现我们设计的目标功能。对于设计的四个按键及其功能见表5.1。表5.1KEY作用KEY1波形选择KEY2频率/步进值加KEY3频率/步进值减KEY4步进值5.1.1方波仿真图如图5.1(a)所示如图5.1(b)所示输出幅值为1V输出幅值为2V周期为250ms周期为250ms时间档为100ms时间档为100ms幅值档为1V幅值档为1V图5.1(a) 图5.1(b)如图5.1(c)所示如图5.1(d)所示输出幅值为3V输出幅值为4V周期为250ms周期为250ms时间档为100ms时间档为100ms幅值档为1V幅值档为1V图5.1(c) 图5.1(d)如图5.1(e)所示输出幅值为5V周期为250ms时间档为100ms幅值档为1V图5.1(e)5.1.2三角波仿真图如图5.2(a)所示如图5.2(b)所示输出幅值为1V输出幅值为2V周期为2.5ms周期为2.5ms时间档为1ms时间档为1ms幅值档为1V幅值档为1V图5-2(a) 图5-2(b)如图5.2(c)所示如图5.2(d)所示输出幅值为3V输出幅值为4V周期为2.5ms周期为2.5ms时间档为1ms时间档为1ms幅值档为1V/格幅值档为1V图5.2(c) 图5.2(d)如图5.2(e)所示输出幅值为5V周期为2.5ms时间档为1ms幅值档为1V图5.2(e)5.1.3正弦波仿真图如图5.3(a)所示如图5.3(b)所示输出幅值为1V输出幅值为2V周期为0.5ms周期为0.5ms时间档为0.2ms时间档为0.2ms幅值档为1V幅值档为1V图5.3(a) 图5.3(b)如图5.3(c)所示如图5.3(d)所示输出幅值为3V输出幅值为4V周期为0.5ms周期为0.5ms时间档为0.2ms时间档为0.2ms幅值档为1V幅值档为1V图5.3(c)图5.3(d)如图5.3(e)所示输出幅值为5V周期为0.5ms时间档为0.2ms幅值档为1V图5.3(e)5.1.4锯齿波仿真图如图5.3(a)所示如图5.3(b)所示输出幅值为1V输出幅值为2V周期为50ms周期为50ms时间档为20ms时间档为20ms幅值档为1V幅值档为1V图5.4(a)图5.4(b)如图5.3(a)所示如图5.3(b)所示输出幅值为3V输出幅值为4V周期为50ms周期为50ms时间档为0.2ms时间档为0.2ms幅值档为1V幅值档为1V图5.4(c)图5.4(d)如图5.3(a)所示输出幅值为5V周期为50ms时间档为0.2ms幅值档为1V 图5.4(e)5.2硬件电路测试5.2.1函数信号发生器实物图5.2.2示波器测试图实验方波如图5.4(a)所示 实验三角波如图5.4(b)所示图5.4(a) 图5.4(b) 实验正弦波如图5.4(c)所示实验锯齿波如图5.4(d)所示图5.4(c) 图5.4(d) 5.3结果分析从本次设计的仿真实验结果分析,有一些非可控的误差,从而导致了输出波形存在一定的失真,存在这些问题的主要方面是跟程序的设计有关,数字信号的波形没有做到那么精确,再者就是Proteus仿真软件本身也会给测试的结果带来一定的误差问题。在进行数字信号转换模拟信号的实验过程中,只使用了一个D/A转换器时,图形只出现了一点点失真。从这个角度来说,整体的问题也可能和增加了D/A转换器是有关系的。

结论理论上来说,设计制作多功能智能函数信号发生器的思路不同,具有多种方法可以实现,本次设计只是采用一种比较符合自身实际能力可能实现的方法。本次设

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论