《数字频率合成器的设计.ppt》由会员分享,可在线阅读,更多相关《数字频率合成器的设计.ppt(100页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、第第7章章 数字频率合成器的设计数字频率合成器的设计 第第7章章 数字频率合成器的设计数字频率合成器的设计 7.1 设计任务设计任务 7.2 设计方案论证设计方案论证7.3 系统硬件设计系统硬件设计7.4 系统软件设计系统软件设计 7.5 系统设计总结系统设计总结第第7章章 数字频率合成器的设计数字频率合成器的设计 7.1 7.1 设计任务设计任务设计一个数字频率合成器,该数字频率合成器的输出信号波形为正弦波,输出信号的频率为f0=01 MHz,频率最小步进间隔为0.08 Hz,输出电压峰峰值为Up-p=0.35 V,供电电源为+5 V。第第7章章 数字频率合成器的设计数字频率合成器的设计 7
2、.2 7.2 设计方案论证设计方案论证7.2.1 MCU和锁相环路相结合的实现方案MCU和锁相环路相结合的实现方案如图7.1所示。图中,在基本锁相环路的反馈支路中接入了具有高分频比的可变分频器,用MCU控制分频器的分频比就可得到若干个标准频率输出。为了得到所需的频率间隔,往往在电路中还加入一个前置分频器。第第7章章 数字频率合成器的设计数字频率合成器的设计 图7.1 MCU和锁相环路相结合的实现方案电路框图第第7章章 数字频率合成器的设计数字频率合成器的设计 1.前置分频器分频比的确定 由得 ,故 f=f0(N+1)-f0(N)=式中f为频率间隔。由 得 ,若f0的范围为f0 minf0 ma
3、x,则N对应有NminNmax。7.2.2 MCU和DDS芯片相结合的实现方案DDS的基本原理是利用采样定理,通过查表法产生波形。DDS的结构有很多种,其基本的电路原理可用图7.2表示。第第7章章 数字频率合成器的设计数字频率合成器的设计 图7.2 DDS 的原理框图第第7章章 数字频率合成器的设计数字频率合成器的设计 相位累加器由N位加法器与N位累加寄存器级联构成。每来一个时钟脉冲fs,加法器将频率控制字k与累加寄存器输出的累加相位数据相加,把相加后的结果送至累加寄存器的数据输入端。累加寄存器将加法器在上一个时钟脉冲作用后所产生的新相位数据反馈到加法器的输入端,以使加法器在下一个时钟脉冲的作
4、用下继续与频率控制字相加。这样,相位累加器在时钟作用下,不断对频率控制字进行线性相位累加。由此可以看出,相位累加器在每一个时钟脉冲输入时,把频率控制字累加一次,相位累加器输出的数据就是合成信号的相位,相位累加器的溢出频率就是DDS输出的信号频率。第第7章章 数字频率合成器的设计数字频率合成器的设计 用相位累加器输出的数据作为波形存储器(ROM)的相位取样地址,这样就可把存储在波形存储器内的波形抽样值(二进制编码)经查表查出,完成相位到幅值的转换。波形存储器的输出送到D/A转换器,D/A转换器将数字量形式的波形幅值转换成所要求合成频率的模拟信号。低通滤波器用于滤除不需要的取样分量,以便输出频谱纯
5、净的正弦波信号。利用 MCU和DDS芯片相结合的实现方案如图7.3所示。第第7章章 数字频率合成器的设计数字频率合成器的设计 图7.3 MCU和DDS芯片相结合的电路框图第第7章章 数字频率合成器的设计数字频率合成器的设计 7.3 系统硬件设计系统硬件设计 7.3.1 单片机与AD9835接口电路设计1.AD9835原理及结构1)DDS工作原理第第7章章 数字频率合成器的设计数字频率合成器的设计 AD9835 中使用的DDS 技术从连续信号的相位出发,将一个余弦信号取样、量化、编码,形成一个余弦函数表存储在ROM 中。合成时改变相位增量,由于相位增量不同,一个周期内的取样点数也不同,这样产生的
6、正弦信号频率也就不同,从而达到频率合成的效果。在这里,余弦波信号本身是非线性的,而其相位是线性的(如图7.4 所示)。第第7章章 数字频率合成器的设计数字频率合成器的设计 图7.4 余弦波信号及其相位第第7章章 数字频率合成器的设计数字频率合成器的设计 因此,每隔一段时间t(时钟周期),有对应的相位变化P,即P=t=2ft (7.1)从式(7.1)可得合成信号的频率f为 (7.2)式中,fmt为固定时钟频率,fmt1t。因此,通过改变相位值P,就可以改变合成信号的频率f。第第7章章 数字频率合成器的设计数字频率合成器的设计 DDS 芯片AD9835的原理框图如图7.5 所示。其中,相位累加器为
7、32位,取其高12位作为读取余弦波形存储器的地址。当时钟使相位累加器的输出也即余弦ROM 寻址地址每递增频率设定为K时,对应的波形相位变化为(7.3)第第7章章 数字频率合成器的设计数字频率合成器的设计 图7.5 AD9835的原理框图第第7章章 数字频率合成器的设计数字频率合成器的设计 因此,改变相位累加器设定值K,就可以改变相位值,从而改变合成信号频率f。经简化,合成信号频率可由下式决定:式中,fmt=50 MHz,由高稳定度晶体振荡器获得,K值在1K232之间,最低频率fmin=fmt/232,为0.0116 Hz,这就是频率合成器的频率分辨率。根据Nyquist采样定律可知,重建信号频
8、率最高可达fmt/2,但通常取最高频率fmax=fmt/3。(7.4)第第7章章 数字频率合成器的设计数字频率合成器的设计 2)AD9835芯片内部结构AD9835内部结构框图如图7.6所示,它有一个32位相位累加器,两个32位频率寄存器F0和F1(用于设定K值),四个12位相位寄存器P0、P1、P2、P3。程控切换F0、F1时,可实现相位PSK调制。余弦函数表存储在ROM中。32位相位累加器的输出值截取高12位后与12位相位寄存器Pi值相加,构成12位的相位地址,去寻址余弦ROM表,寻址得到的幅度值经10位的高速D/A转换后成为合成余弦信号。输出信号总谐波分量的畸变量与时钟频率和输出信号频率
9、之比m=fmt/f有关,m值愈大,谐波畸变愈小;m值最小时,谐波畸变最大。为消除m值较小时的谐波畸变,输出端采用LC高阶低通滤波器滤除高次谐波。在设计中采用5阶Butterworth低通滤波器,可以将50 MHz以上的高次谐波功率降低60 dB,可完全满足高精度信号源的要求。第第7章章 数字频率合成器的设计数字频率合成器的设计 图7.6 AD9835内部结构框图第第7章章 数字频率合成器的设计数字频率合成器的设计 3)引脚说明AD9835引脚功能说明如表7.1所示。第第7章章 数字频率合成器的设计数字频率合成器的设计 表7.1 AD9835引脚功能说明 第第7章章 数字频率合成器的设计数字频率
10、合成器的设计 4)命令及控制寄存器说明 AD9835的命令及控制寄存器说明见表7.2表7.8。第第7章章 数字频率合成器的设计数字频率合成器的设计 表7.2 控制寄存器 第第7章章 数字频率合成器的设计数字频率合成器的设计 表7.3 控制寄存器地址 第第7章章 数字频率合成器的设计数字频率合成器的设计 表7.4 命令 第第7章章 数字频率合成器的设计数字频率合成器的设计 表7.5 控制AD9835 第第7章章 数字频率合成器的设计数字频率合成器的设计 表7.6 写数据到寄存器 第第7章章 数字频率合成器的设计数字频率合成器的设计 表7.7 设置SYNC、SELSRC 第第7章章 数字频率合成器
11、的设计数字频率合成器的设计 表7.8 开关、复位、清零 第第7章章 数字频率合成器的设计数字频率合成器的设计 引脚PSELSCT、PSEL0、PSEL1是外加调制信号,可用于对DDS进行直接位控调制,实现数字二值调频(FSK)和数字四值调相(PSK)。引脚FSYNC、SCLK、SDATA用来对DDS进行程控工作模式设定。数据传输方式为同步串行方式。AD9835可以设定为SLEEP、RESET工作方式。在SLEEP工作方式下,功耗为1.75 mW。第第7章章 数字频率合成器的设计数字频率合成器的设计 2.AD9835的典型应用电路如图7.7所示,REFIN与REFOUT相连接,则参考电压为1.2
12、1 V。在引脚REFIN接一个10 nF电容到地。时钟电路由U2构成,U2为50 MHz晶体振荡信号源。SCLK、SDATA、FSYNC与单片机的P1.0、P1.1、P1.2引脚相连,为AD9835提供命令和频率寄存器中的数据,以便实现信号频率的设 置 和 初 相 位 的 设 置。信 号 输 出 端 IOUT接 5阶Butterworth LC低通滤波器,通带截止频率为12 MHz,阻带截止频率为25 MHz,阻带衰减大于60 dB。第第7章章 数字频率合成器的设计数字频率合成器的设计 图7.7 AD9835 应用电路图第第7章章 数字频率合成器的设计数字频率合成器的设计 7.3.2 单片机及
13、按键电路设计1.AT89C2051的主要性能及引脚功能说明AT89C2051的引脚如图7.8所示。AT89C2051的性能如下:(1)和MCS-51产品兼容。(2)2K字节可重编程闪速存储器。(3)1000写/擦除周期。(4)2.76 V的操作范围。(5)全静态操作:024 MHz。(6)两级加密程序存储器。第第7章章 数字频率合成器的设计数字频率合成器的设计 图7.8 AT89C2051的引脚图第第7章章 数字频率合成器的设计数字频率合成器的设计(7)1288位内部RAM。(8)两个16位定时器/计数器。(9)六个中断源。(10)编程串行UART通道。(11)直接LED驱动输出,I/O引脚缓
14、冲器可吸收20 mA电流。(12)一个片内模拟比较器。(13)低功耗空载和掉电方式。(14)15根可编程I/O引线。第第7章章 数字频率合成器的设计数字频率合成器的设计 2.单片机按键电路设计如图7.9所示,单片机采用Atmel公司的89C2051。在 XTAL.1和 XTAL.2之 间 并 联 12MHz晶 振,XTAL.1和XTAL.2分别与地之间接27 pF电容,为单片机提供12 MHz时钟。单片机的机器周期为1s。第第7章章 数字频率合成器的设计数字频率合成器的设计 图7.9 单片机及按键电路图第第7章章 数字频率合成器的设计数字频率合成器的设计 复位电路采用X5045芯片。当程序“跑
15、飞”时,看门狗芯片X5045将单片机复位,从而保证系统能够正常运行。4个按键中,S1为上键,S2为下键,S3为左键,S4为右键。系统通过4个按键对信号输出频率进行设定。上键S1增大频率步进间隔,下键S2减小频率步进间隔,左键S3按照所设定的频率步进间隔减小信号的输出频率,右键S4按照所设定的频率步进间隔增大信号的输出频率。平时引脚在上拉电阻作用下保持高电平,当按键按下时,把引脚拉为低电平,通过程序来判断按键并实现相应的功能。频率间隔与对应值如表7.9所示。第第7章章 数字频率合成器的设计数字频率合成器的设计 表7.9 频率间隔与对应值表 第第7章章 数字频率合成器的设计数字频率合成器的设计 7
16、.3.3 显示电路设计1.PS7219基本原理PS7219是一个高性能、低价格的多位LED显示驱动器。PS7219是武汉力源公司的产品,它在性能上完全兼容国外的产品MAX7219,并且还增添了位闪等功能。其接口采用流行的同步串行外设接口(SPI),可与任何一种单片机方便地接口,并可同时驱动八位共阴极LED数码管或64只独立LED发光二极管。PS7219A型内置一个可靠的P监控电路,可为外部提供一个脉宽大于140 ms、触发门限典型值为4.63 V的高电平复位信号。第第7章章 数字频率合成器的设计数字频率合成器的设计 图7.10 PS7219引脚图第第7章章 数字频率合成器的设计数字频率合成器的
17、设计 PS7219内部具有158 bit RAM功能控制寄存器,可方便寻址,对每位数字可单独控制,刷新不需重写整个显示器。显示亮度可数字控制,每位都具有闪烁使能控制位,引脚CON置高电平,可禁止所有显示,达到降低功耗的效果,但同时并不影响对控制寄存器的修改。PS7219还有一个掉电模式、一个允许用户选择从1位数显示到8位数显示的扫描界限寄存器和一个强迫所有LED接通的测试模式。N个PS7219级联,可实现N8位LED数码管的显示。PS7219的应用很广泛,例如条形图显示、7段显示、工业控制、仪表控制面板、LED模型显示等。PS7219是共阴极显示驱动器,采用脚和两种封装,其引脚排列如图7.10
18、所示。第第7章章 数字频率合成器的设计数字频率合成器的设计 2.显示部分电路设计 如图7.11所示,PS7219与AT89C2051的连接为:RST、LOAD、DIN、CLK分别与单片机的RESET、P3.3、P3.4、P3.5相连,通过串行连接方式,单片机把命令和要显示的数据传送给PS7219。八位数码管用来显示信号发生器的输出频率,其中六位为整数部分,两位为小数部分。即频率最小显示分辨率为0.01Hz,最大输出频率为999 999.99 Hz。第第7章章 数字频率合成器的设计数字频率合成器的设计 图7.11 显示电路原理图第第7章章 数字频率合成器的设计数字频率合成器的设计 7.3.4 系
19、统总体电路图系统总体电路图如图7.12所示。图中,运放AD817构成输出信号幅度调节电路。第第7章章 数字频率合成器的设计数字频率合成器的设计 图7.12 系统整体电路图第第7章章 数字频率合成器的设计数字频率合成器的设计 7.4 7.4 系统软件设计系统软件设计7.4.1 概述整个软件采用模块化程序设计,用C语言编程,便于移植,可读性强,主要分为显示模块disp.c、dds模块ad9835.c、看门狗模块x5045.c及主模块mainpr.c。改变频率时,仅需要改变FREGO寄存器的值,就可以改变输出频率,输出频率(7.5)第第7章章 数字频率合成器的设计数字频率合成器的设计 因此寄存器值为
20、通过按键S1、S2、S3、S4可改变输出信号频率,结合软件设计完成按键的功能。7.4.2 程序主模块程序主模块负责键扫描及其他模块的调用,其框图如图7.13所示。程序主模块(mainpr.c)的源代码如下。(7.6)第第7章章 数字频率合成器的设计数字频率合成器的设计 图7.13 程序主模块框图第第7章章 数字频率合成器的设计数字频率合成器的设计#include#include intrins.h#define uchar unsigned char#define uint unsigned int#define ushort unsigned short#define ulong unsig
21、ned long第第7章章 数字频率合成器的设计数字频率合成器的设计 uchar data ms_10;uchar data ms_20;uchar data ms_100;uchar data mdelay;uchar keyolddata;ulong data frqvalue;uchar data frqstepvalue;/*设置数码管显示0,1,2,3,4,5,6,7,8 9,-(中),-(上),_(下)对应数据 */uchar code led_buf14=0X7e,0 x30,0 x6d,0 x79,0 x33,0 x5b,0 x5f,0 x70,0 x7f,0 x7b,0 x0
22、1,第第7章章 数字频率合成器的设计数字频率合成器的设计 0 x40,0 x08,0 x00;void start_prg();void interrupt_set(void);void delay(uint x);void Key_Handle();uint binarytobcd(uint x);uint bcdtobinary(uint x);extern initad9835();extern open_watchdog();extern watch_dog();extern disp_data(void);/*=第第7章章 数字频率合成器的设计数字频率合成器的设计 TIMER 0 i
23、nterrupt;20ms=*/void timer0()interrupt 1 using 1TH0=256-(20000/256);TL0=256-(20000%256);ms_10+;ms_20+;if(ms_10+=10)ms_10=0;ms_100+/*=*/第第7章章 数字频率合成器的设计数字频率合成器的设计 main()start:ms_10=0;ms_20=0;ms_100=0;frqvalue=0 x897;frqstepvalue=1;keyolddata=0 xf0;第第7章章 数字频率合成器的设计数字频率合成器的设计 sclk=0;dio=1;rst=0;start_p
24、rg();interrupt_set();delay(100);open_watchdog();delay(100);watch_dog();/*=*/第第7章章 数字频率合成器的设计数字频率合成器的设计 for(;)if(ms_20=2)Key_Handle();ms_20=0;if(ms_100=1)/*100ms*/ms_100=0;watch_dog();第第7章章 数字频率合成器的设计数字频率合成器的设计/*=*/void delay(uint x)uchar i;while(x-0)for(i=0;i125;i+);第第7章章 数字频率合成器的设计数字频率合成器的设计 void s
25、tart_prg()Init_Led();initad9835();/*=*/第第7章章 数字频率合成器的设计数字频率合成器的设计 void interrupt_set()TMOD=0 x21;SCON=0 x50;TH0=256-(10 000/256);TL0=256-(10 000%256);TR0=1;ET0=1;EA=1;第第7章章 数字频率合成器的设计数字频率合成器的设计 void Key_Handle()uchar data keydata;keydata=P1&0 xf0;if(keydata=0 xf0)&(keyolddata=0 xf0)return;else if(ke
26、ydata=0 xf0)&(keyolddata!=0 xf0)/*有键按下*/第第7章章 数字频率合成器的设计数字频率合成器的设计 switch(keyolddata)case 0 x70:upaddfrq();break;第第7章章 数字频率合成器的设计数字频率合成器的设计 case 0 xb0:downsubfrq();break;case 0 xd0:upstep();break;case 0 xe0:downstep();break;default:keyolddata=0 xf0;第第7章章 数字频率合成器的设计数字频率合成器的设计 else keyolddata=keydata;
27、void upaddfrq()uchar disp_buf8;switch(frqstepvalue)case 0:if(frqvalue0 xffffffff-0 xdc)第第7章章 数字频率合成器的设计数字频率合成器的设计 frqvalue=frqvalue+0 xdc;disp_buf0=0;disp_buf1=0;disp_buf2=0;disp_buf3=0;disp_buf4=0;disp_buf5=0;disp_buf6=0;disp_buf7=0;/*显示缓冲区放待显示数据*/disp_data();第第7章章 数字频率合成器的设计数字频率合成器的设计 case 1:if(fr
28、qvalue0 x897)frqvalue=frqvalue-0 x897;disp_buf0=0;disp_buf1=0;disp_buf2=0;disp_buf3=0;disp_buf4=0;disp_buf5=0;disp_buf6=0;disp_buf7=0;disp_data();第第7章章 数字频率合成器的设计数字频率合成器的设计 p()if(frqstepvalue7)frqstepvalue+;disp_data();downstep()if(frqstepvalue0)frqstepvalue-;disp_data();第第7章章 数字频率合成器的设计数字频率合成器的设计 7
29、.4.3 显示模块 显 示 模 块 完 成 对 PS7912的 控 制。显 示 模 块(disp.c)的源代码如下。#include#include intrins.hsbit din=P34;sbit clk=P35;sbit cs=P33;extern uchar disp_buf8;extern uchar code led_buf13;/*=*/第第7章章 数字频率合成器的设计数字频率合成器的设计/*FUNCTION define*/*=*/void Init_Led(void);void Test_led(void);void WriteLed(uchar combyte,uchar
30、 data0);void WriteLe(uchar combyte,uchar data0);void WriteLed0(uchar data1);void WriteLedx0(uchar data1);void disp_data(void);uchar bcd_byte(uchar x);uchar byte_bcd(uchar x);第第7章章 数字频率合成器的设计数字频率合成器的设计/*初始化数码管显示=*/void Init_Led(void)uchar combyte,data0;combyte=0 xff;data0=0 x00;WriteLe(combyte,data0)
31、;/*控制显示测试为正常方式*/combyte=0 xfc;data0=0 x01;WriteLe(combyte,data0);/*控制关闭模式为正常方式*/第第7章章 数字频率合成器的设计数字频率合成器的设计 combyte=0 xfb;data0=0 x07;WriteLe(combyte,data0);/*控制为8位数码管显示*/combyte=0 xfa;data0=0 x00;WriteLe(combyte,data0);/*控制显示强度为1/32*/combyte=0 xf9;data0=0 x00;WriteLe(combyte,data0);/*控制显示为非编码方式*/第第7
32、章章 数字频率合成器的设计数字频率合成器的设计/*=*/void Test_Led(void)uchar i,combyte,data0;combyte=0 xf1;data0=1;for(i=1;i=8;i+)WriteLed(combyte,led_bufdata0);combyte+;data0+;/*=*/第第7章章 数字频率合成器的设计数字频率合成器的设计 void WriteLed(uchar combyte,uchar data0)WriteLed0(combyte);WriteLedx0(data0);cs=1;void WriteLe(uchar combyte,uchar
33、data0)WriteLed0(combyte);WriteLed0(data0);cs=1;第第7章章 数字频率合成器的设计数字频率合成器的设计/*=*/void WriteLedx0(uchar data1)cs=0;ACC=data1;din=a3;clk=1;_nop_();clk=0;din=a4;clk=1;_nop_();clk=0;din=a7;clk=1;_nop_();clk=0;din=a2;clk=1;_nop_();clk=0;din=a1;clk=1;_nop_();clk=0;din=a0;clk=1;_nop_();clk=0;din=a5;clk=1;_nop
34、_();clk=0;din=a6;clk=1;_nop_();clk=0;第第7章章 数字频率合成器的设计数字频率合成器的设计/*=*/void WriteLed0(uchar data1)cs=0;ACC=data1;din=a7;clk=1;_nop_();clk=0;din=a6;clk=1;_nop_();clk=0;din=a5;clk=1;_nop_();clk=0;din=a4;clk=1;_nop_();clk=0;din=a3;clk=1;_nop_();clk=0;din=a2;clk=1;_nop_();clk=0;din=a1;clk=1;_nop_();clk=0;d
35、in=a0;clk=1;_nop_();clk=0;第第7章章 数字频率合成器的设计数字频率合成器的设计/*/void disp_data(void)uchar i,combyte;combyte=0 xf1;for(i=0;i4)&0 x0f;y=y*10;x=z&0 x0f;y=y+x;return(y);第第7章章 数字频率合成器的设计数字频率合成器的设计 uchar byte_bcd(uchar x)uchar y,z;z=x;y=x/10;y=y4;x=(z%10)&0 x0f;y=y|x;return(y);第第7章章 数字频率合成器的设计数字频率合成器的设计 7.4.4 看门狗模
36、块 看门狗模块完成对x5045的控制。看门狗模块(x5045.c)的源代码如下。#include#include intrins.h#define uchar unsigned char#define uint unsigned int#define ushort unsigned short第第7章章 数字频率合成器的设计数字频率合成器的设计 sbit SO=P30;/*used for serial output*/sbit SI=P32;/*used for serial input*/sbit SCK=P31;/*used for serial clock*/sbit CS=P13;/
37、*used for serial choice*/#define WREN_INST 0 x06 /*Write enable latch instruction(WREN)*/#define WRDI_INST 0 x04 /*Write disable latch instruction(WRDI)*/第第7章章 数字频率合成器的设计数字频率合成器的设计#define WRSR_INST 0 x01 /*Write status register instruction(WRSR)*/#define RDSR_INST 0 x05 /*Read status register instru
38、ction(RDSR)*/#define WRITE_INST 0 x02 /*Write memory instruction(WRITE)*/#define READ_INST 0 x03 /*Read memory instruction(READ)*/第第7章章 数字频率合成器的设计数字频率合成器的设计#define STATUS_REG 0 x00 /*status register*/#define MAX_POLL 0 x99 /*Maximum number of polls*/*=sending a byte to EEPROM=*/void outbyt(uchar aad
39、ata)uchar x;for(x=0;x8;x+)SCK=0;if(aadata&0 x80)=0)SI=0;第第7章章 数字频率合成器的设计数字频率合成器的设计 else SI=1;_nop_();SCK=1;aadata=aadata1;SI=0;/*=;*Name:WREN_CMD;*Description:Set write enable latch;*Function:This routine sends the command to enable writes to;*the EEPROM memory array or status register第第7章章 数字频率合成器的
40、设计数字频率合成器的设计=*/void wren_cmd(void)SCK=0;/*Bring SCK low*/CS=0;/*Bring/CS low*/outbyt(WREN_INST);SCK=0;/*Bring SCK low*/CS=1;/*Bring/CS high*/*=第第7章章 数字频率合成器的设计数字频率合成器的设计;*Name:RDSR_CMD;*Description:Read Status Register;*Function:This routine sends the command to read the status register;*Calls:outby
41、t,inbyt=*/uchar rdsr_cmd()第第7章章 数字频率合成器的设计数字频率合成器的设计 uchar x;SCK=0;CS=0;outbyt(RDSR_INST);x=inbyt();SCK=0;CS=1;return(x);第第7章章 数字频率合成器的设计数字频率合成器的设计/*=;*Name:WIP_POLL;*Description:Write-In-Progress Polling;*Function:This routine polls for completion of a nonvolatile write;*cycle by examining the WIP
42、bit of the status register=*/第第7章章 数字频率合成器的设计数字频率合成器的设计 void wip_poll()uchar x;for(x=0;xMAX_POLL;x+)uchar y=rdsr_cmd();if(y&0 x01)=0 x00)goto a11;a11:_nop_();第第7章章 数字频率合成器的设计数字频率合成器的设计/*=;*Name:WRSR_CMD;*Description:Write Status Register;*Function:This routine sends the command to write the WD0,WD1,
43、BP0;*and BP0 EEPROM bits in the status register=*/void wrsr_cmd(uchar reg_status)第第7章章 数字频率合成器的设计数字频率合成器的设计 wren_cmd();SCK=0;CS=0;outbyt(WRSR_INST);outbyt(reg_status);SCK=0;CS=1;wip_poll();/*Poll for completion of write cycle*/第第7章章 数字频率合成器的设计数字频率合成器的设计 void watch_dog(void)/*setting the watchdog tim
44、e*/CS=1;CS=0;CS=0;CS=1;void open_watchdog()uchar c;c=rdsr_cmd();c=c&0 xc3;wrsr_cmd(c);第第7章章 数字频率合成器的设计数字频率合成器的设计 7.4.5 dds模块 dds模 块 完 成 对 ad9835的 控 制。dds模 块(ad9835.c)的源代码如下。#include#include intrins.h#define uchar unsigned char#define uint unsigned int#define FMIN1 0#define FMIN2 0第第7章章 数字频率合成器的设计数字频
45、率合成器的设计#define FMIN3 0#define FMIN4 0 xdc /*频率间隔0.01*/#define FA1 0#define FA2 0#define FA3 8#define FA4 0 x97 /*频率间隔0.1*/#define FB1 0#define FB2 0第第7章章 数字频率合成器的设计数字频率合成器的设计#define FB3 0 x55#define FB4 0 xf6 /*频率间隔1*/#define FC1 0#define FC2 3#define FC3 0 x5a#define FC4 0 xfe /*频率间隔10*/#define FD1
46、 0#define FD2 0 x21#define FD3 0 x8d#define FD4 0 xff /*频率间隔100*/第第7章章 数字频率合成器的设计数字频率合成器的设计#define FE1 0#define FE2 0 x4f#define FE3 0 x8b#define FE4 0 x59 /*频率间隔1000*/#define FF1 0 x01#define FF2 0 x1b#define FF3 0 x71#define FF4 0 x76 /*频率间隔10 000*/第第7章章 数字频率合成器的设计数字频率合成器的设计#define FG1 0 x0a#defin
47、e FG2 0 x12#define FG3 0 x6e#define FG4 0 x98 /*频率间隔100 000*/sbit SCLK=P10;sbit SDATA=P11;sbit FSYNC=P12;/*=第第7章章 数字频率合成器的设计数字频率合成器的设计 sending a command to ad9835=*/void outtoad9835(uchar command,uchar data)uchar x;for(x=0;x8;x+)FSYNC=0;SCLK=0;if(command&0 x80)=0)SDATA=0;else SDATA=1;SCLK=1;command=
48、command1;第第7章章 数字频率合成器的设计数字频率合成器的设计 for(x=0;x8;x+)SCLK=0;if(data&0 x80)=0)SDATA=0;else SDATA=1;SCLK=1;data=data1;FSYNC=1;第第7章章 数字频率合成器的设计数字频率合成器的设计 void writefrq0(uchar databuf4)uchar combyte;uchar databyte;uchar i;combyte=0 x30;for(i=0;i4;i+)databyte=databufi;outtoad9835(combyte,databyte);combyte+;
49、第第7章章 数字频率合成器的设计数字频率合成器的设计 void initad9835();uchar data combyte;uchar data databyte;uchar data databuf4;combyte=0 xd8;databyte=0;outtoad9835(combyte,databyte);/*reset ad9835*/combyte=0 xb0;databyte=0;第第7章章 数字频率合成器的设计数字频率合成器的设计 outtoad9835(combyte,databyte);/*set SYNC=1,SELSRC=1*/combyte=0 xb0;databy
50、te=0;outtoad9835(combyte,databyte);/*set SYNC=1,SELSRC=1*/databuf0=FA1;databuf1=FA2;databuf2=FA3;databuf3=FA4;writefrq0(*databuf);第第7章章 数字频率合成器的设计数字频率合成器的设计 7.5 7.5 系统设计总结系统设计总结采用DDS芯片与MCU相结合实现的数字频率合成器,输出信号可调,最小频率分辨率为0.02 Hz,最高输出频率为1 MHz,具有非常高的精度和频率稳定性。根据不同应用场合的要求,还可进行功能扩展,如产生调频信号、调相信号等。数字频率合成器较之其他形