基于fpga的信号发生器设计

基于fpga的信号发生器设计

ID:950957

大小:1.42 MB

页数:30页

时间:2017-10-06

上传者:U-1863
基于fpga的信号发生器设计_第1页
基于fpga的信号发生器设计_第2页
基于fpga的信号发生器设计_第3页
基于fpga的信号发生器设计_第4页
基于fpga的信号发生器设计_第5页
资源描述:

《基于fpga的信号发生器设计》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

基于FPGA的信号发生器设计报告2013年全国大学生电子设计竞赛基于FPGA的信号发生器设计题目:信号发生器班级:xxxxxxxxxxxx成员:xxx指导老师:xxx2013年7月30日30/30 基于FPGA的信号发生器设计报告目录一、设计要求41.基本要求4二、设计方案5三、系统基本原理63.1函数信号发生器的几种实现方式63.1.1程序控制输出方式73.1.2DMA输出方式73.1.3可变时钟计数器寻址方式73.1.4直接数字频率合成方式83.2频率合成器简介93.2.1频率合成技术概述93.2.2频率合成器主要指标102.3DDS原理113.3.1相位累加器113.3.2波形ROM133.3.3DDS频率合成器优缺点13四、单元模块设计144.1系统框图154.2相位累加器与相位寄存器的设计154.3波形ROM的设计164.4频率控制模块的设计194.5D/A转换器204.6滤波模块22五、系统源程序235.1VerilogHDL源程序:235.2STM32源程序:2730/30 基于FPGA的信号发生器设计报告摘要直接数字频率合成DDS(DirectDigitalSynthesizer)是基于奈奎斯特抽样定理理论和现代器件生产技术发展的一种新的频率合成技术。与第二代基于锁相环频率合成技术相比,DDS具有频率切换时间短、频率分辨率高、相位可连续变化和输出波形灵活等优点,因此,广泛应用于教学科研、通信、雷达、自动控制和电子测量等领域。该技术的常用方法是利用性能优良的DDS专用器件,“搭积木”式设计电路,这种“搭积木”式设计电路方法虽然直观,但DDS专用器件价格较贵,输出波形单一,使用受到一定限制,特别不适合于输出波形多样化的应用场合。随着高速可编程逻辑器件FPGA的发展,电子工程师可根据实际需求,在单一FPGA上开发出性能优良的具有任意波形的DDS系统,极大限度地简化设计过程并提高效率。本文在讨论DDS的基础上,介绍利用FPGA设计的基于DDS的信号发生器。关键字:FPGA;DDS;函数信号发生器;30/30 基于FPGA的信号发生器设计报告一、设计要求1.基本要求(1)信号发生器能产生正弦波、方波和三角波三种周期性波形;(2)将输出信号频率范围为10Hz~10MHz,输出信号频率可分段调节:在10Hz~100kHz范围内步进间隔为10Hz;在100kHz~1MHz范围内步进间隔为100Hz;在1MHz~10MHz范围内步进间隔为1kHz。输出信号频率值可通过键盘进行设置;(3)在50Ω负载条件下,输出正弦波信号的电压峰—峰值Vopp在0~5V范围内可调,调节步进间隔为0.1V,输出信号的电压值可通过键盘进行设置;(4)输出信号波形无明显失真;(5)自制稳压电源。(6)可利用ARM单片机实时显示输出信号的类型、幅度、频率和频率步进值;二、设计方案【方案一】采用分立元件模拟直接合成法。这种方法转换速度快,频率分辨率高,但其转换量程靠手动来实现,不仅体积大难以集成,而且可靠性和准确度很难进一步提高。【方案二】采用MAX038芯片来产生正弦波信号。该集成块的输出波形种类多,频率覆盖范围广。它采用的是RC充放电振荡结构。第一,由于模拟器件元件分散性太大,外接的电阻、电容对参数的影响很大,因而产生的频率稳定度差,只能达到。第二,它的频率控制是通过充放电流的大小来实现。因而要达到步进100HZ,所需的电流变化量非常小,精度要求很高。所以采用MAX038芯片难以实现设计要求。30/30 基于FPGA的信号发生器设计报告【方案三】采用锁相环合成方法。采用该方案设计输出信号的频率可达到超高频甚至微波段,且输出信号频谱纯度较高。由于锁相环技术是一个不间断的负反馈控制过程,所以该系统输出的正弦信号频率可以维持在一个稳定状态,频率稳定度高。但由于它是采取闭环控制的,系统的输出频率改变后,重新达到稳定的时间也比较长。所以锁相环频率合成器要想同时得到较高的频率分辨率和转换率非常困难,频率转换一般要几毫秒的时间[1],同时频率间隔也不可能做得很小。【方案四】采用直接数字合成器(DDS),可用硬件或软件实现。即用累加器按频率要求对相应的相位增量进行累加,再以累加相位值作为地址码,取存放于ROM中的波形数据,经D/A转换,滤波即得到所需波形。以EDA技术为基础,用FPGA实现DDS模型的设计。电路的规模大小和总线宽度可以由设计者根据自己的需要而设定可将波形数据存入FPGA的ROM中。同时外部控制逻辑单元也可在FPGA中实现。方法简单,易于程控,便于集成。用该方法设计产生的信号频率范围广,频率稳定度高,精度高,频率转换速度快。分析以上四种方案,显然第四种方案具有更大的优越性、灵活性。所以采用方案四进行设计。三、系统基本原理3.1函数信号发生器的几种实现方式任意波形发生器的实现方案主要有程序控制输出、DMA输出、可变时钟计数器寻址和直接数字频率合成等多种方式。3.1.1程序控制输出方式30/30 基于FPGA的信号发生器设计报告计算机根据波形的函数表达式,计算出一系列波形数据瞬时值,并定时地逐个传送给D/A转换器,合成出所需要的波形。这种方式具有电路简单、实现方便等特点。但数据输出定时不准确,会影响信号的频率和相位。波形数据输出依靠指令的执行来完成,当需要同时输出多个信号时,相邻信号通道的输出存在时间差,受计算机运行速度的限制,输出信号的频率较低。3.1.2DMA输出方式DMA(directmemoryaecess)方式输出不依赖于程序的执行,由DMA控制器申请总线控制权,通过地址总线给出存储器的地址信号,同时选通存储器和D/A转换器,在两者之间建立直接的数据通道,使存储器相应单元中的波形数据传送给D/A转换器转换后输出信号。DMA方式输出信号,可以大大提高信号的数据输出速率。但也存在一些问题,如波形输出期间,微处理器因为失去了总线控制权,无法进行其他操作。在一个DMA操作中,只能在一个D/A转换器和存储器之间传送数据,无法实现多通道的信号输出。3.1.3可变时钟计数器寻址方式采用可变时钟计数器寻址波形存储器表,该方法是一种传统型任意波形发生器。原理框图如图2-1所示。图2-1可变时钟计数器寻址的任意波形发生器图中的计数器实际上是一个地址发生器,计数器的触发时钟脉冲由一个频率可以控制的频率发生器产生,通过改变频率发生器的频率设置值,实现调整计数器产生的地址变化速率,从而改变输出的任意波形的频率。计数器产生的地址码提供读出存储器中波形数据所需要的地址信号,波形数据依次读出后送至高速D/A转换器,将之转变为模拟量,经低通滤波器后输出所需的波形。可见传统的任意波形发生器采用可变时钟和计数器寻址波形存储器表,此方法的优点是产生的地址连续,输出波形质量高。但其取样时频率较高,对硬件的要求也较高,而且常需多级分频或采用高性能的锁相环,其中分频式的任意波形发生器频率分辨率低,锁相式的任意波形发生器频率切换速度慢。3.1.4直接数字频率合成方式30/30 基于FPGA的信号发生器设计报告DDS(directdigitalsynthesizer)是在一组存储器单元中按照信号波形数据点的输出次序存储了将要输出波形的数据,在控制电路的协调控制下,以一定的速率,周而复始地将波形数据依次发送给D/A转换器转换成相应的模拟信号。由于用硬件电路取代了计算机的控制,信号输出稳定度高。如需更新输出信号,不必改动任何线路和元器件,只需改写存储器中的波形数据即可。更主要的是,可以将微处理器从信号输出的负担中解脱出来。如图2-2为其工作流程图。图2-2直接数字频率合成方式的任意波形发生器基于对函数信号发生器的几种实现方式的了解,本文选择方便调频、调幅的直接频率合成DDS技术来实现函数信号发生器。3.2频率合成器简介3.2.1频率合成技术概述频率合成器是现代电子系统的重要组成部分,它作为电子系统的“心脏”,在通信、雷达、电子对抗、导航、仪器仪表等许多领域中得到广泛的应用。频率合成理论早在30年代就开始提出,迄今为止已有70年的发展历史。所谓的频率合成就是将一个高精度和高稳定度的标准参考频率,经过混频、倍频与分频等对它进行加、减、乘、除的四则运算,最终产生大量的具有同样精确度和稳定度的频率源。频率合成大致经历了三个主要阶段:直接频率合成、采用锁相技术的间接频率合成、直接数字频率合成。30/30 基于FPGA的信号发生器设计报告早期的频率合成方法称为直接频率合成。它利用混频器、倍频器、分频器与带通滤波器来完成四则运算。直接频率合成能实现快速频率变换、几乎任意高的频率分辨力、低相位噪声及很高的输出频率。缺点是直接合成由于使用了大量硬件设备如混频器、倍频器、分频器、带通滤波器等,因而体积大、造价高。此外寄生输出大,这是由于带通滤波器无法将混频器产生的无用频率分量滤尽。而且频率范围越宽,寄生分量也就越多。而这些足以抵消其所有优点。直接频率合成技术的固有缺点在间接频率合成技术中得到了很好的改善。间接频率合成又称锁相频率合成,采用锁相环路(PLL)技术对频率进行四则运算,产生所需频率。锁相环路(PLL)是一个能够跟踪输入信号相位的闭环自动控制系统。早在1932年DeBellescize提出的同步检波理论中首次公布发表了对锁相环路的描述。但是由于其复杂的技术原理直到1947年锁相环路才第一次用于电视接收机水平和垂直的同步扫描。它的跟踪性能及低噪声性能得到人们的重视得到迅速发展。它在无线电技术的各个领域得到了很广泛的应用。但是锁相频率合成器也存在一些问题,以致难于满足合成器多方面的性能要求,主要表现在高频率分辨率与快速转换频率之间的矛盾。直接数字频率合成即DDS,它是目前最新的产生频率源的频率合成技术。这种技术是用数字计算机和数模变换器来产生信号完成直接数字频率合成的办法,其是目前最新的产生频率源的频率合成技术。这种技术是用数字计算机和数模变换器来产生信号,完成直接数字频率合成的办法或者是用计算机求解一个数字递推关系式,或者是查阅表格上所存储的波形值。目前用的最多的是查表法。这种合成技术具有相对带宽很宽,频率切换时间短(ns级),分辨率高(uHz),相位变化连续,低相位噪声和低漂移,数字调制功能,可编程及数字化易于集成,易于调整等一系列性能指标远远超过了传统频率合成技术所能达到的水平,为各种电子系统提供了优于模拟信号源性能的高质量的频率源。目前它正朝着系统化,小型化、模块化和工程化的方向发展,性能越来越好,使用越来越方便,是目前应用最广泛的频率合成器之一。3.2.2频率合成器主要指标30/30 基于FPGA的信号发生器设计报告信号源的一个重要指标就是能输出频率准确可调的所需信号。一般传统的信号发生器采用谐振法,即用具有频率选择性的正反馈回路来产生正弦振荡,获得所需频率信号,但难以产生大量的具有同一稳定度和准确度的不同频率。利用频率合成技术制成的信号发生器,通常被称为频率合成器。频率合成器既要产生所需要的频率,又要获得纯净的信号。频率合成器的主要指标如下:1.输出频率范围(fmin~fmax):指的是输出的最小频率和最大频率之间的变化范围。2.频率稳定度:指的是输出频率在一定时间间隔内和标准频率偏差的数值,它分长期、短期和瞬时稳定度三种。3.频率分辨率:指的是输出频率的最小间隔。4.频率转换时间:指的是输出由一种频率转换成另一频率的时间。5.频谱纯度:频谱纯度以杂散分量和相位噪声来衡量,杂散分量为谐波分量和非谐波分量两种,主要由频率合成过程中的非线性失真产生,相位噪声是衡量输出信号相位抖动大小的参数。6.调制性能:指的是频率合成器是否具有调幅(AM)、调频(FM)、调相(PM)等功能。2.3DDS原理DDS是一种全数字的频率合成方法,其基本结构主要由相位累加器、波形ROM、D/A转换器和低通滤波器四个部分构成,如图2-3所示。图2-3DDS结构原理图3.3.1相位累加器30/30 基于FPGA的信号发生器设计报告相位累加器由一个N位的加法器和一个N位的寄存器构成,通过把上一个时钟的累加结果反馈回加法器的输入端而实现累加功能。从而使输出结果每一个时钟周期递增K。这里N为相位累加器的字长,K称为频率控制字。相位累加器结构如图2-4所示。图2-4相位累加器结构其中,相位累加器字长为N,DDS控制时钟频率为fc,频率控制字为K。DDS直接从“相位”的概念出发进行频率合成。相位累加器由加法器与累加寄存器级联构成。每来一个时钟脉冲fc,加法器将频率控制字K与累加寄存器输出的累加相位数据相加,把相加后的结果送至累加寄存器的数据输入端。累加寄存器将加法器在上一个时钟脉冲作用后所产生的新相位数据反馈到加法器的输入端,以使加法器在下一个时钟脉冲的作用下继续与频率控制字相加。这样,相位累加器在每一个时钟脉冲输入时,把频率控制字累加一次,相位累加器输出的数据就是合成信号的相位,相位累加器的溢出频率就是DDS输出的信号频率。DDS的核心就是相位累加器,利用它来产生信号递增的相位信息,整个DDS系统在统一的参考时钟下工作,每个时钟周期相位累加器作加法运算一次。加法运算的步进越大,相应合成的相位值变化越快,输出信号的频率也就越高。对于幅值归一化的正弦波信号的瞬时幅值完全由瞬时相位来决定,因为,所以相位变化越快,信号的频率越高。相位累加器利用Nbit二进制加法器的溢出特性来模拟理想正弦波的相位周期。相位累加器输出和ROM输出可分别理解为理想正弦波相位信号和时域波形的时钟抽样。假设,相位累加器字长为N,DDS控制时钟频率为,时钟周期为,频率控制字为K。系统工作时,累加器的单个时钟周期的增量值为,相应角频率,所以DDS的输出频率为,DDS输出频率步进间隔为。因DDS输出信号是对正弦波的抽样合成的,所以应满足Niqust定理要求,即,也就是要求30/30 基于FPGA的信号发生器设计报告,根据频谱性能要求,一般取。当DDS相位累加器采用32位字长,时钟频率为50MHz时,它的输出频率间隔可达到。可见,DDS基于累加器相位控制方式给它带来了微步进的优势。3.3.2波形ROMROM表完成将累加器相位信息转换为幅值信息的功能。再由D/A完成数字抽样信号到连续时域信号的转换,D/A输出的台阶信号再经低通滤波器平滑可以得到精确的连续正弦信号波形。波形ROM示意图如图2-5所示。图2-5波形ROM示意图用相位累加器输出的数据作为波形存储器的相位取样地址,这样就可以把存储在波形存储器内的波形抽样值(二进制编码)经查找表查出,完成相位到幅值转换。波形存储器的输出送到D/A转换器,D/A转换器将数字量形式的波形幅值转换成所要求合成频率的模拟量形式信号。低通滤波器用于滤除不需要的取样分量,以便输出频谱纯净的正弦波信号。3.3.3DDS频率合成器优缺点DDS频率合成器具有以下优点:(1)频率分辨率高,输出频点多,可达2N个频点(假设DDS相位累加器的字长是N);(2)频率切换速度快,可达us量级;(3)频率切换时相位连续;(4)可以输出宽带正交信号;(5)输出相位噪声低,对参考频率源的相位噪声有改善作用;(6)可以产生任意波形;(7)全数字化实现,便于集成,体积小,重量轻。30/30 基于FPGA的信号发生器设计报告但DDS也有比较明显的缺点:(l)输出信号的杂散比较大;(2)输出信号的带宽受到限制。DDS输出杂散比较大,这是由于信号合成过程中的相位截断误差、D/A转换器的截断误差和D/A转换器的非线性造成的。当然随着技术的发展,这些问题正在逐步得到解决。如通过增加波形ROM的长度以减小相位截断误差,通过增加波形ROM的字长和D/A转换器的精度以减小D/A量化误差等。在比较新的DDS芯片中普遍都采用了12bit的D/A转换器。当然一味靠增加波形ROM的深度和字长的方法来减小杂散对性能的提高总是有限的。已有研究在对DDS输出的频谱做了大量的分析后,总结出了误差的领域分布规律建立了误差模型,在分析DDS频谱特性的基础上又提出了一些降低杂散功率的方法。可以通过采样的方法降低带内误差功率,可以通过随机抖动法提高无杂散动态范围,在D/A转换器的低位上加扰打破DDS输出的周期性,从而把周期性的杂散分量打散使之均匀化。四、单元模块设计本系统由FPGA、stm32控制模块、键盘、LCD液晶显示屏、DAC输出电路和稳压电源电路构成。用FPGA实现直接数字频率合成技术(DDS),产生正弦波、方波、三角波。采用stm32控制直接数字频率合成器(DDS)的工作、按键及显示。整个系统结构紧凑,电路简单,功能强大,可扩展性强4.1系统框图FPGA存储数据及DDS实现DAC数字波形转换得到模拟波形信号调理,滤波波形信息波形数据波形输出程控增益,实现电压伏值控制30/30 基于FPGA的信号发生器设计报告4.2相位累加器与相位寄存器的设计N位累加高W位至波形存储器全加器寄存器(W为存储器地)址线宽度)频率字输入Clk相位累加器与相位寄存器主要完成累加,实现输出波形频率可调功能。利用QuartusII可编程逻辑器件系统开发工具进行设计。首先,打开QuartusII软件,新建一个工程管理文件,然后在此工程管理文件中新建一个VerilogHDL源程序文件,并用硬件描述语言VerilogHDL编写程序实现其功能。在设计过程中,可在一个模块中描述。相位累加器流程图如图所示开始时钟上升沿到?NOYES相位累加累加值寄存高W位输出结束相位累加器流程图30/30 基于FPGA的信号发生器设计报告4.3波形ROM的设计这个模块是一个相对简单的模块。首先要确定波形ROM的地址线位数和数据的字长,根据噪声功率的角度看波形ROM的地址线位数应该等于或略大于字长。由于设计选择的DAC位数为10,这样ROM的字长很明显该和DAC的字长相一致。而地址线的位数同样确定为8位。波形存储器利用相位累加器输出的高8位作为地址线来对其进行寻址,最后输出该相位对应的二进制幅值。举例正弦数据的产生可采用如下办法:在MATLAB中编辑程序:>>cleartic;t=2*pi/256t=[0:t:2*pi];y=128*sin(t)+128;round(y);t=0.0245ans将得出的结果转化为8位的二进制数据,起幅值对应在00000000-11111111区间内。最后利用得到的二进制数据用VHDL编写程序实现波形ROM的设计。30/30 基于FPGA的信号发生器设计报告30/30 基于FPGA的信号发生器设计报告4.4频率控制模块的设计设计要求在10Hz~100kHz范围内步进间隔为10Hz;在100kHz~1MHz范围内步进间隔为100Hz;在1MHz~10MHz范围内步进间隔为1kHz。输出信号频率值可通过键盘进行设置。由于频率范围很宽,要求改变频率时如果跨度较大则需要很长的时间通过频率步进端来改变输出频率。因此在实际频率控制模块中,使用四个按键实现直接输入所需频率。实现这个设计的方法也很简单,由第公式可以看出,当确定后与K成正比关系。计算出输出频率时K的值,则这个K的值就是频率字步进1HZ时频率字K的增量,记为。要成倍地增加步进频率,则只需以相同的倍数增加的值。开始频率字赋初值有键按下?NYY复位键?N频率增操作?NY频率减操作增加对应值减少对应值频率字输出结束30/30 基于FPGA的信号发生器设计报告频率控制模块流程图4.5D/A转换器实现数字量转化为模拟信号的转换电路称为D/A转换器(DAC)。D/A转换器是把数字量转换成模拟量的线性电路器件,已做成集成芯片。由于实现这种转换的原理和电路结构及工艺技术有所不同,因而出现各种各样的D/A转换器。目前,国外市场已有上百种产品出售,他们在转换速度、转换精度、分辨率以及使用价值上都各具特色。衡量一个D/A转换器的性能的主要参数有:(1)分辨率:是指D/A转换器能够转换的二进制数的位数,位数多分辨率也就越高。(2)转换时间:指数字量输入到完成转换,输出达到最终值并稳定为止所需的时间。电流型D/A转换较快,一般在几ns到几百ns之间。电压型D/A转换较慢,取决于运算放大器的响应时间。(3)精度:指D/A转换器实际输出电压与理论值之间的误差,一般采用数字量的最低有效位作为衡量单位。(4)线性度:当数字量变化时,D/A转换器输出的模拟量按比例关系变化的程度。理想的D/A转换器是线性的,但是实际上是有误差的,模拟输出偏离理想输出的最大值称为线性误差。目前,D/A转换器芯片种类较多,对于一般的使用者而言,只需掌握DAC芯片性能及其与计算机之间接口的基本要求,就可根据应用系统的要求合理选用DAC芯片,并配置适当的接口电路。设计要求输出最高频率为10MHZ,在选择D/A转换器的时需要充分考虑到D/A转换器的转换速率,在本次设计中选择了AD9760芯片,它是一个高速D/A转换COMS芯片,耗电小,同时考虑到实验室的焊接工具的现状,是否完全兼容TTL电平标准,它有DIP双列直插式封装的型号。同时根据设计的不同,这种芯片有速度等级为40MHz,因为它的高速处理性能,它被广泛应用于视频、图像等对数据实时处理和吞吐量比较大的领域。同时作为它的功能之一就是用于DDS的高速数模转换。30/30 基于FPGA的信号发生器设计报告D/A模块原理图输出的电压信号跟输出的数字量的联系:AD9760芯片的功能引脚对应的实际引脚参考图:30/30 基于FPGA的信号发生器设计报告4.6滤波模块在由数字信号至模拟信号这一过程转换好以后,得出的信号仍然是在时间上离散的点,需要将其用低通滤波器进行平滑处理,滤除高次频率的杂波,得到平滑标准的正弦波。由这次设计的正弦波频率范围可知。所要求的低通滤波器的截止频率为11MHz,这次用到的为LC低通滤波器(电路图参考下图)。五、系统源程序5.1VerilogHDL源程序:moduleDDS1(//inputsys_clk,30/30 基于FPGA的信号发生器设计报告sys_rst_n,fword,//outputda_clk,da_data,key_1,key_2);//inputportsinputsys_clk;//systemclock;inputsys_rst_n;//systemreset,lowisactive;input[WIDTH1-5:0]fword;//输入频率字inputkey_1;inputkey_2;//outputportsoutput[SIZE-1:0]da_data;//DA数据output[2:0]da_clk;//DA时钟//regdefinereg[WIDTH1-5:0]fword_r;reg[WIDTH1-1:0]freq_count;reg[WIDTH2-1:0]rom_addr;30/30 基于FPGA的信号发生器设计报告//wiredefine//parameterdefineparameterWIDTH1=32;parameterWIDTH2=10;parameterSIZE=10;//parameterfword=86000;//取值860时输出频率10hz/************************************************************MainProgram**********************************************************/assignda_clk=c0;always@(posedgec0ornegedgesys_rst_n)beginif(sys_rst_n==1'b0)beginfword_r<=32'h0000;endelsefword_r<=fword;endalways@(posedgec0ornegedgesys_rst_n)beginif(sys_rst_n==1'b0)beginfreq_count<=32'h0000;endelse30/30 基于FPGA的信号发生器设计报告freq_count<=freq_count+fword_r;//频率控制器endalways@(posedgec0ornegedgesys_rst_n)beginif(sys_rst_n==1'b0)beginrom_addr<=32'h0000;endelseif(key_1==1'b1)rom_addr<=freq_count[31:24];//正弦波elseif(key_1==1'b0)beginif(key_2==1'b1)rom_addr<=freq_count[31:24]+256;//三角波elseif(key_2==1'b0)rom_addr<=freq_count[31:24]+512;//方波endendROMROM_inst(.address(rom_addr),.clock(sys_clk),.q(da_data));PLLPLL_UO(.areset(~sys_rst_n),30/30 基于FPGA的信号发生器设计报告.inclk0(sys_clk),.c0(c0),.locked(locked));Endmodule5.2STM32源程序:#include"stm32f10x.h"#include"lcd.h"#include"delay.h"#include"led.h"#include"key.h"#include"sys.h"#include"usart.h"#include"24cxx.h"#include"math.h"#include"usmart.h"#include"dds.h"#include"dac.h"#include"stm32f10x_dac.h"//信号源程序//byLAN//2013.7.27//最后修改时间7月30日30/30 基于FPGA的信号发生器设计报告constu8TEXT_Buffer[]={"87654321"};#defineSIZEsizeof(TEXT_Buffer)intmain(void){/*这个数组所体现的是GUI中zifu8x16.h中的数字部分它对应的位置所表示的数字点阵是0123456789*/u8asc[10]={48,49,50,51,52,53,54,55,56,57};u8key,boxing;u8wei=0;//频率的位,共8位0-7u8xwei;//用来闪烁显示的位doublebwei;//加减10的次幂的位//u8datatemp[SIZE];u32fre=1001;//频率初值为10MdoubleK=17.179869184;doublesenddata;//初始化一些函数delay_init();//延时函数初始化LED_Init();//LED端口初始化AT24CXX_Init();//IIC初始化KEY_Init();NVIC_Configuration();30/30 基于FPGA的信号发生器设计报告//设置NVIC中断分组2:2位抢占优先级,2位响应优先级dds_init();Dac1_Init();//DAC初始化DAC_SetChannel1Data(DAC_Align_12b_R,0);//初始值为0ili9320_Initializtion();//液晶屏初始化ili9320_BackLight(1);//背光常开ili9320_Clear(GBLUE);POINT_COLOR=BLACK;//设置字体为黑色BACK_COLOR=YELLOW;//设置背景为黄色LCD_ShowString(0,0,200,16,16,"ByLAN2013/7/29");LCD_ShowString(222,50,200,16,16,"Hz");LCD_ShowString(30,50,200,16,16,"Frequency:");//频率分8位显示ili9320_PutChar(150,50,asc[fre/10000000],BLACK,YELLOW);ili9320_PutChar(158,50,asc[fre/1000000%10],BLACK,YELLOW);ili9320_PutChar(166,50,asc[fre/100000%10],BLACK,YELLOW);ili9320_PutChar(174,50,asc[fre/10000%10],BLACK,YELLOW);ili9320_PutChar(182,50,asc[fre/1000%10],BLACK,YELLOW);ili9320_PutChar(190,50,asc[fre/100%10],BLACK,YELLOW);ili9320_PutChar(198,50,asc[fre/10%10],BLACK,YELLOW);ili9320_PutChar(206,50,asc[fre%10],BLACK,YELLOW);30/30 基于FPGA的信号发生器设计报告LCD_ShowString(30,90,200,16,16,"waveform:");while(1){bwei=pow((double)10,(double)wei);xwei=fre/(u32)bwei%10;DAC_SetChannel1Data(DAC_Align_12b_R,620);//设置DAC值ili9320_PutChar(150,30,asc[(u32)bwei/10000000],BLACK,YELLOW);ili9320_PutChar(158,30,asc[(u32)bwei/1000000%10],BLACK,YELLOW);ili9320_PutChar(166,30,asc[(u32)bwei/100000%10],BLACK,YELLOW);ili9320_PutChar(174,30,asc[(u32)bwei/10000%10],BLACK,YELLOW);ili9320_PutChar(182,30,asc[(u32)bwei/1000%10],BLACK,YELLOW);ili9320_PutChar(190,30,asc[(u32)bwei/100%10],BLACK,YELLOW);ili9320_PutChar(198,30,asc[(u32)bwei/10%10],BLACK,YELLOW);ili9320_PutChar(206,30,asc[(u32)bwei%10],BLACK,YELLOW);senddata=K*fre;30/30 基于FPGA的信号发生器设计报告dds_change((u32)senddata);//波形扫描函数//---------------------------------------------------------boxing=boxing_scan();if(boxing){switch(boxing){case1:LCD_ShowString(150,90,200,16,16,"square");break;case2:LCD_ShowString(150,90,200,16,16,"triangular");break;case3:LCD_ShowString(150,90,200,16,16,"error");break;case4:LCD_ShowString(150,90,200,16,16,"sin");break;}}30/30 基于FPGA的信号发生器设计报告//频率控制闪烁函数delay_ms(300);LCD_ShowString(206-wei*8,50,200,16,16,"_");delay_ms(300);//闪烁那个位//频率分8位显示ili9320_PutChar(150,50,asc[fre/10000000],BLACK,YELLOW);ili9320_PutChar(158,50,asc[fre/1000000%10],BLACK,YELLOW)ili9320_PutChar(166,50,asc[fre/100000%10],BLACK,YELLOW);ili9320_PutChar(174,50,asc[fre/10000%10],BLACK,YELLOW);ili9320_PutChar(182,50,asc[fre/1000%10],BLACK,YELLOW);ili9320_PutChar(190,50,asc[fre/100%10],BLACK,YELLOW);ili9320_PutChar(198,50,asc[fre/10%10],BLACK,YELLOW);ili9320_PutChar(206,50,asc[fre%10],BLACK,YELLOW);//按键扫描函数key=KEY_Scan(0);if(key){switch(key){case1:wei++;30/30 基于FPGA的信号发生器设计报告if(wei==8)wei=0;break;case2:wei--;if(wei>9)wei=7;break;case3:fre=fre+bwei;if(fre>10000000)fre=1;break;case4:fre=fre-bwei;if(fre<1)fre=10000000;break;}}senddata=fre*K;30/30 基于FPGA的信号发生器设计报告dds_change((u32)senddata);}}30/30

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

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

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