编辑: f19970615123fa 2019-10-17
DDS原理与应用 李忠琦 DDS简介 全称Direct Digital Synthesizer(直接数字合成),是从相位出发,直接采用数字技术产生波形的一种频率合成技术.

简单的说就是直接查表得到每一点波形所对应的数字值.与MatLAB的stem函数相似 MatLAB中N=[1:0.2:20]stem(N,sin(N)) DDS与外围系统 虚线部分是DDS结构内部D/A:模数转换器LPF:Low-Pass Filter 低通滤波器 DDS总体结构 先分部分介绍其结构,后面会讲到总体原理. 相位增量(Phase Increment) Δθ,也称为频率控制字,单纯的无单位(不代表弧度或者角度)无符号数. 相位累加器(Phase Accumulator) 由一个无符号数的加法器和一个寄存器构成,一个时钟周期完成一次加法运算. 量化器(Quantizer) 完成很简单的功能.将较高精度,较大位宽的输入,丢弃低比特位,得到较低精度,较小位宽的输出,直接用作后面查找表的地址. 正余弦查找表(Sine/Cosine Lookup Table) 存放正余弦数值.在单片机应用中,可以由MatLAB产生,手动写入.在FPGA中,系统可自动生成,也可手动写入. 正余弦查找表(Sine/Cosine Lookup Table) 举例(随地址空间大小的不同,数值发生相应的变化)计算公式就是Y=5000*[sin(X/16*2π)+1]

3087 1111

1464 1110

381 1101

0 1100 … …

10000 0100

9619 0011

8536 0010

6913 0001

5000 0000 放大倍数 直流偏移 正余弦查找表(Sine/Cosine Lookup Table)

3087 1111

1464 1110

381 1101

0 1100 … …

10000 0100

9619 0011

8536 0010

6913 0001

5000 0000 DDS总体原理 每一周期会累加上固定的相位值,然后从查找表中找到对应的数值. 输出频率计算公式 输出频率计算举例 实际应用中 通常是知道系统工作时钟,和要求生成的输出频率,需要计算相位增量. 频率分辨率公式(Frequency Resolution) 频率分辨率计算 相位抖动DDS (Phase Dither DDS) 相位截断DDS的频谱 相位抖动DDS结构 随机抖动序列发生器 不适合电子设计比赛中使用 相位抖动DDS频谱 DDS设计扩展 生成正余弦波时,只存放1/4个周期的波形(高2比特不作为数据位,而作为波形的选择使用),优点是大大节约存储空间,但会导致计算的时间延长.使用DDS生成任意波形(三角波、方波、锯齿波等) D/A的使用简单介绍 D/A是数模转换器.关于它的调用,每一种具体型号有所不同.但是基本原理都是将数字信号传送给D/A,由D/A完成转换,输出模拟信号. 定时器的使用简单介绍 定时器中断是单片机中各种中断中的一种.简单的说,定时器就是自动在每次设置的时间到时之后执行定时器中断函数.定时器需要启动命令启动,并需要设置每次计时的时间. 设计实例-51单片机 通过一个简单的实例来说明设计的原理使用Atmel公司的89C51系列单片机,MSP430等单片机实现方法类似.目标:采用深度为256的查找表,在10KHz的数据输出频率下,实现100Hz~1KHz的正弦波输出. 步骤1 通过MATLAB建立正余弦查找表f1 = fopen('d:aaa.txt','w');

fprintf(f1,'%.0f,',255.5*(sin(N/256*2*pi)+1));

fclose(f1) 正余弦查找表 注意最前面的"code"(51用).MSP430使用"const".注意:表有点问题,范围应该是从0~256. 步骤2 计算相位增量 计算出相位增量,将相位累加器清零 定义几个变量 通过宏定义的方式给出数据输出时钟和正弦波频率 注意:上式请自己推导,与课件中公式有点区别. 步骤3 每一次定时器中断输出一个值 设计实例-Xilinx公司FPGA 设计一个使用100MHz时钟产生10MHz正弦波设计环境使用Xilinx公司的ISE7.1使用Core Generator生成DDS的IP Core 步骤1 选择生成新的IP Core 步骤2 在"Communication & Networking"-"Modulation"中选中"Direct Digital Synthesizer 5.0" 步骤3 设置必要参数 产生正弦还是余弦 工作时钟频率 频率分辨率 频谱纯净度 步骤4 设置输出频率 输出正余弦波频率 查找表是可写入或系统自动生成 步骤5 设置可选参数 是否使用抖动技术 存储器类型 流水结构 步骤6 给出统计报告 课后练习作业 因为是很基本的东西,所以请让一组的所有同学都参与一下,不要一个人做完.开学后各组带队老师会检查该组的完成情况. 题目 使用51单片机(Keil环境)编写DDS产生正弦波的程序(单片机工作频率16MHz)基本要求:在10KHz的D/A数据输出频率下,产生100Hz~1KHz的正弦波输出.要写出完整的程序,包括定时器的初始化和调用.D/A的输出部分不要求,可以调用函数如 Void Send_to_DA(unsigned char send_value) DA输出函数体内部不要求写.正弦表深度为512.输出正弦波频率通过宏定义变量给入即可,不要求输入的函数. 题目 发展要求:

1、存储表只存放1/4个周期的正弦函数,完成正弦函数的输出

2、能够同时输出三角波和正弦波(通过一个宏定义变量切换)

3、同时使用两个DA,如何最简便的同时输出正弦和余弦波形?按照你所想出的方法写出程序.

下载(注:源文件不在本站服务器,都将跳转到源网站下载)
备用下载
发帖评论
相关话题
发布一个新话题