基于DDS的高精度信号发生器设计说明.docx
《基于DDS的高精度信号发生器设计说明.docx》由会员分享,可在线阅读,更多相关《基于DDS的高精度信号发生器设计说明.docx(20页珍藏版)》请在冰点文库上搜索。
基于DDS的高精度信号发生器设计说明
河南大学物理与电子学院
开放实验室单片机设计报告
基于DDS的高精度信号发生器设计
设计人:
开放实验室入室人员
基于DDS技术的信号发生器的设计
开放实验室入室人员
(河南大学物理与电子学院,河南开封,475004)
摘要:
本文讨论了利用DDS(直接数字频率合成)技术制作信号发生器的方法,介绍了设计信号发生器所用到的DDS相关技术。
信号发生器使用8位单片机AT89S52作为控制模块单元,结合芯片AD9850就实现了直接数字频率合成技术(DDS),该信号发生器采用C语言作为系统程序,通过AT89S52控制DDS芯片AD9850产生0HZ~20MHZ频率可调的两种信号波(正弦波、方波),同时还采用8位数码管作为频率调节的显示界面。
整个系统结构紧凑,电路简单,功能强大。
可广泛应用于生产实际和科技领域中。
关键词:
DDS;正弦波;方波;AT89S52;AD9850
ThedesignofsignalgeneratorbasedonDDStechnology
Liangb-j
(SchoolofPhysicsandElectronics,HenanUniversity,HenanKaifeng475004,China)
Abstract:
ThispartdiscussesthemethodofmakingasignalgeneratorwhichusestheDDStechnology,andintroducedtheuseofDDSrelatedtechnologies.Thesignalgeneratorusesthe8single-chipAT89S52asitscontrolmoduleunit,combinedwithDDSchipAD9850,toproduce0HZ~20MHZfrequencyadjustabletwosignalwave(sinewaveandsquarewave),thedisplayunituses8digitaltubeasitsdisplay..sothissignalgeneratoisclearandconsice.Itcanbewidelyappliedproductionandinthefieldofscienceandtechnology.
Keywords:
DDS;Sinewave;Squarewave;AT89S52;AD9850
0前言
随着数字技术的飞速发展,高精度动态范围,数字/模拟(D/A)转换器的出现和广泛应用,用数字控制的方法从一个标准参考频率源产生多个频率信号的技术,即直接数字合成(DDS)技术异军突起。
其优点有[1]:
(1)频率转换快:
DDS频率转换时间短,一般在纳秒级;
(2)分辨率高:
大多数DDS可提供的频率分辨率在1Hz数量级,许多可达0.001Hz;
(3)频率合成范围宽;
(4)相位噪声低,信号纯度高;
(5)可控制相位:
DDS可方便地控制输出信号的相位,在频率变换时也能保持相位联系;
(6)生成的正弦/余弦信号正交特性好等。
因此,利用DDS技术特别容易产生频率相对带宽较宽、频率转换时间极短、频率分辨率高、相位可控的信号,这在电子测量、雷达系统、调频通信、电子对抗等领域具有十分广泛的应用前景。
美国AD公司推出的高集成度频率合成芯片AD9850就是采用DDS技术的典型产品之一。
针对DDS的上述特点,本文基于AD9850器件设计了一种信号发生器,在给定电源电压条件下,设计并制作一个正弦波和方波信号源。
1系统设计及选择分析
1.1总体方案
设计制作一个能产生正弦波和方波信号源。
要求信号频率在0HZ~20MHZ范围内能程控步进调整,方波的占空比在2%~98%之间能程控步进可调,且性能良好,满足指标。
1.2方案比较
1.2.1正弦波的产生
方案一:
采用单片函数发生器(ICL8038),可同时产生低失真的正弦波、脉冲波,方法简单,用D/A转换器的输出来改变调整输出电压,也可以实现数控调整频率,但是其电路由于采用正负电压,地线是浮置的,产生的信号的步长难以满足要求,且频率稳定度不高
方案二:
采用锁相式频率合成器,利用锁相环将压控振荡器(VCO)的输出频率锁定在所需频率上,通过这种锁定不同的频率从而实现实现输出不同频率信号。
该方案性能良好,但难以达到输出频率覆盖系数的要求,且电路较为复杂,不适于产生低频信号。
方案三:
采用直接数字频率合成器(DDS),可用硬件或软件实现。
即用累加器按频率要求对相应的相位增量进行累加,再以累加相位值作为地址码,取存放于ROM中的波形数据,经D/A转换、滤波即所得需要正弦波波形。
方法简单,频率稳定度高,易于控制[2]。
1.2.2方波的产生
方波可由正弦波整形得到,关键是如何控制占空比,对此有几种方案:
方案一:
由D/A转换器产生占空比相应的电压,将之与正弦信号进行比较就可得到所需占空比方波。
但这种方法精度较差,难以达到2%的步进的要求。
方案二:
先把正弦波变换为锯齿波或三角波,然后进行比较。
这样一来虽然可以提高精度,但电路复杂,成本较高,调试也困难。
方案三:
采用计数定时方法,先将正弦波变换为方波,再用它的上升沿触发计时电路,该电路在计时期间输出为高电平,计时终止后输出为低电平,该输出波形即为所需要波形。
这种方法计时精度高,成本低。
1.3选择实施方案
根据以上分析,选用如下方案。
(1)正弦波的产生
800Hz以下的正弦波产生采用软件相位累加DDS方案来实现。
800Hz~20MHz的正弦波采用动态生成程序的方法来实现。
(2)方波的产生
方波由同频率的正弦波产生,采用计数定时方案来实现占空比的步进调整。
为提高占空比的精度,采用预分频和择优技术,通过预分频和择优技术从而控制方波的产生。
2系统硬件电路设计
2.1信号发生器控制系统
本信号发生器系统主要有单片机控制模块单元、信号产生单元、按键电路和显示电路等四大模块电路构成。
其中信号产生单元和单片机控制模块单元是构成DDS信号发生器系统不可分割的两大部分。
系统框图如图1所示:
图1DDS信号发生器系统总体电路实现框图
2.2单片机控制单元
单片机控制模块单元是整个信号发生器的重要组成部分,通过单片机控制模块单元、信号产生单元、按键电路、显示电路等的连结,从而控制信号的产生、频率的改变和显示。
AT89S52是美国ATMEL公司生产的低电压、低功耗、高性能CMOS8位单片机,片内含8kbytes的可反复擦写的只读存储器(PEROM)和256bytes的随机存取数据存储器(RAM),器件采用该公司的高密度、非易失性存储技术生产,与标准的MCS-51指令系统及8052产品引脚兼容,片内置通用8位中央处理器(CPU)和Flash存储单元,具有1000次擦写周期,三级加密程序存储器I/O线,三个16位定时器/计数器,六个中断源,全双工UART串行通道,低功耗空闲和掉电模式,看门狗定时器,双数据指针,全静态操作:
0HZ-33MHZ,掉电标识符。
另外AT89S52可降至0HZ静态逻辑操作,支持2种软件可选择节电模式。
32个可编程AT89S52构成的单片机系统具有结构简单、造价低廉和效率高等优点的微控制系统,由于内部集成了RAM、ROM等器件,减少了硬件开销,提高了系统的性价比。
因此,本单片机控制模块采用AT89S52芯片[2][3]。
2.2.1AT89S52主要性能参数
图289S52引脚图
●与MCS-51单片机产品兼容、8K字节在系统可编程Flash存储器、256字节RAM、1000次擦写周期、三级加密程序存储器;
●工作频率范围:
0Hz~33MHz;
●4个8位并行可编程I/O口,其中P0\P2\P3是复用口(P0和P2位地址/数据线,可寻址64KBROM和64KBRAM);
●三个16位定时器/计数器;
●八个中断源,两个优先级嵌套结构;
●全双工UART串行通道、低功耗空闲和掉电模式、掉电后中断可唤醒、看门狗定时器、双数据指针、掉电标识符;
●一个片内晶振及时钟电路;
●工作电压:
5V。
2.2.2AT89S52功能特性概述
AT89S52提供以下标准功能8k字节Flash闪存存储器,256字节内部RAM,32个I/O口线,3个16位定时/计数器,一个6向量两级中断结构,一个全双工串行通信口,片内振荡器及时钟电路。
同时,AT89C52可降至0Hz的静态逻辑操作,并支持两种软件可选的节电工作模式。
空闲方式停止CPU的工作,但允许RAM,定时器/计数器,串行继续工作。
掉电方式保存RAM中的内容,但振荡器停止工作并禁止所有其它所有部件工作直到下一个硬件复位。
2.3信号产生单元
信号产生单元是信号发生器信号产生的根本来源,通过单片机可以控制其产生信号的频率。
本系统采用AD9850作为信号产生芯片。
2.3.1功能介绍
AD9850是一款采用32位频率控制字的DDS芯片,最大时钟频率为125MHz。
本设计中采用100MHz,输出正弦波频率时的分辨率可达0.02328Hz。
AD9850输出信号的频率fout可通过式子2.1进行计算:
fout=(s)÷223(2.1)
其中为32位频率控制字的值;s为标准参考时钟的频率。
图3AD9850引脚图
按AD9850芯片手册说明,结合实际输出波形测试,本设计的输出频率带宽限制在1~20MHz(20%s以内)。
单片机与AD9850通过串口传送频率控制数据,其中AD9850第7引脚(W_CLK)为控制字移位时钟,第8引脚(FQ_UD)为频率更新控制口,第25引脚(D7)为串口移位数据输入口。
AD9850的DAC输出两个互补的模拟电流(第20、21引脚),若要调节DAC满量程输出电流,需要第12引脚的外接电阻。
其输出电流与电阻的关系为I=32×(1.248V÷R),当电阻为3.9kΩ时,DAC的输出电流约为10mA。
这样,在100Ω的负载上可得到峰-峰值约为1V的正弦波。
AD9850的引脚图如图3所示。
2.3.2AD9850工作原理
AD9850内部结构原理框图如图4所示。
当输出改变时,AD9850的波形是相位连续的。
DDS电路主要起数字分频作用,其增量是受参考时钟经控制字的2N位分频控制。
相位累加器是一种系数可变的计数器,在每次接收到时钟脉冲信号时将增量数字存储。
当计数器溢出时,限制增加相位累加器的触发输出。
频率控制器设置计数器的系数有效,决定了增量的大小,使得在下一个时钟脉冲到来时相位计数器获得更多的值。
大的增量使计数器更快捷的溢出,这样将导致更高的频率输出[4][5]。
AD9850采用独有的控制算法,以适当的CMOS值,使相位计数器的14位值得到转变。
独特的控制算法大量的减少了ROM内存(采用DSP技术完成这项功能),这就使得AD9850变得尺寸小,耗能低。
图4AD9850内部原理框图
2.4显示系统
显示系统用于信号发生器频率的显示,本系统选用数码管作为显示方式,结构简单且显示清晰。
LED数码管(LEDSegmentDisplays)是由多个发光二极管封在在一起组成“8”字型的器件,引线已在内部连接完成,只需引出它们的各个笔划,公共电极。
数码管按段数分为七段数码管和八段数码管,八段数码管比七段数码管多一个发光二极管单元(多一个小数点显示);按能显示多少个“8”可分为1位、2位、4位等等数码管;按发光二极管单元连接方式分为共阳极数码管和共阴极数码管。
共阳数码管是指将所有发光二极管的阳极接到一起形成公共阳极(COM)的数码管。
共阳数码管在应用时应将公共极COM接到+5V,当某一字段发光二极管的阴极为低电平时,相应字段就点亮。
当某一字段的阴极为高电平时,相应字段就不亮。
共阴数码管是指将所有发光二极管的阴极接到一起形成公共阴极(COM)的数码管。
共阴数码管在应用时应将公共极COM接到地线GND上,当某一字段发光二极管的阳极为高电平时,相应字段就点亮。
当某一字段的阳极为低电平时,相应字段就不亮。
了解LED的这些特性,对编程是很重要的,因为不同类型的数码管,除了它们的硬件电路有差异外,编程方法也是不同的。
本系统选用4位八段共阴极数码管。
每一笔划都是应一个字母表示,DP是小数点,如图5所示。
图5引脚定义
2.5实现单片机与AD9850之间的连接
运用单片机实现对DDS的控制具有编程控制简便、接口简单、成本低、小型化等优点,因此采用MCS52单片机作为控制核心来向AD9850发送控制字。
只要能向AD9850发送正确的控制字,就可以在其输出端(第21脚:
IOUT)得到我们想要的波形。
因此下面我们重点介绍利用单片机的控制电路。
单片机与AD9850的接口既可以采用并行方式,也可采用串行方式。
为了充分发挥芯片的高速性能,在单片机资源允许的情况下我们选择并行方式。
I/O方式的并行接口电路比较简单,图6是I/O方式并行接口的电路图。
AD9850的数据线D0~D7与P2口相连,WCLK和FQUD分别与P3.2(10引脚)和P3.0(11引脚)相连,所有的时序关系均可通过软件控制实现。
在程序中,每将一字节的数据送到P2口后,必须将P3.2(WCLK)置高。
在其上升沿,AD9850接收到P2口相连的数据线上的数据,然后将P3.2置低,并准备下一字节的发送,连续发送5个字节后,须将P3.0(FQUD)再次置高,以使AD9850根据输入的控制字更改频率和相位输出,随后再置P3.0为低,准备下一组发送。
单片机的P3.2、P3.0引脚为串行口,当被占用时,WCLK和FQUD引脚也可与其它I/O脚相连,这时需要修改相应的发送程序即可[6][7]。
图6单片机与AD9850的结合图
图7系统仿真图
3系统软件分析
3.1系统概述
本系统的软件程序采用C语言编写,系统程序编写采用模块化编写方式.主要分为显示程序、AD9850的控制程序两大部分。
3.2系统显示程序设计
本系统用两个四位八段数码管,故能够显示计数范围为:
00000000----99999999,可以满足本信号发生器要求。
3.3系统AD9850的控制程序设计
3.2.1AD9850频率控制字的计算
根据AD9850的技术资料可知:
其输出频率值为:
fout=(s)÷223(3.1)
其中为32位频率控制字的值;s为标准参考时钟的频率。
例如:
s=100MHZ,输出信号的频率为,1KHZ,则向AD9850写入的频率控制字为(1*103*232)/(100*106)=42950=0X000A7C6。
3.2.2AD9850频率控制方式程序设计
AD9850的频率/相位控制字一共有40比特,其中32比特为频率控制字,5比特为相位控制字,1比特是电源休眠控制,最后2比特为工作方式控制,应用中将1位电源休眠控制,2为工作方式控制设置为“000”。
Ad9850并行方式加载频率/相位控制字的各位分配如图7所示。
并行加载时时序图如图8所示,控制字装换为频率显示值流程图如图9所示,
图7频率/相位控制字的各位分配表
图8并行加载时时序图
图9控制字装换为频率显示值流程
图10程序流程图
3.4系统的部分核心源码
4.3.1主程序部分程序
#include"ad9850.h"//信号产生程序函数
#include"smguan.h"//数码管显示程序函数
#include
voidmain()//主程序
{
while
(1)
{
display(count);//显数码管示
if(k1==0)key1();//P3.6=0,则频率值加1
if(k2==0)key2();//p3.7=0,则频率值加1000
if(k3==0)key3();//P3.4=0,则频率值减1
if(k4==0)key4();//p3.5=0,则频率值减1000
Frequency_Out_9850=count;
Write_9850();//输出波形
}
}
4.3.2显示单元数码管部分程序
#include
#defineucharunsignedchar
#defineuintunsignedchar
sbitk1=P3^6
sbitk2=P3^7
sbitk3=P3^4
sbitk4=P3^5
longuintcount,Frequency_out_9850;
……//程序太长不宜写在报告中,完整程序请
Voidmain()//联系QQ154401855(或154401856)下载
{
While
(1)
{
display(count);
if(k1==0)key1();
if(k2==0)key2();
if(k3==0)key3();
if(k4==0)key4();
}
}
……
voiddisplay(longuintcount)
{
uchari;
longuintwei;
ucharbuffer[8]={0};
wei=count;
buffer[7]=wei%10;
wei=wei/10;
buffer[6]=wei%10;
wei/=10;
buffer[5]=wei%10;
wei/=10;
buffer[4]=wei%10;
wei/=10;
buffer[3]=wei%10;
wei/=10;
buffer[2]=wei%10;
wei/=10;
buffer[1]=wei%10;
wei/=10;
buffer[0]=wei%10;
wei/=10;
for(i=0;i<8;i++)
{
P1=i;
if(i<4)
P0=leddata1[buffer[i]];
elseP0=leddata2[buffer[i]];
delay5ms();
}
}
4.3.3信号产生单元AD9850的部分程序
#include
#defineucharunsignedchar
#defineuintunsignedint
longuintFrequency_Out_9850;
doubleCon_Word_1_9850=0x00;
doubleCon_Word_2_9850=0x00;
longuintConTrol_Word_9850=0x00;
sbitw_clk_9850=P3^2;
sbitreset_9850=P3^1;
sbitfqud_9850=P3^0;
#definedataport_9850P2
delay_9850(longintn)
{
while(n!
=0)
{
n--;
}
……
Calculate_Control_Word_9850(longuintFrequency_Out_9850)
{
Con_Word_1_9850=Frequency_Out_9850*42;
Con_Word_2_9850=Frequency_Out_9850*0.9496;
Con_Word_2_9850=Con_Word_2_9850+0.5;
Con_Word_1_9850=Con_Word_1_9850+Con_Word_2_9850;ConTrol_Word_9850=Con_Word_1_9850/1;
}
……
图11信号发生器实物图
图12信号发生器实际测试图
4结论
经过两个月的设计和制作,对DDS信号发生器在不同频率下的输出波形进行测试(如上图12所示),在超过20MHZ左右的频率值是输出波形逐渐变小,而在0—20MHZ范围内的频率输出波形是很稳定的,无明显失真,完全能达到所要求的性能指标。
参考文献
[1]石雄.DDS芯片AD9850的工作原理及其与单片机的接口.电气动力工程.2006,4
(1)
34-36
[2]尚建荣.基于DDS的程控信号发生器设计.现代电子技术.2011,9
(2):
23~24
[3]郭文川.单片机原理与接口技术.北京:
中国农业出版社,2007年8月.2~98
[4]潘晓宁.单片机程序设计实践教程.北京:
清华大学出版社,2009年8月.5~100
[5]杨家功.DDS技术原理.国外现代电子技术.2001,3(5):
53-56
[6]李建忠.基于单片机的函数信号发生器.西安:
西安电子科技大学出版社,1998年5月.
8~10
[7]石桂名,翼勇钢.基于AD9850的信号发生器的设计与实现.现代电子技术,2010,3
(1):
16~17