信号发生器又叫做函数信号发生器,其主要作用是用于实验信号源。关键功能是用来产生各种各样的频率、波形和输出电平信号。在电子电路领域的作用愈发重要,特别是在大型集成电路领域被广泛应用的当下,信号发生器成了现如今很多电子电路实验设计中最常用的仪器之一。 信号发生器又称之为信号源或者振荡器,在生产实践和电子科技领域发挥着极其重要的作用。上世纪末,DDS技术出现,这种运用数字化方法经多种工作来产生所需频率信号的电路设计方案,不仅能够输出各种各样目标波形,还能产生各种可以任意调节的波形信号。在这种技术条件下设计的信号发生器具有以下几个优点。例如:容易控制、高频率分辨率、相位连续、切换速度十分迅速、输出相位噪声低和可以产生任意波形。 本课题设计的信号发生器首先介绍了直接数字频率合成技术的发展历史,分析了DDS技术的基本理论和FPGA的技术难点,采用AT89S52芯片来完成本次系统的设计。还介绍了信号发生器的整体设计,其中硬件模块包括电源、人机交互、单片机控制、AT89S52信号发生模块以及信号处理模块等。软件部分则包含了软件的整体设计,AT89S52频率控制字设计、按键扫描模块以及显示模块。通过各个模块的相互配合,最终能够产生正弦波、矩形波、三角波、锯齿波,输出信号的频率和幅度方便可调,频率、幅值能够用LCD予以显示,能够设置直流电平偏移量,具有TTL输出功能,让整个系统的设计达到预期效果,最后对整个论文进行总结修改。
目 录
摘 要 I Abstract II 目 录 III 1 绪论 - 1 - 1.1 选题背景 - 1 - 1.2 频率合成技术发展过程 - 1 - 1.3 DDS技术的发展概述 - 2 - 1.4 本文所做的工作 - 3 - 2 信号发生器的方案设计 - 5 - 2.1 设计需求和方案的选择 - 5 - 2.2 系统硬件选择 - 6 - 2.2.1 单片机的选择 - 6 - 2.2.2 FPGA的选型 - 7 - 2.2.3 数模转换模型的选择 - 8 - 2.3 AT89S52的功能和结构 - 9 - 2.4 系统软件的总体设计 - 10 - 3 系统硬件设计 - 11 - 3.1 DDS的原理以及结构 - 11 - 3.1.1 DDS的原理 - 11 - 3.1.2 DDS的结构 - 12 - 3.2 FPGA的相关技术 - 13 - 3.2.1 FPGA的基本原理 - 13 - 3.2.2 FPGA的开发流程 - 14 - 3.2.3 原理图设计输入方法的介绍 - 15 - 3.2.4 开发工具介绍 - 16 - 3.3 DDS波形合成 - 18 - 3.3.1 时钟模块介绍 - 18 - 3.3.2 命令接收模块介绍 - 22 - 3.3.3 相位累加器介绍 - 25 - 3.3.4 波形ROM模块 - 26 - 3.3.5 DDS处理模块 - 26 - 3.3.6 DA转换电路设计 - 27 - 3.4 人机交互部分的硬件设计 - 29 - 4 系统软件设计 - 32 - 4.1 C51简介 - 32 - 4.2 控制软件的设计 - 32 - 4.2.1总体控制模块 - 32 - 4.2.2 键盘扫描和处理模块 - 33 - 4.2.3 液晶显示模块 - 34 - 5 系统调试与性能测试 - 36 - 5.1电路调试 - 36 - 5.1.1 单片机调试 - 36 - 5.1.2 键盘和LCD的调试 - 36 - 5.1.3 FPGA的调试 - 36 - 5.1.4 D/A转换模块的调试 - 36 - 5.2 系统测试 - 37 - 5.2.1 输出波形的测试 - 37 - 5.2.2 信号频率的测量 - 38 - 5.2.3 信号幅度测量 - 39 - 5.2.4 频率稳定度测量 - 40 - 5.3 误差分析 - 40 - 结 论 - 42 - 致 谢 - 43 - 参 考 文 献 - 44 -
1 绪论
1.1 选题背景基准信号通常把信号源运用于电子与通信系统中。函数信号发生器、脉冲信号发生器、任意波形发生器等都是信号源包括的种类。 信号源的技术指标可以在一定层面上决定系统性能的好坏,由于信号源的应用愈发广泛,使得对高性能信号源的需求同样越来越高,例如频带范围宽,频率切换速度快,与此同时对于成本、体积、信号源功率大小的要求也随之增高。在DDS技术没出来之前,采用的振荡器的信号源产生的波形种类比较少,不仅准确度、灵活性差,而且精度也不高。 1.2 频率合成技术发展过程二十世纪上叶,频率合成技术诞生,迄今为止已经有近七十年的历史。频率合成器在电子设备领域扮演着十分重要的角色,可以说直接决定了系统性能的优良,频率合成器在电子对抗和雷达通信,以及广播电视等多个领域得到了极其广泛的应用。频率合成技术是把一个或几个高精度、高密度的标注频率经过一系列转换,产生出稳定度,精度一致的离散频率的电子技术。现如今电子技术发展迅速,以致于对频率合成器的的各方面要求也随着增高,尤其是以前的合成器频率精度低、分辨低、带宽窄、波形种类少,不能很好的达到设计要求,有需要就有提高,这也是该项技术发展速度快的原因之一。 频率合成器是采用具备高精度、高稳定度、相位噪声比较低的频率源作为初始信息。采用电子技术领域上的混频、倍频或分频等技术手段来处理频率,再对它进行数学领域上的加、减、乘、除运算,进而产生所生成的每一种频率都能有同样的稳定性和准确性。 研究频率合成理论的发展历史及顺序,可以将其大致分为三个主要阶段,分别是直接模拟频率合成技术,间接频率合成技术和直接数字频率合成技术。 直接模拟频率合成技术是出现的比较早的一种频率合成技术,该频率合成的方法大致上是用单个或者多个标准频率源,通过谐波发生器产生大量的谐波,然后在用混频、分频、倍频及滤波等技术手段来处理离散的频率。这种技术的优点是转换时间短、相噪小。不过这种技术手段由于采用了大量混频、分频、倍频和滤波等技术,就不可避免的让合成器的结构变得复杂,除此还有体积大、成本大、功耗大等等缺点。 间接频率合成技术又称锁相式频率合成,是为了解决上述问题而产生的第二代频率合成技术。把锁相环直接固化到其中,不一样的频率是运用了锁相环路的窄带跟踪特性而获得的。最初出现的事模拟锁相环,之后又出现了数字式锁相环,和数模混合锁相环。锁相环路可以说是一个闭环的自动化控制系统,具有自动跟踪输入信号相位的功能。之所以其窄带跟踪特性优良,正是因为它把外部输入的参考信号合理运用进而控制环路内部振荡信号的频率和相位。锁相频率合成的优点结构简单以及集成简单,不仅如此,频谱也十分纯净,挑选需要的频率信号相对是比较简单的,而且可以抵制杂散、降低集成难度。但是也存在一些不好的地方,比如说:锁定时间很长,进而导致了频率转换时间也较长,在高分辨率和快速转换之间存在一定的相悖,所以所向频率合成通常只用在步进大的频率合成仪器里。 随着这些年电子技术的向前推进,尤其是出现了大规模集成电路,以及数字信号处理领域技术的飞速提升。20世纪70年代,有人第一次发表了关于直接数字频率合成的想法,这也成为了当下最尖端的频率合成技术。之所以是最尖端的技术,是因为它不同以往,让在它之前的两种方法的限制彻彻底底的消失。该技术把计算机数字处理方面的知识渗透到频率合成层面,成就了全新的数字处理方式,也预示着第三次频率合成技术的革命。通过DDS技术生产的信号源能让全数字化控制电路精确的控制DDS输出波形的频率、幅度相位等,这样生成的系统十分稳定、可靠。正是因为这些优秀的特性使得该技术在近年间,发展的十分迅速,也被越来越普遍的应用于各个领域。但正是由于具有这些优点,也让DDS技术的缺陷被暴露无遗,就像输出的信号频率不够纯净,杂散大和带宽较小等缺点。因此寻找新的发展方向成了DDS领域最紧要的任务。 1.3 DDS技术的发展概述上世纪中叶DDS技术的问世使得频率合成技术的有了第二次大的飞跃,DDS技术实际上是用数字计算机配合数模转换从而产生信号,此项技术的应运而生也掀开了频率合成技术发展的新篇章,预示着频率合成技术来到了第三代。DDS技术集成度高、芯片大小适中、稳定性还、分辨率高、价格实惠等优点让其的受众面变得越来越广。但同时带宽比较小,这使得在合成的过程中产生的一系列无法避免的误差,让信号的杂散比较大的缺点也被暴露无疑。但也有解决办法,就是通过加大存储器的字长来缩小相位截断产生的误差,进而能在一定程度上减小杂散。除此缩小字长之外,还可以通过加大D/A转换器的精度来减小量化误差。需要着重说明的一点,目前大部分芯片都使用14位D/A转换器。 由于DDS输出信号的频率低,就出现了一些新的技术,比如可以采用DDS技术加上PLL相辅相成共同工作的手段,优点是能大幅度提升频率分辨率,还能让频谱变得更加纯净。相比来说。另一种采用混频滤波的方法使用率就不太高。 AD、摩托罗拉和美国国家半导体公司,富士通和飞利浦等公司公司都是生产DDS芯片的厂家。目前在售的DDS芯片种类不但非常而且十分齐全,其中 AD9850、AD9851芯片等都是当前使用率比较高的芯片,它们有共同的特点就是内部都包含频率控制字、相位累加器、正弦查找表、数模转换器等决定系统性能的关键器件。除了以上介绍的这些特点,在现在的技术条件下生产制造出的DDS芯片还具有输出信号杂散比较小,输出频率范围宽,售价便宜,高性价比高等多个优点,以致于单片DDS芯片在频率合成领域被普遍认可并得到大规模应用。 在如此多的性能出色的DDS芯片中,AD公司的所制造的AD9854芯片的性能优越性就显得格外突出。一方面,其相位累加器位数已经增加到48位量级,从而也使得它的频率分辨率达到了9个数量级,进而频率切换速度得到很大提升,达到了ns量级。另一方面,DDS芯片从以前只能单一输出正弦信号到现在不但可以输出正弦信号,还可以输出多种信号。这样一来,输出信号种类单一的弱点也迎刃而解。操纵手段变得更加灵活,由串行控制与总线控制取代了之前的并行控制。不得不提,在DDS与数字信号处理技术结合使用之后,让DDS芯产生出的信号源更加数字化、实用性更好。DDS技术除了在涉及雷达的领域实现多点调频频率源,也实现了多种多样的数字调频。可以看出,DDS技术的研究是一项十分有意义有发展前景的使命工作,有巨大的潜力,也会带来巨大的经济效益和社会效益。 尽管DDS技术的应用已经非常广泛,市面上高性能的信号发生器也比较多,但是可供选择的能产生多种信号输出且价格便宜的信号发生器其实并不多。特别是在校电类专业学生平时实验过程中,经常要用到信号发生器,传统仪器难以满足需求。所以,研发一款低成本、高性能的数字宽频信号发生器就很有意义。正是如此,本文的主要内容就是如何合理地基于DDS技术研发出一款结构简单、易操作、性能稳、价格低的信号发生器。 1.4 本文所做的工作本文主要介绍了DDS技术的基本原理和对直接数字频率合成技术做了深入的研究,并在此技术上用单片机和FPGA设计并制作了一种结构简单、实用的搞稳定度信号发生器,主要工作包括了以下内容: (1)总体方案设计: 对DDS信号发生器的信号的产生和控制部分,人机交互部分以及信号处理部分进行研究分析,分成三个部分进行设计。 (2)硬件部分设计: 完成硬件系统的总体设计,对实现电路进行分析测试以达到预期目标 (3)软件部分设计 软件系统的具体实现,对系统按功能模块进行介绍 (4)系统测试 分别对系统进行功能测试、调试步骤和系统的具体操纵方法进行阐述,对不足之处进行解释说明。
2 信号发生器的方案设计 2.1 设计需求和方案的选择本课题为设计一款基于DDS技术的信号发生器,目的是通过系统的控制面板来实现让其输出正弦波、方波、三角波、锯齿波等目标信号,同时实现对频率和幅度的任意控制。而该款信号发生器的主要性能指标以及功能要求如下: 1. 频率范围:0.1HZ—20MHZ 2. 频率分辨率:40mHz 3. 幅度范围:20mV p-p—20V p-p(高阻,频率<1MHz) 4. 偏移范围:±10V(高阻) 分辨率:20mV 5. 幅值分辨率10 bit 6. 矩形波占空比调整范围:0-100% 7. 输出阻抗:50Ω 8. TTL输出:方波,TTL兼容,低电平<0.3V 高电平>4V 9. 工作电源:AC220V/50HZ 10. 输出目标波形:正弦波、方波、锯齿波、三角波 根据系统要求,有两个比较可行的方案可供选择: 1. 采用已有的AD9850数字频率合成芯片,让其数据接口来实现频率调节,其频率的范围和步进精度都比较高。由于受到芯片功能的限制使得它只能输出特定的波形,在完成设计后,不能进一步扩展系统的功能,使用率也会变低。 2. 用单片机实现人机交互操作界面的同时,通过FPGA技术手段来做出DDS软件系统。从理论知识方面上讲这种方法的灵活性是毋庸置疑的,不但可以输出和改变任意波形,而且你那个方便调节输出频率以及幅度,对之后产品的更新换代很有优势。 由于本系统对信号精度要求较高,通过上面的分析,第二种方案更好,所以决定采用第二种方案。 频率合成系统设计中的关键是DDS芯片的选择,加之DDS芯片的性价比越来越高,本系统由单片机AT95S52、Xilinx公司的FPGA芯片为核心,来实现DDS数据处理,而任意波形的输出由D/A转换器完成。如下图2.1所示: file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wps683E.tmp.jpg 图2.1 系统硬件结构框
此系统由两大部分组成分别为控制电路和数据处理电路。控制电路包括AD公司的AT98S52单片机以及一些外部的控制电路,单片机完成了对完整系统的统一调度和操控,再让键盘来写入初始信号的频率、幅度以及最初的相位值,然后在经过单片机加工后转变成控制字符在传输到FPGA芯片进行DDS波形的加工改造处理,先让前面的D/A转换器收入波形幅度参数,输出信号变成了输入参考电压送入后一个D/A转换器,从而完成对输出波形的控制;完成上述工作流程后再将波形数据发送到后一个D/A转换器,以实现任意波形的输出。 2.2 系统硬件选择2.2.1 单片机的选择 通过之前的介绍可以看出,接收键盘输入、发送数据以及将控制命令和参数发送给FPGA是单片机的主要工作,而且硬件电路相对简单稳定。这些相对来说不太复杂的操作并不需要CPU具备优异的处理能力,所以选用一款大众化,能实现基本功能的廉价CPU就可以完成系统设计任务。 Ateml公司研发的AT98S52单片机是一款能耗少、性能优异的8位微处理器,其中系统可编程Flash存储器有8K,不仅价格低廉,而且性价比高,并且能与多种80C51产品引脚和指令集完全兼容。因为它的片上Flash允许程序存储器在系统可编程,所以也就能够为很多系统提供灵活多变且有效的解决办法,同时也适用于许多普遍使用的编程器。 通过查阅资料发现AT89S52的功能有这几点:8K字节Flash,256字节RAM,32位I/O口线,看门狗定时器,2个数据指针,三个16位定时器/计数器,一个6向量2级中断结构,全双工串行口,片内晶振及时终电路。尤其要特别指出的是,AT89S52可以降频至0Hz静态状态运行,同时支持两种软件选择所需要的节电模式。当芯片不承担工作任务的时候,CPU暂停运行,允许RAM、定时器/计数器、串口中断在CPU停止运行的状态下继续运行。 通过对其性能的全面分析,选择AT89S52作为主控CPU。 2.2.2 FPGA的选型此次信号发生器设计的重点是DDS系统,DDS系统的性能优异与否直接决定着输出信号的质量。DDS系统主要组成部分是多个数字电路的相互之间的配合,通过合理运用各种规模不一的通用数字电路来实现DDS在理论上的可能性。不过此手段除了结构错综,电路设计也有很大难度,同时伴随着高频干扰大,使得电磁兼容性问题很大,从而降低了性能,使之难以达到设计要求。 FPGA,即现场可编程门阵列,是近年来异军突起快速成熟起来的一种新型数字器件,是在它之前多种可编程器件不断进步演化出的产物,它的主要特点有以下几项: (1)采用FPGA集成电路,不用投片生产,也能获得理想芯片。 (2)内部有多种触发器和I/O引脚。 (3)FPGA可做其他全定制或半定制集成电路的中试样片。 (4)FPGA采用高速CMOS工艺,低功耗,可以和CMOS、TTL电平兼容。 (5)FPGA是集成电路设计中所需时间最短、资金投入少、安全性最高的器件之一。 如此看来,FPGA芯片是研发小型软件实际提高系统性能的不二选择。FPGA的出现极大的方便了集成电路的设计,缩短了电路设计周期以及所使用芯片的品种,而且它的灵活性和高稳定性,对于完成DDS系统数字电路部分有很大的帮助,这也是为什么现在绝大多DDS系统电路都是由FPGA完成的。 目前全球知名的FPGA制造厂家有Altera、Xilinx、Actel、Lattice、Atmel等,经几代人不断的努力,FPGA形成了种类多,型号全的从低端到高端等一整套完整的产业链。所以选择FPGA器件是DDS系统电路设计之前首要面对的极其重要的一环,包括挑选厂家,产品型号和器件系列,我们的最佳选择并不是功能最强、性能最好的器件。作为一个实际开发项目,除了性能是否优良,成本也是必须要考虑的问题,所以就要选择价格便宜且能满足设计要求的器件。除此,还有一个重要的因素是厂商的市场占有率,厂商的口碑关系到产品使用后的技术支持和售后问题。厂商提供的开发工具是否方便 Xilinx公司目前是全球顶级FPGA供应商,它们研发了一款只能用于自己公司研制的芯片的设计软件,ISE。该软件支持Xilinx FPGA所有热销产品。ISE使用可视化编程手段,融合了该公司发布的所有软件包,具备所有电路开发功能,专用的的开发平台为各类使用者提供了极大的方便。这还只是一部分,其多样的线上帮助信息能及时辅助开发者应对设计中所遇到的各种问题。使用者只需要按照系统的提示和引导,就能利用该软件提供的技术手段,快速、灵活地完成各种数字电路设计的开发。 综上所述,本设计的DDS模块决定采用来自Xilinx公司的FPGA器件Spartan 3E系列的XC3S250E,该产品集中体现了Xilinx公司低价产片的优良特性,其特点有以下几点: (1)具有25万个系统门; (2)采用90nm工艺; (3)包含12个专用乘法器和216kb块RAM; (4)支持多达172个用户I/O端口; (5)有4个专属片上数字时钟管理模块 2.2.3 数模转换模型的选择由于数字信号存在不可直接输出特性,所以从FPGA输出的幅度控制参数和波形量化参数必须再由D/A转换方可完成输出。 下一级D/A转换的参考电压是幅度控制参数的D/A转换输出,此项参数只能到使用者确定了输出幅度值时才发生改变,进而对转换速率的要求不高,仅仅要求大于10Hz就可以。此次设计要求的电压调节幅度是500mV-20V,电压调节允许的误差范围是50mV,所以可以将整个调节范围分为400个等级,把它转换为2进制单位则只需要8位就满足要求。本设计选择TI公司生产的TLC7528,此器件是双路8位数模转换器,用于对幅度的控制足矣。 除此,根据奈奎斯特采样定律,设计要求的最大输出频率是20MHz,这样一来采样频率必须比40MHz大。但在实际操作的时候,信号的时钟频率是比50MHz大的,在一般情况下DDS的输出频率不会大于0.4f。一般输出波形是否失真跟采样频率有很大的关系,采样频率越高,输出波形的失真越小。由于这种反比关系的存在,故而将DDS系统时钟设置成100MHz。同时选择存储位数为10bit的波形存储器,使得输出分辨率可达约5mV,让输出的波形变得细腻。通过上述分析,TI公司制造的DAC900基本符合本设计的要求,位数10bit,转换速率高于100MHz。该芯片的性能特点介绍如下: (1)供电电压范围: 2.7V - 5V (2)最高转换速率: 165MHz (3)转换精度 : 10bit (4)3V供电时功耗为45mV : 5V供电时功耗为175mV (5)差分电流输出: 满刻度电流2mA到50mA 2.3 AT89S52的功能和结构AT89S52采用高密度非易失性存储器技术制造,兼容51系列单片机指令和引脚,功耗低、性能好,具有8位微控制器,是目前性价比较高的控制器。可用常规编程器对片内Flash进行在系统编程。因此单片机芯片AT89S52被大量地应用在嵌入式控制系统中。 AT89S52的功能特性可以简单的概括为以下几点: (1)与MCS-51单片机产品兼容 (2)8K字节在系统可编程Flash存储器 (3)1000次擦写周期 (4)全静态操作:0Hz-33MHz (5)三级加密程序存储器 (6)32个可编程I/O口线 (7)三个16位定时器/计数器 (8)六个中断源 (9)全双工UART串行通道 (10)低功耗空闲和掉电模式 (11)掉电后中断可唤醒 (12)看门狗定时器 (13)双数据指针 (14)掉电标识符 AT89S52具有以下标准功能:8K字节Flash,256字节RAM,32位I/O口线,看门狗定时器,2个数据指针,三个16位定时器/计数器,一个6向量2级中断结构,全双工串行口,片内晶振及时终电路。尤其要特别指出的是,AT89S52可以降频至0Hz静态状态运行,同时支持两种软件选择所需要的节电模式。当芯片不承担工作任务的时候,CPU暂停运行,允许RAM、定时器/计数器、串口中断在CPU停止运行的状态下继续运行。
2.4 系统软件的总体设计在本设计中,控制软件的作用是通过接收具体的输入数据计算出对应的波形数据,从而达到控制输出波形的目的。LCD液晶显示在此时也会更新,产生新的良好操作界面。其软件主要由三大部分组成:显示界面、控制参数计算、键盘输入。总体机构框图如下:file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wps684F.tmp.jpg
图2.2 系统软件控制框图 3 系统硬件设计3.1 DDS的原理以及结构3.1.1 DDS的原理DDS(直接数字频率合成)从相位着手,利用相位和幅度的相互之间的关系完成频率合成。让多个采样点来取代目的波形,通过间隔的输出取样点的数值,其手段是再一次进行D/A变换从而得到输出电平。这种采用插值取样的方法是DDS技术最常用的。而拥有频率分辨率、稳定性毒、相位连续、灵活性优秀,能输出多种信号、频率转换速率快的等众多优异性能的方法相当于采样保持和D/A转的逆过程。而频率的连续可调则是通过控制两个取样点间的时间间隔以及相位增量来实现的。 举例存在正弦信号S(x)频率为f0,那么就有: S(x)=sin(2πfx) (2.1) 由{1}可知,用频率f1=Mf0/K采样,能得到一个离散的采样序列: S(n)=sin(2πfn/f1)=sin(2nKπ/M) n=1,2,3,4... (2.2) 上述对应的相位序列为Φ(n)=2nKπ/M n=1,2,3,4... 通过分析上问所说的采样序列,便可以发现,相邻的两个值之间的相位差是是一个不变的恒值,而且只跟K/M有关系,而K/M又是信号频率,换句话说就是只跟信号频率有关,所以得出相位增量: △Φ=2Kπ/M (2.3) 所以连续时间信号S(x)经过采样频率f1之后的离散时间序列可表达为: S=sin(n△Φ) n=1,2,3,4... (2.4) 由奈奎斯特采样定理可知,当f1/f0=M/K>2时,经过低通滤波器平滑S(n)可重新回到S(t)。所以,当M不变时,一个变量K将对应一个单频模拟正弦信号S(t) S(t)=sin(2πf1TK/M) (2.5)此信号的频率为:f0=Kf1/M 一般情况下常取M=2′,得到 f0=Kf1/2′ (2.6)以上就是DDS的实际方程,不同的频率可以输出通过固定f1,经过转换从而得出K,K也叫做频率控制字。DDS的最低频率,频率分辨率输出f为1/2′时K=1,就是DDS的最低频率,。由此可见要达到需要的频率分辨率和输出频率能够用f1/2′为单位进行调解的话,就要N足够大。 通过(2.3)可知,要得到一个采样序列就要以采样频率f1=f02′对信号f0进行完整的周期采样。序列中相邻两个值的相位差是常数△Φ=2π/2′,由此可得出结论:这2′个采样的点的值可以预先计算出来并保存。在频率输出时,假如所需的输出频率是f=kf0,并且采样频率固定,这时两个相邻采样点间的相位差就是△Φ=2kπ/2′。新的的采样序列其实是从存储的采样序列中每k个值中随即选出一个采样值,再让需要的信号f从这个新的采样序列中重新恢复。 从上面的分析可以看出,要得到一个频率f0=Kf1/2′的输出信号,通过重新建立新系统,它保留了一个相位差△Φ=2π/2′的采样序列以一个恒值频率输出一个相位差的采样序列。
3.1.2 DDS的结构DDS系统的组成部分大致可以分为四个主要方面:低通滤波器、波形ROM、D/A转换器、相位累加器,它的结构如下图3.1所示:
file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wps6860.tmp.jpg
图3.1 DDS系统结构 相位累加器结构,如图3.2所示: file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wps6861.tmp.jpg 图3.2 相位累加器 系统的工作过程: (1)写入频率控制字K。 (2)让加法器的输入端接收前一个时钟的累加结果,使输出相位每一个时钟周期都增加K。 (3)单一离散相位相对的二进制数值就是波形ROM储存的波形数据,把相位量化产生出的数据当做地址查询波形ROM,这样就可以得出其所对应的波形量化幅数据。 (4)D/A转换器把ROM生成的幅度量化序列信息转换成一对一的模拟量化信号严格意义上说并不是真正的连续可变信号,只算得上是阶梯模拟信号,在此基础上还需要通过低通滤波器的进一步处理方能输出柔顺细腻完美的模拟输出波形。 3.2 FPGA的相关技术3.2.1 FPGA的基本原理近年来有一种新型可编程集成电路发展的极为迅速,称作FPGA,就是我们所说的现场可编程门阵列。它是在上世纪问世的大部分可编程器件的基础上经历多年不断演化发展的从而得到的产物,根据用户的实际需求确定芯片的功能,以EEPROM、SRAM、Flash等等编程器件为基础,FPGA的半制定性质使得它比起专用电路中定制电路具有较高的灵活性,比起常见的可编程器件中的数字门电路改善了门数有限的缺陷。不仅如此,FPGA规模大、集成资源丰富、速度快等其他芯片不具备的优势也让其在数字信号处理领域需求量更大。 经典FPGA通常由可编程输入输出单元、可配置逻辑块、数字时钟管理模块、嵌入式块RAM和丰富的布线资源组成,它的基本结构如下图3.3所示:
file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wps6871.tmp.jpg 图3.3 FPGA的基本结构
可编程逻辑是一个分布在整个芯片内的二维矩阵结构,它是FPGA的主要组成部分,通过使用者多样的设计产生多样的的逻辑功能,让配置和联接用不同方式连接即可。这些多样化的逻辑性能,在不同条件下的输入输出则是通过芯片和外部电路之间的接口来完成的,这些模块围绕在每个单元阵列的周围。各个逻辑功能模块和输入输出模块通过可编程内部互联资源中长度不一的连线线段和种类不一达到链接开关连接,其构成的电路可以实现特定功能。而FPGA的灵活也体现在其内部还包括许多选择灵活的模块化工具,例如:内嵌存储器、数字时钟管理、算术运算、多电平标准兼容的I/O接口等单元部分,把不同单元的功能和连接关系通过编程修改就可以实现多样化逻辑功能。 3.2.2 FPGA的开发流程 电路研发、输入、功能仿真、综合后仿真、实现、布线后仿真、下载调试等是一个完整的FPGA设计开发必不可少的部分,其流程图3.4如下所示: file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wps6872.tmp.jpg 图3.4 FPGA开发流程 在设计开发时,根据已确定的电路设计方案,把预期电路设计与输入功能在EDA软件中具体化。这其中原理图设计输入与硬件描述语言都是普遍采用的写入手段。 3.2.3 原理图设计输入方法的介绍按照原有的设计规范要求,通过挑选合适的零件,画出原理图具体化整个输入过程是原理图设计输入法最常见的手段,在FPGA诞生的早期是比较受欢迎的。原理图是把已有的符号用连接线按照需求合理连接形成的,原理图中的逻辑器件如与门、非门、或门、触发器以及各种器件功能都可以是EDA软件库中提前设置的功能模块。 其优势在于元件库资源多、易掌握、直观,用户不用再去花费时间了解新的知识,其使用过程易上手,对于非电气专业的使用者来说难度都是很小的 。但是其缺点也在一些对系统要求比较高的的设计项目中暴露无遗,例如:电路功能原理理解困难,错误排查困难,后期设备维稳性也差就尤为明显。除此之外最重要的一点就是当需要更换系统芯片时,需要大规模修改所有原理图以适应新芯片。也是因为这些不可消除的缺点,所以HDL设计输入法在高端设计的时候更受光大设计师的亲赖。而影响力最广泛的HDL语言是VHDL和Verilog HDL,两者都采用模块化设计方法,模块的划分和复用使得在器件使用时变得更加灵活,不用担心更换芯片后的系统不兼容,实用且十分灵活。 在此之外,前仿真也是功能仿真的一种,就是把设计完毕的电路输入后,再用专用的仿真软件对系统进行功能仿真从而得出结论,确定电路是不是符合设计要求。仿真的作用在于它能及时发现设计中存在的不完善并加以合理的改善,相比人工操作,更能提高设计效率,加快设计进度。 HDL语言和系统原理图还有等等一系列高级抽象化级别的写入,是采用综合进一步完善转换成有或门、与门、非门、RAM、寄存器等基本逻辑模块拼接而成的逻辑连接网表,再根据约束条件完善逻辑之间连接和输出文件,综合优化的用处也就体现在这里。而最终的门级电路还需要将综合优化之后的逻辑网表经过布局布线器运用到FPGA芯片上。 开始综合仿真流程之前还有一项十分重要的工作,就是对比综合后结果与原设计预想是否产生了不一致。仿真时还要预设出门延造成的不好的影响,这就需要把综合时出现的标准延时数据反标注到综合仿真模型中。对比综合器的综合优化结果与设计意图的不一致是综合仿真的主要工作,一旦不能估计线延时,那么布线后产生的结果将会很有可能不是本设计需要的。 由与门、非门、或门、触发器、RAM等基本逻辑单元组成的逻辑网表综合时实现的结果严格来说并不是真实意义上的门级电路,跟芯片的实际配置情况还存在一定的不一致性,让综合得出的逻辑网表的硬件原始语言和底层单元配置到具体某一个FPGA上,并用芯片制造商提供的功能软件完成整个流程,而这个流程就叫做实现。翻译、映射、布局布线就是实现的一般构成部分。 在布局布线完成后,紧接着要做的就是时序仿真。通过把时序仿真中布局布线的时延文件反标注到系统中,来验证是不是产生了时序不正确。时序仿真有门延时和延时信息。相比前面说到的各种仿真,时序仿真准确度更高。 设计开发FPGA的最后一个步骤是将所生成的配置信息编入进FPGA芯片来运行,检查系统是否正常运行,进而完成测试。不论在调试过程的哪一步出错,都能及时的对错误进行分析处理,然后返回到错误发生的环节进行修改或者重做。 3.2.4 开发工具介绍(1)综合工具 把行为与功能级别所显现的电子系统变换为低级别模块的组合就称之为综合。在正常的情况下,综合是相对于HDL语言来说的,在xilinx ISE中常用的综合软件有XST、和FPGA compilier 2 等等,这些综合工具有一个共同之处,就是都是将让与、或、非门还有RAM、寄存器等基本的逻辑单元组合的逻辑连接网表接收原理图跟HDL语言等的设计输入,因为本文中的系统采用的是xilinx的芯片,综合工具本文采用的是Xilinx公司转为自己产品研发出来的综合工具,这样一来同一厂商的硬件和软件匹配性就比其他综合工具要好很多。 (2)仿真工具 现如今最好的HDL语言仿真软件之一是ModelSim,操作界面视觉效果好,直观简单。它所使用的直接优化编译技术等使得编译仿真的速度变快,精度也得到了提高。不仅如此该软件编译出的代码跟所使用的平台没有直接任何联系,这样对于IP核来说那个得到很好的维护,还有非常新颖的操作界面和接口,强大的性能成了FPGA/ASID、C设计用户的不二选择。它有以下几个方面的特点: (1)RTL和门级优化,并采用了本地便以结构,仿真速度极快。 (2)支持单内核VHDL和Verilog混合仿真。 (3)具有项目管理功能 (4)有C好和Tcl接口。 (5)综合了波形分析比较、代码覆盖、数据流、模拟对象、信号条件断点等等很多调试功能 对系统级描述语言有着最全面的支持。 激励测试生成器其实就是根据电路设计输入自动生成测试激励文件的工具,激励测试生成器。在产生所需要的激励文件过程中,将VHDL和verilog任选一个作为源代码跟原理图等输入到测试环境中,接下来把在图形界面编辑的激励波形变化成HDL格式,这么一来产生的激励测试信息就能够符合ISE中的集成仿真工具所需要的要求。不仅如此,还能得出测试激励覆盖率,协助使用者完成整个系统的测试调试。 三、 实现工具 把综合输出逻辑网表翻译成选中芯片的底层模块跟硬件语言,这就称之为实现。把设计映射到每个具体的器件上。Xilinx ISE中的实现过程可以分成三个步骤,分别是翻译,映射,布局布线。而这几个过程都是自动执行的,当然也可以进行手动操作和单独操作。而ISE的实现工具有很多,现对几种主要的实现工具做具体介绍: (1)约束编辑器:顾名思义就是设计用户约束文件。文件中有很丰富的资源,例如:管教位置、寄存器类型、延时特性、时钟属性、布局布线要求等。 (2)时序分析器:其作用是通过分析芯片的结构以及工作效率,分析关键路径的延时信息,从而可以看出最后的结果是否满足要求。 (3)芯片观察窗:它的作用是为用户提供一个图像化的界面,以方便查看各种信号的输入输出、管脚锁定和内部宏单元等各方面信息。 3.3 DDS波形合成 整个DDS信号发生器的最主要的方面是数字波形的合成。通过分析设计要求,加上不断分析DDS的原理,再联系上文,从而得到本设计所需的DDS数字波形合成的具体流程框图,图3.5如下所示:
file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wps6883.tmp.jpg 图3.5 DDS数字波形合成实现框图 3.3.1 时钟模块介绍 本系统设计要求输出波形的最大频率是20MHz,根据奈奎斯特定理,采样频率选成40MHz最为合适。低通滤波器的性能一般来说很难达到理想的状态,而且输出频率还应该留一定的浮动值,因为它总是有一定的过渡带的。实际操作时DDS的输出频率基本上是不可以大于0.4f,因此f必须高过50MHz。与此同时,获得波形的质量是跟波形的采样点数成正比的,采样点越多越密集,输出波形的质量就越优异。通过倍频把本设计已经有了50MHz的晶振变为100MHz,就能产生100MHz的时钟,这样的话就能十分轻松的达到设计要求。 Xilinx的ISE软件提供了数字时钟管理模块用于消除时钟产生的延时、频率合成、时钟相位的调整等系统方面的功能,这些功能对于整个系统的完成有很大的帮助,数字时钟管理模块的优点主要由以下两点: 时钟能映射到PCB上,作用是来和外部芯片相配合,这样一来对外部芯片的需求就会减小,使芯片的内外部的时钟允许被控,便于系统设计。 (2)实现零偏移,还那个去掉时钟分配时产生的延时,还能实现时钟闭环操控。 DCM模块参数中最重要的部分就是输入时钟频率范围、输出时钟频率范围、输出输入时钟允许抖动的范围等。根据系统提供的DCM IP核,开始生成时钟模块工作的时候,只需准确设置输入、输出,就可以产生所需要的时钟。设置界面如下: file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wps6884.tmp.jpg 图3.6 设置界面
各个信号端口的含义: (1)CLKFB:DCM的时钟反馈信号 (2)RST:复位输入信号,高电平有效 (3)CLKFB:DCM的时钟反馈信号 (4)CLKIN:DCM的输入时钟的输入信号 (5)CLK0/CLK90/CLK180/CLK270:CLKIN相位移动0°/90°/180°/270°的输出信号 (6)CLK2X:2倍频时钟输出信号 (7)CLK2X180:与CLK2X相位差180°的时钟信号 (8)CLKFX:频率合成时钟输出信号,是CLKIN经过频率合成后的时钟信号 (9)CLKDV:CLKIN的时钟分频输出信号,分频系数由CLKDV-DIVIDE决定 (10)CLKFX180:频率合成时钟相位移动180°的输出信号,该信号与CLKFX有180°的相位差 (11)LOCKED:DCM锁定输出信号,显示DCM是否锁定CLKIN。LOCKED为高电平时,DCM的输出信号有效 (12)STATUS:状态信号,用于显示DCM的工作状态。 全局时钟网络不仅可以保证输出的时钟信号达到各个目标逻辑单元的时延基本一样,而且能实现局部时钟信号的输出操控,以便于在接下来的设计中相位幅度转换和D/A输出。以下是时钟模块的实现代 Module my_dcm(CLKIN_IN, RST_IN, CLKFX_OUT, CLKIN_IBUFG_OUT, CLK0 OUT, LOCKED_OUT);
Input CLKIN_IN; Input RST_IN; Output CLKFX_OUT; Output CLKIN_IBUFG_OUT; Output CLK0_OUT; Output LOCKED_OUT;
Wire CLKFB_IN; Wire CLKFX_BUF; Wire CLKIN_IBUFG; Wire CLK0_BUF; Wire GND_BIT;
Assign GND_BIT=0; Assign CLKIN_IBUFG_OUT = CLKIN_IBUFG; Assign CLK0_OUT = CLKFB_IN; BUFG CLKFX_BUFG_INST (.I(CLKFX_BUF),.0(CLKFX_OUT)); IBUFG CLKFX_BUFG_INST (.I(CLKFX_BUF),.0(CLKFX_OUT)); BUFG CLK0_BUFG_INST (.CLKFB(CLKFB_IN),.CLKIN(CLKIN_IBUFG), .DSSEN(GND_BIT), .PSCLK(GND_BIT), .PSEN(GND_BIT), .PSINCDEC(GND_IT), .RST(RST_IN), .CLKDV( ),.CLKFX(CLKFX_BUF), .CLKFX1 80( ),.CLK0(CLK0_BUF), .CLK2X(), .CLK2X180(), .CLK90(), .CLK180(), .CLK270(), .LOCKED(LOCKED_OUT), .PSDONE(),.STATUS(); defparam DCM_SP_INST.CLK_FEEDBACK = “1”; defparam DCM_SP_INST.CLKDV_DIVIDE = 2.0; defparam DCM_SP_INST.CLKFX_DIVIDE = 1; defparam DCM_SP_INST.CLKFX_MULTIPLY = 2; defparam DCM_SP_INST.CLKIN_DIVIDE_BY_2 = “FALSE”; defparam DCM_SP_INST.CLKIN_PERIOD = 20.000; defparam DCM_SP_INST.CLKOUT_PHASE_SHIFT = “NONE”; defparam DCM_SP_INST.DESKEW_ADJUST = “SYSTEM_SYNCHRONOUS”; defparam DCM_SP_INST.DFS_FREQUENCY_MODE =”LOW”; defparam DCM_SP_INST.DLL_FREQUENCY_MODE =”LOW”; defparam DCM_SP_INST.DUTY_CYCLE_CORRECTION =”TRUE”; defparam DCM_SP_INST.FACTORY_IF = 16’hC080; defparam DCM_SP_INST.PHASE_SHIFT = 0; defparam DCM_SP_INST.STARTUP_WAIT = “FALSE”; END
3.3.2 命令接收模块介绍
命令接收模块的作用是将单片机输出的频率控制字、波形和幅度等数据进行接收。命令接收模块的逻辑框图如下图3.7所示: file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wps6895.tmp.jpg 图3.7 命令接收模块逻辑框图
输入信号: Clk_R: 其作为工作时钟的输入端口,与51同步; En:其作为FPGA使能端口; Datain51:一共有8位(0~7),其作用是定义单片机输入的参数端口; Sele:一共有3位(0~2),其作用是定义单片机输入的参数的类别。 输出信号: Ans: 其作用是应答信号输出端口,给后续动作的响应。当接收数据结束的时候发出此信号,告诉在其之后的相位累加器该做怎样的动作; doutF:一共有32位(0~31),其作用是输出频率控制字; doutA:一共有8位(0~7),其作用是输出幅度控制字; waveform:一共有3位(0~2),其作用是输出波形类型控制字; 此模块VHDL语言描述: LIBRARY ieee; USE ieee.std_logic_1164.ALL; 包集 USE ieee.std_logic_unsigned.ALL; STD_LOGIC_unsigned包集 ENTITY receive IS PROT(clk_R: IN STD_LOGIC; Datain51: IN STD_LOGIC_VECTOR(7 DOWNTO O); En : IN STD_LOGIC; Sele: IN STD_LOGIC_VECTOR(3 DOWNTO O); doutF: OUT STD_LOGIC_VECTOR(31 DOWNTO O); doutA: OUT STD_LOGIC_VECTOR(7 DOWN 0); ans : OUT STD_LOGIC; waveform:OUT STD_LOGIC_VECTOR(2 DOWNTO O) ); END receive;
ARCHITECTURE bhv OF RECEIVE IS Signal FTEMP:std_logic_vector(31 downto 0); Signal ATEMP:std_logic_vector(15 downto 0);
BEGIN PROCESS(clk_R,en) BEGIN IF (clk_R’event and clk_R =’1’)then IF (en=’1’)THEN
IF SELE=”0001”THEN Waveform<=”000”; ELSIF SELE=”0010”THEN Waveform<=”001”; ELSIF SELE=”0011”THEN Waveform<=”010”; ELSIF SELE=”0100”THEN Waveform<=”011”;
ELSIF SELE=”1001”THEN FTEMP(7 DOWNTO O)<=DATAIN51(7 DOWNTO O); ELSIF SELE=”1010”THEN FTEMP(15 DOWNO 8)<=DATAIN51(7 DOWNO O); ELSIF SELE=”1011”THEN FTEMP(23 DOWN0 16)<=DATAIN51(7 DOWN O); ELSIF SELE=”1100”THEN FTEMP(31 DOWN0 24)<=DATAIN51(7 DOWN O); ELSIF SELE=”1101”THEN
ATEMP(7 DOWNTO O)<=DATAIN51(7 DOWNTO O); END IF DoutF <=FTEMP(31 DOWNTO O); DoutA<=ATEMP(7 DOWNTO O); Ans<=’1’; END IF; END IF; END PROCESS; END; 3.3.3 相位累加器介绍 DDS的性能是否优良取决于一个非常重要的因素就是相位累加器,它由一个n位寄存器和一个n位加法器级联构成的,具体的结构图如图3.8所示: file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wps68A5.tmp.jpg 图3.8 相位累加器机构图
此次所设计的信号发生器产生出的标准波形的分辨率的是0.1Hz,DDS系统的时钟是100MHz,也是因为这两项数相位累加器的位数设置成30。根据fMIN=fC/2N=108/230=0.093Hz,不难知道选择的相位累加器位数是符合设计要求的。相位累加器在时钟的影响下不间断的通过这种方式完成要求次数的循环累加。做完一个完整流程的动作的标志是当相位累加器发生了一次相位溢出时,相位累加器用目前所保存的值为基础,继续进行对相位累加器相位再一次进行相位相加求和。DDS频率合成信号的周期说白了就是这样的流程,而此时此刻该相位累加器的溢出频率就成了DDS输出信号的频率。尽管该模块能够输出30位的地址参数数据,但由于设计波形数据存储器深度为1024点,存储的容量十分有限,所以波形ROM的地址只能取高10位。 累加器实现代码: Phase_add:process(clk) Begin If(clk’event and clk=’1’)then Phase_adder<=phase_adder+frq_reg; Rom_adder(9 DOWNTO 0)<= phase_adder(29 DOWNTO 20); End if; End prosess; 3.3.4 波形ROM模块完成从相位到幅度的转换技术手段有两种,分别是计算法与查表法。查表法相对来说是一种比较普遍的相幅转换手段,它是将相位对应的幅度值提前存在存储器中,再按照相位进行查找。函数计算法是通过数学方面的算术运算方法,根据相位累加器输出的相位值从而得到相应的理想幅度值。通过认真分析这两种方法的区别不难发现,计算法所需要的逻辑资源较大对资源的要求也高,不仅如此,整个过程实现起来由于复杂,随之速度也变得比较慢;查找表法则需要用到非常大的存储资源,对逻辑资源的要求没有计算法那么高,速度比较快。如此看来,查找表的相幅转换方法更加适用于本系统。 3.3.5 DDS处理模块DDS处理模块其实就是把上文所述的模块综合起来,从而实现DDS总体功能,而实现代码主要是用到上述的几个模块。将各个模块按照设计要求进行连接,写入既定程序,再输出测试代码进行调试,就可以构成符合实验要求的DDS处理模块。 Inst_datal:romsinl PORT MAP(addr=)address, clk=>CLK,dout=>rom_outsinl); Inst_data2:romsqua PORT MAP(addr=)address, clk=>CLK,dout=>rom_outsqua); Inst_data3:romtri PORT MAP(addr=)address, clk=>CLK,dout=>rom_outtri); Inst_data4:romsawth PORT MAP(addr=)address, clk=>CLK,dout=>rom_outsawth); Judgewav:process(clk) Begin If(clk’event and clk=’1’)then If A=”000”then Rom_out<=rom_outsinl; Elsif A=”001” then Rom_out<=rom_outsqua; Elsif A=”010”then Rom_out<=rom_outtri; Elsif A=”011”then Rom_out<=rom_outsawth; End if; End if; End process; 3.3.6 DA转换电路设计从波形ROM中读出的幅度量化数据和从命令接收模块输出的幅度控制数据都只是一个数字信号,唯一的办法是通过数模转换器转换转换之后就能够生成最后的输出信号。第一点,将幅度控制参数信息转变成电压信号来用于波形D/A转换器的参考电压输入到D/A转换器中;第二点,在波形ROM之后再想办法设计增加一个D/A转换电路,把波形采样参数信息转换为模拟输出信号。再一个由于D/A转换芯片的品种相当多,而且要根据相当多因素来挑选D/A转换器,在众多因素当中,其中字长和转换速度是最主要的。波形幅度控制字只是在设定信号幅值的时候才发生变化,字长是8位,所以对于幅值控制A/D转换器本系统决定采用TI公司的TLC7528。不过,因为任意波形生成器的系统时钟已经被设计固定成为100MHz,所以必须得要选定出一个转换速率大于100MHz的D/A转换器。结合上文分析,本系统选用ADC900来做输出波形的D/A转换的工作。 TLC7528是一块工作电源为5~15V,功耗小于15mw的双路8位数模转换器。现对它的特点做如下介绍: (1)片内数据锁存 (2)易于与微处理器接口 (3)可与模拟器件AD7528互换 (4)在每个A/D转换范围内具有单调性 (5)适用包括与TMS320接口的数字信号处理应用的快速控制信号 TLC7528的接口电路图如下图3.9所示: file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wps68A6.tmp.jpg 图3.9 TLC7528接口电路
图中,DAC900的参考电压由第一路工作方式为单一极性的OUT-A控制。由于DAC900的外部参考电压范围是0.1V~1.25V,为了将参考电压范围控制在设计目标理想值,现加入了一个反向比例衰减电路。TI公司的ADC900是10位高速数模转换芯片,它的特点如下: (1)工作电压:2.7V~5.5V (2)输出更新速率165MSPS (3)低功耗 (4)无假信号动态范围 (5)低毛刺 (6)可选的外部参考;可任意调节的全程范围 因为电流型输出型器件需要外接运算放大器将电流信号转换成电压信号,所以DAC900的外围接口电路图如3.10所示: file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wps68B7.tmp.jpg 图3.10 ADC900接口电路
3.4 人机交互部分的硬件设计人机交互由输出和输入两个部分组成,在用户和设备之间信息交换的时候起着媒介的作用。输出部分的作用是显示操作界面和测量结果,输入部分的作用是写入具体的某一指令以及参数。在整个DDS系统中,输入模块使用键盘扫描的方法,输出部分采用了LCD屏显示。通过键盘输入来选择人机交互的工作模式,波形参数值通过LCD显示。整体用户界面以51单片机为主,键盘扫描,显示刷新,键盘输入为辅,共同进行处理工作。 具体的LCD显示界面如下图3.11所示: file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wps68B8.tmp.jpg 图3.11 系统显示界面 键盘布局如下图: file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wps68B9.tmp.jpg 图3.12 键盘布局图 随便按一下键盘上的键,LCD便可以显示出系统菜单。如系统显示界面图,将鼠标悬在“波形”上,可以运用上下箭头选择新的菜单,按下“确认”后方能进入所对应的项目。进入菜单之后,再按上下箭头选择需要的项目,而在“波形”菜单中来挑选所需要的波形,也可以在频率菜单中选择频率删除菜单用来删除已输入的数据参数,返回键用来返回上一级菜单。
4 系统软件设计 4.1 C51简介Keil C51是为51系列兼容单片机C语言软件专门研发出来的的针对软件,整个界面都是微软系统,来极大的方便用户操作使用,还配备了种类多样的库函数和功能十分强劲的集成开发测试工具。相比于汇编语言,C语言在功能性、结构性,可读性、维护性等等影响系统性能等十分重要的性能方面具有无法比拟的优势,后期调试维护起来省时省力,而且学习起来比较容易,掌握起来也比较容易。 为方便使用,8051微控制器系列专门研发了Keil C51编译器,在遵循ANSI标准的同时在语言上进行了大规模的扩展,这也让使用者能够享用系统中的所有资源。C51编译器提供多种数据类型,以及专门针对8051单片机的多种存储器类型,加之运用合理的方式自动分配变量地址,sfr和sbit两个关键字提供特殊功能寄存器SFR 的存取,这是使得C51编译器可以对8051系列所有资源进行充分的利用。在C51中,用关键字来定义可重入功能。C51提供了许许多多灵活且高效的指针用来针对不同的存储类型,这样就可以在8051的任何存储区内存取出想要的任意变量。特殊指针发出声明的同时就已经计划出了某一特定的存储区域的存储器类型,因为地址需要的字节存储特别少,所以指针的存储操作速度非常快。大型软件开发时使用C语言的优势在于绝大多数语句都能够生成非常紧凑的汇编代码,这使得产生出目标代码的效率相当高。 4.2 控制软件的设计4.2.1总体控制模块此次设计采用以键盘为主的操作输入结构,软件部分的设计手段采用模块化程序。用C51编写主要分为主程序模块、初始化模块、显示模块、键盘扫描模块、参数设计模块等,各个功能模块的函数如下所示: Void mian( )主模块 Void init( )系统初始化模块 Uchar keyscan( )键盘扫描模块 Void menudisplay( )菜单模块 Void disp( )显示更新模块 主模块最重要的工作是循环调用键盘处理和显示处理两个模块,与此同时主模块还有一项不可忽视的作用就是还用来调用各子模块和执行系统的主控流程,让系统按照预设方案工作。以下是主模块的完整源代码: 主模块最重要的工作是循环调用键盘处理和显示处理两个模块,与此同时主模块还有一项不可忽视的作用就是还用来调用各子模块和执行系统的主控流程,让系统按照预设方案工作。以下是主模块的完整源代码: Main() { Uchar key_temp Uint i,j; Init(); //系统初始化 Cls(): //清屏 Main_paly(); //显示开机画面 For(j=10;j>0;j--) //延时 { For(i=60000;i>0:i--); } Menudispaly(); //显示主菜单 While(1) //通过键盘扫描来执行程序 { Key_temp=keyscan(); Keyhandle(key_temp); Dis(); //显示更新 } }
4.2.2 键盘扫描和处理模块本系统的键盘采用4×4的矩阵式排列,16个按键。确认是否有按键输入,送行码,读列码等任务是单片机使用扫描手段来完成的。此模块的流程图如下图4.1所示:
file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wps68C9.tmp.jpg 图4.1 键盘扫描程序流程
4.2.3 液晶显示模块液晶显示模块的具体工作任务有两方面,就是显示系统菜单以及用户输入的数值,一旦键盘接收到新的输入的时候,都是用液晶显示模块来更新显示。液晶显示模块的工作流程如图3.14所示:
file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wps68CA.tmp.jpg
图3.14 液晶显示流程
5 系统调试与性能测试在整个系统的硬件设计部分和软件设计部分完成后,为了确保设计中是否还存在一定的不完善,和后期实际操作时是否到达语气效果,就需要对系统进行全面仔细的测试。只要是人工加工的产品都存在一定的误差,所以例如电路板的焊接存在虚焊等问题,都会破坏整个设计的完整性 。所以系统调试分析对于系统十分重要。 5.1电路调试 5.1.1 单片机调试一个完整系统能够正常运行的核心在于AT89S52单片机,除此之外其他所有模块的工作都由它来调度协调分配。在进行单片机调试工作之前,需要仔细核查芯片内部电源和接地有没有正常连接,以及复位电路是否正常。在严格按照规定完成一系列检查工作之后才可以接通电源,然后用示波器查看晶振有没有按照设计方案正常运转。 单片机本身的验证其实相对简单,只需要编写一个简单的波形输出程序,再检查示波器的输出波形是否与输入程序一致,如果输出波形与输入的程序一致则单片机工作正常。反之,则不正常。 5.1.2 键盘和LCD的调试键盘属于硬件设备,检查起来就比较方便,也比较简单。可以用万用便检查键盘各个部分是否正常通电,有无短路或断路即可。 因为有专用的LCD调试程序,所以当调试LCD时只需要输入专用程序,再查看屏幕上是否出现相应字符即可。 5.1.3 FPGA的调试FPGA正常运行与否在整个波形生成流程中起着决定性作用,我们那个够用ISE编写一组全新的检验代码,来检查FPGA器件能不能正常工作,让引脚50接高电平,引脚60接地。然后用下载电路下载,查看示波器就可以看出两个引脚的电平是不是正常,从而也就能分析出FPGA是不是正常运转 5.1.4 D/A转换模块的调试数模转换控制由两部分组成,分别是:幅值控制、波形输出。 DAC900是一个采用差分电流输出的10位高速数模转换器,因为它的电流不能被直接测量,所以需要将电流转换成电压在进行测量。具体方法是在DAC900的输出端和地之间接一个50欧姆的电阻进行调试,如此一来就不存在电流不能被直接测量的问题了。 5.2 系统测试在硬件部分和软件部分的调试都完成之后,那么接下来就需要进行系统的组装调试,通过看系统完成联机后的性能表现来判断系统是否正常工作。通过分析系统要求的各项功能与性能指标,决定选用一个双踪示波器和一个频率计作为测试设备。 5.2.1 输出波形的测试通过给以多样化的工作命令,让信号发生器遵循指令的要求分别产生出正弦波、方波、三角波、锯齿波,在信号发生器输出波形的同时将示波器接到函数发生器的BNC上,这样产生的波形就能一目了然,如下图5.1所示: file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wps68DB.tmp.jpg 图5.1 正弦波
file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wps68DC.tmp.jpg 图5.2方波
file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wps68ED.tmp.jpg 图5.3 三角波
file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wps68EE.tmp.jpg 图5-4 锯齿波 5.2.2 信号频率的测量进行频率测量工作的时候,通过信号发生器的面板将输出频率分别设置成10Hz、1KHz、1MHz、10MHz、20MHz的各种波形参数,使用频率计对其进行测量,就可以进行跟设定值的对比。具体测量结果如表5-1所示。 由于本次设计要求的频率分辨率是0.1Hz,选取任意两个相差0.1Hz的频率,比如取在10Hz与10.1Hz,然后使用频率计测量各种波形的输出,结果如表5-2所示。
表5.1 输出频率测试结果
从表5-1可以看出,本系统能够产生所有设计之初要求的所有波形,而且每个波形的最高和最低要求都能输出,符合设计要求。
表5.2 频率稳定度测试结果
5.2.3 信号幅度测量在测试信号幅度的时候,用键盘把设置f=1KHz作为信号发生器的输出频率,其输出的正弦波、三角波、方波、锯齿波的幅值分别是500mV、1V、5V。在用示波器测量各个幅度,测量结果如下表所示: 表5.3 输出幅度测试结果
从上表能够看出,输出的各个波形的最高最低幅度电压满足电压输出幅度的要求。 5.2.4 频率稳定度测量因为类比性,选择具有代表性的正弦波来测试系统的频率稳定度,具体结果如下表所示: 表5.4 频率稳定度测量结果
从表中能够看出,由于被测的信号中难免会混入噪声,噪声信号叠加在被测信号上似的在不同的时间所测得的频率值并不完全相等,这也是频率测量结果出现偏差的原因。 5.3 误差分析 DSS系统需要满足以下几个条件才能得到想要符合要求的输出频谱: (1)波形ROM中存储的波形幅度值用无限长度的二进制数来表示。 (2)累加器的输出都用来进行ROM寻址。 (3)D/A转换器不仅具备十分理想的数模转换特质,而且分辨率无上限。 不过在实际操作当中,这几个条件基本上都很难满足。所以我们对可能会产生误差的几个方面进行进一步的研究。 为了使产生的波形具有比较高的频率分辨率,对相位控制字的位数一般都会取的比较大,根据△f=fc/2N可得出结论,N值和频率分辨率是成正比的,N值越大频率分辨率就越高,本设计中相位累加器的宽度取N=30。想要N位都用于寻址ROM,就要用到很大很大的存储容量,而如此之大的ROM表容量很难在实际中实现。正因为这样,所以通常人们不采用低的N-M位,而选择高M位来寻址。在本设计中,寻址方法并没有采用低20位,而是偏偏选用了高10位,这样一来不好的地方是,会无法避免的产生相位截断误差。所以DDS输出杂散其中一个原因就是相位在低20位变换的时候输出都完全相同。 再通过二进制整数方式传给DDS,输出频率的偏差就是在这样的计算过程中产生的。 用一系列的离散采样点来表示波形存储表,本设计中用10位的二进制数来表示信号幅度,显而易见的是这样表示方法肯定存在幅度量化误差。一般情况下ROM表的宽度与其存储的数值是成正比的。除此之外,波形存储表中的相位是以整数形式表示的一系列有限的离散采样点,这样的话就无法避免的产生了相位量化误差,不过可以通过增加采样点的数目来减小误差 两个输出电平间的暂态相应大小就是DAC的毛刺,通常情况下数据位间的时滞和器件内部逻辑电路的传输造成了这种暂态相应,也就使得短暂的中间态出现在DAC输出信号中。 不光存在以上因素,引起杂散的原因还有系统参考时钟泄露、电源引起的噪声干扰、外来电磁干扰等。不过好的一方面是这些引起杂散的原因都可以通过合理的电路设计来进行进一步的优化。 虽然上文中有很多无法避免的误差,但可以通过各种手段来减少误差,比如:选择更加合理的量化值,扩大存储区容量和数据位数,选用高质量的电源,合适的D/A转换器,再加上低通滤波器进行输出平滑,尽可能的减小输出波形可能存在的误差。
结 论
近二十年之间,直接数字频率合成技术发展的极为迅速,渐渐成为了最先进的频率合成技术。它的频率分辨率高和切换速度快以及相位变化连续等等优势,使得对它的应用也是愈发广泛。在性能方面,因为采用了数字合成技术,所以性能相比之前一般的频率合成有了极大的提升。 本文从信号发生器的原理理论等各个方面,联系实际,对DDS技术进行了十分全面的分析研究。在设计中,不仅对DDS输出信号的频谱对了分析,结合理论分析,最后用FPGA实现了基于DDS的波形信号发生器。在整个设计完成后,最系统的软件和硬件部分都进行了全面的测试,对实验结果进行分析,表明此次设计达到了最初的设计要求。 在完成本次信号发生器设计工作之后,再一次分析这个过程中遇到的难题,能够清晰的发现自己在理论知识方面还有很大的欠缺,并且在实际操作与理论知识相结合时还是不能游刃有余。在某种意义上来讲,本次设计也为自己确立了以后的发展方向,
|