毕业设计(论文)-基于DDS芯片AD9951的信号发生器_第1页
毕业设计(论文)-基于DDS芯片AD9951的信号发生器_第2页
毕业设计(论文)-基于DDS芯片AD9951的信号发生器_第3页
毕业设计(论文)-基于DDS芯片AD9951的信号发生器_第4页
毕业设计(论文)-基于DDS芯片AD9951的信号发生器_第5页
已阅读5页,还剩25页未读 继续免费阅读

下载本文档

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

文档简介

1、基于DDS芯片AD9951的精密信号发生器设计 摘 要直接数字频率合成(Direct Digital Frequency Synthesis简称DDS)是近年来迅速发展起来的一种新的频率合成方法。而AD9951是美国模拟器件公司(ADI)最新推出的高集成度DDS芯片。本设计采用该芯片,以AT89S52单片机为控制,采用AT24C02来存储重要的系统数据,由1602点阵式字符型液晶显示模块作为显示器,并加上一个小键盘构成了精密信号发生器。要求其输出频率范围为0160MHz、最小步进为10Hz或者1Hz、输出信号幅度大于0.3Vp-p、杂散小、有掉电数据保持功能。文中详细介绍了DDS的工作原理以及

2、该信号发生器的软、硬件设计方案,并给出了具体的程序设计。指标关键词:直接数字频率合成(DDS)、AD9951、AT89S52、信号发生器、频率控制字直接数字频率合成(Direct Digital Frequency Synthesis简称DDS)是近年来迅速发展起来的一种新的频率合成方法,广泛应用于通讯、导航、雷达、遥控遥测、电子对抗以及现代化的仪器仪表工业等领域。而AD9951是美国模拟器件公司(ADI)最新推出的高品质、高集成度DDS芯片。本设计采用该DDS芯片作为核心元件, 以AT89S52单片机为主控器件、并辅以AT24C02存储重要的系统数据、1602点阵式字符型液晶显示模块作为显示

3、器,构成了一种精密的DDS信号发生器。文中详细介绍了DDS的工作原理以及该精密信号发生器的软、硬件设计方法,并给出了具体的程序设计方案。设计出的信号发生器,输出频率范围为0160MHz、最小步进为10Hz或者1Hz、输出信号幅度大于0.3Vp-p、杂散小。关键词:直接数字频率合成(DDS)、AD9951、AT89S52、信号发生器、频率控制字该芯片能以早期DDS 1/10的功耗提供速度高达400 MHz 的内部时钟,而合成频率高达160 MHz。掌握直接数字频率合成(DDS)芯片AD9951/9952的工作原理和管脚功能,设计一个由AT89S52单片机、

4、AD9951/9952芯片、1602点阵式字符型液晶显示模块和小键盘构成的精密信号发生器。要求电路简洁、人机界面友好且有一定容错性、输出稳定、抗干扰能力强、有掉电数据保持功能、输出频率范围为0.5MHz160MHz连续输出、最小步进为10Hz或者1Hz、输出信号幅度大于0.3Vp-p、杂散小。An exact signal generator base on ofthe MicroController Unit and the DDS chip-AD9951AbstractAD9951 is the newest product of ADI Corporation. The device i

5、s a 400 MSPS direct digital synthesizer (DDS) product that can generating a resultant frequency of up to 160 MHZ ,while dissipating <200 mw.The exact signal generator introduces the AD9951,together with the MicroController Unit of AT89S52 as controller.In addition,this design adopts the 1602 of L

6、CD as display screen and a keyboard. In this text,I have explained and recommended the design scheme of software and hardware of the product in detail,providing the specific program.Keyword: DDS AD9951 Control-register Frequency tuning word Transmissible format of data 1、前言信号源作为一种基本电子设备,无论是在教学、还是在科学

7、技术研究中,都有着广泛的使用。随着科学技术的发展和测量技术的进步,对信号源的要求越来越高,普通的信号发生器已无法满足目前日益发展的数字技术领域科研和教学的需要。这就要求设计信号发生器要解决怎样获得稳定,准确,连续可调的频率输出的问题,解决这一问题的一个较好的方法就是使用频率合成技术。频率合成一般有三种方法:直接模拟合成法、锁相环合成法和直接数字合成法。直接模拟合成法设备复杂、体积大、功耗大,且步进不易控制,目前已基本不被采用;锁相环合成法存在高分辨率和快转换速度之间的矛盾,一般只能用于大步进频率合成技术中;直接数字频率合成(Direct Digital Frequency Synthesis简

8、称DDS)是近年来迅速发展起来的一种新的频率合成方法。该技术是一种新兴的频率合成技术,他具有频率分辨率极高、频率切换速度快、切换相位连续、输出信号相位噪声低、可编程、全数字化易于集成、体积小、重量轻等优点。随着微电子技术的迅速发展,直接数字频率合成器得到了飞速的发展,它以有别于其它频率合成方法的优越性能和特点成为现代频率合成技术中的姣姣者。现已广泛应用于通讯、导航、雷达、遥控遥测、电子对抗以及现代化的仪器仪表工业等领域。目前生产单片DDS集成芯片的厂家很多,但市场上主要是以美国Analog Devices公司和Motorola公司的产品为主。特别是Analog Devices公司生产的AD98

9、XX系列和AD99XX系列产品。在本设计中为了获得低成本,高性能的信号发生器,采用了直接数字频率合成技术,用一片Analog Devices公司的单DDS集成芯片和微控制器组合进行设计,达到了预期的设计效果。2、DDS的结构及原理2.1、DDS的结构及工作原理直接数字频率合成是采用数字化技术,通过控制相位的变化速度,直接产生各种不同频率信号的一种频率合成的方法。DDS的结构原理图如图所示,它由相位累加器、正弦表、转换器等组成。参考时钟r由一个稳定的晶体振荡器产生,用它来同步整个合成器的各个组成部分。相位累加器由位加法器与位相位寄存器级联构成,类似于一个简单的加法器。每来一个时钟脉冲,加法器就将

10、频率控制字与相位寄存器输出的累加相位数据相加,然后把相加后的结果送至相位累加器的数据输入端。相位寄存器就将加法器在上一个时钟作用后产生的新相位数据反馈到加法器的输入端,以使加法器在下一个时钟的作用下继续将相位数据与频率控制字相加。这样,相位累加器在参考时钟的作用下进行线性相位累加。当相位累加器累加满量时,就会产生一次溢出,完成一个周期性的动作,这个周期就是合成信号的一个周期,累加器的溢出频率也就是DDS的合成信号的频率。 DDS的工作原理:DDS的基本原理是利用采样定量,通过查表法产生波形,在参考时钟r的控制下,频率控制字由累加器累加以得到相应的相位数据,把此数据作为取样地址,来寻址正弦表进行

11、相位幅度变换,输出不同的幅度编码;再经过转换器得到相应的阶梯波;最后经低通滤波器对阶梯波进行平滑处理,即可得到由频率控制字决定的连续变化的输出正弦波。 DDS的输出频率0、参考时钟频率r、相位累加器长度以及频率控制字之间的关系为:DDS的频率分辨率为:在理想情况下,DDS等效电路如下图所示,图中假设DDS相位累加器至波形存储器间无截断(累加器输出与波形存储器地址宽度相等)、波形存储器容量无限、DAC和LPF都是完全理想的。这样DDS就等效为一个完全理想的采样保持电路。 其时域输出为:对其做傅氏变换得到频域响应:由上式看出,理想DDS输出频谱中只有采样时钟及输入频率的混合产物,其主要杂波分量遵循

12、Nyquist抽样定理,杂波分量出现在参考频率与输出频率的组合处,即:Nfc±fo(N=0,±1,±2,)处。在fo处的信号最强,距输出频率最近的杂波分量为fefo(见图3所示),而无新增频率分量,在DAC之后只要接入一高性能低通滤波器,就可得到期望的输出频率。 fo 2.2、新一代DDS芯片的性能新一代的直接数字频率合成器采用全数字的方式实现频率合成,与传统的频率合成技术相比,具有以下特点:(1)频率转换快。直接数字频率合成是一个开环系统,无任何反馈环节,其频率转换时间主要由频率控制字状态改变所需的时间及各电路的延时时间所决定,转换时间很短。(2)频率分辨率高、

13、频点数多。DDS输出频率的分辨率和频点数随相位累加器的位数的增长而呈指数增长,分辨率高达。(3)相位连续。DDS在改变频率时只需改变频率控制字(即累加器累加步长),而不需改变原有的累加值,故改变频率时相位是连续的。(4)相位噪声小。DDS的相位噪声主要取决于参考源的相位噪声。(5)控制容易、稳定可靠、性价比极高。目前生产新一代单片DDS集成芯片技术比较成熟的主要是美国模拟器件公司(Analog Devices)和摩托罗拉公司(Motorola)两大公司的产品。在国内使用得比较多的是美国模拟器件公司的产品,因为该公司的产品品种齐全,更新快,且向下兼容,设计人员可以按不同的要求选用不同的型号。本设

14、计选用的是美国模拟器件公司的单片DDS集成器件AD9851。表1-1列出新一代DDS系列AD99X性能参数: 表1-1美国模拟器件公司(ADI)最新发布的直接数字合成器AD995x系列产品,采用已申请专利的算法和0.18微米工艺,比以往版本的产品功耗降低90%。这些新系列芯片能以早期DDS 1/10的功耗提供速度高达400 MHz 的内部时钟。AD995x系列为:AD9951、AD9952、AD9953、AD9954。这个系列的产品均是以1.8V 单电源供电。这些新型的DDS组件为业界首款产生400MSPS时钟产品,在功率消耗低于200 mW下,合成频率还高达160MHz。该DDS系列包括一个

15、集成的14位数模转换器(DAC)、片内125位随机存储器(RAM)、相位与幅度控制以及多芯片同步控制的功能。AD9951板带14位D/A;AD9952包含一个高速比较器;AD9953具有用于非线性相位/频率扫描的RAM;AD9954则含一个高速比较器、RAM和自动线性频率扫描功能。AD995X系列的典型应用包括卫星通信、宽带网、雷达、测试和测量和仪器仪表。3. AD9951芯片介绍3.1 引脚与寄存器介绍采用48脚TQFP/EP封装,其引脚定义和设置见硬件设计部分,它有6个寄存器,分别是控制寄存器CFR1、控制寄存器CFR2、幅度大小控制寄存器ASF、幅度斜率控制寄存器ARR、频率控制寄存器F

16、TW、相位控制寄存器POW,其内部寄存器每一位设置见附录,AD9951芯片如图3-1。 图3-13.2.AD9951芯片的性能特性:AD9951是采用先进的DDS技术开发的高集成度DDS器件。它内置高速、高性能D/A转换器,可用为数字编程控制的频率合成器,能产生160MHz的模拟正弦波。通过AD9951的串行I/O口输入控制字可实现快速变频且具有良好的频率分辨率。其主要特性如下:内置400MSPS时钟;内含14位DAC;相位、幅度可编程;有32位频率控制字、相位偏移字可用串行I/O控制;采用1.8V电源供电;可420倍倍频;支持大多数数字输入中的5V输入电平;可实现多片同步。 AD9951芯片

17、的内部框图如图3-2所示。图3-2 AD9951内部结构图4.系统硬件设计:硬件总体框图如图4-1所示:图4-1整个系统上电后,单片机启动DDS、对LCD进行初始化,预置完毕后向单片机发出一应答.接着单片机读取存储芯片中作为系统缓存器的数据,送到LCD显示,并把LCD显示的内容转换为DDS的频率数据,送到已经启动DDS芯片中,输出相应的频率。然后进入键盘扫描程序,判断键盘按下,若有效键按下则单片机执行相应的功能模块后,再返回键盘扫描程序处于等候状态。 4.1 单片机控制电路4.1.1 AT89S52单片机介绍本系统的微处理控制器选用的是AT89S52,它是美国Atmel公司生产新一代的51系列

18、芯片。Atmel公司对89S51/2在工艺上进行了改进,采用0.35新工艺,成本降低,而且将功能提升,增加了竞争力。89CXX与89SXX可以兼容。更重要的是AT89SXX支持在线编程,非常方便。AT89S52具有如下特点:40个引脚,8k Bytes Flash片内程序存储器,256 bytes的随机存取数据存储器(RAM),32个外部双向输入/输出(I/O)口,5个中断优先级2层中断嵌套中断,2个16位可编程定时计数器,2个全双工串行通信口,看门狗(WDT)电路,片内时钟振荡器。此外,AT89S52设计和配置了振荡频率可为0Hz并可通过软件设置省电模式。空闲模式下,CPU暂停工作,而RAM

19、定时计数器,串行口,外中断系统可继续工作,掉电模式冻结振荡器而保存RAM的数据,停止芯片其它功能直至外中断激活或硬件复位。同时该芯片还具有PDIP、TQFP和PLCC等三种封装形式,以适应不同产品的需求。主要功能特性: l 兼容MCS-51指令系统l 2个双向I/O口 l 3个16位可编程定时/计数器l 全双工UART串行中断口线l 2个外部中断源l 中断唤醒省电模式l 看门狗(WDT)电路l 灵活的ISP字节和分页编程l 4.5-5.5V工作电压l 时钟频率0-33MHzl 256x8bit内部RAMl 低功耗空闲和省电模式l 3级加密位l 软件设置空闲和省电功能l 双数据寄存器指针l 8k

20、可反复擦写(>1000次)ISP4.1.2 键盘说明系统中的键盘接P1口,键盘的定义如表 4-1。P1.0P1.1P1.2P1.3P1.4P1.5P1.6P1.7校准保存选择左移右移减一加一确定表 4-14.1.3、单片机与串行EEPROM芯片AT24C02的接口电路本系统中,关机断电时的数据在下次开机时要重新调用,以及用户认为有用的频率,为方便重新调用而保存下来的频率信号(本系统中支持20通道的频率信号的重复保存和调用);另外,系统的输出频率信号的精度和稳定度,很大程度上取决于DDS所采用的时钟源(本例中用外接晶振),而实际使用的晶振源是有一定误差的,应允许用户根据实际情况进行校正并保

21、存以供系统调用合成所需的信号。因此,系统有关参数的断电保存非常重要。所以,我们在本系统中,选择了I2C总线标准的AT24C02存储芯片。该芯片是美国ATMEL公司生产的低功耗CMOS串行EEPROM,内含256×8位存储空间,具有工作电压宽(2.55.5V)、擦写次数多(大于10000次)、写入速度快(小于10ms)等特点。I2C总线是一种用于IC器件之间连接的二线制总线。它通过SDA(串行数据线)及SCL(串行时钟线)两根线在连到总线上的器件之间传送信息,并根据地址识别每个器件,单片机就是通过这两根线对24C02控制的。其引脚排列如图4-2所示。图4-2 AT24C02引脚排列如图

22、AT24C02 的各引脚功能如下VCC : 电源GND : 地A1、A2 : 页地址A3 : 器件地址SDL : 串行数据输入端SCL :串行时钟输入端WP :写保护I2C的按页写编程操作如图4-3所示 图4-3 PAGE WRITEI2C的从当前地址读编程操作如图4-4所示图4-4 Current Address ReadI2C的任意地址读编程操作如图4-5所示图4-5 Random ReadI2C的连续读编程操作如图4-6所示(连续读操作可以是以当前地址读或任意地址读开始的之后操作)图4-6 Sequential ReadAT24C02的1、2、3脚是三条地址线,用于确定芯片的硬件地址。在

23、本应用电路中它们都接地,第8脚和第4脚分别为正、负电源。第5脚SDA为串行数据输入/输出,数据通过这条双向I2C总线串行传送,SDA和单片机的P0.0连接。第6脚SCL为串行时钟输入线,它和单片机的P0.1连接。SDA和SCL都需要和正电源间各接一个5.1K的电阻上拉。第7脚需要接地。4.1.4 字符型液晶显示模块 系统中选用的 1602带有背光的液晶模块,是5x7点阵图形显示字符的液晶显示器,它显示的容量为2行16个字,具有简单而功能较强的指令集,可实现字符移动/闪烁等功能。与MCU的传输可采用8位并行传输或4位并行传输两种方式。液晶显示器由于体积小、重量轻、功耗低等优点,日渐成为各种便携式

24、电子产品的理想显示器。从液晶显示器显示内容来分,可分为段式、字符式和点阵式三种。其中字符式液晶显示器以其价廉、显示内容丰富、美观、无须定制、使用方便等特点成为LED显示器的理想替代品。字符型液晶显示器专门用于显示数字、字母、图形符号并可显示少量自定义符号。这类显示器把LCD控制器、点阵驱动器、字符存贮器等做在一块板上,再与液晶屏一起组成一个显示模块,因此,这类显示器安装与使用都较简单。其微功耗、体积小、显示内容丰富、超薄轻巧的诸多优点,使它得到越来越广泛的应用。数据线被连到P1口,P3.7接RS端,P3.6接RW端,P3.5接E端表4-2是1602字符型液晶模块引脚配置及功能说明。表4-2单片

25、机整机控制电路如图4-7图4-74.2 AD9951应用电路4.2.1 AD9951外围引脚电路配置说明 电路图如图4-8所示:图4-8注:凡是AD9951芯片注明是DGND的引脚接数字地、注明是AGND的引脚接模拟地、注明是DVDD的引脚接数字电压,但对于接数字电压的引脚而言有的接3.3V的数字电压有的接1.8V的数字电压,取决于不同的引脚说明,第43引脚(DVDD-I/O)能够由1.8V和3.3V的数字电压供电,本电路图中的此引脚用3.3V数字电压,而第2、34引脚(DVDD)则只能用1.8V的数字电压.第1引脚(I/O UPDATE),在该引脚的上升沿可把内部缓冲存储器中的内容送到I/O

26、寄存器中。引脚电平的建立和保持与SYNC-CLK输出信号有关,所以该引脚也作为一根控制引线接到单片机P2.5,由单片机控制。第11引脚(CLKMODESELECT)振荡器模式选择控制,当此引脚为高电平时,选择内部振荡源,并在REFCLK和REFCLKB(就是引脚8和9)接一个晶振,由引脚10(CYRSTAL OUT)输出,当此引脚为低电平时,选择外部振荡源,在不使用的引脚(8)串接0.1UF的电容和1.8V模拟电压,在第9(OSC)脚接外部振荡源,引脚10(CYRSTAL OUT)不用悬空,本电路采用外部振荡源。第12引脚(LOOP_FILTER)应与AVDD间串联一个1k电阻和一个0.1F电

27、容接到1.8V的模拟电压。第20引脚(/IOUT)信号输出端,使用时应接一个电阻到AVDD,第21引脚(IOUT)信号输出端,应接一个电阻到AVDD,并通过低通滤波后输出。第23引脚(DACBP)为DAC去耦端,使用时应接一个0.01F的旁路电容。第24引脚(DAC_RSET),DAC复位端,使用时应通过一个3k的电阻接至AGND端。第35引脚(PWRDWNCTL)为外部电源掉电控制输入引脚,此处应用电路将该引脚接地。第36脚(RESET)芯片复位端 ,高电平复位。图中三极管有电平转化的作用。第37脚(IOSYNC)为异步串行端口控制复位引脚;为1时,当前I/O操作立即停止;为0时开始新的I/

28、O操作;不用时,此引脚必须接地;应用电路图中将此脚接地。第38脚(SDO),采用3线串口操作时,SDO为串行数据输出端。采用2线串口操作时,SDO不用,可以不连,本应用电路图中此脚悬空不用,采用2线串口操作。第39脚(CS)为片选端,低电平有效,允许多芯片共用I/O总线,本应用电路将此脚接地。第40引脚(SCLK)I/O操作的串行数据时钟输入端,电路中AD9951通过一个电阻串接到单片机的P2.3口线,通过对这个控制口线的编程操作,模拟控制时序,通过SDIO送入指令和数据到AD9951的内部缓冲存储器。第41脚(SDIO)采用3线串口操作时,SDIO为串行数据输入端,采用2线操作时,SDIO为

29、双向串行数据端。电路中AD9951通过一个电阻串接到单片机P2.4,作为串行数据输入端。第45脚 (SYNC_CLK)时钟输出脚,为内部时钟的1/4,可用作外围硬件同步,本电路不用故悬空。第44脚(SYNC_IN)为同步多片AD9951输入信号,使用时与主AD9951的SYNC_CLK的输出相连,应用电路只需要单个AD9951,因此此脚悬空。第46引脚(OSK)接地,OSK不能被编程。本电路图将此脚接地。4.2.2.晶振电路AD9951 时钟输入,可以选择内部振荡源,也可以选择外部振荡源,在本设计中,选择外部振荡源,需要在AD9951的OSC引脚接一个外部晶振,此晶振电路图如图4-9:图4-9

30、4.2.3.滤波缓冲放大电路由于AD9951采用全数字结构,不可避免地引入了杂散。其来源主要有三个:相位舍位误差造成的杂散;幅度量化误差(由存储器有限字长引起)造成的杂散和DAC非理想特性造成的杂散。必须对AD9951输出的频率进行滤波处理,同时AD9951输出频率上限值为160MHZ,对高于此值的频率也必须进行滤波处理;而且为了使滤波后衰减的信号放大,需要用放大电路。其电路图如图4-10所示。由于考虑到滤波缓冲放大电路与已有的 DDS的PCB板之间的电路的接口可能会带来较大的干扰,所以该部分电路就没有加入了该系统中了,等到以后有时间的时候再将所有模块都做到一个板上的时候,就可以毫无顾忌的加上

31、该部分电路了!图4-104.3 电源电路其中包括9V电源、+5V和3.3V电源、1.8V数字电源和1.8V模拟电源模块,在此应用电路中利用9V电源级接产生+5V的电压输出,而3.3V的电压是由R2/(R1+R2)×5V所得。得到的+5V电压一方面可以供给第三级产生1.8V的数字电压和模拟电压;另一方面,可以提供给单片机系统,包括为LCD、AT24C02及上拉电阻提供电压。3.3V、1.8V则是AD9951芯片对电平的要求而设计。电平的要求是:第43引脚(DVDD-I/O)由1.8V或3.3V的数字电压供电,第2、34引脚(DVDD)则只能用1.8V的数字电压. 电源电路图如图4-11

32、。 图4-11 5.系统软件设计该系统软件采用混合语言在KEILC软件下编写。计算频率控制字的函数由汇编语言编写,其他的用C语言编写。程序模块主要包括:负责各种初始化工作和循环判键工作的主程序。负责用户输入所需各种频率的键盘中断管理程序。负责掉电数据保存的I2C通信程序。以及LCD显示程序,计算频率控制字程序等。每个模块由单独的一个文件来完成。整个系统的程序结构框图如图5-1所示。主程序键盘中断管理程序计算控制字程序LCD显示程序IIC通信程序图5-1 系统的程序结构框图5.1、主程序主程序主要完成系统的上电初始化工作,包括单片机资源的初始化、LCD显示屏的初始化、AD9851 的初始化和循环

33、判键工作。用户可以通过两种方法输入所需频率:用数字键输入或者用加一、减一、移位功能键输入。当用数字键输入时要配合OK键使用。状态键是用来进行状态切换,即正常模式和晶振校正模式之间的切换。当切换到晶振校正模式后数字键就无效,只能用功能键进行晶振的校正操作。其流程图见图 5-2 所示,完整程序见附件1 main.c文件。初始化单片机初始化LCD初始化AD9951循环判键校准键保存键选择键左移键右移键减一键加一键确定键图5-2 主程序流程图其程序的结构组织如下:void main(void) dog_eat(); /开看门狗 beep=0; /关蜂鸣器 read_lcd1(0x20); /从AT24

34、C02取上次掉电时的数据送LCD osc=ChangeBin_OSC(0x10); /本振计算 dog_eat(); /喂狗 trans_FTW(); /算频率控制字 lcd_init(); /LCD显示初始化 lcd_xie(lcd1); /LCD显示 trans_ad9951(); /初始化AD9951 dog_eat(); /喂狗 posi_mark=0xcb; lcd_mark(posi_mark); 光标定位 while(1) key_port=0xff; key=key_port; /判断按键/-/校准 保存 选择 左移 右移 - + 确定/- switch(key) case 0

35、xfe: xiaozhun();delay5ms(10);break; /校准键程序 case 0xfd: save();delay5ms(10);break; /保存键程序 case 0xfb: choose();delay5ms(10);break; /选择键程序 case 0xf7: move_left();break; /左移键程序 case 0xef: move_right();break; /右移键程序 case 0xdf: data_sub();break; /减一键程序 case 0xbf: data_add();break; /加一键程序 case 0x7f: make_su

36、re();delay5ms(10);break; /确定键程序 default:dog_eat();break; 5.2 6个寄存器设置由于设计只对输出频率进行控制,使AD9951输出相应的频率。对相位、幅度不作相应的控制要求,所以对相位幅度的设置采用默认状态,以下是在本设计中对AD9951内部寄存器的相关设置。控制寄存器1的设置:对于本应用电路来说,先传高位则设CFR1<8>0;不存在多片AD9951级连的情况,故涉及到多片同步问题的控制位都可以用默认值0,具体见附录中关于控制寄存器1的设置;为了使频率控制字加载时本电路选择当前相位累加器状态不改变的工作方式,则设置CFR1<

37、;13>0且设置CFR1<10>0相位累加器以普通方式工作;振幅、角度变换采用余弦函数,则设置CFR1<12>0;允许时钟输入电路工作,则设置CFR1<4>0;SDIO引脚可进行输入输出双向串行操作,则设置CFR1<9>0;不对OSK引脚编程来控制幅度与时间斜率,则设置CFR1<25>=0,此时CFR1<24>不用,设为0即可;涉及到省电模式的都可用默认0,故本应用电路写入到控制寄存器CFR1的32位数据为00 00 00 00 H. 控制寄存器2的设置:对于进行多片同步设置的,我们都可以在此应用电路图中采用默认值0

38、,比如,设置CFR2<11>0,高速同步步进关闭;设置CFR2<10>0。硬件手动同步功能无效;由于采用外部振荡源则设置CFR2<9>0 ,CRYSTAL OUT引脚不工作;采用外部晶振30MHZ,为了将芯片工作频率接近最大工频400MHZ,设置CFR2<7:3>为01101,即设置倍频数为13;为了使VCO 操作范围250MHZ400MHZ,则设置CFR2<2>=1;对于工作电流选择最大工频所需要的电流值150 UA,CFR2<1:0>=11。故送入CFR2的数据是,00 00 6F H。ASF寄存器的设置:本应用电路O

39、SK不被编程操作故采用ASF寄存器默认输出,可设置为00 00 H。ARR寄存器的设置:本应用电路由于不对幅度做特殊要求,故可以设置为00 00H。频率控制寄存器FTW0的设置:应用中采用外部振荡源,外部晶振为30MHZ,AD9951工作频率可达400MHZ,输出频率一般只为工作频率的40%,最大输出频率达160MHZ,为了能输出尽量高的频率,所设的倍频数是13,那么fs=13×30MHZ,这样开机初始化时要输出fo=10MHZ的频率, 可算得FTW=110127367,转换成16进制就是06906907H。频率转换程序算法就是基于FTW= 232fo /fs这个表达式的。初始化可以

40、设置为06906907H对相位偏置寄存器POW0的设置:本应用电路选择的是相位零偏移 故可设POW=0,因此=0,设置送入到此寄存器的数据是:00 00 H。5.3 AD9951写入控制时序时序图如图5-3:图5-3AD9951的控制数据格式:1、给出要写入的寄存器的地址;2、把要写入该寄存器的内容送出;3、UPDATA发一个脉冲,把数据打入寄存器AD9951共有6个控制寄存器,可以通过设置这些寄存器的内容完成多种功能。对于只关心频率参数的应用场合,可以只简单地对控制寄存器2(CFR2)和频率控制寄存器(FTW0)进行设置即可。而CFR2的0-7位控制着内部倍频模块的倍频数,其他位可以忽略不用

41、管他(使用其默认值)。CFR2寄存器的地址为0x01H。频率控制寄存器(FTW0)的地址为0x04H,长度为32位,负责设置输出信号的频率值。在这种应用场合,AD9951的控制数据格式为:1、送出CFR2寄存器的地址0x01H;2、送出要写入CFR2寄存器的内容(倍频数);3、UPDATA发一个脉冲, 把数据打入寄存器;4、送出频率控制寄存器(FTW0)的地址0x04H;5、送出32位频率控制字。6、发一个UPDATA脉冲,把数据打入寄存器;在送数给AD9951的每个通信周期中,SCLK的前8个上升沿用于往AD9951中写入指令字。SCLK剩下的上升沿是留给通信周期第二个阶段的。阶段二是在AD

42、9951和系统控制器间传输数据的。阶段二传输的字节数与即将访问的寄存器密切相关。比如说:访问的是寄存器二(CFR2),就是3个字节的宽度,此时就传输3个字节;如若传输的是频率控制字,则要传4个字节。传完所有数字字节后,一个通信周期完成。在AD9951的串行操作中,指令字节用来指定读/写操作和寄存器地址。由于串行操作是在寄存器级别上发生的,因此串行端口控制器应能识别指令字节寄存器地址和自动产生适当的寄存器字节地址。在串行操作指令阶段和通信阶段,一般先传送指令阶段的指令字,指令阶段对应于SCLK的前8个上升沿,其对应的指令字(8比特)包含的信息如表5-1所示:MSBD6D5D4D3D2D1LSBR

43、/WBXXA4A3A2A1A0表5-1其中R/W位用于决定指令字后的操作是读还是写,高电平为读出,低电平为写入;6、5位的电平高低与操作无关;40位则对应于A4A0,表示操作串行寄存器地址,该地址信息同时包含了与该指令字所在指令段对应的通信段的传送字节数。指令阶段后接着是通讯阶段,传送对应于字节数的几个通信周期。通信周期完成后,AD9951的串口控制器即认为接下来的8个SCLK的上升沿对应的是下一个通信周期的指令字。IOSYNC引脚为高时将立即终止当前的通信周期,而当IOSYNC引脚状态回到低电平时,AD9951串口控制器即认为接下来的8个系统时钟的上升沿对应的是下一个通信周期的指令字,从而保

44、持通信的同步。5.4、频率控制字计算程序合成信号的频率可由公式(1) F = Fm* Fc/ 2n可以得到计算频率控制字的公式如下:Fm=F*2n/Fc (3)可见,计算频率控制字的公式实际上是一个多位数除法程序。以输出频率F=90MHz计算,F*2n=5 5D 4A 80 00 00 00 00。先不考虑晶振误差,以系统时钟为180MHz = A BA 95 00来计算,则被除数是一个8字节数,除数是一个4字节数。当然,如果系统时钟刚好是180MHz则被除数和除数可以去掉一个字节,可以加快运算速度。但是,在实际运用时晶振是有误差的,即系统时钟不可能是非常准确的180MHz,如果在计算时约掉了

45、一个字节,则在进行晶振校正时的校正步进变大,会造成晶振校正不准。因此,在这里要做一个8字节除以4字节的除法程序。如果这个程序采用C语言来完成,则运算速度慢,生成的代码大。所以改用汇编语言编写该函数。 在KEILC里在C代码中调用汇编代码的方法很多,常用的有用预编译指令#pragma asm 和#pragma endasm 来在线插入,或者用函数来完成。即在C代码中生成一个空函数(只声明,不定义),然后用汇编语言编写该函数的功能并单独用一文件保存,再把该文件加入工程文件即可。可见,用该方法更符合模块化编程思想,但用该方法要注意的是汇编文件的文件名要和C中该函数名相同。汇编子程序名和函数名的对应规

46、则与有无参数传递,及是否是可重入函数有关,其关系如下表所示。另外还需要注意的是参数的传递及返回规则,在KEILC中函数的参数和返回值传递规则如下表所示。函数名的转换关系:说明符号名解释Void func(void)FUNC无参数传递或不含寄存器参数的函数名不作改变转如目标文件中名字不作改变。Void func(char)_FUNC带寄存器参数的函数加上“_”字符前缀以示区别Voidfunc(void) reentrant_?FUNC可重入函数加上“_?”字符前缀以示区别参数传递规则:参数序号CharIntLong,float通用指针1R7R6、R7R4、R5、R6、R7R1、R2、R32R6R

47、4、R53R5R3、R2函数返回值规则:返回值类型寄存器BitC(标志位)Char/unsigned char(1Byte指针)R7Int/unsigned int (2Byte指针)R5、R7Long/unsigned longR4、R5、R6、R7FloatR4、R5、R6、R7通用指针R1、R2、R3当函数的传递参数超过以上数目时,KEILC将在RAM中开辟一个默认段来传递剩余的参数。在该计算频率控制字程序中,要传递的参数为2个 long 型数据。一个是输入频率参数,另一个为系统校正的晶振频率。由于KEILC在当前寄存器中只能传递一个long型参数,所以另外一个long型参数只能采用绝对

48、存储变量来传递,即用 _at_关键字来声明一个全局变量,因为为它分配了一个固定的地址,所以在汇编程序中只要从该地址中把校正晶振频率数据取出即可。该子程序返回一个long型的频率控制字数据。计算频率控制字的多位数除法程序可以分解为一系列的移位相减运算。我们知道,任何一个数都可以用2的N次方来表示,该算法就是用一个N层循环以2的N次方来累加商的,当第一次循环完,用差值代替被除数继续循环。直至做到被除数(差值)小于除数为止。该除法程序用软件模拟,在24MHZ晶振下该子程序需要花几个ms的计算时间。其算法流程 图5-4所示,完整程序见附件2 count_f.asm文件。入口参数传递商、商缓存清零C=1

49、C=1存商返回C=1累加商被除数除数商缓存加一余数除数除以2被除数除数乘以2商缓存乘以2除数除以2用被除数除数覆盖被除数商加一N YY NYN 图5-4计算控制字算法流程图其部分程序如下:;-;从C中调用汇编子程序的标准程序段COUNT_F即为C中的函数名;-PUBLIC_COUNT_F MOVEPSEGMENTCODERSEGMOVEP_COUNT_F: ;-;传递入口除数;在C中用_at_关键字申明的晶振频率变量ulong data osc _at_ 0x6a;-MOVR0,6DH MOVR1,6CHMOVR2, 6BHMOVR3, 6AH;-;传递入口被除数;四个字节的二进制频率参数乘以

50、232次方;-MUL_24: MOV57H, R4MOV56H, R5MOV55H, R6MOV54H,R7MOV53H,#0MOV52H,#0MOV51H,#0MOV50H,#0;-; 商、商缓存清零;-DIV8_4:MOV68H,#0; 外循环计数器清零MOV60H,#0MOV61H#0MOV62H,#0MOV63H,#0MOV64H,#0MOV65H,#0MOV66H,#0MOV67H,#0END5.5、LCD显示程序因为LCD与单片机是采用直接连接的方式连接的,所以要用软件的方法来模拟读写LCD的时序。以下给出了对LCD的复位过程和几个访问LCD的关键函数的说明。详细的代码见附件ad9

51、951.c文件。对其初使化过程是:1、LCD开机复位,写入指令38H,功能设定为8位,2行,5*7点阵;2、写入指令08H,LCD关闭,写入指令01H,清屏;3、写入指令06H,AC递减,设置成从地低位址往高位地址显示;4、写入指令0dH,LCD光标不显示、光标闪烁;与LCD有关的几个函数说明如下:void Delay5Ms(void) 延时为5Ms的延时函数;void lcd_wait(void) 用于检测LCD是否忙,忙的话就等待;void lcd_writer(void) 向LCD写数据;void lcd_enable(void) LCD写控制,LCD允许void lcd_init(void) 完成LCD初始化工作参数void lcd_mark(unsigned char position) 光标定位于position地址;void lcd_xiebit(unsigned char position,unsigned char xiedata) LCD写位,且光标停置,用于改变某一显示地址上的数据的;void lcd_xie(

温馨提示

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

评论

0/150

提交评论