正弦信号发生器设计_第1页
正弦信号发生器设计_第2页
正弦信号发生器设计_第3页
正弦信号发生器设计_第4页
正弦信号发生器设计_第5页
已阅读5页,还剩15页未读 继续免费阅读

下载本文档

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

文档简介

1、正弦信号发生器作者:程锟、晏婷婷、覃雄伟摘要:本设计以凌阳SPCE061A单片机为核心,基于直接数字频率合成(DDS)技术制作了一个频率值能任意调节的多功能信号源。该信号源在1KHZ10MHZ范围能输出稳定可调的正弦波,并具有AM、ASK和PSK等调制功能。信号输出部分采用电流放大型宽带运放做电流放大,再用宽带电压运放做电压放大,很好地解决了带宽和带负载能力的要求。系统采用液晶显示模组CPCL501显示和键盘控制功能,在负载电阻下输出的电压峰-峰值1V可调。方案论证与选择单片机控制模块波形发生模块功放模块调制模块键盘显示 1.题目分析:本设计要求可以输出较宽频带且频率稳定度足够高的正弦信号,并

2、且具有一定的负载能力,同时可输出指标满足要求的AM、ASK、PSK信号。综合题目指标要求及相关分析,得到该设计的功能框架图如图一所示。本设计可分为以下几个部分:频率合成模块、AGC(自动增益控制)模块、幅度控制模块、功率放大模块、调制模块及人机交流模块。图一 功能模块框图 2.方案比较 (1)正弦信号发生模块 方案一:采用反馈型LC振荡原理。选择合适的电容、电感就能产生相应的正弦信号。其中电容采用变容二极管,通过控制二极管的电压来改变电容, 最终控制输出信号频率。此方案器件比较简单,但是难以达到高精度的程控调节,而且稳定度不高。 方案二:采用FPGA器件。将某一标准正弦信号经过高速采样后送到外

3、部存储器中储存好,然后用一个计数器产生地址读出存储器中的数据后送到D/A转换器件中输出,可以通过改变计数器的参数,改变地址信号,实现,也可以通过处理数据改变信号的幅度。但是此方案的输出波形受时钟影响较大,且不易于控制步进和进行功能扩展。 方案三:采用直接频率合成集成芯片AD9851。AD9851是AD公司生产的DDS芯片,带并行和串行加载方式,AD9851 内含可编程DDS 系统和高速比较器,能实现全数字编程控制的频率合成。 综上:由于DDS集成芯片能达到要求,而且节省硬件电路,程控调节能够方便实现,故采用方案三,作为1KHZ10MHZ正弦信号发生。 (2)AGC(自动增益控制)模块 方案一:

4、选用场效应管和运算放大器来实现。此电路结构简单、元减少、易于实现,但其稳定性差、达不到要求。 方案二:选用集成芯片AD603实现。信号经缓冲级后进入AD603,放大后进入有效值测量部分,得出有效值送入的那篇机,再由DAC输出给AD603控制放大倍数,实现自动增益控制。 方案三:DAC控制增益。输入信号放大后作为基准电压送给DAC,相当于一个程控衰减器。在接一级放大,这两集放大可实现要求的放大倍数。输出接到有效值检测电路上,反馈给单片机。单片机根据反馈调节衰减器,实现自动调节增益。但增益动态范围有限。 综上:采用方案二。 (3)功率放大模块 方案一:程控放大器AD603。AD603的电压控制端加

5、上控制电压,即可控制该放大器的增益。采用此方案的放大倍数控制灵活,甚至可以通过AGC比较容易实现设计要求中的输出电压范围。但是使用该方案费用比较高,而且调试比较复杂。 方案二:使用高带宽运放进行放大。使用AD811等高带宽放大器直接进行放大。 综上:由于方案二能实现要求的功能,电路简单,操作方便,故采用方案二。 (4) 模拟幅度调制(AM)模块 方案一:采用软件技术实现。先用A/D转换芯片对调制信号进行采样,将采样的结果经过相应的大小处理后D/A转换输出到外部的程控放大器的增益控制端。从而控制输出信号的幅度,也即实现了AM调制。由于程控放大器输入控制电压范围较小,A/D转换后的数据处理复杂而难

6、以精确控制增益大小,且外围电路比较复杂难调试。 方案二:采用模拟乘法器MC1496。MC1496实现将两个输入信号的相乘运算,通过相乘实现模拟调制,采用MC1496容易实现频谱搬移,且输出结果稳定性好,通过改变加给其调制信号的直流电平可以改变其调制深度。 综上:采用方案二。(5)ASK、PSK调制模块 方案一:直接采用软件方法实现。用程序直接控制DDS输出二进制PSK和ASK信号,根据码序列中的0或1直接控制DDS的相移,便可以实现PSK调制功能,而控制DDS的工作与否即可实现ASK调制。本方案直接用软件来实现产生二进制ASK,PSK信号,基本不用硬件电路,比较方便,但输出的信号不稳定。故不采

7、用。 方案二:采用模拟开关。将调制信号经过反向作一路输出,通过控制模拟开关选择输出原信号或反向信号从而实现PSK,而通过模拟开关选择输出信号的有无即实现ASK。使用此方法的原理简单,软件硬件都容易实现,且稳定性良好。 综上:采用方案二。(6)控制系统的选择 方案一:使用FPGA作为控制系统。对FPGA器件编程,使其实现对液晶,AD9851和模拟开关等的控制。但是由于本系统中对液晶的控制需要专业的模组工具才能更方便地使用,所以不采用此方案。 方案二:使用凌阳单片机作为控制系统。由于凌阳单片机具有自己的液晶显示模组,可以方便地对其编程实现人机接口。且其系统板内部有10位的A/D和D/A转换器,方便

8、使用,完全能实现本系统的要求。 综上:采用方案二。二、硬件设计DDS信号源设计电路图如图二所示。AD9851是ADI公司的可编程控制的直接数字频率合成的芯片。它内部包含可编程DDS系统,高性能D/A和高速比较器。外接上精密时钟源后,对其进行编程可控制输出相应的频谱纯净的正弦波。A/D9851的数据接入可采用串行或者并行。图二 DDS信号产生电路原理图 根据DDS芯片AD9851的工作原理,若累加器时钟为,累加器位数为N,累加器值为,频率控制字,外部参考时钟频率为20MHZ,经内部6倍频后,可得到AD9851内部工作频率为120MHZ,最终合成信号的频率和相位由下式决定。2.低通滤波模块 电路图

9、如图三所示。由于AD9851的输出信号中带有120mV的直流偏置电压和高次谐波分量,本设计在AD9851输出端加上了隔直电容和低通滤波电路。图三 低通滤波电路原理图3.AGC模块 如下图所示,AGC电路有可控增益放大器AD603和三极管2N3906、2N3904构建。AD603采用双电源供电方式,其控制范围为80db(-20db+60db),可满足题目要求设计要求。经试验调试,该AGC电路在输入信号峰峰值为情况下,可实现范围内稳定输出峰峰值为2.2V无失真正弦信号。图四 AGC电路图4.功率放大模块 功率放大部分采用电压反馈型宽带运放AD811。供电,增益为+10情况下,-3db带宽达100M

10、HZ,完全满足题意,且输出电流达100mA以上,满足输出峰峰值为6V的要求。电路图如图五所示。图五 功率放大原理图幅度调制(AM模块) 幅度调制的核心器件选用模拟乘法器MC1496,将载波信号和被调制信号相乘即可得到AM调制波。通过改变被调制信号的直流偏置而达到改变调制度的效果。其电路图如六所示。图六 幅度调制原理图ASK、PSK模块判断有无键按下输入要产生的频率控制字产生基带信号(10KHz)AM幅度的调制判断有无键按下M级别的输入K级别的输入步进值的加减(100Hz)步进值的加减(10%)结束开始基带信号可以自行产生,用AD9851产生100KHz的正弦信号作为载波,如果用两个单片机控制就

11、用单片机产生基带信号,否则可以用信号发生器产生,使之产生固定频率10KHz,从而可以达到二进制基带序列码速率固定为10kbps的要求。可用AD7502模拟开关来实现选通产生ASK信号;将载波经过反相器后产生的反相信号与载波信号通过基带信号控制选通,形成PSK信号。 三、系统软件设计程序流程图如图七所示(程序见附录)。图七 程序流程图 四、测试数据及分析调试与使用仪器RIGOL DM3051的万用表;RIGOL DS1062C数字示波器;EE1461 DDS合成信号发生器。测试方法模块测试 将系统各模块先分开测试,调试成功后在整机调试。将硬件模块和相应的软件进行整机测试。(示波器输出波形截图见附

12、录) 依据设计要求,分别对输出波形、输出电压峰峰值、输出频率和功率放大器输出测试。 测试输出电压的峰峰值时,对放大电路和AGC电路参数适当调整,使输出频率在1KHz13MHZ之间变化时能够满足=6V1V。 测试数据(1)基本要求测试1)正弦波频率范围测试 接50负载,对输出电压进行测试,测量结果如表一。表一:设置频率实测频率输出幅值功放后(V)100Hz100.0Hz1.00V6.04V(有微小失真)1KHz1.000KHz1.00V6.05V(有微小失真)10KHz10.00KHz1.00V6.06V20KHz20.00KHz1.00V6.08V50KHz50.00KHz1.00V6.0V1

13、00KHz100.00KHz1.00V6.0V500KHz500.00KHz1.00V5.88V1.0MHz1.000MHz1.00V5.60V1.5MHz1.500MHz1.00V5.2V5.0MHz5.000MHz999mV5.95V10.0MHz10.000MHz976mV5.96V13.0MHz13.02MHz960mV5.93V(2)发挥部分测试 采用调制度测量仪对输出信号进行AM信号测试,测试结果如表三。表三(调制信号幅值为53mV):设置调制度直流输入电压实际调制度相对误差10530mV10.1120263.7mV20.10.530178.5mV29.7140133.7mV39.

14、6150106.4mV49.80.46088.1mV60.150.257075.1mV70.570.818066.0mV80.30.3759058.0mV91.371.510053.0mV10004.测试结果分析 系统测试指标达到要求,部分指标超过题目要求: 正弦波输出频率:100Hz13MHz; 输出信号频率稳定度:优于,满足题目要求;自行产生1KHz正弦调制信号;产生AM信号在110MHz内,调制度可在10%100%程控,步进10%。附录一:示波器输出波形截图AM输出波形ASK输出波形PSK输出波形附录二:单片机程序#include spce061a.h#include splc501us

15、er.h#include xhfsq.hunsigned int datax4;unsigned int dataz4;unsigned int data15;unsigned int datam6;unsigned long int data;int keyval;void AD9851();unsigned long int mplz();unsigned long int kplz();void askpsk();void psk();void AMchange();unsigned int key_scan();void delay(unsigned int count);void d

16、elay1(unsigned int count);void delay2(unsigned int count);unsigned int table=encoding_00,encoding_01,encoding_02,encoding_03,encoding_04,encoding_05, encoding_06,encoding_07,encoding_08,encoding_09,encoding_0a,encoding_0b, encoding_0c,encoding_0d,encoding_0e,encoding_0f,encoding_10,encoding_11, enco

17、ding_12,encoding_13,encoding_14,encoding_15,encoding_16,encoding_17, encoding_18,encoding_19,encoding_1a; main()*P_IOB_Dir|=0 xffff; /B口(8-15位)作为向AD9851的输出数据端口*P_IOB_Attrib|=0 xffff; /B口B0-RESET,B1-FQ_uD,B2-W_clk*P_IOB_Data|=0 x0000; /B口B7产生10KHz的基带信号while(1)keyval=key_scan();*P_Watchdog_Clear=1;swi

18、tch(keyval)case 13:LCD501_Init(0 x00);LCD501_Bitmap(0,32,(unsigned int *)table21);/幅LCD501_Bitmap(12,32,(unsigned int *)table22);/度LCD501_Bitmap(24,32,(unsigned int *)table23);/调LCD501_Bitmap(36,32,(unsigned int *)table24);/制AMchange();break;case 14:LCD501_Init(0 x00);LCD501_Bitmap(0,32,(unsigned in

19、t *)table10);/请LCD501_Bitmap(12,32,(unsigned int *)table11);/输LCD501_Bitmap(24,32,(unsigned int *)table12);/入LCD501_Bitmap(36,32,(unsigned int *)table26);/要LCD501_Bitmap(48,32,(unsigned int *)table15);/产LCD501_Bitmap(60,32,(unsigned int *)table16);/生LCD501_Bitmap(72,32,(unsigned int *)table13);/频LCD

20、501_Bitmap(84,32,(unsigned int *)table14);/率AD9851();break;case 15:LCD501_Init(0 x00);LCD501_Bitmap(0,32,(unsigned int *)table15);/产LCD501_Bitmap(12,32,(unsigned int *)table16);/生LCD501_Bitmap(24,32,(unsigned int *)table17);/基LCD501_Bitmap(36,32,(unsigned int *)table18);/带LCD501_Bitmap(48,32,(unsign

21、ed int *)table19);/信LCD501_Bitmap(60,32,(unsigned int *)table20);/号LCD501_Bitmap(12,48,(unsigned int *)table1);/1LCD501_Bitmap(24,48,(unsigned int *)table0);/0LCD501_PutChar(36,48,K);LCD501_PutChar(48,48,H);LCD501_PutChar(60,48,z);askpsk();break;default:break;void AD9851() int i=5;double tem;int key

22、val;unsigned long int pk; int h;data=1000;while(1)while(key_scan()=16)*P_Watchdog_Clear=1; loop: *P_IOB_Dir = 0 xf0ff; *P_IOB_Attrib =0 xf0ff; *P_IOB_Data=0;delay(1);while(key_scan()=16)*P_Watchdog_Clear=1;keyval=key_scan();switch(keyval)case 13:mplz();break;case 12:kplz();break;case 10:if(data=1000

23、000)data=data+100;datam0=data/10000000%10;datam1=data/1000000%10;datam2=data/100000%10;datam3=data/10000%10;datam4=data/1000%10;datam5=data/100%10;LCD501_Init(0 x00);LCD501_Bitmap(12,24,tabledatam0);LCD501_Bitmap(24,24,tabledatam1);LCD501_PutChar(36,21,.);LCD501_Bitmap(48,24,tabledatam2);LCD501_Bitm

24、ap(60,24,tabledatam3);LCD501_Bitmap(72,24,tabledatam4);LCD501_Bitmap(84,24,tabledatam5);LCD501_PutChar(84,36,M); LCD501_PutChar(96,36,H); LCD501_PutChar(104,36,z);break;case 11:if(data=1000000)data=data-100;datam0=data/10000000%10;datam1=data/1000000%10;datam2=data/100000%10;datam3=data/10000%10;dat

25、am4=data/1000%10;datam5=data/100%10;LCD501_Init(0 x00);LCD501_Bitmap(12,24,tabledatam0);LCD501_Bitmap(24,24,tabledatam1);LCD501_PutChar(36,21,.);LCD501_Bitmap(48,24,tabledatam2);LCD501_Bitmap(60,24,tabledatam3);LCD501_Bitmap(72,24,tabledatam4);LCD501_Bitmap(84,24,tabledatam5);LCD501_PutChar(84,36,M)

26、; LCD501_PutChar(96,36,H); LCD501_PutChar(104,36,z);break;default:break;tem=(4294967296/120000000.0)*data;if(long int)(tem*10)%10=5) tem+;pk=tem;while(i!=1)h=pk&0 x00ff;pk=pk8;i-;data1i=h;*P_IOB_Data=0 x0001; delay(1); *P_IOB_Data=0 x0000; /RESET置零 i=0;data10=1; while(i!=5) *P_IOB_Data=*P_IOB_Data&0

27、 x00ff; *P_IOB_Data=*P_IOB_Data|data1i8; delay(1); *P_IOB_Data |=0 x0004; delay(1); *P_IOB_Data&=0 xfffb; delay(1); i+; *P_Watchdog_Clear=1; *P_IOB_Data=0;*P_Watchdog_Clear=1;delay(1);*P_IOB_Data=0 x0002;delay(100);*P_IOB_Data=0;while(key_scan()!=16)*P_Watchdog_Clear=1;goto loop; unsigned long int m

28、plz()int sum=0; int j=12; int i=0;LCD501_Init(0 x00); LCD501_PutChar(36,21,.); LCD501_PutChar(84,36,M); LCD501_PutChar(96,36,H); LCD501_PutChar(104,36,z);for(i=0;i9)delay(1000);while(key_scan()=16);keyval=key_scan();datazi=keyval;if(i=2)sum=sum+j;sum=sum+j;LCD501_Bitmap(sum,24,tabledatazi);delay(100

29、0);data=dataz0*10000000+dataz1*1000000+dataz2*100000+dataz3*10000+dataz4*1000+dataz3*100;unsigned long int kplz()int sum=0; int j=12; int i; LCD501_Init(0 x00); LCD501_PutChar(48,21,.); LCD501_PutChar(84,24,K); LCD501_PutChar(96,24,H); LCD501_PutChar(104,24,z);for(i=0;i9)delay(1000);while(key_scan()

30、=16);keyval=key_scan();datazi=keyval;if(i=3)sum=sum+j;sum=sum+j;LCD501_Bitmap(sum,24,tabledatazi);delay(1000);data=dataz0*100000+dataz1*10000+dataz2*1000+dataz3*100;void psk()/产生10KHz的方波*P_IOB_Data|=0 x0008;while(1)*P_IOB_Data=0;delay2(2);*P_IOB_Data=0 x0080;delay2(2);void askpsk()/产生10KHz的方波*P_IOB_

31、Data&=0 xfff7;while(1)*P_IOB_Data=0;delay2(2);*P_IOB_Data=0 x0080;delay2(2);void AMchange() unsigned long int matable10=65472,32768,21845,16384,13107,10922,9364,8192,7281,6554; unsigned long int r1=0 x0001; int i=4;*P_DAC_Ctrl =r1;r1=13107;*P_DAC1=r1;LCD501_Init(0 x00);LCD501_Bitmap(12,32,(unsigned

32、int *)table4);/十位显示LCD501_Bitmap(24,32,(unsigned int *)table0);/个位显示LCD501_PutChar(60,32,%);while(1)delay(100);while(key_scan()=16)*P_Watchdog_Clear=1;keyval=key_scan();switch(keyval)case 10:if(i1)i-;*P_DAC1=matablei-1;LCD501_Init(0 x00);LCD501_Bitmap(12,32,(unsigned int *)tablei);/十位显示LCD501_Bitmap

33、(24,32,(unsigned int *)table0);/个位显示LCD501_PutChar(60,32,%);break;default:break;unsigned int key_scan()unsigned int row,col=0,tmp1,tmp2,key_val; tmp1 = 0 x0010; /tmp1用来设置P1口的输出,取反后使P1.4P1.7中有一个为0 for(row=0;row4;row+) / 行检测 *P_IOA_Data = 0 x000f; / 先将p1.4P1.7置高 *P_IOA_Data =tmp1; / 使P1.4p1.7中有一个为0 *P_Watchdog_Clear=1; tmp1=tmp

温馨提示

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

评论

0/150

提交评论