欢迎来到冰点文库! | 帮助中心 分享价值,成长自我!
冰点文库
全部分类
  • 临时分类>
  • IT计算机>
  • 经管营销>
  • 医药卫生>
  • 自然科学>
  • 农林牧渔>
  • 人文社科>
  • 工程科技>
  • PPT模板>
  • 求职职场>
  • 解决方案>
  • 总结汇报>
  • ImageVerifierCode 换一换
    首页 冰点文库 > 资源分类 > DOCX文档下载
    分享到微信 分享到微博 分享到QQ空间

    DDS波形发生器.docx

    • 资源ID:2590368       资源大小:113.54KB        全文页数:29页
    • 资源格式: DOCX        下载积分:3金币
    快捷下载 游客一键下载
    账号登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录 QQ登录
    二维码
    微信扫一扫登录
    下载资源需要3金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP,免费下载
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    DDS波形发生器.docx

    1、DDS波形发生器信号发生器的设计 林晓峰 徐志国 王法 (28组)摘要:本系统利用单片机89C52与CPLD(EPM7128SLC84-15) 结合,采用DDFS(直接频率数字频率合成)技术,辅以必要的模拟电路,构成一个波形稳定、精度较高的信号发生器。单片机控制频率、幅度步进,LCD实时显示相关信息,CPLD集成了大部分电路,系统大大简化,输出波形可以在正弦波、方波及三角波间切换。另外,还利用手写板实现任意波形输入的功能。 关键词:DDFS,单片机,CPLD,A/D,D/A。一 方案论证与比较1. 频率合成器模块方案一:采用模拟分立元件或单片压控函数发生器MAX038,可产生正弦波、方波、三角

    2、波,通过调整外部元件可改变输出频率,但采用模拟器件由于元件分散性太大,即使使用单片函数发生器,参数也与外部元件有关,外接的电阻电容对参数影响很大,因而产生的频率稳定度较差、精度低、抗干扰能力低、成本也高,且灵活性较差,不能实现任意波形以及波形运算输出等智能化的功能。方案二:采用程控锁相环频率合成方案。锁相环频率合成是将高稳定度和高精确度的标准频率经过加减乘除的运算产生同样稳定度和精确度的大量离散频率,在一定程度上解决了既要频率稳定精确、又要频率在较大范围可变的矛盾,能产生方波,通过积分电路就可以得到同频率的三角波,再经过滤波器就可以得到正弦波,但不能满足任意波形的输出要求,功能扩展能力有限。方

    3、案三:利用BCD比例乘法器14527的级联数控分频对存储器查表,取存放与存储器中的波形数据,经D/A转换输出波形。方案四:采用直接数字频率合成(DDFS)技术产生波形。信号频率范围覆盖超低频和高频,便于单片机控制。通过计数器的输出作为读取波形存储器RAM的地址,将读出的数据送至D/A转换器输出波形。而对计数器的控制也有两种实现方案:通过一定的频率作用于计数器,使其能循环计数。采用CPLD与单片机相结合的方式实现对频率的控制,利用CPLD产生一个相位累加器,通过相位累加器和固定时钟脉冲取样的相位寄存器组成。经过论证比较,DDFS与锁相环方案相比,无需相位反馈控制,频率建立及频率切换快,并且与频率

    4、分辨率、频谱纯度相互独立,覆盖频率范围大,精度高,控制性好且容易实现,有具有功能扩展的能力,故采用这种方案。2. 存储器模块由于需要产生任意波形,波形数据表需要经常改写且无法预测,故不能存放在ROM中。方案一:采用RAM存储数据,实现简单。但RAM不能直接挂在系统总线上,否则必然出现总线冲突,故采用双口RAM。双口RAM有左右两套完全相同的I/O口,即两套数据总线、两套地址总线、两套控制总线,并有一套竞争仲裁电路,可以通过左右两边任一组I/O进行全异步的存储器读写操作,避免了系统总线隔离。减少了单片机与CPLD之间的通信,节省单片机的资源,使系统更为可靠。方案二:使用CPLD作为数据的桥梁,将

    5、波形先存储在EPROM中,同过单片机控制,将数据传输给CPLD,再由CPLD将数据高速传送给DAC0832。综合考虑器件的使用性和电路的可靠性,我们决定采用双口RAM作为系统的存储器件。3. 模拟输出模块输出模块要实现数模转换和幅度控制功能,并有一定的后级处理模块,滤除由DAC产生的高频分量和采集样点时的高次谐波分量,使输出的波形平滑不失真。a) 幅度控制部分方案一:由数控电位器组成的电阻分压网络控制幅度。方案二:采用峰值检波器获得输出端的电压幅值,经A/D采样后得到输出端当前的电压幅值,然后就得到了输出当前的电压幅值,然后通过与预设的输出幅值比较就可以知道输出下降的情况。并由单片机控制放大器

    6、增加放大倍数,直至输出幅值调整到预期值。方案三:采用一级D/A转换实现。直接将DDFS产生的信号作为参考电压输入到D/A中,这样D/A就成为一个数控可变增益放大器,通过改变D/A的转换数据就可以控制输出幅度。方案四:数模转换和幅度控制部分采用双D/A技术,由单片机控制,第一级D/A的输出波形作为第二级D/A的基准电压源,以此来控制信号发生器的输出电压幅度。这种方法电路简单,通过软件控制,可控性强,故采用这种方案。b) 后级滤波部分方案一:采用二阶切比雪夫低通滤波器。切比雪夫低通滤波器的幅度响应在通带内是在两个值之间波动,在通带内的波动次数取决于滤波器的阶数。理想的切比雪夫低通滤波器近似在靠近截

    7、止频率的部分有比巴特沃兹滤波器更接近矩形的频率响应。方案二:采用二阶巴特沃兹滤波器。巴特沃兹滤波器的幅度函数是单调下降的,但巴特沃兹滤波器能实现最大平坦幅度滤波。由于信号发生器的输出波形中的主要噪声为D/A转换产生的高频分量,与设计的频率范围相差很远,所以相对来说,滤波器在频带内的平坦程度比其衰减陡度更为重要,而且巴特沃兹滤波器的元件值也较合乎实际情况,不像其他类型滤波器对元件值要求那么苛刻。基于上述考虑,决定采用二阶巴特沃兹滤波器。经过讨论最终采用以下方案实现信号发生器的设计:采用CPLD与单片机结合利用DDFS技术进行频率合成,将波形数据存储在双口RAM中,采用双片D/A实现稳幅输出,并经

    8、过二阶巴特沃兹滤波器进行滤波,相关信息通过字符型LCD显示。二 系统设计1. 总体设计框图单片机构成系统的控制中心,控制功能选择和结果显示,CPLD在单片机的控制下实现直接频率合成,系统初始化后对按键进行判断从而根据设定选择相应的功能执行。在更改输出波形频率时,根据输入产生相应的频率控制字送到CPLD中,控制输出频率值。CPLD的输出作为双口RAM的读取地址,选取波形数据经DAC0832输出模拟波形。同时,单片机控制第一片DAC0832输出直流电压作为输出波形的DAC0832的基准源,控制输出波形的幅值。系统连接框图如下图所示:CPLDIDT7132 滤波模块DAC(2)DAC(1)键盘 2.

    9、 各模块设计1) 单片机的设计单片机是系统的控制中心,它主要实现以下的功能:一方面控制LCD显示输入控制信息,控制按键识别和功能选择;另一方面与CPLD结合,实现直接频率合成。单片机提供CPLD的控制端口,对CPLD内部实现控制和选择,配合对双口RAM内存储数据的读取;另外单片机还和两片D/A相连,实现对D/A的控制。根据DDFS原理,输出频率为: 其中f clk为输入时钟频率,M为相位累加器的位数,N为频率控制字。考虑要达到的要求,选取晶振频率为8.388MHz,频率控制字为24位,步进为0.5Hz。单片机在等待按键过程中输出标准的1KHz三角波,用户按下按键后根据不同的按键实现各种功能。直

    10、接按下按键0、1、2,可实现输出波形在正弦波、方波和三角波之间的转换。软件设计四种状态,其中状态1、3为频率控制,状态2、4为幅度控制,当按下按键7和11时,分别对应的将状态改为3和4,进行频率或电压幅度的修改。之后再按下按键19对应输入相应的数字,输入所需要修改的值后再按回车键将改变输出波形的频率或幅度。考虑到LCD的显示位数有限,若输入的数值满5位,系统自动默认为输入完毕。输入错误可按3号键取消本次修改输入。同时,LCD实时显示输出波形的频率、幅度信息及修改的数值信息。另外,以手写板作为前向通道,采集用户在手写板上绘制的波形,并将其存储和显示。手写板和单片机之间通过串口进行数据传输,波特率

    11、为9600Hz。当手写板被触及时,它便将被触及点的坐标值进行适当的编码,并打包传给单片机,单片机接受到数据后计算触及点的坐标并进行相应处理,然后存储起来,并通过CPLD的控频,输出所需频率的波形。单片机内部的程序流程图如下图所示:根据流程图编程的KEIL Cx51源程序见附录程序。2) CPLD的设计 在CPLD内部形成DDFS所需的相位累加器。另外,单片机和双口RAM通信时P0口提供低八位地址所需要的锁存器也在CPLD内部实现,减少硬件。其中DDFS的简单逻辑电路如右图所示: 单片机的P2.7、P2.4、P2.3、P2.2、P2.1提供CPLD的控制信号,提供频率选择字的地址。由于P2.7、

    12、P2.4、P2.3分别作为LCD、DAC0832和RAM的片选信号,并设定由P0口根据P2.2、P2.1口组合的不同,分时提供数据,组成累加器所需的24位输入数据。为保证时序不发生冲突,在单片机WR端为低电平时写入数据。Verilog HDL的源程序见附录。3) 后级滤波模块的设计滤除波形中由D/A产生的高频分量,根据实际情况设计低通滤波器,采用两级高通级联来提高Q值。根据设计表,综合考虑取R1=1.5k,R2=3.3k+50k的电位器,C1、 C2分别取301和101的电容。3. 系统实现电路 按上述设计思路,采用89S52单片机控制系统,MAX7000S系列的EPM7128SLC84-15

    13、器件进行CPLD设计。A/D转换部分采用的ADC0809,D/A转换部分采用DAC0832。系统电路设计如下图所示:三 系统调试与指标测试a) 测试仪器Tektronix TDS 1002双信道数字示波器,SG173SB3直流稳压稳流电源,Agilent 33120A信号发生器,FLUKE17B型4位数字万用表。b)键盘功能定义c)指标测试 采用分级调试的方法,分别对双口RAM,DA,以及滤波电路进行了测试。双口RAM能够正确读写,DA工作正常。输出的波形也比较好,但是在级联调试的时候发现波形不可以控制,输出的波形频率具有很大的随机性,分析可能是累加器或者是CPLD根本没有接收到单片机传过去的

    14、频率控制字。为了找到问题的所在,我们先不用单片机给CPLD赋频率控制字,而是修改了Verilog程序,让CPLD内部产生一个频率控制字,发现系统能根据设定的控制字输出预计的频率,而不再是随机的频率了,这就排除了累加器有问题的可能性了。剩下的就只有在传送数据的时候出错的可能性了。经过仔细检查硬件以及Verilog程序,发现程序里面有一句always语句有问题,本来要生成时序逻辑电路的,结果用的是组合逻辑电路的写法,造成的数据不能按照预计的触发条件传送。修改之后波形就可以在控制下输出了。 测试最终输出波形的相关数据如下: 表1 基本波形的频率测量结果(0.5Hz200KHz,步进0.5Hz) 预置

    15、频率 (Hz) 实际输出频率(Hz)正弦波方波三角波0.5 0.5 0.5 0.5 1 1 1 1 10 10.0025 1010 50 49.998749.998850 100 99.998099.997699.9975 500 499.987499.988499.998 1 000 999.975999.975999.975 5 000 4.99987k 4.99987k4.99988k 10 000 9.99974k9.99976k9.99975k 50 000 49.9987k49.9987k49.9987k 100 000 100.154k99.9974k 99.9975k 150

    16、000 149.996k 149.996k149.996k 200 000 199.995k199.995199.995k正弦波1KHz预置值 (V)0.50.71 1.51.8 2 2.5 3 3.54.0实测值 (V)0.480.681.011.501.792.022.523.023.524.004.55.04.485.05 正弦波200KHz预置值 (V)0.50.71 1.51.8 2 2.5 3 3.54.0实测值 (V)0.520.741.121.601.92.122.623.123.604.084.55.04.565.10正弦波0.5Hz预置值 (V)0.50.71 1.51.8

    17、 2 2.5 3 3.54.0实测值 (V)0.480.701.001.501.802.002.503.003.54.004.55.04.405.00测试仪表数字示波器本身存在测量误差,尤其是在幅度测量中,所测得的峰峰值为所显示波形中的最大值与最小值之差,这样就会受到噪声的干扰,使得实测数据与预置数据产生一定误差。同时DAC0832为8位D/A转换器,系统中设定的满量程为4V,其量化误差为,按满度归一化的相对误差为。另外由于电路本身结构的限制,整个电路的布局和走线引入了一定的噪声和干扰。四 实验总结1. 本系统采用了CPLD作为DDFS的地址累加器,故可以产生很高频率的信号,相比用单片机做地址

    18、累加有明显的优势。2. 系统的输出在较高频率时由于运放、D/A的带宽限制,输出幅度有所下降。以后在做功能扩展时应考虑加入数控放大倍率补偿,消除带宽限制的影响。系统最终可输出正弦波、方波、三角波三种常规波形,并可通过手写板输出所需任意波形。输出波形不失真频率范围为0.5Hz200KHz,步进为0.5Hz,幅度可调范围为04V,步进为32分之1V,达到设计要求,且人机交互界面增加了系统的实用性与灵活性。参考文献:1 马忠梅. 单片机的C语言应用程序设计. 北京:北京航空航天大学出版社2 李朝青. 单片机原理及接口技术. 北京:北京航空航天大学出版社附录:一、C语言程序 #include #incl

    19、ude #include #include #define uchar unsigned char #define uint unsigned int #define key1 0xee /*1(sin) 2(squr) 3(trig) 4(扫频)*/ #define key2 0xde /*5 6 7 8 */ #define key3 0xbe /*9 0 . enter*/ #define key4 0x7e /*f/v KHz input shift*/ #define key5 0xed #define key6 0xdd #define key7 0xbd #define key8

    20、 0x7d #define key9 0xeb #define key0 0xdb #define piont 0xbb #define enter 0x7b #define shift 0x77 #define setfv 0xe7 #define clear 0xb7 #define KHz 0xd7 #define lcdwcom XBYTE0x1f00 /液晶写指令地址 #define lcdwdat XBYTE0x5f00 /液晶写数据地址 #define lcdrdat XBYTE0x3f00 /液晶读数据地址 #define REG0 XBYTE0xf000 /频率控制字寄存器低

    21、8位地址 #define REG1 XBYTE0xf100 / 频率控制字寄存器中8位地址 #define REG2 XBYTE0xf200 / 频率控制字寄存器高8位地址 #define DAC XBYTE0xe800 /0832地址 #define IDT7132 XBYTE0xe000+p /双口RAM地址 sbit dir=P30; /245方向控制端 bit KHzflag=0; /KHZ键按下标志 bit shiftflag=0; /shift键按下标志位 bit pflag=0; /点键按下标志位 bit vflag=0; /f/V键按下标志位 uchar countf=0; /

    22、频率输入按键记数 uchar countv=0; / 电压输入按键记数 uint p; /地址增量 uchar disbuff23; /显示缓存 static int f4=0,0,0,0,v3=0,0,0; /频率值缓存,电压值缓存 float k=0.0; /输出频率 void delay(int t) /延时程序 uint j,i; for(i=0;it;i+) for(j=0;j1000;j+) ; void sintable() /正弦波波表 uint i; p=0x0000; for(i=0;i2048;i+) IDT7132=255*(1+sin(float)i/2048*2*3

    23、.14159)/2; p+; disbuff0=s; disbuff1=i; disbuff2=n; disbuff3=a; void squaretable() /方波波表 int i; p=0x0000; for(i=0;i1024;i+) IDT7132=0xff; p+; for(i=1024;i2048;i+) IDT7132=0x00; p+; disbuff0=s; disbuff1=q; disbuff2=u; disbuff3=a; void tritable() /三角波波表 int i; p=0x0000; for(i=0;i1024;i+) IDT7132=(int)(

    24、i/4); p+; for(i=1024;i2048;i+) IDT7132=(int)(2048-i)/4); p+; disbuff0=t; disbuff1=r; disbuff2=i; disbuff3=g; void wait() /判忙程序 uchar x; bit b=1; while(b) dir=0; x=lcdrdat; x&=0x80; /屏蔽低7位 if(x!=0x80) /判断P0.7口是否为1 b=0; dir=1; void setfunction(uchar a,bit j) /写指令程序 if(j=1) wait(); dir=1; lcdwcom=a; vo

    25、id initiallcd() /初始化程序 delay(15); setfunction(0x38,0); /8位数据接口,双行显示,字型大小为5x7,不查忙 delay(5); setfunction(0x38,0); delay(5); setfunction(0x38,0); delay(5); setfunction(0x38,1); /8位数据接口,双行显示,字型大小为5x7,查忙 setfunction(0x0e,1); /开显示及光标,不闪烁,查忙 setfunction(0x01,1); /清屏并设置AC为0,查忙 setfunction(0x06,1); /显示不移位,AC

    26、为增量方式,查忙 void writecode(uchar i) wait(); dir=1; lcdwdat=i; /将数据写入LCD void dissf() /显示scan frequnecy uchar sample120=scan frequnecy ; uchar i; setfunction(0x01,1); for(i=0;i16;i+) writecode(sample1i); void disfirst() uchar start20= Press Input ; uchar i; setfunction(0x01,1); for(i=0;i16;i+) writecode

    27、(starti); void disend() uchar sample216= END ; uchar i; setfunction(0x01,1); for(i=0;i16;i+) writecode(sample2i); void displaybuff() /显示显示缓存中的内容 uchar i; initiallcd(); setfunction(0x80,1); for(i=0;i23;i+) writecode(disbuffi); if(i=15) setfunction(0xc0,1); void diss() /显示波的类型(正弦波) uchar s4=sina; ucha

    28、r i; setfunction(0x01,1); for(i=0;i4;i+) writecode(si); void dist() /显示波的类型(三角波) uchar s4=trig; uchar i; setfunction(0x01,1); for(i=0;i4;i+) writecode(si); void disq() /显示波的类型(方波) uchar s4=squa; uchar i; setfunction(0x01,1); for(i=0;i4;i+) writecode(si); void keyprocess(int a,uchar b) /处理键盘中关于电压,频率的按键值 if(vflag=0) /判断此时是否在输入频率 fcountf=a; /存储频率值 if(pflag=1) /判断小数点有无按下 disbuffcountf+9=b; else disbuffcountf+8=b; countf+; if(vflag=1) /判断此时是否在输入电压 vcountv=a; if(pflag=1) disbuffc


    注意事项

    本文(DDS波形发生器.docx)为本站会员主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

    copyright@ 2008-2023 冰点文库 网站版权所有

    经营许可证编号:鄂ICP备19020893号-2


    收起
    展开