简易频率特性测试仪 - 图文

更新时间:2024-03-13 22:33:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

学校统一编号:HEU-E-007

学校名称:

队长姓名: 队员姓名: 指导教师姓名:

年 月1

简易频率特性测试仪(E题)

【本科组】

摘要:简易频率特性测试仪是以51单片机为控制核心的一种测量频率的仪器,

具有较宽的可测试带宽。电路由正交扫频信号源、被测网络、混频器、低通滤波器、ADC以及液晶显示部分组成。正交扫频信号源AD9854采用DDS技术产生高稳定的频率、相位、幅度可编程调制的正弦和余弦信号。被测网络是一个RLC串联谐振电路,其前后分别添加电压跟随器和电阻网络使其与相邻电路电阻匹配。混频器采用性能高,功耗低的SA602A,将信号源输出的正余弦信号与经过被测网络出来的处理信号进一步处理,产生高频与低频两种信号。低通滤波器采用max274芯片过滤较高频信号,外接元件少,参数调节方便,也具有良好的抗干扰性。ADC选用AD8317外置,提高AD转换性能。整体电路实现了测量较高频率信号的频率测量及幅频特性与相频特性的显示。

关键词:DDS技术、中频正交解调原理、RLC振荡电路。

Abstract:Simple frequency characteristic tester is a metrical instrument which

is operated by 51 single chip computer, It has a wide bandwidth. The circuit is composed of orthogonal frequency sweep signal source, the measured network, mixer, low-pass filter, ADC and liquid crystal display part. Orthogonal frequency sweep signal source AD9854 using DDS technology to produce frequency, phase, amplitude and high stability of the programmable modulation sine and cosine signal. The measured network is a RLC series resonant circuit, a voltage follower and the resistor network to match the adjacent circuit resistance respectively before and after adding the. The mixer uses high performance, low power SA602A, the sine and cosine signal source output and the processed signal measured network for further processing, to produce high and low frequency signal two. Low pass filter using MAX274 chip filter high frequency signals, less external components, easy to adjust the parameters, and also has good anti-interference performance. ADC use AD8317 external, enhance AD conversion performance. The whole circuit of the display frequency measurement and the amplitude frequency characteristic measurement of high frequency signal and the phase frequency characteristic.

Keywords:DDS technology、Quadrature demodulation, RLC oscillating circuit.

1

目录

摘要------------------------------------------------------------------------------------1 一、设计任务------------------------------------------------------------------------3 1.基本要求-------------------------------------------------------------------------3 2.发挥部分-------------------------------------------------------------------------3 二、方案论证------------------------------------------------------------------------3 1.信号源的选择--------------------------------------------4 2.放大器的选择--------------------------------------------4 3.混频器的选择--------------------------------------------4 4.阻抗匹配------------------------------------------------5 5.整体方案确定--------------------------------------------5 三、理论分析与计算------------------------------------------5 四、测试结果与误差分析--------------------------------------7 五、结论、心得与体会----------------------------------------7 附录--------------------------------------------------------9

2

一、设计任务 1.基本要求

制作一个正交扫频信号源。

(1)频率范围为1MHz~40MHz,频率稳定度≤10-4;频率可设置,最小设置单位100kHz。

(2)正交信号相位差误差的绝对值≤5o,幅度平衡误差的绝对值≤5%。 (3)信号电压的峰峰值≥1V,幅度平坦度≤5%。

(4)可扫频输出,扫频范围及频率步进值可设置,最小步进100kHz;要求连续扫频输出,一次扫频时间≤2s。 2.发挥部分

(1)使用基本要求中完成的正交扫频信号源,制作频率特性测试仪。 a. 输入阻抗为50?,输出阻抗为50?;

b. 可进行点频测量;幅频测量误差的绝对值≤0.5dB,相频测量误差的绝对值≤5o;数据显示的分辨率:电压增益0.1dB,相移0.1o。

(2)制作一个RLC串联谐振电路作为被测网络,如图2所示,其中Ri和Ro分别为频率特性测试仪的输入阻抗和输出阻抗;制作的频率特性测试仪可对其进行线性扫频测量。

a. 要求被测网络通带中心频率为20MHz,误差的绝对值≤5%;有载品质因数为4,误差的绝对值≤5%;有载最大电压增益≥-1dB;

b. 扫频测量制作的被测网络,显示其中心频率和-3dB带宽,频率数据显示的分辨率为100kHz;

c. 扫频测量并显示幅频特性曲线和相频特性曲线,要求具有电压增益、相移和频率坐标刻度。

图1 RLC串联谐振电路

(3)其他。 二、方案论证 1.信号源的选择

方案一:采用反馈型LC振荡原理,选择合适的电容、电感就能产生相应的正弦信号。此方案器件比较简单,但是难以达到高精度的程控调节,而且稳定度不高,故不采用。

方案二:采用DDS技术的基本原理。DDS技术是基于 奈奎斯特采样定理,将模拟信号进行采集,经量化后存入存储器中,通过CPLD或者FPGA进行寻址查表输出波形的数据,再经D/A 转换滤波即可恢复原波形。根据 奈奎斯特采样定理知,要使信号能够恢复,必须满足采样频率大于被采样信号最高频率的2倍,否则将产生混叠,经D/A 不能恢复原信号。此方案产生的波形比较稳定,在高频输出时会产生失真,而且电路比较复杂,故不采用。

3

方案三:直接采用DDS集成芯片。AD9854具有高达300MHz的系统时钟,通过并行总线将数据写入程序寄存器,内含可编程DDS 系统和高速比较器,能实现全数字编程控制的频率合成。由于DDS集成芯片能达到要求,而且程控调节能够方便实现,本设计采用方案三,作为1M~40MHz正弦信号发生。 2.放大器的选择

方案一:由普通运放芯片搭建的运算放大器。这种方式计算简单,由电阻比值控制电压放大倍数。但缺点是工作频率范围为低频小信号,频率过高波形产生失真。故不采用。

图2 运算放大电路

方案二:采用美信公司的max2650。这种芯片内部偏置,可在高频下工作并有较高的固定增益,除此之外工作电路外围元器件少,不需要连接电阻。基于以上方面的考虑,选择max2650。 3.混频器的选择 方案一:搭建混频电路。混频电路可分为模拟相乘混频器、二极管环形混频器、三极管混频器。

图3 模拟相乘混频器

图4 二极管环形混频器

4

图5 三极管混频器

变频器的失真有频率失真和非线性失真。除此之外,还会产生各种非线性干

扰,如组合频率、交叉调制和互相调制等干扰。自己动手搭建的电路不易完成精确条件,调试电路中比较费时费力。所以不选择此方案。

方案二:采用SA602A,是一个低功耗甚高频单片双平衡混频器输入放大器,频率特性好,而且变频器工作在非线性不太严重的区域,使之既能完成频率变换,又能抑制各种干扰。结合种种优点,选择使用SA602A作为混频器。 4.阻抗匹配

方案一:计算前一级的输出阻抗和后一级的输入阻抗,计算应该增加的元件参数,把电容或电感与负载串联起来,即可增加或减少负载的阻抗值。这种方法计算麻烦,容易算错,所以不选择这种匹配。

方案二:在两极之间接入电压跟随器。由于电压跟随器的输出电压基本上等于输入电压,所以可以看成不改变信号值。而电压跟随器的输入电阻可以看成无限大,输出电阻可以看成无穷小,所以可以自动完成电阻匹配。选择这种方案。 5.整体电路方案

由以上各部分的讨论与选择,结合题中所给的框图,我们将简易频率特性测试仪的框图画在下面。

图6 整体框图 三、理论分析与计算

1.AD9854内部包括一个具有48位相位累加器、一个可编程时钟倍频器、一个反sinc滤波器、两个12位300MHz DAC,一个高速模拟比较器以及接口逻辑电路。其主要性能特点如下:

①高达300MHz的系统时钟;

②能输出一般调制信号,FSK,BPSK,PSK,CHIRP,AM等; ③100MHz时具有80dB的信噪比;

④内部有4*到20*的可编程时钟倍频器;

⑤两个48位频率控制字寄存器,能够实现很高的频率分辨率。 ⑥两个14位相位偏置寄存器,提供初始相位设置。

带有100MHz的8位并行数据传输口或10MHz的串行数据传输口。

用51单片机控制AD9854,由AD9854产生正交的两路信号由于频率范围在1MHz-40MHz,频率越高输出的信号幅度将会越小,所以我们利用AD9854芯片自身的功能,通过编写程序将不同频率段的幅度都限制到500mV以下。AD9854的模块电路如下图:

5

图7 AD9854原理图

2.信号由AD9854输出,幅度小于500mV,于是在DDS后面接一级放大,使其峰峰值≥1V,此时用到的放大器为美信公司的max2650低功耗低噪声甲类放大器,它的增益固定,不需要外围电路过多扩展,降低了噪声的引入途径和调试的难度。max2650用于从直流至900MHz,它有一个平坦的增益响应。单+5 V供电。MAX2650的低噪声系数(噪声系数3.9dB)和高驱动能力(输入、输出阻抗50Ω),使它非常适合用于各种传输接收、缓冲应用。该器件采用内部偏置,省去了外部偏置电阻或电感器。典型的应用,唯一需要的外部元件就是输入输出隔离电容。输入输出耦合电容1C、2C的取值:

3.余弦信号的另一条分支流入被测网络。被测网络由一个电阻、一个电容和一个电感组成。

图8 被测网络原理图

由题中要求,此电路的输入阻抗和输出阻抗分别为50欧。R的值应该尽可能小,假设它的值为10欧,

Q=w0L/r0=2πf0/R

将Q=4,f0=20MHz,R=10带入式,可以求得L=0.32uH

6

又由 w0=1/√LC

将所得的L值带入上式,求得C,C=199pF

4.峰峰值大于1V的信号与从被测网络出来的信号共同输入SA602A,

SA602A将两个信号重新混频输出新频率的信号。这个过程是利用了三角函数的积化和差原理。假设信号Acocwt经过被测网络之后输出为KAcos(wt+θ),也就是说混频器SA602A的两个输入端分别为Acocwt和KAcos(wt+θ)。

三角形的积化和差公式为

所以I路输出为(1/2)KA2[cos(2wt+θ)+cosθ],通过低通滤波器将高频部分滤掉,剩下一路直流量。

Q路的根据积化和差公式

同理进行计算。

5.低通滤波器出来的直流量流入ADC,单片机再次采集数据控制液晶显示频显示频率及幅频特性曲线和相频特性曲线。 四、测试结果与误差分析

AD9854由于快递问题,结题当天才收到自制模块板,故没来得及调试成功。 对被测网络部分进行测试,使用DDS函数信号发生器模拟输出1VPP信号,调试电路。最终的测试结果为: 频率(MHz) 输出幅度(mV) 20.6 476 18.2 476*0.707 23.5 476*0.707 测试得到当频率为20.6MHz时,输出的电压幅值最大,为476mV,所以中心频率为20.6MHz,误差为|20.6-20|/20*100%=3%,满足“要求被测网络通带中心频率为20MHz,误差的绝对值≤5%”要求。

当电压为中心频率时的电压值的0.707倍,即为337mV时,测得两个相对应的频率分别为18.2和23.5MHz,则实际带宽为23.5-18.2=5.3MHz.而理论值应为Bw=f0/Q=20.6/4=5.15MHz。误差为|5.3-5.15|/5.15&100%=2.9%,满足“有载品质因数为4,误差的绝对值≤5%”要求。

有载最大电压增益=20lg|476/500|=-0.43,满足“有载最大电压增益≥-1dB”要求。

五、结论、心得与体会

今年,我们三个人组队参加了全国电子设计大赛,经过了初赛,校内选拔,并参加了学校组织的前期培训,在整个准备和比赛过程中,我们学到了很多。

在实验室,我们感受到了前所未有的学习方式,从前的学习只限于在书本上的勾,记记概念,算算公式,如此而已,学了很多专业知识,却不知道能做什么、怎么做,学了很多原理,却不知道怎么去应用,在实验室,面对各种专业仪器设备,我们完全将理论投入到了实践,将书本上的知识变成了零件的组装、搭建的电路,将抽象的知识变为了具体的应用,但这是一个艰辛的过程,这个过程转化当中,遇到的很多问题,都需要由我们自己来解决,在这个过程,我们深切体会到了团队合作和分工的重要性,学到了许多知识,比如,电路的搭建,焊接、调试,一些芯片的使用和一些软件的使用等,最重要的是我们拥有了解决问题的能力。

电子设计竞赛的组织为我们大学生提供了良好的科学研究和科技制作的机

7

会,使我们收益非浅。衷心地感谢大赛评委,今后我们会更加努力,发挥潜能,培养团队精神,学会做人、做事、做学问。

8

附录1:

AD9854模块原理图

被测网络原理图及PCB

9

MAX2650、电压跟随器、SA602A混合电路

被测网络测量过程

10

附录2:

AD9854程序:

//===================================================================== // AD9854 驱动程序设计 //硬件连接: P0 ——Data; // P2 ——Adr; // RESET ——P3^7; // UDCLK ——P3^6; // WR ——P3.5; // RD ——p3.4; // FDATA ——P3^3; // OSK ——P3^2; // VDD--逻辑电源(3.3V) // VSS--GND(0V) //AD9854.c

//说明:本程序基于硬件的外接晶振为20MHZ

//=====================================================================

#include //STC单片机头文件 #include

#define uint unsigned int #define uchar unsigned char #define ulong unsigned long

uchar FreqWord[6]; //6个字节频率控制字

//**********************以下为系统时钟以及其相关变量设置************************** /*

此处根据自己的需要设置系统时钟以及与其相关的因子,一次需且只需开启一个 CLK_Set为时钟倍频设置,可设置4~20倍倍频,但最大不能超过300MHZ Freq_mult_ulong和Freq_mult_doulle均为2的48次方除以系统时钟,一个为长整形,一个为双精度型 */ /*

#define CLK_Set 4 const ulong Freq_mult_ulong = 3518437;

const double Freq_mult_doulle = 3518437.2088832; */

11

/*

#define CLK_Set 5 const ulong Freq_mult_ulong = 2814750;

const double Freq_mult_doulle = 2814749.76710656; */

#define CLK_Set 6 const ulong Freq_mult_ulong = 2345625;

const double Freq_mult_doulle = 2345624.80592213; /*

#define CLK_Set 7 const ulong Freq_mult_ulong = 2010536;

const double Freq_mult_doulle = 2010535.54793326; */ /*

#define CLK_Set 8 const ulong Freq_mult_ulong = 1759219;

const double Freq_mult_doulle = 1759218.6044416; */ /*

#define CLK_Set 9 const ulong Freq_mult_ulong = 1563750;

const double Freq_mult_doulle = 1563749.87061476; */ /*

#define CLK_Set 10 const ulong Freq_mult_ulong = 1407375;

const double Freq_mult_doulle = 1407374.88355328; */ /*

#define CLK_Set 11 const ulong Freq_mult_ulong = 1279432;

const double Freq_mult_doulle = 1279431.712321164; */ /*

12

#define CLK_Set 12 const ulong Freq_mult_ulong = 1172812;

const double Freq_mult_doulle = 1172812.402961067; */ /*

#define CLK_Set 13 const ulong Freq_mult_ulong = 1082596;

const double Freq_mult_doulle = 1082596.064271754; */ /*

#define CLK_Set 14 const ulong Freq_mult_ulong = 1005268;

const double Freq_mult_doulle = 1005267.773966629; */ /*

#define CLK_Set 15 const ulong Freq_mult_ulong = 938250;

const double Freq_mult_doulle = 938249.9223688533; */

//**************************修改硬件时要修改的部分********************************

#define AD9854_DataBus P0 #define AD9854_AdrBus P2

sbit AD9854_RST = P3^7; //AD9854复位端口 sbit AD9854_UDCLK = P3^6; //AD9854更新时钟

sbit AD9854_WR = P3^5; //AD9854写使能,低有效 sbit AD9854_RD = P3^4; //AD9854读使能,低有效 sbit AD9854_FDATA = P3^3; //AD9854 FSK,PSK控制 sbit AD9854_OSK = P3^2; //AD9854 OSK控制端

//**************************以下部分为函数定义********************************

static void AD9854_WR_Byte(uchar addr,uchar dat); extern void AD9854_Init(void); static void Freq_convert(long Freq); extern void AD9854_SetSine(ulong Freq,uint Shape); static void Freq_double_convert(double Freq);

extern void AD9854_SetSine_double(double Freq,uint Shape);

13

extern void AD9854_InitFSK(void); extern void AD9854_SetFSK(ulong Freq1,ulong Freq2); extern void AD9854_InitBPSK(void); extern void AD9854_SetBPSK(uint Phase1,uint Phase2); extern void AD9854_InitOSK(void); extern void AD9854_SetOSK(uchar RateShape); extern void AD9854_InitAM(void); extern void AD9854_SetAM(uint Shape); extern void AD9854_InitRFSK(void);

extern void AD9854_SetRFSK(ulong Freq_Low,ulong Freq_High,ulong Freq_Up_Down,ulong FreRate); static void delay (uint us);

//====================================================================================

//函数名称:void AD9854_WR_Byte(uchar addr,uchar dat) //函数功能:AD9854并行口写入数据 //入口参数:addr 6位地址 // dat 写入的数据 //出口参数:无

//====================================================================================

void AD9854_WR_Byte(uchar addr,uchar dat) { AD9854_AdrBus = (addr&0x3f) | (P2&0xc0); AD9854_DataBus = dat; AD9854_WR = 0; AD9854_WR = 1; }

//====================================================================================

//函数名称:void AD9854_Init(void) //函数功能:AD9854初始化 //入口参数:无 //出口参数:无

//==================================================================================== void AD9854_Init(void) { AD9854_WR=1;//将读、写控制端口设为无效 AD9854_RD=1;

AD9854_UDCLK=0;

AD9854_RST=1; //复位AD9854

14

AD9854_RST=0; AD9854_WR_Byte(0x1d,0x10); //关闭比较器 AD9854_WR_Byte(0x1e,CLK_Set); //设置系统时钟倍频 AD9854_WR_Byte(0x1f,0x00); //设置系统为模式0,由外部更新 AD9854_WR_Byte(0x20,0x60); //设置为可调节幅度,取消插值补偿 AD9854_UDCLK=1; //更新AD9854输出 AD9854_UDCLK=0; }

//====================================================================================

//函数名称:void Freq_convert(long Freq) //函数功能:正弦信号频率数据转换

//入口参数:Freq 需要转换的频率,取值从0~SYSCLK/2 //出口参数:无 但是影响全局变量FreqWord[6]的值

//说明: 该算法位多字节相乘算法,有公式FTW = (Desired Output Frequency × 2N)/SYSCLK

// 得到该算法,其中N=48,Desired Output Frequency 为所需要的频率,即Freq,SYSCLK

// 为可编程的系统时钟,FTW为48Bit的频率控制字,即FreqWord[6]

//====================================================================================

void Freq_convert(long Freq) {

ulong FreqBuf;

ulong Temp=Freq_mult_ulong; uchar Array_Freq[4]; //将输入频率因子分为四个字节 Array_Freq[0]=(uchar)Freq; Array_Freq[1]=(uchar)(Freq>>8); Array_Freq[2]=(uchar)(Freq>>16); Array_Freq[3]=(uchar)(Freq>>24); FreqBuf=Temp*Array_Freq[0]; FreqWord[0]=FreqBuf; FreqBuf>>=8;

FreqBuf+=(Temp*Array_Freq[1]); FreqWord[1]=FreqBuf; FreqBuf>>=8;

FreqBuf+=(Temp*Array_Freq[2]);

15

FreqWord[2]=FreqBuf; FreqBuf>>=8; FreqBuf+=(Temp*Array_Freq[3]); FreqWord[3]=FreqBuf; FreqBuf>>=8;

FreqWord[4]=FreqBuf;

FreqWord[5]=FreqBuf>>8; }

//====================================================================================

//函数名称:void AD9854_SetSine(ulong Freq,uint Shape) //函数功能:AD9854正弦波产生程序

//入口参数:Freq 频率设置,取值范围为0~(1/2)*SYSCLK

// Shape 幅度设置. 为12 Bit,取值范围为(0~4095) ,取值越大,幅度越大 //出口参数:无

//====================================================================================

void AD9854_SetSine(ulong Freq,uint Shape) { uchar count; uchar Adress; Adress = 0x04; //选择频率控制字地址的初值 Freq_convert(Freq); //频率转换 for(count=6;count>0;) //写入6字节的频率控制字 { AD9854_WR_Byte(Adress++,FreqWord[--count]); } AD9854_WR_Byte(0x21,Shape>>8); //设置I通道幅度 AD9854_WR_Byte(0x22,(uchar)(Shape&0xff)); AD9854_WR_Byte(0x23,Shape>>8); //设置Q通道幅度 AD9854_WR_Byte(0x24,(uchar)(Shape&0xff)); AD9854_UDCLK=1; //更新AD9854输出 AD9854_UDCLK=0; }

16

//====================================================================================

//函数名称:void Freq_doublt_convert(double Freq) //函数功能:正弦信号频率数据转换

//入口参数:Freq 需要转换的频率,取值从0~SYSCLK/2 //出口参数:无 但是影响全局变量FreqWord[6]的值

//说明: 有公式FTW = (Desired Output Frequency × 2N)/SYSCLK得到该函数, // 其中N=48,Desired Output Frequency 为所需要的频率,即Freq,SYSCLK // 为可编程的系统时钟,FTW为48Bit的频率控制字,即FreqWord[6] //注意: 该函数与上面函数的区别为该函数的入口参数为double,可使信号的频率更精确 // 谷雨建议在100HZ以下用本函数,在高于100HZ的情况下用函数void Freq_convert(long Freq)

//====================================================================================

void Freq_double_convert(double Freq) { ulong Low32; uint High16;

double Temp=Freq_mult_doulle; //23ca99为2的48次方除以120M Freq*=(double)(Temp);

// 1 0000 0000 0000 0000 0000 0000 0000 0000 = 4294967295 High16 = (int)(Freq/4294967295); //2^32 = 4294967295 Freq -= (double)High16*4294967295; Low32 = (ulong)Freq;

FreqWord[0]=Low32; FreqWord[1]=Low32>>8; FreqWord[2]=Low32>>16; FreqWord[3]=Low32>>24; FreqWord[4]=High16;

FreqWord[5]=High16>>8; }

//====================================================================================

//函数名称:void AD9854_SetSine_double(double Freq,uint Shape) //函数功能:AD9854正弦波产生程序

//入口参数:Freq 频率设置,取值范围为0~1/2*SYSCLK // Shape 幅度设置. 为12 Bit,取值范围为(0~4095) //出口参数:无

//====================================================================================

void AD9854_SetSine_double(double Freq,uint Shape) {

17

uchar count=0; uchar Adress; Adress=0x04; //选择频率控制字1地址的初值 Freq_double_convert(Freq); //频率转换 for(count=6;count>0;) //写入6字节的频率控制字 { AD9854_WR_Byte(Adress++,FreqWord[--count]); } AD9854_WR_Byte(0x21,Shape>>8); //设置I通道幅度 AD9854_WR_Byte(0x22,(uchar)(Shape&0xff)); AD9854_WR_Byte(0x23,Shape>>8); //设置Q通道幅度 AD9854_WR_Byte(0x24,(uchar)(Shape&0xff)); AD9854_UDCLK=1; //更新AD9854输出 AD9854_UDCLK=0; }

//====================================================================================

//函数名称:void AD9854_InitFSK(void) //函数功能:AD9854的FSK初始化 //入口参数:无 //出口参数:无

//====================================================================================

void AD9854_InitFSK(void) { AD9854_WR=1; //将读、写控制端口设为无效 AD9854_RD=1;

AD9854_UDCLK=0;

AD9854_RST=1; //复位AD9854 AD9854_RST=0; AD9854_WR_Byte(0x1d,0x10); //关闭比较器 AD9854_WR_Byte(0x1e,CLK_Set); //设置系统时钟倍频 AD9854_WR_Byte(0x1f,0x02); //设置系统为模式1,由外部更新 AD9854_WR_Byte(0x20,0x60); //设置为可调节幅度,取消插值补偿 AD9854_UDCLK=1; //更新AD9854输出

18

AD9854_UDCLK=0; }

//====================================================================================

//函数名称:void AD9854_SetFSK(ulong Freq1,ulong Freq2) //函数功能:AD9854的FSK设置 //入口参数:Freq1 FSK频率1 // Freq2 FSK频率2 //出口参数:无

//====================================================================================

void AD9854_SetFSK(ulong Freq1,ulong Freq2) {

uchar count=6; uchar Adress1,Adress2; const uint Shape=4000; //幅度设置. 为12 Bit,取值范围为(0~4095) Adress1=0x04; //选择频率控制字1地址的初值 Adress2=0x0a; //选择频率控制字2地址的初值 Freq_convert(Freq1); //频率转换1 for(count=6;count>0;) //写入6字节的频率控制字 { AD9854_WR_Byte(Adress1++,FreqWord[--count]); } Freq_convert(Freq2); //频率转换2 for(count=6;count>0;) //写入6字节的频率控制字 { AD9854_WR_Byte(Adress2++,FreqWord[--count]); } AD9854_WR_Byte(0x21,Shape>>8); //设置I通道幅度 AD9854_WR_Byte(0x22,(uchar)(Shape&0xff)); AD9854_WR_Byte(0x23,Shape>>8); //设置Q通道幅度 AD9854_WR_Byte(0x24,(uchar)(Shape&0xff)); AD9854_UDCLK=1; //更新AD9854输出 AD9854_UDCLK=0;

19

}

//====================================================================================

//函数名称:void AD9854_InitBPSK(void) //函数功能:AD9854的BPSK初始化 //入口参数:无 //出口参数:无

//====================================================================================

void AD9854_InitBPSK(void) { AD9854_WR=1; //将读、写控制端口设为无效 AD9854_RD=1;

AD9854_UDCLK=0;

AD9854_RST=1; //复位AD9854 AD9854_RST=0; AD9854_WR_Byte(0x1d,0x10); //关闭比较器 AD9854_WR_Byte(0x1e,CLK_Set); //设置系统时钟倍频 AD9854_WR_Byte(0x1f,0x08); //设置系统为模式4,由外部更新 AD9854_WR_Byte(0x20,0x60); //设置为可调节幅度,取消插值补偿 AD9854_UDCLK=1; //更新AD9854输出 AD9854_UDCLK=0; }

//====================================================================================

//函数名称:void AD9854_SetBPSK(uint Phase1,uint Phase2) //函数功能:AD9854的BPSK设置 //入口参数:Phase1 调制相位1 // Phase2 调制相位2 //出口参数:无

//说明: 相位为14Bit,取值从0~16383,谷雨建议在用本函数的时候将Phase1设置为0, // 将Phase1设置为8192,180°相位

//====================================================================================

void AD9854_SetBPSK(uint Phase1,uint Phase2) { uchar count; const ulong Freq=60000; const uint Shape=4000;

20

uchar Adress; Adress=0x04; //选择频率控制字1地址的初值 AD9854_WR_Byte(0x00,Phase1>>8); //设置相位1 AD9854_WR_Byte(0x01,(uchar)(Phase1&0xff)); AD9854_WR_Byte(0x02,Phase2>>8); //设置相位2 AD9854_WR_Byte(0x03,(uchar)(Phase2&0xff)); Freq_convert(Freq); //频率转换 for(count=6;count>0;) //写入6字节的频率控制字 { AD9854_WR_Byte(Adress++,FreqWord[--count]); } AD9854_WR_Byte(0x21,Shape>>8); //设置I通道幅度 AD9854_WR_Byte(0x22,(uchar)(Shape&0xff)); AD9854_WR_Byte(0x23,Shape>>8); //设置Q通道幅度 AD9854_WR_Byte(0x24,(uchar)(Shape&0xff)); AD9854_UDCLK=1; //更新AD9854输出 AD9854_UDCLK=0; }

//====================================================================================

//函数名称:void AD9854_InitOSK(void) //函数功能:AD9854的OSK初始化 //入口参数:无 //出口参数:无

//====================================================================================

void AD9854_InitOSK(void) { AD9854_WR=1; //将读、写控制端口设为无效 AD9854_RD=1; AD9854_UDCLK=0; AD9854_RST=1; //复位AD9854 AD9854_RST=0;

AD9854_WR_Byte(0x1d,0x10); //关闭比较器

21

AD9854_WR_Byte(0x1e,CLK_Set); //设置系统时钟倍频 AD9854_WR_Byte(0x1f,0x00); //设置系统为模式0,由外部更新 AD9854_WR_Byte(0x20,0x70); //设置为可调节幅度,取消插值补偿,通断整形内部控制 AD9854_UDCLK=1; //更新AD9854输出 AD9854_UDCLK=0; }

//====================================================================================

//函数名称:void AD9854_SetOSK(uchar RateShape) //函数功能:AD9854的OSK设置

//入口参数: RateShape OSK斜率,取值为4~255,小于4则无效 //出口参数:无

//====================================================================================

void AD9854_SetOSK(uchar RateShape) { uchar count; const ulong Freq=60000; //设置载频 const uint Shape=4000; //幅度设置. 为12 Bit,取值范围为(0~4095) uchar Adress; Adress=0x04; //选择频率控制字地址的初值 Freq_convert(Freq); //频率转换 for(count=6;count>0;) //写入6字节的频率控制字 { AD9854_WR_Byte(Adress++,FreqWord[--count]); } AD9854_WR_Byte(0x21,Shape>>8); //设置I通道幅度 AD9854_WR_Byte(0x22,(uchar)(Shape&0xff)); AD9854_WR_Byte(0x23,Shape>>8); //设置Q通道幅度 AD9854_WR_Byte(0x24,(uchar)(Shape&0xff));

AD9854_WR_Byte(0x25,RateShape); //设置OSK斜率 AD9854_UDCLK=1; //更新AD9854输出

22

AD9854_UDCLK=0; }

//====================================================================================

//函数名称:void AD9854_InitAM(void) //函数功能:AD9854的AM初始化 //入口参数:无 //出口参数:无

//====================================================================================

void AD9854_InitAM(void) { uchar count; const ulong Freq=60000; //设置载频 uchar Adress; Adress=0x04; //选择频率控制字地址的初值

AD9854_WR=1; //将读、写控制端口设为无效 AD9854_RD=1;

AD9854_UDCLK=0;

AD9854_RST=1; //复位AD9854 AD9854_RST=0; AD9854_WR_Byte(0x1d,0x10); //关闭比较器 AD9854_WR_Byte(0x1e,CLK_Set); //设置系统时钟倍频 AD9854_WR_Byte(0x1f,0x00); //设置系统为模式0,由外部更新 AD9854_WR_Byte(0x20,0x60); //设置为可调节幅度,取消插值补偿 Freq_convert(Freq); //频率转换 for(count=6;count>0;) //写入6字节的频率控制字 { AD9854_WR_Byte(Adress++,FreqWord[--count]); } AD9854_UDCLK=1; //更新AD9854输出 AD9854_UDCLK=0; }

//=====================================================================

23

===============

//函数名称:void AD9854_SetAM(uchar Shape) //函数功能:AD9854的AM设置

//入口参数:Shape 12Bit幅度,取值从0~4095 //出口参数:无

//====================================================================================

void AD9854_SetAM(uint Shape) { AD9854_WR_Byte(0x21,Shape>>8); //设置I通道幅度 AD9854_WR_Byte(0x22,(uchar)(Shape&0xff)); AD9854_WR_Byte(0x23,Shape>>8); //设置Q通道幅度 AD9854_WR_Byte(0x24,(uchar)(Shape&0xff)); AD9854_UDCLK=1; //更新AD9854输出 AD9854_UDCLK=0; }

//====================================================================================

//函数名称:void AD9854_InitRFSK(void) //函数功能:AD9854的RFSK初始化 //入口参数:无 //出口参数:无

//====================================================================================

void AD9854_InitRFSK(void) { AD9854_WR=1; //将读、写控制端口设为无效 AD9854_RD=1;

AD9854_UDCLK=0;

AD9854_RST=1; //复位AD9854 AD9854_RST=0; AD9854_WR_Byte(0x1d,0x10); //关闭比较器 AD9854_WR_Byte(0x1e,CLK_Set); //设置系统时钟倍频 AD9854_WR_Byte(0x1f,0x24); //设置系统为模式2,由外部更新,使能三角波扫频功能 AD9854_WR_Byte(0x20,0x60); //设置为可调节幅度,取消插值补偿 AD9854_UDCLK=1; //更新AD9854输出 AD9854_UDCLK=0; }

24

//====================================================================================

//函数名称:void AD9854_SetRFSK(void) //函数功能:AD9854的RFSK设置

//入口参数:Freq_Low RFSK低频率 48Bit // Freq_High RFSK高频率 48Bit // Freq_Up_Down 步进频率 48Bit // FreRate 斜率时钟控制 20Bit //出口参数:无

//注: 每两个脉冲之间的时间周期用下式表示(FreRate +1)*(System Clock ),一个脉冲,

// 频率 上升或者下降 一个步进频率

//====================================================================================

void AD9854_SetRFSK(ulong Freq_Low,ulong Freq_High,ulong Freq_Up_Down,ulong FreRate) { uchar count=6; uchar Adress1,Adress2,Adress3; const uint Shape=4000; //幅度设置. 为12 Bit,取值范围为(0~4095) Adress1=0x04; //选择频率控制字地址的初值 Adress2=0x0a; Adress3=0x10; Freq_convert(Freq_Low); //频率1转换 for(count=6;count>0;) //写入6字节的频率控制字 { AD9854_WR_Byte(Adress1++,FreqWord[--count]); } Freq_convert(Freq_High); //频率2转换 for(count=6;count>0;) //写入6字节的频率控制字 { AD9854_WR_Byte(Adress2++,FreqWord[--count]); } Freq_convert(Freq_Up_Down); //步进频率转换 for(count=6;count>0;) //写入6字节的频率控制字 { AD9854_WR_Byte(Adress3++,FreqWord[--count]);

25

} AD9854_WR_Byte(0x1a,(uchar)((FreRate>>16)&0x0f)); //设置斜升速率 AD9854_WR_Byte(0x1b,(uchar)(FreRate>>8)); AD9854_WR_Byte(0x1c,(uchar)FreRate); AD9854_WR_Byte(0x21,Shape>>8); //设置I通道幅度 AD9854_WR_Byte(0x22,(uchar)(Shape&0xff)); AD9854_WR_Byte(0x23,Shape>>8); //设置Q通道幅度 AD9854_WR_Byte(0x24,(uchar)(Shape&0xff)); AD9854_UDCLK=1; //更新AD9854输出 AD9854_UDCLK=0; }

//================================================================= // 函数名称 :void delay (uint us) // 函数功能 :us级延时,大概2~4 us // 入口参数 :us 延时时间的长短 // 出口参数 :无

//================================================================= void delay (uint us) { uint i; for(i=0;i

//测试正弦波,采用120MHZ SYSCLK时,出来10MHZ波形,波形很好,测试成功

//当采用300MHZ SYSCLK时,测试50MHZ波形时,DDS发热厉害,且波形衰减严重,幅度在35mV左右

int main() { AD9854_Init(); AD9854_SetSine(10000000,4000); while(1); }

//测试正弦波,采用120MHZ SYSCLK时,出来87.697HZ波形,波形很好,测试成功 /*

26

int main() { AD9854_Init(); AD9854_SetSine_double(87.697,4000); while(1); } */

//测试FSK,采用120MHZ SYSCLK,1K和6K,测试成功,结果对应\波形.bmp\/*

int main() { AD9854_InitFSK(); AD9854_SetFSK(1000,6000); while(1) { AD9854_FDATA = 1; delay(30000); //延时时间长,便于观察 AD9854_FDATA = 0; delay(30000); } } */

//测试BPSK,采用120MHZ SYSCLK,测试成功 /*

int main() { AD9854_InitBPSK(); AD9854_SetBPSK(0,8192); while(1) { AD9854_FDATA = 1; delay(10); AD9854_FDATA = 0; delay(10); } } */

//测试OSK,采用120MHZ SYSCLK,测试成功 /*

int main()

27

{ AD9854_InitOSK(); AD9854_SetOSK(10); while(1) { AD9854_OSK=1; delay(30); AD9854_OSK=0; delay(30); } } */

//测试AM,采用120MHZ SYSCLK,测试成功 /*

int main() { AD9854_InitAM(); while(1) { AD9854_SetAM(2000); delay(10); AD9854_SetAM(4000); delay(10); } } */

//测试RFSK,采用120MHZ SYSCLK,测试成功 /*

int main() { AD9854_InitRFSK(); AD9854_SetRFSK(1000,60000,100,30); while(1) { AD9854_FDATA = 1; delay(30000); //延时时间长,便于观察 AD9854_FDATA = 0; delay(30000); } } */

28

参考资料: 1.陈剑栋

,姚健棉《正弦信号

发生

》,

http://wenku.http://www.wodefanwen.com//view/856d6a8bd0d233d4b14e69f8.html 2.未知作者,《高频课程设http://wenku.http://www.wodefanwen.com//view/0cc939125a8102d276a22fd5.html

29

本文来源:https://www.bwwdw.com/article/qcq8.html

Top