基于dds技术的任意波形发生器

基于dds技术的任意波形发生器

ID:854756

大小:9.76 MB

页数:52页

时间:2017-09-20

上传者:^_^
基于dds技术的任意波形发生器_第1页
基于dds技术的任意波形发生器_第2页
基于dds技术的任意波形发生器_第3页
基于dds技术的任意波形发生器_第4页
基于dds技术的任意波形发生器_第5页
资源描述:

《基于dds技术的任意波形发生器》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库

江苏科技大学本科毕业设计(论文)学院电子信息学院专业电子信息科学与技术学生姓名叶华班级学号0740306223指导教师陈迅二零一一年六月 江苏科技大学本科毕业论文基于DDS技术的任意波形发生器ADDS-BasedArbitraryWaveformGenerator 江苏科技大学毕业设计(论文)任务书学院名称:电子信息学院专业:电子信息科学与技术学生姓名:叶华学号:0740306223指导教师:陈迅职称:副教授 毕业设计(论文)题目:基于DDS技术的任意波形发生器毕业设计(论文)内容及要求(包括原始数据、技术要求、达到的指标和应做的实验等)采用MCU和FPGA技术,设计基于DDS技术的任意波形发生器1.要求a.利用FPGA完成DDS波形产生的核心电路;b.利用单片机进行人机接口设计;c.输出信号波形:正弦方波三角锯齿和任意波形的产生;d.输出信号频率1Hz-2MHz,输出幅度Vp-p100mV-5V;e.可以利用PC机通过串口或者USB口将任意波的数据传给信号发生器;f.信号发生器具有键盘和LCD显示面板; 一、完成后应交的作业(包括各种说明书、图纸等)1.毕业设计论文一份(不少于1.5万字);2.外文译文一篇(不少于5000英文单词);3.程序清单4.电路原理图三、完成日期及进度自11年2月21日起至11年6月26止进度安排:1.2月21日至3月14日了解课题内容,撰写开题报告,准备相关知识2.3月15日至3月21日听专题讲座。3.3月22日至4月4日系统设计。4.4月5日至5月16日单元电路设计与调试。5.5月17日至5月23日系统调试与测试。6.5月24日至6月26日撰写毕业设计论文,答辩。 四、主要参考资料(包括书刊名称、出版年月等):1.胡大可MSP430系列单片机C语言程序设计与开发北京航空航天大学出版社 2003.12.魏小龙MSP430系列单片机接口技术及系统设计实例北京航空航天大学出版社 2002.113.杨晓慧,杨旭FPGA系统设计与实例人民邮电出版社 2010.014.王传新FPGA设计基础高等教育出版社 2007.9系(教研室)主任:(签章)年月日学院领导:(签章)年月日 江苏科技大学本科毕业设计(论文)摘要随着电子信息技术的发展,对各种数字模拟信号需求也更加复杂和多样化,任意波形发生器(AWG)的应用变得不可或缺。本文提出了一种基于FPGA设计的采用DDS技术任意波形发生器的设计方法。设计的任意波形发生器除了可以等间隔步进调节频率外,还可以改变波形的采样点数。该任意波形发生器支持上位机或其他设备通过串行通信或其他方式进行控制和数据传输。在保留产生正弦、矩形、三角等基本波形的前提下可以输出任意波形。任意波形的来源可以是发生器自身微控制器用函数生成,也可来至于上位机或其他设备的数据。在本设计中,还提出了一种控制器和发生器主机分离的设计思路,使得人机交流更加方便和人性化。跟传统的函数发生器或任意波形发生器相比,本设计有控制简单方便,任意波形来源丰富,产生的波形稳定度高,频率稳定,分辨率高等诸多优点。关键词:直接频率合成(DDS);任意波形发生器(AWG);相位累加器;数模转换器8 江苏科技大学本科毕业设计(论文)AbstractWiththedevelopmentofelectronicinformationtechnology,therequiredofthedigitalandanalogsignalsismorecomplexanddiverse,arbitrarywaveformgenerator(AWG)oftheapplicationsbecomeindispensable.InthispaperwepresentamethodwhichFPGA-BasedandusingDDStechnologyarbitrarywaveformgeneratordesign.Inadditiontothedesignofthearbitrarywaveformgeneratorcanadjustthefrequencyspacedsteps,butalsocanchangethewaveformofthesamplingpoints.Thearbitrarywaveformgeneratortosupporttheserialcommunicationorothermeanstocontrolanddatatransferfromthehostcomputerorotherdevice.Retainthesine,rectangle,triangleandotherbasicpremiseofthewaveformcanbeoutputanywaveform.Thesourcecanbearbitrarywaveformgeneratorgeneratesitsownmicro-controllerwithafunction,butalsotoregardthehostcomputerorotherdevicedata.Inthispaper,wealsoraisedahostcontrollerandaseparategeneratordesignideas,makinghuman-computercommunicationmoreconvenientanduserfriendly.Unliketraditionalfunctiongeneratororarbitrarywaveformgeneratorcomparedtothecontrolofsimpledesign,arichsourceofarbitrarywaveforms,theresultingwaveformwithhighstability,frequencystability,andhighresolutionadvantages.Keywords:directdigitalsynthesis(DDS);arbitrarywaveformgenerator(AWG);phaseaccumulator;DAC8 江苏科技大学本科毕业设计(论文)目录第一章绪论11.1研究背景11.1.1国内外现状11.2任意波形发生器原理21.3DDS基本原理21.4本文的主要内容3第二章任意波形发生器设计方案42.1任意波形发生器系统组成42.2改进后的DDS模块及工作原理5第三章波形发生器的主体设计73.1FPGA电路设计73.1.1PLL和RAM模块的定制83.1.2通讯模块93.1.3寄存器控制器模块103.2单片机控制电路设计103.2.1用户接口模块113.2.2UART模块123.2.32.4G无线模块133.2DAC输出模块及滤波电路的设计14第四章手持式控制终端设计174.1手持式控制终端的硬件选择174.2用户界面的设计184.2.1Put_Gui_Control()函数184.2.3Gui_Selection_Form()函数184.2.4Gui_DropdownMenu()函数194.3基本波形控制界面204.4触摸屏的输入校准204.5手绘波形输入界面214.5.1手绘波形输入214.5.2手绘波形输出224.6其他任意波形的产生224.6.1调制波形输出234.6.2合成波形输出23第五章上位机软件设计255.1上位机波形图形化显示255.2上位机与发生器间的通讯278 江苏科技大学本科毕业设计(论文)5.3上位机波形数据的导入28结论306.1各项指标参数306.2资源利用情况316.3存在的问题31致谢32参考文献33附录18 江苏科技大学本科毕业设计(论文)第一章绪论1.1研究背景任意波形发生器是一种能产生任意波形的信号源,它是近年来发展起来的一种信号发生器。区别于早先的函数波形发生器,任意波形发生器使用到了微处理器及数模转换器等数字器件。它不仅能完成函数波形发生器的功能产生正弦、三角、锯齿等基本波形,还提供了方便的波形设置方法以便产生用户所需要的任意波形。随着科技研究的不断深入和领域扩展,要求用电信号模拟的信号更加复杂、多样。例如,通信的每一步发展,都要求不同的测试信号;而生物学上的研究,也常常需要使用神经信号和脑波信号等各种特别的电信号;材料科学、生命科学等诸多领域,都要求用任意波形发生器产生复杂的信号。另外,现代科技要求信号更加准确、逼真,而不仅仅满足于大体合适。因此,在不少测试方案和自动化系统的组成中,在信号源部分已明确指定为任意波形发生器。在电类和非电类的应用中,对这类仪器的需要都日益迫切[1]。任意波形发生器目前主要有两种实现方法:一种是传统的任意波形发生器,但是由于采用的是模拟和模数混合的方法,限制了其频率稳定度,并且系统比较复杂。另一种是基于直接数字频率合成(DDS)技术的任意波形发生器,采用这种技术的AWG具有很高的频率分辨率和快速的输出频率转换能力,并且输出频率范围宽[2]。1.1.1国内外现状目前,市场上常见的任意波形发生器主要有普源RIGOL、优利德。从功能上看,普源的任意波形发生器比较完善,但价格偏高。其他厂家的任意波形发生器虽然也可以产生任意波形,但波形来源往往是较简单的波形合成,并不是真正意义上的“任意”波形。如今,虽然国内外的任意波形发生器研究上已经趋于完善,但实际运用上还存在不尽人意的地方。例如:有的可视化界面仅能显示文字数据,不能直接显示输出波形;有的任意波形数据的产生只能连接上位机获取;任意波形编辑功能不够全面,仅能满足特定的场合。即使有较完善功能的任意波形发生器,但其高昂的价格却让人望而止步。当然,在高校中对于各种任意波形发生器的研制也有不少,例如东莞理工学院的可视化多功能DDS任意信号源,但其可视化也是建立在用Delphi来开发图形上位机软件的基础上的[3]。8 江苏科技大学本科毕业设计(论文)1.2任意波形发生器原理在实验或科研中,除了经常使用一些规则的波形如正弦波、方波、三角波、锯齿波之外,很多时候也会需要用到一些不规则的信号。如附加谐波的原始波形,两个信号的叠加波形,任意脉冲,噪声等。以前,为了获得这些不规则信号,往往需要专门设计电路或使用特定的设备。这样一来就会增加了不必要的时间和成本。而随着任意波形发生器(AWG)的出现和使用,这一问题得到了有效地解决。如今,AWG的设计方法有好几种,其中使用最多的还是基于DDS技术。而主控芯片有的采用单片机(MCU),有的采用现场可编程门阵列(FPGA),这两种方法各有优缺点。1.3DDS基本原理DDS(直接数字频率合成)技术是从相位概念出发直接合成所需波形的一种频率合成技术。它需要以一个高精度的固定频率时钟作为参考时钟源,通过数字信号处理技术产生一个频率和相位可调的输出信号。DDS的主要组成部分是累加器、波形存储器ROM和D/A转换器。累加器和波形存储器的位数决定了DDS的最小步进和由相位截断误差所引入的杂散[4]。传统的频率合成技术由于波形精度低、频率稳定性差等缺点,已经不能满足许多实际应用的需要。随着这种具有相位连续、频率分辨率高(本设计为1/512)、频率转换速度快(本设计为25ns)和良好的可重复性等优点的DDS技术的兴起,AWG的设计也有了新的突破。频率控制字fCW累加器相位寄存器波形查找表DACLPF波形输出N基准时钟fc图1-1:DDS原理框图从本质上来说,DDS其实就是对参考时钟作除法运算[5]。但在FPGA中,如果直接进行除法运算的话,是很耗用时间和逻辑单元的。因此,如图1-1所示[6],在DDS的设计中使用了一个累加器和一个相位寄存器构成的相位累加器对频率控制字进行累加,然后用相位累加器的输出对波形储存器进行查表。则输出频率为:(1-1)8 江苏科技大学本科毕业设计(论文)其中为频率控制字,为参考时钟源,N为累加器字长。当时,可得到频率分辨率。1.4本文的主要内容本文提出的这种方案中,采用的是以FPGA为主MCU为辅的新设计思路。在保证了输出波形转换速率快、频率分辨率高的前提下,控制起来方便简单,在任意波形的产生上更是灵活。并且配套设计出了相应的上位机和手持式控制终端,为跨领域应用提供了扩展的可能性。下面的章节中,将分别为您介绍本设计所采用的DDS技术的基本原理,系统硬件电路的设计,软件编程的实现方法和各部分模块参数指标及成果展示。8 江苏科技大学本科毕业设计(论文)第二章任意波形发生器设计方案2.1任意波形发生器系统组成本方案中的任意波形发生器总共由三部分组成:波形发生器、手持式控制终端、上位机软件,如图2-1所示。手持式控制终端上位机软件波形发生器图2-1:任意波形发生器系统框图其中,波形发生器是任意波形发生器的主体。它本身就是一台功能完善的函数发生器,可以产生基本波形。而如果波形发生器需要输出任意波形的话,就需要从手持式控制终端或上位机处获取任意波形数据。可以说,波形发生器加上手持式控制终端才是一台完整的任意波形发生器。之所以要设计一个手持式控制终端,是因为产生任意波形的话一般都需要设置许多参数,在传统的台式仪器面板上进行操作的话有诸多的不便。将用户控制面板与仪器分开设计成手持式控制终端之后,操作变得方便和人性化。而本设计中,控制终端采用的是触摸屏的控制输入方式,无论是基本波形参数的设置还是任意波形的手绘输入,都变得简单方便。当然,即使手持式控制终端控制发生器可以完成所有功能了,但设计时还是在波形发生器保留了简单的用户面板。以便用户在不使用手持式控制终端的情况下也能便捷的通过波形发生器来获取常用的几种基本波形。除了手持式控制终端之外,本方案还将设计一个配套的上位机软件。只要将波形发生器与上位机连接起来,通过上位机用户界面,用户同样可以控制波形发生器输出所需波形。作为任意波形发生器的扩展部分,上位机的一个重要功能就是将文本形式的数据转换成合适的波形数据后传输给任意波形发生器。8 江苏科技大学本科毕业设计(论文)2.2改进后的DDS模块及工作原理考虑到在本方案中,发生器产生的目标波形的采样点数和波形数据都不是固定的值。因此,图1-1中的DDS结构就不太适合在本设计中使用了。对此作出了相应的改变之后,得到了如图2-2所示的DDS原理框图。频率控制字fCW相位累加器N波形查找表DACLPF采样点数控制字S波形输出参考时钟源fCfO图2-2:本设计中DDS原理框图和图1-1的原理差不多,相位累加器在参考时钟源的作用下,不断的以fCW*S的步进进行累加,累加器的溢出速度就是DDS的输出频率fO了[7]。然后用fO对波形查找表进行查表和更新DAC输出数据,查表的范围为S。这样一来DAC输出波形通过一个低通滤波器之后就可以得到一个频率为fCW的波形了。由于波形查找表的查表方式是逐点的,完全可以通过更新波形查找表的内容去达到输出任意波形的目的。需要注意的是,因为fo来至于累加器的溢出,所以相位累加器的位数N需要满足2N>2*fCW*S。以便相位累加器溢出后剩余位数可以继续对下次值进行累加,而不会产生丟码现象。相位累加器部分程序如下:P0:PROCESS(CLK_IN)VARIABLECOUNT:STD_LOGIC_VECTOR(27DOWNTO0);VARIABLECLK:STD_LOGIC;BEGINIF(CLK_IN'EVENTANDCLK_IN='1')THENIF(COUNT>="0100110001001011010000000000")THENCLK:=NOTCLK;COUNT:=COUNT-"0100110001001011010000000000";ENDIF;COUNT:=COUNT+FRE_IN;ENDIF;CLK_OUT<=CLK;8 江苏科技大学本科毕业设计(论文)ENDPROCESSP0;其中CLK_IN为fC;FRE_IN为fCW*S,CLK_OUT为fO;COUNT为N=28位的寄存器,对FRE_IN进行累加,溢出位为CLK_OUT。图2-2和图2-3为DDS模块在两个不同设定值下的仿真波形。图2-2:DDS模块仿真波形(a)图2-3:DDS模块仿真波形(b)8 江苏科技大学本科毕业设计(论文)第三章波形发生器的主体设计任意波形发生器的核心主要由四个部分组成:相位累加器,波形查找表,D/A转换器和低通滤波器(LPF)。在本设计中,为了达到预期的目标,除了核心部分外,还另外加上了MCU控制模块,上位机控制软件,ARM手持式控制终端。其中,MCU除了往FPGA的RAM波形表写入基本波形数据及改写频率控制字之外,还负责了波形信息的显示及键盘信息输入。上位机控制软件除了提供了直观方便的控制操作平台,还可以将存于PC机上的各种波形数据通过USB或UART传输至发生器中。而ARM手持式控制终端采用触摸屏控制方式,除了包含基本控制功能之外,还提供了更加强大的任意波形编辑功能及手绘波形输入。手持式控制终端的通讯方式有多种,包括SPI,UART,USB及2.4G射频模块。下面章节中将逐一介绍各部分模块的工作原理及测试结果。图3-1为发生器主体部分的系统结构框图。显示屏MCU键盘通讯模块FPGAD/AC低通滤波图3-1:发生器原理框图3.1FPGA电路设计FPGA是任意波形发生器中最重要的部分,本设计中使用了Altera公司CycloneII系列的EP2C8Q208C8。它含有8256个宏单元及138用户IO口,能远远满足于本设计的需求。而其内嵌的2个PLL模块,正好可以为DDS模块提供一个足够高频率的时钟源。而自带的162kbits的Memory更省却了设计中需要外扩存储器的麻烦。8 江苏科技大学本科毕业设计(论文)FPGA控制电路主要包含PLL(锁相环)模块、通讯模块、DDS模块及寄存器控制器模块等四大部分。其中PLL对40M时钟源进行2倍频,产生80M的参考时钟源;DDS模块上一章节已经有较详细的介绍,本章节就不在多说明了;通讯模块负责和单片机间进行通讯,获取任意波形数据、频率控制字和采样点数控制字等信息;寄存器控制器协调各个模块间的工作状态,对RAM区更新波形数据及选择波形查找表范围,更改相位累加器的频率控制字和采样点数控制字。图3-2:FPGA控制电路的部分模块3.1.1PLL和RAM模块的定制FPGA控制电路的设计中使用了PLL和RAM模块,在EP2C8Q208C8芯片上,都可以很方便通过各种途径进行定制。如可以在BlockEditor中直接例化;在HDL代码中例化(通过端口和参数定义例化,或使用MegaWizardPlug-InManager对宏功能模块进行参数化并建立包装文件),也可以通过界面,在QuartusII中对Altera宏功能模块和LPM函数进行例化[8]。本设计中采用的是MegaWizardPlug-InManager对宏功能模块进行参数化并建立包装文件的方法定制了一个PLL。要注意的是,PLL的输入频率需为实际的时钟源频率,这里需要一个大于64MHz的参考时钟源,板载有源晶振是40M,所以取倍频系数为2,从而在PLL输出端获取了80MHz的参考时钟源。RAM的定制方法和PLL差不多,同样使用了MegaWizardPlug-InManager工具。本设计中DAC输出波形的精度是10位,考虑到以后可能会扩展DAC的位数,因此将RAM的字长设置成了16位,设计中需要产生单个波形的最大采样点是512bit,所以定制的RAM占用了8Kbits的memory。定制完RAM后,还需要对所例化的8 江苏科技大学本科毕业设计(论文)RAM进行了测试,确保在后面的设计中,能正常使用RAM。如图3-3所示,先往RAM的前256字的空间内依次写入跟其地址对应的数据,后面再不断的查表输出,就得到了一系列锯齿波,说明RAM的使用无误。图3-3RAM测试仿真波形3.1.2通讯模块在FPGA中,一共设计了两个模块。一个是SPI串行通讯模块,提供了跟发生器以外设备进行通讯的功能。另一个是跟发生器内部单片机连接的并口通讯模块,通过它,单片机可以最高1MBps的速度将波形数据,频率控制字等信息传输给FPGA。发生器跟外界的数据传输,依靠的是单片机上的UART或2.4G射频模块,然后单片机再将数据通过8位的数据总线同步对FPGA更新。设计中的并口通讯模块,它的理论最大传输速率是1MBps。哪怕单片机只能达到100Kbps的传输速度,传输一个最大数据量的波形信息也就需要10ms左右的时间。而如果是上位机通过UART模块将数据传输给发生器的话,往往影响和限制传输速率的是UART的波特率。当取单片机上的波特率为28800bps时,假设要传输的波形采样点数是128点,每点占2个字节,无间断传输完这一组波形信息将需要70ms以上的时间。由于设计中所使用的单片机RAM不是很大(关于单片机资源的介绍在下一章节中),无法将数据全部获取后再转存至FPGA中。所以测试中使用的是逐个字节转存的方式,这就需要在上位机UART的发送事件中,每发一个字节插入一个间隔延时,而这一间隔延时最小只到1ms。这使得在实际通讯中的速率比理论值的更低。所幸,基本波形的产生不需要借助外部设备,在发生器内部更新不同的波形,其速率是微秒级的。而如果将固定波形提前载入FPGA内的ROM中的话,不同波形间的切换几乎是瞬时的。利用这一特性,可以用来产生诸如振幅键控(ASK)、频移键控(FSK)、相移键控(PSK)等调制波形。8 江苏科技大学本科毕业设计(论文)图3-4通过通讯模块修改频率控制字和采样点数控制字3.1.3寄存器控制器模块寄存器控制器模块在FPGA控制电路的设计是至关重要的,它保存着各模块的可更改控制字,在必要时可恢复初始设定值。同时,它还负责对波形查找表内容的更改及选择查找范围的设定。通讯模块是直接连接到它上面的,它是其他设备对DDS模块进行直接操作的桥梁。有了它,就可以像DDS芯片AD9959那样通过单片机或其他微控制器直接对控制字的改写就可以轻松获得所需要的波形了[10]。3.2单片机控制电路设计单片机在发生器的设计中,它的主要作用是负责按键扫描,驱动LCD显示,跟上位机间的通讯。至于调节占空比、偏置比和波形幅值也是离不开它的。虽然这些工作在FPGA上也是可以完成的,但对于设置参数的输入和驱动一些较复杂的外部模块却不如单片机那么灵活。之前,曾尝试着用FPGA驱动LCD1602去显示波形信息,但在显示一个兆级的频率值时发现FPGA编译后的结果显示需要用到4000多个宏单元。出现这个问题的原因是因为LCD1602显示的数据格式是字符型的,在将频率值变成一个个字符的过程中需要使用多次的除法和取余。在FPGA中如果靠编译器自行构建模块去完成这两个功能的话,是需要很多个宏单元的。因此,在用户界面的设计中,采用的是单片机作为平台去完成。而且结果也表明了,这一做法是有利的,不但降低了设计难度和工作量,对于后期的修改和改进都是有好处的。如图6-2的FPGA编译结果,在使用了单片机之后,大大降低了FPGA的资源消耗。本设计中,使用的是宏晶公司生产的STC12LE5A60S2单片机。它有60K的Flash和1280字节的RAM,能在2.2V到3.6V工作电压和0到35MHZ的时钟频率下正常工作。与普通的8051单片机不同,作为增强型51单片机,“1个时钟/1个机器周期”使得它在同样工作频率时,速度是普通8051单片机的8~12倍。为了使单片机和FPGA的IO口电平能直接兼容,设计中单片机的电源电压使用的是3.3V。8 江苏科技大学本科毕业设计(论文)图3-5任意波形发生器中使用的单片机3.2.1用户接口模块用户界面为一个液晶显示屏LCD1602和一个键盘的面板。由于复杂波形的输入都是通过上位机或其它终端输入的,所以在发生器面板上不需要设置太多的参数,就仅使用了6个按键的独立键盘。LCD1602则用来显示波形的频率、波形的类型、幅值和采样点数,如图3-6所示。具体显示及操作流程如下:·在待机状态按“M”进入频率设置项,“←”“→”选择设置频率的位数,“↑”“↓”对该位数值进行加减。·在频率设置项按“M”则进入波形设置项,“←”“→”选择波形的类型(如正弦波、方波、三角波、锯齿波和任意波等),“↑”“↓”选择波形的采样点数。·在波形设置项按“M”则进入幅值设置项,“←”“→”选择设置幅值的位数,“↑”“↓”对该位数值进行加减。·在幅值设置项按“M”则会恢复到待机状态。而在任何设置项中按“E”都会直接跳转到待机状态。8 江苏科技大学本科毕业设计(论文)图3-6任意波形发生器面板图片(左:正面,右:反面)3.2.2UART模块串行通信是指通信的发送方和接收方之间数据信息的传输是在单根线上,以每次一个二进制位移动的。它的优点是只需一对传输线进行传送信息,因此成本低,适用于远距离通信[9]。因此在任意波形发生器的设计中,发生器与上位机之间的通讯是通过单片机的UART模块来完成的。STC12LE5A60S2单片机内部含有两个UART模块,本设计中使用了其中的一个用来跟上位机或其他设备进行通讯。考虑到如今的通用型计算机尤其是笔记本已经没有串口了,要想单片机直接跟上位机进行连接是不行的(即使有串口也还需要进行电平转换),所以在设计中使用了PL2303HX芯片。图3-7:PL2303电路原理图PL2303是Prolific8 江苏科技大学本科毕业设计(论文)公司生产的一种高精度集成的RS232-USB接口转换器,可提供一个RS232全双工异步串行通讯装置与USB功能接口便利连接的解决方案。该器件内置USB功能控制器、USB收发器、振荡器和带有全部调制解调器控制信号的UART,只需外接少数的电阻容器件和一个晶振就可实现USB信号与RS232信号的转换,能够方便嵌入到各种设备中。图3-7为本设计中采用的PL2303HX硬件电路连接方案。3.2.32.4G无线模块本设计中,使用的2.4G无线射频模块的核心芯片为CC2500。CC2500是一种低成本的单片2.4GHz收发器,专为低功耗(RX中15.6mA)无线应用而设计的。它具有可编程控制的输出功率(可达+1dBm),单独的64字节RX和TX数据FIFO,工作频率范围为2400MHz到2483.5MHz,可编程控制的传输速率最高可达500kbps。图3-8CC2500简化框图之所以在发生器中加装了2.4G射频通讯模块,是考虑到了以后可以跟更多的设备的无缝联接。如果发生器仅靠SPI或UART模块与外部设备联接,往往会因为通讯频率(UART的波特率)的不同或IO端口不匹配而导致通讯联接失败。但通过2.4G无线模块,首先它就不用考虑电平和端口匹配问题,而可编程控制的传输速率使得正常通讯得以在各种高速或低速的设备间进行。另外还有一点,随着物联网时代的到来,一台拥有无线通讯能力的任意波形发生器,为信号发生器在实验室物联网中的应用提供了一个可执行实验平台。8 江苏科技大学本科毕业设计(论文)3.2DAC输出模块及滤波电路的设计DAC模块的性能参数直接影响到任意波形发生器的设计指标,所以选取一片好的DAC芯片是很有必要的。本设计中,使用的是德州仪器公司(TI)制造的THS5651。THS5651是一个10位分辨率的数字模拟转换器,采用了先进的高速混合信号COMS工艺,电流源阵列架构结合同步开关使它拥有了良好的动态输出性能。THS5651的最高转换速率为100MSPS,理论上可以满足本设计中发生器的要求(64MSPS)。它提供了一组全差分的电流(>20mA)输出,且输出阻抗高达300kΩ,内部还含有一个带温度补偿的1.2V电压基准源[11]。由于该DAC芯片的输出方式是差分电流型,为了得到一个电压型输出,还需要在DAC模块输出端接一个高速运放进行电流到电压的处理。这里参考了康芯公司的KX-AD2模块的电路,得出了如图3-8所示的DAC输出电路原理图。其中,调节可调电阻器R4可以在一定范围内调节输出电压基准,但不宜过高,否则会使输出波形失真。运放采用的依然是TI公司的THS4001电压反馈放大器。THS4001带宽增益为270MHz,±2.5V到±15V宽的工作电压范围,适合用来作为本设计中DAC输出信号的中间级调理。图3-8:DAC输出模块原理图8 江苏科技大学本科毕业设计(论文)滤波电路采用的是一阶有源滤波,选用的运放是OPA603。OPA603依旧是TI公司生产的高速运放,与THS4001不同的是,OPA603是电流反馈放大器。相比较而言,电流反馈放大器在增益带宽和低失真上的性能优于电压反馈放大器。OPA603的带宽增益为100MHz,压摆率为1000V/us,可以用它来完成一个本设计需要的10MHz低通滤波器。根据一阶RC滤波的公式:(3-1)只要取R=160Ω,C=100pF,就可以得到所需的截止频率了。当然,OPA603在这里除了担负滤波的作用之外,还负责对DAC输出波形进行偏置。因为THS5651只能输出0~1.2V的信号,经中间级调理之后输出范围也只能在0~4V范围内调整,是无法获得一个负电平信号的。因此,设计中将经中间级调理之后DAC最大输出调整为2V,在OPA603上给予输入一个-1V的偏置。如果将DAC转换数据为511时定义成0电平。当DAC转换数据在0~1023间变化时,就可以得到一个在-1V~1V间变化的信号了。但要想输出峰峰值达到5V的要求,在设计OPA603滤波电路时还需将增益设定为G=5。按照设定的参数,在实物测试中无法获得准确的增益,这里有一个方法可以方便、准确的调整偏置比和增益:先将DAC输出保持在1023的数据转换值,既最大输出值;调节图3-8DAC输出模块中的R4,使输出电平为2.5V;再将DAC输出保持在511的数据转换值,既定义中的0电平;调节图3-9中低通滤波器的偏置电阻R8,使输出电压为0。这样一来,DAC转换数据范围从0到1023时,在滤波器输出端,得到的就是一个-2.5V到2.5V变化的信号了。图3-9:低通滤波器原理图8 江苏科技大学本科毕业设计(论文)为了达到数字可控增益输出和可调偏置比,仅靠以上两个电路时不行的。数字可控增益可通过一个电阻权网络改变运放的反馈电压或DAC的电压基准来控制电路增益[12];数控可调偏置比则可用一个AD的输出电压来调节减法器的反相端电压来达成。8 江苏科技大学本科毕业设计(论文)第四章手持式控制终端设计4.1手持式控制终端的硬件选择手持式控制终端的核心微控制器采用的是ST公司的STM32F103VE,它是一款专为要求高性能、低成本、低功耗的嵌入式应用专门设计的微处理器。STM32F103XX增强型系列使用高性能的ARMCortex-M332位的RISC内核,工作频率为72MHz,内置高速存储器(STM32F103VE为512K字节的闪存和64K字节的SRAM),丰富的增强I/O端口和联接到两条APB总线的外设。所有型号的器件都包含2个12位的ADC、3个通用16位定时器和一个PWM定时器,还包含标准和先进的通信接口:多达2个I2C和SPI、3个USART、一个USB和一个CAN。要完成控制终端设计,外设上还需要接一个触摸彩屏,一片SPIFLASH,一个2.4G无线模块。之所以选择ARM7作为控制核心,而不选用MSP430和8051等通用型单片机或更高级的ARM9、ARM11,是考虑到以下因素:·通用型单片机系统主频较低,无法流畅的控制触摸屏显示;·终端需要处理大量的数据,会占用大量的RAM,而通用型单片机没有足够的资源;·ARM9核心板价格比较贵,使用ARM9来开发手持式控制终端成本太高;·ARM7的片内资源已足够使用,在不嵌入系统的情况下,编程相对ARM9、ARM11简单。对于触摸显示屏的控制,本设计使用了专门的控制芯片,如使用HX8312控制彩屏显示,用ADS7846控制触摸屏信息采集。其中HX8312是基于单片机驱动的240*320点阵图形显示LCD控制器,内部包括门极驱动和电源驱动,支持本设计中使用的2.2寸264144色TFT。通过HX8312控制TFT,即使不嵌入操作系统,STM32F103VE依然能轻松胜任图形界面的显示。而触屏使用的是四线触摸屏,它包含两个阻性层。其中一层在屏幕的左右边缘各有一条垂直总线,另一层在屏幕的底部和顶部各有一条水平总线。为了在X轴方向进行测量,将左侧总线偏置为0V,右侧总线偏置为VREF。将顶部或底部总线连接到ADC,当顶层和底层相接触时即可作一次测量。为了在Y轴方向进行测量,将顶部总线偏置为VREF,底部总线偏置为0V。将ADC输入端接左侧总线或右侧总线,当顶层与底层相接触时即可对电压进行测量。同样,通过使用ADS7846控制四线触摸屏8 江苏科技大学本科毕业设计(论文),只要用SPI方式控制ADS7846,仅发送几个简单的命令,就可以轻松获取X轴和Y轴测量值。然后分别减去偏置量和乘以一定系数之后,就可以获得准确的触屏点击坐标了。具体的触摸屏校准方法,在下面章节将会予以介绍。4.2用户界面的设计由于STM32F103VE的开发是在不嵌入系统的情况下进行的,用户界面的开发就无法使用QT图形界面编辑工具了。为了能使用户界面的开发能顺利进行,并且降低后期的编程难度。在编写用户界面前,需先编写了一套用以用户界面编辑的API函数。这些API函数包含了编辑用户界面的所需的各种控件,并赋予其方便的使用方法。虽然前期需要花费大量时间去编写这些函数,但后期编辑用户界面时就可以把主要精力放在程序整体功能的设计上而不需要过于关注技术细节了。虽然不像可视化编程环境那样“即见即所得”的编程方式来得方便,但使用这些函数来“积木块”般搭建出各种用途丰富,功能灵活的图形化界面还是很容易的。下面将介绍设计中图形界面编辑常用到几个函数。4.2.1Put_Gui_Control()函数这个函数的作用是在窗口上显示相应的可视化控件,控件类型、显示位置及其他的信息都包含在结构体Obejet中。例如,要在窗体的(20,40)位置显示一个按钮,那么在调用这个函数之前只需将相应的值赋给Obejet类型的某个变量进行传递就可以了。在目标区域就会显示出一个带名称(需对”*pname”赋值才会显示名称)的按钮来,同时控件变量中还包含了对应触摸区域的值,便于在执行Touch事件时判断此按钮是否被按下。可以说,这个函数是图形界面编辑的子基础,绝大多数用户界面都离不开此函数。目前,Put_Gui_Control()已经可以显示包括普通按钮、文本框、组合框、复选框、选项按钮、滚动条等在内的常用图形控件。4.2.2Gui_Touch_Get()函数由于控制终端的控制操作方式为触摸屏输出,所以这个函数成为了获取外部信息的重要手段之一。这个函数的使用同样离不开结构体Obejet,也就是控件信息。和Put_Gui_Control()函数一样,它的调用参数也是Obejet类型的变量。通过判断touch_en的值来决定是否将该控件加入触摸事件集中,当触发条件达成之后返回一个下标值来完成触摸有效的确认。4.2.3Gui_Selection_Form()函数8 江苏科技大学本科毕业设计(论文)Gui_Selection_Form()函数是在Put_Gui_Control()和Gui_Touch_Get()函数的基础上完成的。它的作用是在主界面窗口上弹出一个单选会话框,当有效点击某个选项之后返回对应的值并退回到前一个界面。它的使用方法很简单,仅需定义一个FormShow_Type(窗口)类型的变量用来储存该窗口的基本显示信息及选项名称,然后将这个变量作为该函数的形参进行调用。需要注意的是,这个弹窗最多只能同时显示8个选项按钮。当按钮数小于5个时,函数会自动将按钮进行单排显示,多于4个时则双排显示。弹窗的显示起始位置、标题,按钮名称、数量和大小都是需要用户设定的。但窗口的大小、按钮的分布、触摸事件等都不需要用户干预。4.2.1Gui_DropdownMenu()函数Gui_DropdownMenu()函数的基本功能和Gui_Selection_Form()函数的差不多,不同的是Gui_DropdownMenu()函数显示的是下拉菜单,它可以通过直接递归调用在当前下拉菜单中产生子下拉菜单。它的使用和Gui_Selection_Form()函数一样灵活。为了体现出层次感,在显示子下拉菜单时,上一层的下拉菜单的颜色都会变暗,并且触摸区域被屏蔽掉。和单选会话框必须返回一个有效值不同,下拉菜单可以返回一个空值。使用过程中,可以通过点击界面空白处,直接跳出所有的下拉菜单。图5-1:用户界面中下拉菜单的效果图8 江苏科技大学本科毕业设计(论文)基本波形控制界面控制终端上的基本波形控制界面和上位机用户界面功能上差不多,都可以很方便的选择基本波形的类型、采样点数,和设置波形的频率、幅值、偏置及占空比。不同的是,控制终端与发生器的通讯方式有多种(SPI、UART、2.4G)可以选择,而且波形更新设成了“自动”和“手动”两种方式。在“自动”模式下,只要对界面里的任一项数据进行更改,控制终端就会立即将更改后的信息发送至发生器;在“手动”模式下,所有更改的信息,会在用户点击“数据更新”按钮之后才会一次更改。这两种模式都可以通过长点“数据更新”按钮来进行切换,便于在不同的环境下灵活的控制任意波形发生器的波形输出。图5-2:基本波形控制界面设置偏置电压效果图4.4触摸屏的输入校准要想从触摸屏手绘输入准确的波形数据,首先就需要对触摸屏的输入进行校准和消抖。和普通机械按键一样,触摸屏的点击和释放都会产生几十毫秒的抖动。但和按键的电平都不不一样的是,触摸屏的抖动通过AD转换之后成为了数字量的抖动,而判断数字量是否抖动比单纯的电平高低的判定复杂得多。尤其是手绘图形时,是无法通过一个简单的函数判定,两个触摸返回值间的变化是移动矢量的有效变化还是触摸移动过程中造成的抖动。通过对大量的采集到的触摸返回信息进行分析,得以找出了其中一些数据变化的规律,进而初步解决了触摸屏的消抖问题。8 江苏科技大学本科毕业设计(论文)这是没消抖前以大概5ms等间隔采集到的在触摸屏上画斜线的x轴数据:{13,30,75,46,45,47,23,56,46,45,46,47,46,47,47,47,47,45,46,47,47,46,46,……,78,78,78,64,79,78,78,79,81,78,79,79,79,79,80,79,103,79,79,78,81,79,79,79,79,81,80,……123,122,124,120,124,123,122,125,123,124,124,124,124,125,178,154,123,103,129,}。从数据中可以看出,在整个采集过程中,抖动点都会随机出现,只不过在起始处和结束点处居多。以此规律,得出了一个采集及处理方案:当触摸屏有点击事件发生之后,延时30ms后以5ms左右的等间隔对触摸点进行采样,以18个数据为一组进行求和,分别减去最大最小值后除以16(数据右移4位),然后将处理后得到的数据作为一个采集点返回。用此方法在触摸屏上画斜线最终得到的x轴数据为:{48,48,49,50,51,50,52,52,54,53,55,……,130,132,135,134,135,136}。虽然数据依然有±3个像素点的抖动,但已经处在可接受范围内了。4.5手绘波形输入界面手绘波形输入界面是手持控制终端最重要的一个界面。通过这个界面,用户可以方便的实现任意波形的手绘输入。同时这个界面还集成了许多扩展功能,支持历史波形、函数生成波形的导入及合成。同时提供了和PC机间数据传输和SD卡波形数据导入(需移植FAT32文件系统)的扩展功能函数。4.5.1手绘波形输入完成了触摸屏输入校准之后,要想在在触摸屏上“所画即所得”的方式获得波形数据,还需要对采集到的触摸坐标数据作进一步处理。首先在界面中划出一个绘图区域,以这一区域的中间水平线作为时间轴和零电平参考线,绘图时就可以得到相对于水平线分布的点,将这些点连起来所经过的屏幕区域坐标采集下来减去中间水平线的Y轴坐标之后,得到的数据就是所画波形的反相原始数据。再进过一定的圆滑处理和反相放大之后,将数据传输给发生器,发生器就可以产生相应的波形信号了。目前,手绘输入模式只支持顺序输入,即只能从左往右输入波形。这是为了防止手绘过程中,X轴数据回溯造成前面波形数据的改变。如图5-3,在绘图过程中,当分多次完成曲线绘制时,很容易就会出现衔接点的离散现象。所以在完成波形绘制之后,还需要通过“处理”菜单中的“消抖”功能将该处变得平滑,或者通过“修改”功能将该段数据重新编辑。8 江苏科技大学本科毕业设计(论文)图5-3:手绘输入波形过程4.5.2手绘波形输出完成一个手绘波形的输入之后,得到的是一个幅度小于110像素点的波形,映射到波形数据中就相当于一个不到最大输出范围(0~1023)1/8的波形。因此对该波形进行了一定比例的放大,如图5-4中左边的手绘输入界面。手持控制终端与发生器进行联接后,把波形数据发送至发生器中,并示波器观察发生器的输出信号。图5-4中右边的波形就是用模拟示波器YB4320观察到的波形信号。图5-4:手绘输出信号效果图在波形采样点数为32时,输出信号的频率可调变化范围为1Hz~2.5MHz。如图5-4所示的波形采样点数为512点,则此波形的最高输出频率是f=80MHz/512=156.25kHz。4.5其他任意波形的产生手持控制终端除了提供手绘波形输入之外,同时还可以拟提供调制波形、合成波形、频谱变换等任意波形的输入输出。8 江苏科技大学本科毕业设计(论文)4.6.1调制波形输出在调制波形界面中,可以通过便捷地设置需要调制的数据和选择调制方式生成所需要的波形。载波幅度、频率和数据位大小同样是可调的,载波频率最高可达2.5MHz。图5-5分别为控制终端的调制波形界面和频移键控的输出信号效果图,而图5-6是调制数据为0x75时的振幅键控和相移键控输出信号效果图。图5-5:频移键控输出信号效果图图5-6:振幅键控和相移键控输出信号效果图需要注意的是,因为输出调制信号的频率或相位是变化的,如果使用模拟示波器观察该波形,可能看到的是一个重叠的信号图像,这是因为输入触发信号无法同步而造成的影响。针对此情况,只需要为发生器设计一个同步信号输出端。当观察任意波形时,可将此同步信号输出接至示波器的外部触发信号输入端,就可以观察到一个稳定显示的输出波形了。4.6.2合成波形输出8 江苏科技大学本科毕业设计(论文)合成波形也是任意波形应用中不可缺少的,尤其是在信息系统信号抗干扰研究中。以前,如果想获得两个信号的混叠和相互作用的结果,往往需要两台信号发生器输出信号到一台双踪示波器中,而且这台示波器还得支持对输入信号进行相应的叠加处理功能。这样一来,此类实验不但要求高,操作起来也有诸多不便。如今,通过手持控制终端,这一系列功能得以简单实现了。如图5-7所示,对一占空比为90%的三角波叠加上一个20%的32次谐波,得到了一个合成波形。如果想观察某滤波器的滤波效果,可以通过此方式产生相应的波形从发生器输出,经过滤波器滤波后,用示波器观察比较滤波后的波形和原始输出波形或没叠加谐波前的波形。为了更加清楚和方便地观察,在用户界面上设计了多重波形区域,支持多个波形同时编辑和显示。并且在“处理”菜单中还提供了FFT分析功能,便于用户直接观察频谱分量。图5-7:合成波形输出效果图8 江苏科技大学本科毕业设计(论文)第五章上位机软件设计上位机软件设计平台使用的是VisualBasic6.0(以下简称VB)。VB是一个专门的上位机用户界面编辑工具,“即见即所得”的编程方式使得它简单易学,编程简单,平台包含了编辑界面所需要的各种控件。哪怕是跟下位机进行通讯的串行通讯控制,都可以方便的定制和使用。作为跟任意波形发生器配套的上位机软件,在界面上除了要设置任意波形发生器输出波形的类型、频率、幅值、和占空比之外,还需要将存于上位机上的波形数据下载到任意波形发生器中。因此,在正式编程时,需要在工程中添加额外的控件,步骤如下:选取菜单栏“工程”中的“部件”项,在“控件”栏里的“MicrosoftCommControl6.0”和“MicrosoftCommonDialogControl6.0”前的复选框上打钩,确定退出设置栏之后就会在控件栏里添加了这两个控件了。“MicrosoftCommControl6.0”是负责串口通讯的控件,在使用这个控件之前需要对这个控件的属性进行正确的设置。如波特率、校验位、数据位、停止位等都需要设置得和下位机的UART属性一样,否则无法正常通讯。“MicrosoftCommonDialogControl6.0”是通用对话框控件,设计中使用了它的打开对话框。为了方便波形数据的输入与查看,所以选择了TXT文本文件作为波形数据文件的存储类型。考虑到波形数据的采样点数不同,为了可以匹配上位机显示和传输至下位机,需为波形数据在TXT文件中的储存格式作如下定义:每个数据都用“,”间隔分开;第一个数据为波形的采样点数。需要注意的是,由于在本设计中DAC的分辨率为10位,也就是说,传输至DAC的数据大小的范围为0~1023。为了防止波形数据大小溢出而造成DAC输出波形错误,这里需要对文本输入的数据的大小作出一定的限制。而大部分时候,用户往往习惯将包含负数的波形数据直接存于文本中,为了使这些波形也能正确传输至DAC,在面板上需要多加一个用来控制波形偏置的按钮“DC/AC”。5.1上位机波形图形化显示下面一段程序为在图形框内显示载入文本波形数据的函数。通过这个函数,用户可以在将数据载入任意波形发生器之前直接观察波形。8 江苏科技大学本科毕业设计(论文)'---------------------------------绘波形曲线--------------------------PrivateSubPaintData()DimiAsIntegerDimY_mulAsSingleDimX_mulAsIntegerPic_Curve_graph.Cls'清图形框Y_mul=4'Y轴显示比例X_mul=512/datalong*10'X轴显示比例Fori=0Todatalong-2Pic_Curve_graph.Line(i*X_mul,4000-SignalData(i)*Y_mul)-((i+1)*X_mul,4000-SignalData(i+1)*Y_mul),vbGreenNextiEndSub'---------------------------------------------------------------------其中“Pic_Curve_graph.Line(),vbGreen”是VB中的画线函数,它的使用格式为“Picture.Line(x0,y0,x1,y1),Color”。在这里,只要分别将波形数据的下标作为横坐标幅值作为纵坐标循环调用这个函数,就可以在图形框内显示出一条连续的波形了。图4-1:上位机软件界面8 江苏科技大学本科毕业设计(论文)5.2上位机与发生器间的通讯上位机与发生器间的通讯方式采用的是串行通信,也就是人们常说的UART。除了设置好正确的属性之外,还需要清楚地知道发生器内的UART数据传输格式,才能使上位机的数据正确地被发生器接收。发生器的UART数据接收格式如下图:‘Y’‘H’功能Length(MSB)Length(LSB)0x01DATA[Length]数据头数据停止位开始图4-2:UART数据传输格式设计中,发生器的UART数据接收采用的是不定长格式。前两个字节是固定头信息,每条从UART接收过来的数据,只有前两个字节是‘Y’‘H’,该条命令才会有效。第三个字节是功能号,它们代表的命令分别为:”0x01”设置波形频率;”0x02”设置波形的采样点数;”0x03”设置波形类型;”0x04”设置波形幅值;”0x05”发送波形数据;”0x06”设置波形偏置比;”0x07”设置波形占空比。第四和第五个字节分别是发送数据的长度的高8位和低8位。假设现在需要发送512个采样点的波形数据那么这两个字节就应该为“0x02”“0x00”。从第六个字节开始到第(6+Length)个字节都是需要传输的数据,而最后一个字节就是停止位了。由于基本波形是在发生器内产生的,所以选择波形类型时,基本波形只需要发送一个波形编号过去就可以了。编号与波形类型的对应关系为:0~正弦波,1~方波,2~三角波,3~正锯齿波,4~反锯齿波,5~任意波。例如需要发生器输出三角波,则可以发送该条命令:’Y’,’H’,”0x03”,”0x00”,”0x01”,”0x02”,”0x01”。下面给出了VB上设置波形幅值的部分程序。在文本框“Text_SetVol”中输入波形幅值,点击设置幅值的确定按钮之后就会调用该条函数。如程序,函数开始先将Text_SetVol的文本字符转换成整型存于整型变量“SignalVol”中,判断它是否溢出(SignalVol<2500)后将“SignalVol”的值变为字符型存于字符数组“Vol(2)”中。然后在发送命令时将“Vol(2)”放到数据区一起发送过去就可以了。'---------------------------设置波形幅值-----------------------------8 江苏科技大学本科毕业设计(论文)PrivateSubCmd_SetVol_Click()DimVol(2)AsByteSignalVol=Text_SetVol.TextIf(SignalVol>2500)ThenSignalVol=2500Text_SetVol.Text=SignalVolEndIfVol(1)=(SignalVolMod256)Vol(0)=(SignalVol256Mod256)ComUart.Output="YH"ComUart.Output=Chr(4)ComUart.Output=Chr(0)ComUart.Output=Chr(2)ComUart.Output=VolComUart.Output=Chr(0)EndSub5.3上位机波形数据的导入要想将波形文件导入,需要用到“MicrosoftCommonDialogControl6.0”控件的打开对话框功能。添加该控件的方法和波形数据的储存格式在前面已说明过了,这里就不再介绍了。点击“载入”按钮之后,会弹出一个打开对话框,通过这个对话框找到需要添加的文件,双击或打开就可以将该文件中的波形数据加载进去。这时用户就可以在AWG波形显示区域看到加载进去的波形了,如图4-1。通过USB线将PC机和发生器联接,点击界面中的“连接”按钮建立联接,如果联接成功(需要设置好正确的连接属性),状态栏会有相应的提示。这时只要再点击AWG区域中的确定按钮,就可以将波形数据传输至发生器了。如图4-3为通过示波器观察到的上位机导入的波形信号。8 江苏科技大学本科毕业设计(论文)图4-3:上位机任意波形输出效果图8 江苏科技大学本科毕业设计(论文)结论6.1各项指标参数1)最低输出频率:,本设计取最低输出频率为1Hz;2)最高输出频率:;3)频率分辨率:,在实际应用中为了方便调节和计算,频率分辨率往往取个整值。本设计设定的频率步进值为1Hz;4)信号输出最小峰峰值为:Vpp=5mV;5)信号输出最大峰峰值为:Vpp=5V;6)输出信号类型为:正弦波、方波、三角波、锯齿波、任意波;实验结果表明,本方案中的基于DDS技术的任意波形发生器的设计是成功的。而通过自行选用和设计合适的仪器外壳,我也完成了如图6-1所示的实物成果。其中手持控制终端使用的是锂电池,可通过USB对其进行充电;发生器为220V市电接入。图6-1:实物成果8 江苏科技大学本科毕业设计(论文)除了以上的基本指标参数之外,还成功的完成了上位机和手持控制终端对发生器的控制和任意波形数据传输的测试。6.1资源利用情况经过合理的设计,在资源利用情况,同样获得了一个不错的结果。FPGA上宏单元资源的利用率不到5%,符合低成本的设计概念。而手持式控制终端可以作为任意波形发生器的选配设备,同样它的资源利用率也不到20%,完全可以用同系列芯片中较低价格的型号替代。图6-2FPGA资源利用情况6.2存在的问题虽然最终的设计成果各项参数指标均已符合任务书要求,但作品还存在一些需要改进的地方。例如设计中所采用的DAC转换速率只有100MSPS,虽然理论上达到了要求,但实际使用中,如果DAC转换速率达到80MSPS,输出信号就会产生较大的失真。频谱输入谐波的方法未完善,目前还无法有效的进行频域到时变换的波形输出。因为经费不够和时间不足,所用模块的PCB板也没有经过专门的厂家打样,而是在实验板上焊接和用杜邦线连接。在一定程度上,会影响到DAC模块的实际最大转换速率和滤波模块的滤波效果。8 江苏科技大学本科毕业设计(论文)致谢一个毕业设计的完成,见证的是一个人的成长过程。在这个过程中有对我们给予直接帮助老师和同学,还有一些默默的在我们身后一直支持的亲人们。所以:在此把我的成果献给我千里之外的父母,是他们的辛劳给予了我学习的机会。我今天所有成功的喜悦都离不开他们挥洒的每滴汗水。并感谢陈迅、李绍鹏、王宝忠这几位老师在我学习过程中给予我的帮助和启迪,从他们身上我学到许多书本之外的知识。同样感谢那些在四年大学学习生活中帮助过我鼓励过我的同学和老师。8 江苏科技大学本科毕业设计(论文)参考文献[1]蒋焕文,孙继.电子测量[M].中国计量出版社,2008:148[2]汤家华,王道德.基于FPGA设计的采用DDS技术的任意波形发生器[J].电子测量技术,2007,30(4)129-131[3]胡升平,宋跃,余炽业,张志坚.可视化多功能DDS任意信号源研制[J].东莞理工学院学报,2007,14(1):112-115[4]陈研,陈立群.基于DDS的捷变频综的设计及其应用[J].中国电子科学研究院学报,2010,4:423-429[5]周丹,冯永新.基于FPGA的AWG的设计与实现[J].沈阳理工大学学报,2008,27(1):42-45[6]周俊峰,陈涛.基于FPGA的直接数字频率合成器的设计与实现[J].电子技术应用,2002,28(12):74-75[7]LiuXiaodong,ShiYanyan,LiShubo.AMCU-BasedArbitraryWaveformGeneratorforSLH.TheEighthInternationalConferenceonElectronicMeasurementandInstruments,2007,4:895-899[8]潘松,黄继业.EDA技术实用教程[M].科学出版社,2006:159-176[9]刘艳玲.采用MAX232实现MCS-51单片机与PC机的通讯.天津理工学院学报,1999,15(3):57-61[10]陈嘉佳,潘志浩,王天麟.一种基于DDS芯片AD9959的高精度信号发生器.自动化仪表,2007,28(4):50-53[11]10-Bit,100MSPS,CommsDAC(TM)Digital-to-AnalogConverter[EB/OL].[1999-06].http://focus.ti.com.cn/cn/lit/ds/symlink/ths5651.pdf[12]刘成尧,王小海.基于CPLD集成芯片FLEXC6016实现DDS技术的任意波形发生器的研制[Z].8 江苏科技大学本科毕业设计(论文)附录一、部分实物照片图1任意波形发生器主体内部图图2手持式控制终端内部图8 江苏科技大学本科毕业设计(论文)图3波形发生器FPGA核心板部分原理图8 江苏科技大学本科毕业设计(论文)图4DAC输出模块原理图8 江苏科技大学本科毕业设计(论文)图5波形发生器单片机核心板原理图8 江苏科技大学本科毕业设计(论文)二、部分程序源代码/******************************************************************函数名称:Put_Gui_Control函数功能:绘制GUI功能控件函数参数:objet控件的结构体变量******************************************************************/voidPut_Gui_Control(Obejetobjet){switch(objet.style){caseTextBox://文本框LCD_Fill(objet.x,objet.y,objet.w,objet.h,objet.bColor);//底色if(objet.dis_mode==0){Paint_ButtonRectangle(objet.x,objet.y,objet.w,objet.h,1,GreyBrown,White);}else{Paint_ButtonRectangle(objet.x,objet.y,objet.w,objet.h,2,GreenBlue,GreenBlue);}break;caseCommandButton://按钮LCD_Fill(objet.x,objet.y,objet.w,objet.h,objet.bColor);//底色Paint_ButtonRectangle(objet.x,objet.y,objet.w,objet.h,1,White,GreyBrown);if(objet.dis_mode&0x02){Paint_ButtonRectangle(objet.x,objet.y,objet.w-1,objet.h,2,Black,Black);}if(*objet.pname){Gui_DrawFont_String(objet.x+(objet.name_addr>>4),objet.y+(objet.nam-e_addr&0x0f),objet.pname,0,objet.fColor,objet.bColor);}if(objet.dis_mode&0x01){Paint_Dashed(objet.x+4,objet.y+4,2,objet.h-8,Black);//左虚线Paint_Dashed(objet.x+objet.w-5,objet.y+4,2,objet.h-8,Black);//右虚线Paint_Dashed(objet.x+4,objet.y+4,objet.w-8,2,Black);//上虚线Paint_Dashed(objet.x+4,objet.y+objet.h-5,objet.w-8,2,Black);//下虚线}if(objet.dis_mode&0x04){Paint_ButtonRectangle(objet.x,objet.y,objet.w-1,objet.h-1,2,Red,Red);}break;//========================复选框======================caseCheckBox:8 江苏科技大学本科毕业设计(论文)LCD_Fill(objet.x,objet.y,16,16,White);//底色Paint_ButtonRectangle(objet.x,objet.y,16,16,1,GreyBrown,White);if(objet.value){DrawLine(objet.x+1,objet.y+7,objet.x+5,objet.y+11,Black);DrawLine(objet.x+1,objet.y+8,objet.x+5,objet.y+12,Black);DrawLine(objet.x+1,objet.y+9,objet.x+5,objet.y+13,Black);DrawLine(objet.x+6,objet.y+11,objet.x+14,objet.y+2,Black);DrawLine(objet.x+6,objet.y+12,objet.x+14,objet.y+3,Black);DrawLine(objet.x+6,objet.y+13,objet.x+14,objet.y+4,Black);}if(*objet.pname){Gui_DrawFont_String(objet.x+(objet.name_addr>>4)+16,objet.y+(objet.name_addr&0x0f),objet.pname,0,objet.fColor,objet.bColor);}break;//=====================选项按钮======================caseOptionButton:LCD_Fill(objet.x+5,objet.y,6,1,White);//底色LCD_Fill(objet.x+3,objet.y+1,10,1,White);//底色LCD_Fill(objet.x+2,objet.y+2,12,1,White);//底色LCD_Fill(objet.x+1,objet.y+3,14,2,White);//底色LCD_Fill(objet.x,objet.y+5,16,6,White);//底色LCD_Fill(objet.x+5,objet.y+15,6,1,White);//底色LCD_Fill(objet.x+3,objet.y+14,10,1,White);//底色LCD_Fill(objet.x+2,objet.y+13,12,1,White);//底色LCD_Fill(objet.x+1,objet.y+11,14,2,White);//底色LCD_Fill(objet.x,objet.y+4,1,1,GreyBrown);//底色LCD_Fill(objet.x+4,objet.y,1,1,GreyBrown);//底色DrawLine(objet.x,objet.y+3,objet.x+3,objet.y,GreyBrown);if(objet.value){LCD_Fill(objet.x+6,objet.y+4,4,1,Black);//LCD_Fill(objet.x+5,objet.y+5,6,1,Black);//LCD_Fill(objet.x+4,objet.y+6,8,4,Black);//LCD_Fill(objet.x+5,objet.y+10,6,1,Black);//LCD_Fill(objet.x+6,objet.y+11,4,1,Black);//}if(*objet.pname){Gui_DrawFont_String(objet.x+(objet.name_addr>>4)+16,objet.y+(objet.name_addr&0x0f),objet.pname,0,objet.fColor,objet.bColor);}break;//=====================组合框======================8 江苏科技大学本科毕业设计(论文)caseComboBox:LCD_Fill(objet.x,objet.y,objet.w,objet.h,objet.bColor);//底色Paint_ButtonRectangle(objet.x,objet.y,objet.w,objet.h,1,GreyBrown,White);LCD_Fill(objet.x+objet.w-objet.h+1,objet.y+1,objet.h-2,objet.h-2,Form_bColor);Paint_ButtonRectangle(objet.x+objet.w-objet.h+1,objet.y+1,objet.h-2,objet.h-2,1,White,GreyBrown);Paint_Triangle(objet.x+objet.w-(objet.h>>1)-(objet.h>>2),objet.y+(objet.h>>1)-(objet.h>>3),objet.h>>1,4,objet.fColor);//向下箭头if(*objet.pname){Gui_DrawFont_String(objet.x-(objet.name_addr>>4)*8-2,objet.y-(objet.name_addr&0x0f)*4+6,objet.pname,0,objet.fColor,Form_bColor);}break;caseEscButton:LCD_Fill(objet.x,objet.y,29,29,objet.bColor);DrawLine(objet.x+6,objet.y+7,objet.x+22,objet.y+23,White);DrawLine(objet.x+6,objet.y+6,objet.x+23,objet.y+23,White);DrawLine(objet.x+7,objet.y+6,objet.x+23,objet.y+22,White);DrawLine(objet.x+6,objet.y+21,objet.x+22,objet.y+5,White);DrawLine(objet.x+6,objet.y+22,objet.x+23,objet.y+5,White);DrawLine(objet.x+7,objet.y+22,objet.x+23,objet.y+6,White);if(objet.dis_mode&0x02){DrawLine(objet.x+6,objet.y+7,objet.x+22,objet.y+23,Black);DrawLine(objet.x+6,objet.y+6,objet.x+23,objet.y+23,Black);DrawLine(objet.x+7,objet.y+6,objet.x+23,objet.y+22,Black);DrawLine(objet.x+6,objet.y+21,objet.x+22,objet.y+5,Black);DrawLine(objet.x+6,objet.y+22,objet.x+23,objet.y+5,Black);DrawLine(objet.x+7,objet.y+22,objet.x+23,objet.y+6,Black);}break;default:break;}}/******************************************************************函数名称:Gui_DropdownMenu函数功能:弹出下拉菜单函数参数:*Menu菜单条目level菜单层次******************************************************************/u16Gui_DropdownMenu(Menu_Type*Menu,u8level){u16i,OldKey=0,NewKey=0;u168 江苏科技大学本科毕业设计(论文)Form_w=Menu->w,Form_h=Menu->h*Menu->Num,Form_x=Menu->x,Form_y=Menu->y;u16button_h=28,button_x=Menu->x+4;u16bColorNew=0xDEFB;//当前菜单背景色u16bColorOld=Button_bColor;//上级菜单背景色u16fColorNew=Black;u16fColorOld=0x8410;if(level==0){LCD_Fill(Form_x,Form_y,Form_w,Form_h,bColorNew);Paint_Rectangle(Form_x,Form_y,Form_w,Form_h,1,GreyBrown);for(i=0;iNum;i++){Gui_DrawFont_String(button_x,Form_y+(i+1)*button_h-18,Menu->Title[i],0,fColorNew,bColorNew);LCD_Fill(Form_x+1,Form_y+i*button_h,Form_w-2,1,White);if((Menu->CrownFig>>i)&&0x01){Paint_Triangle(Form_x+Form_w-10,Form_y+(i+1)*button_h-16,9,3,fColorNew);}}}else{LCD_Fill(Form_x,Form_y,Form_w,Form_h,bColorOld);Paint_Rectangle(Form_x,Form_y,Form_w,Form_h,1,GreyBrown);for(i=0;iNum;i++){Gui_DrawFont_String(button_x,Form_y+(i+1)*button_h-18,Menu->Title[i],0,fColorOld,bColorOld);LCD_Fill(Form_x+1,Form_y+i*button_h,Form_w-2,1,GreyBrown);if((Menu->CrownFig>>i)&&0x01){Paint_Triangle(Form_x+Form_w-10,Form_y+(i+1)*button_h-16,9,3,fColorOld);}}}if(level){LCD_Fill(Form_x+1,Form_y+(level-1)*button_h+1,Form_w-2,button_h-2,bColorOld);Paint_Triangle(Form_x+Form_w-10,Form_y+level*button_h-16,9,3,White);Gui_DrawFont_String(button_x,Form_y+level*button_h-18,Menu->Title[level-1],0,fColorNew,bColorOld);8 江苏科技大学本科毕业设计(论文)return0;}while(1){Delay_ms(40);if(Touch_Input(0)){if(SingelClick_x>Form_x&&SingelClick_xForm_y&&SingelClick_yNum*button_h){for(i=0;iNum;i++){if(SingelClick_y>Form_y+i*button_h&&SingelClick_yTitle[i],0,fColorNew,Cyan);Delay_ms(ButtonClickDelay);returnOldKey;}}}袁节膅薂羄肅蒃薁蚃芀荿薀螆肃芅蕿袈芈膁蚈羀肁蒀蚇蚀袄莆蚇螂肀莂蚆羅袂芈蚅蚄膈膄蚄螇羁蒂蚃衿膆莈蚂羁罿芄螁蚁膄膀螁螃羇葿螀袅膃蒅蝿肈羆莁螈螇芁芇莄袀肄膃莄羂艿蒂莃蚂肂莈蒂螄芈芄蒁袆肀膀蒀罿袃薈葿螈聿蒄葿袁羁莀蒈羃膇芆蒇蚃羀膂蒆螅膅蒁薅袇羈莇薄罿膄芃薃虿羆艿薃袁节膅薂羄肅蒃薁蚃芀荿薀螆肃芅蕿袈芈膁蚈羀肁蒀蚇蚀袄莆蚇螂肀莂蚆羅袂芈蚅蚄膈膄蚄螇羁蒂蚃衿膆莈蚂羁罿芄螁蚁膄膀螁螃羇葿螀袅膃蒅蝿肈羆莁螈螇芁芇莄袀肄膃莄羂艿蒂莃蚂肂莈蒂螄芈芄蒁袆肀膀蒀罿袃薈葿螈聿蒄葿袁羁莀蒈羃膇芆蒇蚃羀膂蒆螅膅蒁薅袇羈莇袄芈蒇袇螀芇蕿蚀聿芆艿蒃肅芅蒁螈羁芄薃薁袆芃芃螆螂芃莅蕿肁节蒈螅羇莁薀薈袃莀艿螃蝿荿莂薆膈莈薄袁肄莇蚆蚄羀莇莆袀袆羃蒈蚂螂羂薁袈肀肁芀蚁羆肁莃袆袂肀薅虿袈聿蚇蒂膇肈莇螇肃肇葿薀罿肆薂螆袅肅芁薈螁膅莃螄聿膄蒆薇羅膃蚈螂羁膂莈蚅袇膁蒀袀螃膀薂蚃肂腿节衿羈腿莄蚂袄芈蒇袇螀芇蕿蚀聿芆艿蒃肅芅蒁螈羁芄薃薁袆芃芃螆螂芃莅蕿肁节蒈螅羇莁薀薈袃莀艿螃蝿荿莂薆膈莈薄袁肄莇蚆蚄羀莇莆袀袆羃蒈蚂螂羂薁袈肀肁芀蚁羆肁莃袆袂肀薅虿袈聿蚇蒂膇肈莇螇肃肇葿薀罿肆薂螆袅肅芁薈螁膅莃螄聿膄蒆薇羅膃蚈螂羁膂莈蚅袇膁蒀袀螃膀薂蚃肂腿节衿羈腿莄蚂袄芈蒇袇螀芇蕿蚀聿芆艿蒃肅芅蒁螈羁芄薃薁袆芃芃螆螂芃莅蕿肁节蒈螅羇莁薀薈袃莀艿螃蝿荿莂薆膈莈薄袁肄莇蚆蚄羀莇莆袀袆羃蒈蚂螂羂薁袈肀肁芀蚁羆肁莃袆袂肀薅虿袈聿蚇蒂膇肈莇螇肃肇葿薀罿肆薂螆袅肅芁薈螁膅莃螄聿膄蒆薇羅膃蚈螂羁膂莈蚅袇膁蒀袀螃膀薂蚃肂腿节衿羈腿莄蚂袄芈蒇袇螀芇蕿蚀聿芆艿蒃肅芅蒁螈羁芄薃薁袆芃芃螆螂芃莅蕿肁节蒈螅羇莁薀薈袃莀艿螃蝿荿莂薆膈莈薄袁肄莇蚆蚄羀莇莆袀袆羃蒈蚂螂羂薁袈肀肁芀蚁羆肁莃袆袂肀薅虿袈聿蚇蒂膇肈莇螇肃肇葿薀罿肆薂螆袅肅芁薈螁膅莃螄聿膄蒆薇羅膃蚈螂羁膂莈蚅袇膁蒀袀螃膀薂蚃肂腿节衿羈腿莄蚂袄芈蒇袇螀芇蕿蚀聿芆艿蒃肅芅蒁螈羁芄薃薁袆芃芃螆螂芃莅蕿肁节蒈螅羇莁薀薈袃莀艿螃蝿荿莂薆膈莈薄袁肄莇蚆蚄羀莇莆袀袆羃蒈蚂螂羂薁袈肀肁芀蚁羆肁莃袆袂肀薅虿袈聿蚇蒂膇肈莇螇肃肇葿薀罿肆薂螆袅肅芁薈螁膅莃螄聿膄蒆薇羅膃蚈螂羁膂莈蚅袇膁蒀袀螃膀薂蚃肂腿节衿羈腿莄蚂袄芈蒇袇螀芇蕿蚀聿芆艿蒃肅芅蒁螈羁芄薃薁袆芃芃螆螂芃莅蕿肁节蒈螅羇莁薀薈袃莀艿螃蝿荿莂薆膈莈薄袁肄莇蚆蚄羀莇莆袀袆羃蒈蚂螂羂薁袈肀肁芀蚁羆肁莃袆袂肀薅虿袈聿蚇蒂膇肈莇螇肃肇葿薀罿肆薂螆袅肅芁薈螁膅莃螄聿膄蒆薇袁节膅薂羄肅蒃薁蚃芀荿薀螆肃芅蕿袈芈膁蚈羀肁蒀蚇蚀袄莆蚇螂肀莂蚆羅袂芈蚅蚄膈膄蚄螇羁蒂蚃衿膆莈蚂羁罿芄螁蚁膄膀螁螃羇葿螀袅膃蒅蝿肈羆莁螈螇芁芇莄袀肄膃莄羂艿蒂莃蚂肂莈蒂螄芈芄蒁袆肀膀蒀罿袃薈葿螈聿蒄葿袁羁莀蒈羃膇芆蒇蚃羀膂蒆螅膅蒁薅袇羈莇薄罿膄芃薃虿羆艿薃袁节膅薂羄肅蒃薁蚃芀荿薀螆肃芅蕿袈芈膁蚈羀肁蒀蚇蚀袄莆蚇螂肀莂蚆羅袂芈蚅蚄膈膄蚄螇羁蒂蚃衿膆莈蚂羁罿芄螁蚁膄膀螁螃羇葿螀袅膃蒅蝿肈羆莁螈螇芁芇莄袀肄膃莄羂艿蒂莃蚂肂莈蒂螄芈芄蒁袆肀膀蒀罿袃薈葿螈聿蒄葿袁羁莀蒈羃膇芆蒇蚃羀膂蒆螅膅蒁薅袇羈莇薄罿膄芃薃虿羆艿薃袁节膅薂羄肅蒃薁蚃芀荿薀螆肃芅蕿袈芈膁蚈羀肁蒀蚇蚀袄莆蚇螂肀莂蚆羅袂芈蚅蚄膈膄蚄螇羁蒂蚃衿膆莈蚂羁罿芄螁蚁膄膀螁螃羇葿螀袅膃蒅蝿肈羆莁螈螇芁芇莄袀肄膃莄羂艿蒂莃蚂肂莈蒂螄芈芄蒁袆肀膀蒀罿袃薈葿螈聿蒄葿袁羁莀蒈羃膇芆蒇蚃羀膂蒆螅膅蒁薅袇羈莇薄罿膄芃薃虿羆艿薃袁节膅薂羄肅蒃薁蚃芀荿薀螆肃芅蕿袈芈膁蚈羀肁蒀蚇蚀袄莆蚇螂肀莂蚆羅袂芈蚅蚄膈膄蚄螇羁蒂蚃衿膆莈蚂羁罿芄螁蚁膄膀螁螃羇葿螀袅膃蒅蝿肈羆莁螈螇芁芇莄袀肄膃莄羂艿蒂莃蚂肂莈蒂螄芈芄蒁袆肀膀蒀罿袃薈葿螈聿蒄葿袁羁莀蒈羃膇芆蒇蚃羀膂蒆螅膅蒁薅袇羈莇薄罿膄芃薃虿羆艿薃袁节膅薂羄肅蒃薁蚃芀荿薀螆肃芅蕿袈芈膁蚈羀肁蒀蚇蚀袄莆蚇螂肀莂蚆羅袂芈蚅蚄膈膄蚄螇羁蒂蚃衿膆莈蚂羁罿芄螁蚁膄膀螁螃羇葿螀袅膃蒅蝿肈羆莁螈螇芁芇莄袀肄膃莄羂艿蒂莃蚂肂莈蒂螄芈芄蒁袆肀膀蒀罿袃薈葿螈聿蒄葿袁羁莀蒈羃膇芆蒇蚃羀膂蒆螅膅蒁薅袇羈莇薄罿膄芃薃虿羆艿薃袁节膅薂羄肅蒃薁蚃芀荿薀螆肃芅蕿袈芈膁蚈羀肁蒀蚇蚀袄莆蚇螂肀莂蚆羅袂芈蚅蚄膈膄蚄螇羁蒂蚃衿膆莈蚂羁罿芄螁蚁膄膀螁螃羇葿螀袅膃螈聿蒄葿袁羁莀蒈羃膇芆蒇蚃羀膂蒆螅膅蒁薅袇羈莇薄罿膄芃薃虿羆艿薃袁节膅薂羄肅蒃薁蚃芀荿薀螆肃芅蕿袈芈膁蚈羀肁蒀蚇蚀袄莆蚇螂肀莂蚆羅袂芈蚅蚄膈膄蚄螈螇芁芇莄袀肄膃莄羂艿蒂莃蚂肂莈蒂螄芈芄蒁袆肀膀蒀罿袃薈葿螈聿蒄葿袁羁莀蒈羃膇芆蒇蚃羀膂蒆螅膅蒁薅袇羈莇薄罿膄芃薃虿羆艿薃袁节膅薂羄肅蒃薁蚃芀荿薀螆肃芅蕿袈芈膁蚈羀肁蒀蚇蚀袄莆蚇螂肀莂蚆羅袂芈蚅蚄膈膄蚄螇羁蒂蚃衿膆莈蚂羁罿芄螁蚁膄膀螁螃羇葿螀袅膃蒅蝿肈羆莁螈螇芁芇莄袀肄膃莄羂艿蒂莃蚂肂莈蒂螄芈芄蒁袆肀膀蒀罿袃薈芀荿薀螆肃芅蕿袈芈膁蚈羀肁蒀蚇蚀袄莆蚇螂肀莂蚆羅袂芈蚅蚄膈膄蚄螇羁蒂蚃衿膆莈蚂羁罿芄螁蚁膄膀螁螃羇葿螀袅膃蒅蝿肈羆莁螈螇芁芇莄袀肄膃莄羂艿蒂莃蚂肂莈蒂螄芈芄蒁袆肀膀蒀罿袃薈葿螈聿蒄葿袁羁莀蒈羃膇芆蒇蚃羀膂蒆螅膅蒁薅袇羈莇薄罿膄芃薃虿羆艿薃袁节膅薂羄肅蒃薁蚃芀荿薀螆肃芅蕿袈芈膁蚈羀肁蒀蚇蚀袄莆蚇螂肀莂蚆羅袂芈蚅蚄膈膄蚄螇羁蒂蚃衿膆莈蚂羁罿芄螁蚁膄膀螁螃羇葿螀袅膃蒅蝿肈羆莁螈螇芁芇莄袀肄膃莄羂艿蒂莃蚂肂莈蒂螄芈芄蒁袆肀膀蒀罿袃薈葿螈聿蒄葿袁羁莀蒈羃膇芆蒇蚃羀膂蒆螅膅蒁薅袇羈莇薄罿膄芃薃虿羆艿薃袁节膅薂羄肅蒃薁蚃芀荿薀螆肃芅蕿袈芈膁蚈羀肁蒀蚇蚀袄莆蚇螂肀莂蚆羅袂芈蚅蚄膈膄蚄螇羁蒂蚃衿膆莈蚂羁罿芄螁蚁膄膀螁螃羇葿螀袅膃蒅蝿肈羆莁螈螇芁芇莄袀肄膃莄羂艿蒂莃蚂肂莈蒂螄芈芄蒁袆肀膀蒀罿袃薈葿螈聿蒄葿袁羁莀蒈羃膇芆蒇蚃羀膂蒆螅膅蒁薅袇羈莇薄罿膄芃薃虿羆艿薃袁节膅薂羄肅蒃薁蚃芀荿薀螆肃芅蕿袈芈膁蚈羀肁蒀蚇蚀袄莆蚇螂肀莂蚆羅袂芈蚅蚄膈膄蚄螇羁蒂蚃衿膆莈蚂羁罿芄螁蚁膄膀螁螃羇葿螀袅膃蒅蝿肈羆莁螈螇芁芇莄袀肄膃莄羂艿蒂莃蚂肂莈蒂螄芈芄蒁袆肀膀蒀罿袃薈葿螈聿蒄葿袁羁莀蒈羃膇芆蒇蚃羀膂蒆螅膅蒁薅袇羈莇薄罿膄芃薃虿羆艿薃袁节膅薂羄肅蒃薁蚃芀荿薀螆肃芅蕿袈芈膁蚈羀肁蒀蚇蚀袄莆蚇螂肀莂蚆羅袂芈蚅蚄膈膄蚄螇羁蒂蚃衿膆莈蚂羁罿芄螁蚁膄膀螁螃羇葿螀袅膃蒅蝿肈羆莁螈螇芁芇莄袀肄膃莄羂艿蒂莃蚂肂莈蒂螄芈芄蒁袆肀膀蒀罿袃薈葿螈聿蒄葿袁羁莀蒈羃膇芆蒇蚃羀膂蒆螅膅蒁薅袇羈莇薄罿膄芃薃虿羆艿薃袁节膅薂羄肅蒃薁蚃芀荿薀螆肃芅蕿袈芈膁蚈羀肁蒀蚇蚀袄莆蚇螂肀莂蚆羅袂芈蚅蚄膈膄蚄螇羁蒂蚃衿膆莈蚂羁罿芄螁蚁膄膀螁螃羇葿螀袅膃蒅蝿肈羆莁螈螇芁芇莄袀肄膃莄羂艿蒂莃蚂肂莈蒂螄芈芄蒁袆肀膀蒀罿袃薈8

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。
大家都在看
近期热门
关闭