为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

DDS

2011-03-08 12页 doc 1MB 25阅读

用户头像

is_813452

暂无简介

举报
DDSEDA技术“课程设计”——DDS 基于FPGA的DDS设计 1.​ 设计背景:近年来现场可编程门阵列( FPGA) 技术得到了迅速的发展和广泛的应用, 其资源容量、工作频率以及集成度都得到了极大的提高, 使得利用FPGA 实现某些专用数字集成电路得到了大家的关注, 而基于FPGA 实现的直接数字频率合成器即DDS(Direct Digital Synthesizer)则更具其优点, 有着灵活的接口和控制方式、较短的转换时间、较宽的带宽、以及相位连续变化和频率分辨率较高等优点, 其也为设计者在此基础之上实现电路集成提供了另一种方...
DDS
EDA技术“课程设计”——DDS 基于FPGA的DDS设计 1.​ 设计背景:近年来现场可编程门阵列( FPGA) 技术得到了迅速的发展和广泛的应用, 其资源容量、工作频率以及集成度都得到了极大的提高, 使得利用FPGA 实现某些专用数字集成电路得到了大家的关注, 而基于FPGA 实现的直接数字频率合成器即DDS(Direct Digital Synthesizer)则更具其优点, 有着灵活的接口和控制方式、较短的转换时间、较宽的带宽、以及相位连续变化和频率分辨率较高等优点, 其也为设计者在此基础之上实现电路集成提供了另一种方法,同D/ A 转换器和低通滤波器( LPF) 一起便可以组成任意波形信号的发生器。 注:本设计没有使用学校的实验板,使用的是ALTERA的CYCLONE II EP2C8 FPGA核心板 二.设计目标:实现频率1HZ~10KHZ,相位可调,三角波方波可选的DDS。 三.设计原理: DDS信号发生器原理图 图1 DDS 的原理框图 (其中K 为频率控制字、P 为相位控制字、fc 为参考时钟频率,N 为相位累加器的字长,D 为ROM 数据位及D/A 转换器的字长。相位累加器在时钟fc的控制下以步长K 作累加,输出的N 位二进制码与相位控制字P 相加后作为波形ROM 的地址,对波形ROM 进行寻址,波形ROM 输出D 位的幅度码S(n)进D/A 转换器变成阶梯波S(t),再经过低通滤波器平滑后就可以得到合成的信号波形。合成的信号波形形状取决于波形ROM中存放的幅度码,因此用DDS 可以产生任意波形。) DDS 电路一般包括系统时钟、相位累加器、相位调制器、ROM 查找表、D/ A 转换器和低通滤波器( LPF) 。输入的频率控制字( X) 称为相位步进量, 作为相位累加器的增量; 输入的相位控制字通过相位调制器来设置波形的初始相位; 系统时钟则对相位累加器、相位调制器和D/ A 转换器提供时序控制。 相位累加器由N 位全加器和N 位累加寄存器级联而成, 对频率控制字的2 进制码进行累加运算,是典型的反馈电路。在每个系统时钟沿Fclk 的控制下, N 位加法器将频率控制字X 与累加寄存器输出的相位数据相加, 把相加后的结果再送至累加寄存器, 累加寄存器中新的相位数据既反馈到加法器的输入端, 以使加法器在下一Fclk 时钟周期中继续与频率控制字X 相加, 同时累加寄存器的高M 位数值, 将作为查找ROM 表中取样数据的地址值。ROM 查找表中储存着一个完整周期的正弦波幅度信息, 通过取得的采样地址值进行查表, 从ROM 表中输出相应的波形采样数据( Fout ) , 送入D/A 转换器, DAC 输出阶梯波形, 再通过低通滤波器将波形数据转换成符合要求的模拟波形。 其中步长的概念即为对数字波形查表的相位增量, 由累加器对相位增量进行累加, 每个时钟周期产生的累加器的高M 位数值作为查表地址, 两个查表周期之间就存在一个相位增量, 当相位累加器加满时就会产生一次溢出, 即相位寄存器每经过2N / X个Fclk 时钟周期后回到初始状态, 相应的ROM 查找表经过一个循环回到初始位置, 整个DDS 系统输出一个完整波形, 这样就完成了一个波形采样值的查表和输出, 这个周期就是DDS 产生波形的一个频率周期。 本次设计采用以下系统构架加入相位调制器,可实现相位调节。 四.设计步骤: 1.​ 加法器位数N和ROM位数的选择 ROM的位数与DA位数相关,本设计采用常用的八位DA芯片DAC0832,参考电压为5V时,精度为20MV,基本满足设计要求,因此ROM选择八位即可。 加法器的位数决定了最小步进,FPGA板载时钟50MHZ,为了达到1HZ的步进,累加器设为26位,可实现最小步进为50000000/2^26=0.745HZ,满足要求。 2.频率控制字的输入 为了实现1HZ到10KHZ可调,控制字位数设为16位(作为地址累加器的低16位输入,可实现最大48KHZ)。 3.相位控制字的输入 取八位控制字,对相位调制加法器的12到5位进行累加,可基本实现半周期相位调节。 FPGA部分 原理图: 控制部分 由于对单片机性能要求不高,本设计采用STC89C52对控制字输入及显示进行控制,可以满足设计要求。 单片机部分原理图如下: 图三 电平转化: 由于51单片机IO为5V,FPGA的IO为3.3V,本来直接相连也不会出现数据传输错误,但是从EP2C8这款FPGA 的DATASHEET上看,提到的该FPGA的IO支持的电平没有到5V,为消除对FPGA的IO口的潜在影响,使用74LVC4245对电平进行转化,原理图如下: 图四 使用单片机的P2口作为控制字输出口,通过74LS4245进行电平转化,分出三个八路信号,分别送到FPGA频率控制字的高八位和低八位及相位控制字,通过在FPGA里对以上三个信号设置锁存器,实现分时传送数据,节约单片机IO口。 DA部分 0832输出为电流信号,通过前级运放LF356转化为电压信号,再通过后级运放实现放大(调节R2)和偏置调节(调节R3) LPF部分 由于本设计中对信号一个周期采样达256个点,幅度调节放在了DA部分实现,滤波只采用了的一阶无源低通滤波。如图 五.ROM表(MIF文件由MATLAB生成) 生成方法(正弦波) 六.调试与仿真 SIGNALTAPII仿真波形(含调频调相) 九.总结与改进: 总结: 本设计采用现场可编程门阵列(FPGA)实现了一个直接数字频率合成器,达到了设计目标,通过本次设计,加深了对VHDL层次化设计的理解,体会到了FPGA在实际电子设计中的重要价值. 不足与改进: 1.​ 频率步进较大、步长大时波形精度较差,但这些不是系统设计的缺陷,可以通过增加控制字位数、增大存储器容量来简单解决,亦可以改变波形存储的方式。2.ROM资源有限,节省ROM是一个重要问题,节省ROM可以采用压缩ROM表,只存四分之一周期波形的方法. 参考文献:1. 《大 众 科 技》 No.6,2010余 勇, 郑小林( 重庆大学生物工程学院) 文章编号: 1005-9490( 2005) 03-0596-04 2.​ 《大 众 科 技》 No.6,2010赵翰林(电子科技大学)【文章编号】1008-1151(2010)06-0025-03 附 单片机控制C程序 #include #define uint unsigned int #define uchar unsigned char //键盘输入控制位 sbit clear_wave=P2^5; sbit phaseadd=P2^4; sbit key_1000=P2^0; sbit key_100=P2^1; sbit key_10=P2^2; sbit key_step=P2^3; //FPGA控制位 sbit waveform_sel=P3^0; sbit latch_high= P3^1; sbit latch_low=P3^2; sbit latch_ph=P3^3; //显示控制位 sbit lcden=P3^4; sbit lcdrs=P3^5; uchar code table[]="Frequency IS:"; void delay(uint); void init(); void keyscan(); void send_freword(); //void send_phaword(); void write_com(uchar); void write_data(uchar); void display(); uchar num_1000,num_100,num_10,num_step,temp_h,temp_l,phaseword,displaynum,n1,n2,n3,n4; float num; uint temp; void main() { init(); while(1) { P2=0xff; if(P2!=0xff) keyscan(); send_freword(); display(); } } void delay(uint z) { uint x,y; for(x=z;x>0;x--) for(y=110;y>0;y--); } void init() { P1=0xff;//准备好键盘扫描 waveform_sel=1;//初始为正弦波 /*设置初始频率为1KHZ*/ latch_high=0; latch_low=0; latch_ph=0; P1=0; latch_ph=1; delay(20); latch_ph=0;//phase set to 0 P1=0x05; latch_high=1; delay(20); latch_high=0;//high bits are set to 0000010 P1=0x3e; latch_low=1; delay(20); latch_low=0;//low bits are set to 00111110 //LCD初始化 lcden=0; write_com(0x38); write_com(0x08); write_com(0x01); write_com(0x06); write_com(0x0c); num_1000=1; phaseword=0; } //keyscan void keyscan() { if(clear_wave==0)//判断清零和波形变化 { delay(5); if(clear_wave==0) { delay(500); if(clear_wave==0) waveform_sel=!waveform_sel;//长按变波形,短按清零 else { num_1000=0; num_100=0; num_10=0; num_step=0; } } while(!clear_wave); delay(5); while(!clear_wave); } if(phaseadd==0)//相位增加 { delay(5); if(phaseadd==0) { while(!phaseadd) { phaseword=phaseword+1; delay(10); if(phaseword==255) phaseword=0;//按下时相位控制字不停加 } P1=phaseword; latch_ph=1; delay(20); latch_ph=0; } } if(key_1000==0)//判断是否按下加1KHZ键 { delay(5); if(key_1000==0) { num_1000=num_1000+1; if(num_1000==10) num_1000=0; } while(!key_1000); delay(5); while(!key_1000); } if(key_100==0)//判断是否按下加100HZ键 { delay(5); if(key_100==0) { num_100=num_100+1; if(num_100==10) num_100=0; } while(!key_100); delay(5); while(!key_100); } if(key_10==0)//判断是否按下加10HZ键 { delay(5); if(key_10==0) { num_10=num_10+1; if(num_10==10) num_10=0; } while(!key_10); delay(5); while(!key_10); } if(key_step==0)//判断是否按下加1HZ键 { delay(5); if(key_step==0) { num_step=num_step+1; if(num_step==10) num_step=0; } while(!key_step); delay(5); while(!key_step); } num=num_1000*1000+num_100*100+num_10*10+num_step; num=num/0.745; temp=(int)(num); temp_l=temp; temp_h=temp>>8; } void send_freword() { P1=temp_h; latch_high=1; delay(20); latch_high=0; P1=temp_l; latch_low=1; delay(20); latch_low=0; } //display void write_com(uchar com) { lcdrs=0; P0=com; delay(5); lcden=1; delay(5); lcden=0; } void write_data(uchar date) { lcdrs=1; P0=date; delay(5); lcden=1; delay(25); lcden=0; } void display() { write_com(0x80+1); for(displaynum=0;displaynum<13;displaynum++) { write_data(table[displaynum]); } write_com(0x80+0x40+5); write_data(0x30+num_1000); write_data(0x30+num_100); write_data(0x30+num_10); write_data(0x30+num_step); write_data('H'); write_data('z'); }
/
本文档为【DDS】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索