49课件四十九基于DDS的多功能正弦信号发生器.docx
《49课件四十九基于DDS的多功能正弦信号发生器.docx》由会员分享,可在线阅读,更多相关《49课件四十九基于DDS的多功能正弦信号发生器.docx(25页珍藏版)》请在冰豆网上搜索。
49课件四十九基于DDS的多功能正弦信号发生器
基于DDS的多功能正弦信号发生器的设计
李永亮,叶根,吴旭科
摘要:
本设计基于DDS直接数字频率合成技术。
采用DDS集成芯片AD9850作为正弦信号发生模块,单片机AT89S52作为主控器件,。
单片机系统采用分页技术,所有外围设备均挂在AT89S52的总线上,并分配不同的地址。
由于DDS技术产生的正弦波具有稳定度高,输出频率范围宽,频率分辨率高等优点,本信号发生器产生的正弦波稳定度优于10e-4;输出频率范围可以从10Hz到62.5MHz;频率步进可以达到0.0291Hz。
同时以AD9850产生的稳定的正弦信号作为本振,产生调幅、PSK、FSK信号。
系统用8位数码管作为显示设备、16键键盘作为输入设备进行友好的人机交互。
关键词:
DDS,正弦信号发生器,信号调制
1.系统设计
1.1设计要求
一、任务
设计制作一个正弦信号发生器。
二、要求
1、基本要求
(1)正弦波输出频率范围:
1kHz~10MHz;
(2)具有频率设置功能,频率步进:
100Hz;
(3)输出信号频率稳定度:
优于10-4;
(4)输出电压幅度:
在
负载电阻上的电压峰-峰值Vopp≥1V;
(5)失真度:
用示波器观察时无明显失真。
(6)产生二进制PSK、FSK信号:
在100kHz固定频率载波进行二进制键控,二进制基带序列码速率固定为10kbps,二进制基带序列信号自行产生;
1.2总体设计方案
1.2.1设计思路
采用DDS技术,可以使得系统性能远远优于题目的要求。
DDS即DirectDigitalFrequencySynthesis,直接频率合成。
DDS的基本原理是利用采样定理,通过查表法产生波形,其电路原理图如下所示:
相位累加器由N位加法器与N位累加寄存器级联构成。
每来一个时钟脉冲FCLK,N位全加器将控制字X与累加寄存器输出的累加相位数据相加,把相加后的结果送到N位全加器的数据输入端,以使加法器在下一个时钟脉冲的作用下继续与频率控制字相加。
这样,相位累加器在时钟作用下,不断对频率控制字进行线性相位加累加。
由此可以看出,相位累加器在每一个时钟输入时,把频率控制字累加一次,相位累加器输出的数据就是合成信号的相位,相位累加器的输出频率就是DDS输出的信号频率。
用相位累加器输出的数据作为波形存储器(ROM)的相位取样地址。
这样就可把存储在波形存储器内的波形抽样值(二进制编码)查找出来,完成相位到幅值转换。
波形存储器的输出送到D/A转换器,D/A转换器将数字形式的波形幅值转换成所要求合成频率的模拟信号。
低通滤波器用于滤除不需要的谐波分量,以使输出频谱为纯净的正弦波信号。
本设计在DDS的基础上,利用89S52做主控,采用分页技术以带更多的外围设备。
用运放作1KHZ正弦信号发生器,用LM567作5K方波发生器模拟10Kbps二进制基带序列信号。
利用调幅芯片MC1496实现调幅,通过程序控制DDS实现PSK、ASK、FSK。
1.2.2方案论证与比较
1.DDS设计方案论证与选择
方案一:
利用频率合成器。
这种方案可实现程控,但步进和输出频率范围都不可能满足题目的要求,不可行。
方案二:
利用FPGA模拟。
这种方案硬件简单。
但控制较为复杂。
方案三:
利用DDS集成芯片AD7008。
AD7008内部集成了调频、调幅、调相模块,功能强大,单片就可以实现所有的要求。
但价格昂贵且难以买到。
方案四:
利用DDS集成芯片AD9850。
AD9850功能对比AD7008差,调频、调幅需外接电路。
但价格可以承受,且实际中买到。
根据设计的要求以及我们的条件,我们选择方案四,采用DDS单片电路AD9850。
AD9850是一个运用先进的DDS技术,并结合集成在一片芯片内的高速、高性能的D/A转换电路和比较器构成一个完全数控的可编程频率合成器。
当有一个精确的时钟源作为参考频率源时,AD9850能产生一个频谱很纯的,频率或相位可编程的模拟正弦波输出。
对于125MHz参考时钟,AD9850能产生一个32位频率调整控制字,达到0.0291Hz的输出频率分辨率。
AD9850的电路结构允许产生频率值是参考时钟的一半即62.5MHz的输出,并且输出的频率能用数控的方式以每秒产生个新频率的速度变化。
AD9850还提供了5个bit的数控相位调制。
它能使输出相位以1800,900,450,22.50,11.250或是它们的任意组合的增量改变。
频率,控制和相位调制字可以以并行或串行的方式送入AD9850。
AD9850采用了先进的COMS技术,所以在+3.3V和+5V电源供电的情况下都能够正常工作。
2.输入模块的设计方案论证与选择
方案一:
利用4x4行列键盘。
这种方案硬件连接简单,为主流方案。
但需占用单片机的一个端口,资源浪费。
方案二:
利用16-4线编码。
这种方案硬件连接稍微复杂,但只用4个单片机引脚,且编程简单。
故选择方案二,利用16-4线编码键盘。
3.输出模块的设计方案论证与选择
方案一:
利用液晶显示。
这种方案美观舒适,耗电小。
但控制较为复杂。
方案二:
利用动态扫描数码管。
这种方案硬件连接梢复杂,较耗电,但控制简单。
考虑在较短时间内实现设计,故利用动态扫描数码管。
4.增加输出电压幅度的后级放大设计方案论证与选择
利用宽带运放对输出信号进行放大,以增强负载能力。
这里选用低噪宽带运放NE5534,在增益为1时带宽为10M。
5.1KHZ正弦信号,10Kbps二进制基带序列信号的产生
1KHZ正弦信号利用一个T型RC振荡器产生。
频率有一个窄的可调范围,包含1KHZ正弦信号,峰峰值可达10V。
10Kbps二进制基带序列信号用LM567搭建的频率可调方波产生电路模拟。
方波频率调到5KHZ(模拟10Kbps二进制基带序列信号的0101……序列)。
6.PSK、ASK、FSK信号的产生
FSK:
利用单片机定时中断接收10Kbps码,根据码值选择送入DDS频率控制字数据的大小,从而改变输出频率以进行频移键控。
PSK:
利用单片机定时中断接收10Kbps码,根据码值选择送入DDS相位控制字数据的大小,从而改变输出相位以进行相移键控。
ASK:
利用单片机定时中断接收10Kbps码,根据码值选择送入挂在51数据总线上的DAC的数据,改变模拟输出值,该值送入模拟调幅模块实现幅移键控。
7.电源方案的选择
系统需要5V,-5V,12V,-12V,-8V稳压源。
方案一:
采用升压型稳压电路。
用MC34063芯片将3V转换为所需的电压。
这种方案只需两节电池,但供电电流小,时间短,本系统较庞大,无法稳定工作。
方案二:
采用三端稳压芯片7805,7908,7905。
该方法稳定,简单。
整个系统只需12V,-12V输入。
综上所述,选择方案二。
1.2.3系统组成
经方案比较与论证,最终确定的系统方框图如图1所示。
图1
2.单元电路设计
2.1AD9850外围电路设计与实现
AD9850电路框图:
正弦波信号可以用这样的函数来表示:
y =sin(tω),这是一个非线性函数。
要直接合成一个正弦波信号,首先应将函数y=sin(x)进行数字量化,然后以x为地址,以y为量化数据,依次存入波形存储器。
AD9850使用了相位累加技术来控制波形存储器的地址,在每一个基准时钟周期中,都把一个相位增量加到相位累加器的当前结果上。
相位累加器的输出即为波形存储器的地址,通过改变相位增量即可以改变输出频率值,所以基准时钟频率的稳定度也就是输出频率的稳定度。
根据相位累加器输出的地址,由波形存储器取出波形量化数据,经过数模转换器转换成模拟电流,再经过运算放大器转换成模拟电压。
由于波形数据是间断的取样值,所以AD9850输出的是一个阶梯正弦波形,必须经过低通滤波器将波形中所含的高次谐波滤除掉,输出才是连续的正弦波。
AD9850外围电路的设计如图2所示。
原理图参考了其Datasheet。
这一部分是系统的核心,这块板的成功与否直接决定了最终能否成功。
AD9850时钟输入为125M的有源晶振,对模拟电路部分的干扰很大,所以在布线时要特别讲究。
布线原则为:
1.板子尽量大
2.高频回路线尽量短
3.正反面的模拟地均大面积铺地,正反面的模拟地之间充分接触
4.模拟地与数字地分开,单点接触
5.线路清晰,尽量按原理图画法布
6.有源晶振与DDS芯片尽量靠近,有源晶振的地为数字地
由于打印,转印,腐蚀板子时非常仔细,所以做出的板子很理想,地网的网格、ssop的贴片这些关键的地方腐蚀的很好,为后面工作的顺利进行打下了基础。
图2
图3
以下为一些参数的计算:
最大输出频率为:
125M/2=62.5MHZ
但因实际的低通filter不可能理想,所以实际最大输出约为:
125M/3=41M
以上数值完全超过设计要求。
因为AD9850有32位频率字和5位相位字,所以频率分辨率可达:
125M/2^32=0.0291HZ
完全超过设计所要求的步进100HZ。
输出电流满量程为:
IOUT=32(1.248V/RSET).
电路中将RSET定为2K,所以输出电流满量程为20mA。
后级无源低通虑波器的设计参照datasheet设计,经pspice仿真其幅频特性如图4所示:
图4
其截止频率约为42MHZ。
实际中得到了很好的效果。
2.2AT89S52最小系统板的设计
AT89S52最小系统板如图5所示。
此系统板的特色就是通用性强,将单片机所有引脚均引出供外围电路连接,并有在线烧写功能。
因为好多设备要挂在总线上,所以另做了一块信号转接板。
图5
2.3键盘,数码管电路的设计
键盘电路的设计如图6所示。
键盘板用一些逻辑门设计了cs,int,rd等功能,通用性强,16键只需四根数据线。
图6
数码管电路的设计如图7所示。
是一个8位数码显示,采用动态扫描的控制方法,位码和段码先后送入锁存显示。
图7
以上模块均挂在数据总线上。
2.31KHZ正弦信号和10Kbps二进制基带序列信号的产生电路
其中Fo=1/2*pi*RC,调节其中的电位器可调节输出频率,将其调到1KHZ。
输出接到调幅电路的信号输入端。
方波用LM567实现,具体电路如下。
输出方波的频率Fo由R1和C1决定:
Fo=1/(1.1*R1*C1)
3.软件设计
以下是程序流程图:
4.系统测试
1.DDS输出接示波器,通过键盘操作可以看到输出,步进可调的波形。
2.信号频率稳定度测试方法:
由于使用了125M有源晶振,频率稳定度完全达到设计的要求。
3.输出电压幅度:
当不接负载时,输出波Upp在2MHZ以内超过2V,10M时输出波Upp为1.5V。
接50负载时,Upp衰减较大,但低频时仍在1V左右。
但频率较高时,输出波Upp发生了严重失真。
究其原因,是放大器的性能不够好,带宽增益乘积不足所致。
4.示波器观察无明显失真
测试仪器:
20M双通道示波器、信号源、毫伏表
5.结束语
正弦信号发生器可实现的功能如下:
1、正弦波输出频率范围:
100HZ---30MHZ
2、频率可设置,步进有100、1K、10K、100K、1M,共5档。
3、频率稳定度优于10^-4。
4、输出波形无明显失真。
5、能自行产生1KHZ正弦波作为调幅的基波,产生调幅波和ASK信号。
6、能自行产生10Kbps二进制基带序列信号作为SK的基波,并成功产生了PSK、FSK信号。
7、由于DDS后级放大器不够强的缺陷,导致调幅,调制度,ASK的调试受影响,此模块完成的不太好。
8、二进制键控PSK,FSK可以很好的完成。
综上,本设计基本部分得到很好的实现,发挥部分的PSK、FSK也得到很好的实现,调幅和ASK可实现,但没有完全达到要求。
调频由于时间关系,没有实现。
附录1:
主要元器件清单
AD9850
DAC0832
MC1496
各种电阻、电容、电感
AT89S52
附录2:
主要程序段
main:
WR_DDS:
;5EH--62H´æ´¢DDSµÄ¿ØÖÆ×Ö
MOVSTOR_R0,R0;
MOVSTOR_R1,R1;
MOVR0,#05H;
MOVR1,#61H;DDS¿ØÖÆ×ÖÊ×µØÖ·£»
MOVDPTR,#DDS;
DD:
MOVA,@R1;
MOVX@DPTR,A;
CLRC
MOVA,R1;
SUBBA,#1;
MOVR1,A;
;INCR1
DJNZR0,DD;
MOVXA,@DPTR;²úÉúFQ-UDÐźţ»
MOVR0,STOR_R0;
MOVR1,STOR_R1;
RET
;-----------------------------------------------------------------
SINE:
;;;;»¹ÐèÒªSETλ¹¦ÄܺÍÏÔʾ¹¦ÄÜÒÔ¼°ÉèÖÃƵÂʹ¦ÄÜ,¼üÅÌÈ¥¶¶
ACALLWR_DDS;
S_L:
ACALLTIMSHOW;
MOVDPTR,#KEY
MOVXA,@DPTR;
ANLA,#0FH;
MOVKEYCODE,A;
MOVA,#06H;
S_K_L:
CJNEA,KEYCODE,S_DOWN;
MOVDPTR,#KEY
MOVXA,@DPTR;
ANLA,#0FH;
CJNEA,#0FH,S_K_L;µÈ´ýÉÏÉýÑØ
S_UP:
MOVKEYCODE,#0FH;
MOVR1,#5DH;W0;;;;;;;;;;;;;;;;;PRESS06H;
MOVR0,#59H;DW0
MOVR2,#04H;
CLRC;
S_U_L:
MOVC,STOR_C;
MOVA,@R1;
ADDCA,@R0;
MOVSTOR_C,C;
MOV@R1,A;
CLRC;
INCR1;
INCR0;
CLRC;
DJNZR2,S_U_L;
MOVR1,#56H;SHOW_W0
MOVR0,#50H;SHW_DW0
MOVR2,#03H;
CLRC;
SS_U_L:
MOVC,STOR_C;
MOVA,@R1;
ADDCA,@R0;
DAA;
MOVSTOR_C,C;
MOV@R1,A;
CLRC;
DECR1;
INCR0;
CLRC;
DJNZR2,SS_U_L;
ACALLWR_DDS;ƵÂʼӲ½½øÁ¿
AJMPS_L
S_DOWN:
MOVA,#07H;
S_K_L1:
CJNEA,KEYCODE,S_STEP_UP;
MOVDPTR,#KEY
MOVXA,@DPTR;
ANLA,#0FH;
CJNEA,#0FH,S_K_L1;µÈ´ýÉÏÉýÑØ
MOVKEYCODE,#0FH;
MOVR1,#5DH;;;;;;;;;;;;;;;;;PRESS07H;
MOVR0,#59H
MOVR2,#04H;
CLRC;
S_D_L:
MOVC,STOR_C
MOVA,@R1;
SUBBA,@R0;
MOV@R1,A;
MOVSTOR_C,C;
CLRC;
INCR1;
INCR0;
CLRC;
DJNZR2,S_D_L;
MOVR1,#56H;SHOW_W0
MOVR0,#50H;SHW_DW0
MOVR2,#03H;
CLRC;
SS_D_L:
MOVC,STOR_C;
;MOVA,@R1;
MOVA,@R0;
CJNEA,#00H,SS_1
MOVA,@R1;
ADDCA,#00H;
DAA;
MOV@R1,A;
AJMPSS_ND;
SS_1:
MOVA,@R0;
CJNEA,#01H,SS_2
MOVA,@R1;
ADDCA,#99H;
DAA;
MOV@R1,A;
AJMPSS_ND;
SS_2:
MOVA,@R0;
CJNEA,#10H,SS_ND
MOVA,@R1;
ADDCA,#90H;
DAA;
MOV@R1,A;
SS_ND:
MOVSTOR_C,C;
CLRC;
DECR1;
INCR0;
CLRC;
DJNZR2,SS_D_L;
ACALLWR_DDS;ƵÂʼõ²½½øÁ¿
AJMPS_L
S_STEP_UP:
MOVA,#08H;
S_K_L2:
CJNEA,KEYCODE,S_STEP_DOWN;
MOVDPTR,#KEY
MOVXA,@DPTR;
ANLA,#0FH;
CJNEA,#0FH,S_K_L2;µÈ´ýÉÏÉýÑØ
MOVKEYCODE,#0FH;
CLRC;
INCSINESTEP;;;;;;;;;;;;;;;;;;;;;;;;;;;;;PRESS08H;
MOVA,#05H;
CJNEA,SINESTEP,S_K_NXT;
MOVSINESTEP,#04H;
S_K_NXT:
ACALLST_SCH;
ACALLS_ST_SCH;
AJMPS_L;
S_STEP_DOWN:
MOVA,#09H;
S_K_L3:
CJNEA,KEYCODE,S_ESC;
MOVDPTR,#KEY
MOVXA,@DPTR;
ANLA,#0FH;
CJNEA,#0FH,S_K_L3;µÈ´ýÉÏÉýÑØ
MOVKEYCODE,#0FH;
CLRC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;PRESS09H;
MOVA,SINESTEP;
SUBBA,#01H;
MOVSINESTEP,A;
JNCS_K_NXT2;
MOVSINESTEP,#00H;
S_K_NXT2:
ACALLST_SCH;
ACALLS_ST_SCH;
S_K_ND:
AJMPS_L;
S_ESC:
MOVA,#0AH;
CJNEA,KEYCODE,S_K_ND;
MOVSHOW_MODE,#0H;
RET;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;PRESS0AH;
;-----------------------------------------------------------------------------
AM:
;µ÷ÖƶȷÖΪ10µµ10%---100%
;Ðè¼üÅÌÈ¥¶¶
MOVDPTR,#KEY
MOVXA,@DPTR;
ANLA,#0FH;
CJNEA,#06H,AM_DOWN;
AM_UP:
INCAM_DEG;µ÷ÖƶȼÓ1;;;;;;;;;;;;;;;;;PRESS06H;
MOVA,#0AH;;
CJNEA,AM_DEG,AM_NXT;
MOVAM_DEG,#09H;AM_DEG²»Äܳ¬¹ý9
AM_NXT:
MOVA,AM_DEG;
MOVDPTR,#AM_DATA
MOVCA,@A+DPTR;
MOVDPTR,#DAC;
MOVX@DPTR,A;WRITETODAC
AJMPAM;
AM_DOWN:
CJNEA,#07H,AM_ESC;;;;;;;;;;;;;;;;;;PRESS07H;
CLRC
MOVA,AM_DEG;
SUBBA,#1;µ÷ÖƶÈJIAN1
MOVAM_DEG,A;
MOVA,#00H;;
CJNEA,AM_DEG,AM_NXT2;
MOVAM_DEG,#0H;AM_DEG²»ÄÜÉÙÓÚ0
AM_NXT2:
MOVA,AM_DEG;
MOVDPTR,#AM_DATA
MOVCA,@A+DPTR;
MOVDPTR,#DAC;
MOVX@DPTR,A;WRITETODAC
AJMPAM;
AM_ESC:
CJNEA,#08H,AM;;;;;;;;;;;;;;;;;;;;;;;;;PRESS08H;
RET;
;-----------------------------------------------------------------------------
FSK:
MOVTMOD,#22H;Ñ¡Ôñ¶¨Ê±Æ÷0,1¹¤×÷·½Ê½2
MOVTL1,#9CH;ÉèÖòÉÑùÂÊΪ8K;
MOVTH1,#9CH;
SETBTR1;ÔÊÐíT0¼ÆÊý
SETBEA;¿ªÖжÏ
SETBET1;
F_L:
MOVDPTR,#KEY
MOVXA,@DPTR;
ANLA,#0FH;
CJNEA,#0AH,F_NEXT;;;;;;;;;;;;;;;;;PRESSOAH;
AJMPF_ESC;
F_NEXT:
ACALLDELAY10;
AJMPF_L;
F_ESC:
CLRTR1;
CLREA;
CLRET1;
RET
;------------------------------------------------------------------------------
F_INT:
CLREA
SETBTR1;ÔÊÐíT0¼ÆÊý
PUSH5DH;
PUSH5EH;
PUSH5FH;
PUSH60H;
MOVSTOR_A,A;
MOVSTOR_R1,R1;
MOVSTOR_R2,R2;
;MOVSTOR_P1,P1;
MOVSTOR_DPH,DPH;
MOVSTOR_DPL,DPL;
JBP1.1,TURN;
SETBP1.1;
AJMPTURN2;
TURN:
CLRP1.1;
TURN2:
JBP1.0,F_INT_NXT;
MOV5DH,#0F4H
MOV5EH,#0DBH
MOV5FH,#0D7H
MOV60H,#01H;;дƵÂÊÔÚÄÚ´æÖÐÓ³Ïñ¶¨Îª900KHZ´ËʱΪ0
AJMPF_INT_END;
F_INT_NXT:
MOV5DH,#0BAH
MOV5EH,#49H
MOV5FH,#0CH
MOV60H,#02H;;дƵÂÊÔÚÄÚ´æÖÐÓ³Ïñ¶¨Îª1MHZ´ËʱΪ1
F_INT_END:
ACALLWR_DDS
MOVA,STOR_A;
MOVR1,STOR_R1;
MOVR2,STOR_R2;
MOVDPH,STOR_DPH;
MOVDPL,STOR_DPL;
POP60H;
POP5FH;
POP5EH;
POP5DH;
SETBEA;
RETI;
;-------------