logo资料库

6.4 双通道幅频相可调dds信号发生器.pdf

第1页 / 共38页
第2页 / 共38页
第3页 / 共38页
第4页 / 共38页
第5页 / 共38页
第6页 / 共38页
第7页 / 共38页
第8页 / 共38页
资料共38页,剩余部分请下载后查看
6.4 双通道幅频相可调DDS信号发生器
6.4.1 DDS原理与实现
6.4.1.1 DDS基本原理
6.4.1.2 DDS模块功能设计
6.4.1.3 制作波形数据存储器
6.4.1.4 DDS模块仿真验证
6.4.2 数模转换器(DAC)驱动模块设计
6.4.2.1 TLV5618 DAC驱动模块
6.4.2.2 多通道数据输出实现
6.4.3 串口命令接收与解析
6.4.3.1 信号发生器之自定义帧
6.4.3.1.1 使用实体寄存器控制某通道信号频率
6.4.3.1.2 使用实体寄存器控制某通道信号相位
6.4.3.1.3 使用实体寄存器控制某通道信号幅度
6.4.3.1.4 使用影子寄存器实现多通道参数同步更新
6.4.3.1.5 使用控制寄存器实现通道的使能和关闭
6.4.3.2 串口数据帧接收
6.4.3.3 串口数据解析
6.4.4 信号发生器顶层设计
6.4.5 系统测试
小梅哥 FPGA 团队 武汉芯路恒科技 专注于培养您的 FPGA 独立开发能力 开发板 培训 项目研发三位一体 说 明 1、本内容节选自《FPGA 自学笔记——设计与验证》一书 6.4 节,内容仅供学习 使用,不得用于任何其他商业目的。如果您喜欢,建议购买正版纸质书。 2、本节内容由小梅哥于 2019 年 4 月 30 日修订,增加了系统测试部分的细节内 容。 3、如果有更新,我们将会发布在我们的官方论坛 www.corecourse.cn,如需关注 本节内容的更新,可至我们的官方网站以本文档标题为关键词进行检索,以查找 相关内容。 4、本教程对应的 FPGA 工程源码名为“29_DDS2”,位于“【书本源码】FPGA 自 学笔记——设计与验证.rar”压缩包的“chapter6”中。 本节导读 本节将结合第三章中串口收发小节实现的串口收发模块、第四章中 ROM 使用 小节讲解的 ROM 使用知识以及第 5 章中的 DAC 驱动小节实现的 DAC 驱动模块实 现一个双通道幅度、频率、相位均可调的 DDS 信号发生器。 其中,输出信号的频率、相位、幅度的调节通过 PC 端串口发送命令实现, 最终由 DAC 芯片 TLV5618 输出对应的模拟信号。PC 端通过串口发出控制命令, 由串口接受命令并解析转换得到相应的幅度、频率、相位控制字,这些控制字直 接作用在两个 DDS 信号发生器电路上,从而设定信号发生器输出信号的幅度、频 率、相位,然后经过 DAC 控制模块将两个通道的数据分别经由 DAC 驱动模块写入 TLV5618 型 DAC 中, DAC 即可输出对应的模拟电压信号。其系统工作框图如图 6.4–1 所示。通过本节,我们将实现一个通过上位机可控的双通道幅频相信号 发生器,具体信号发生器输出信号的最高频率与 DAC 的转换速率相关。 店铺:https://xiaomeige.taobao.com 官方网站:www.corecourse.cn 技术博客:http://www.cnblogs.com/xiaomeige/ 公众号:小梅哥 FPGA
小梅哥 FPGA 团队 武汉芯路恒科技 专注于培养您的 FPGA 独立开发能力 开发板 培训 项目研发三位一体 图 6.4–1 基于 AC620 开发板的双通道 DDS 系统架构图 由工作原理图可以暂时将本系统划分为串口接收模块、命令解析模块、DDS 信号生成模块、DAC 控制模块和 DAC 驱动模块。 DDS 原理与实现 6.4.1.1 DDS 基本原理 DDS(Direct Digital Synthesizer)即数字合成器,是一种新型的频率合成技术, 具有相对带宽大,频率转换时间短、分辨率高和相位连续性好等优点。较容易实 现频率、相位以及幅度的数控调制,广泛应用于通信领域。 DDS 的基本结构图如图 6.4–2 所示。 图 6.4–2 DDS 基本结构图 由图 8.6.2 可以看出,DDS 主要由相位累加器、相位调制器、波形数据表以 及 D/A 转换器构成。 店铺:https://xiaomeige.taobao.com 官方网站:www.corecourse.cn 技术博客:http://www.cnblogs.com/xiaomeige/ 公众号:小梅哥 FPGA 串口接收命令解析命令并输出相应控制字DDS信号生成模块BDDS信号生成模块ADAC控制模块DAC驱动模块TLV5618型DAC示波器同步寄存器相位累加寄存器同步寄存器波形数据表ROMD/A转换器频率控制字FWORD相位累加器相位控制字PWORDNNNMM信号输出系统时钟CLOCK
小梅哥 FPGA 团队 武汉芯路恒科技 专注于培养您的 FPGA 独立开发能力 开发板 培训 项目研发三位一体 其中相位累加器由 N 位加法器与 N 位寄存器构成。每个时钟周期的时钟上 升沿,加法器就将频率控制字与累加寄存器输出的相位数据相加,相加的结果又 反馈至累加寄存器的数据输入端,以使加法器在下一个时钟脉冲的作用下继续与 频率控制字相加。这样,相位累加器在时钟作用下,不断对频率控制字进行线性 相位累加。即在每一个时钟脉冲输入时,相位累加器便把频率控制字累加一次。 相位累加器输出的数据就是合成信号的相位。相位累加器的溢出频率,就是 DDS 输出的信号频率图 2.30 相位累加器输出的数据,作为波形存储器的相位采 样地址,这样就可以把存储在波形存储器里的波形采样值经查表找出,完成相位 到幅度的转换。波形存储器的输出数据送到 D/A 转换器,由 D/A 转换器将数 字信号转换成模拟信号输出。 DDS 信号流程示意图如图 6.4–3 所示。 图 6.4–3 DDS 原理流程图 这里相位累加器位数为 N 位(N 的取值范围实际应用中一般为 24~32),相 当于把正弦信号在相位上的精度定义为 N 位,所以其分辨率为1 2N⁄ 。 若 DDS 的时钟频率为Fclk,频率控制字 fword 为 1,则输出频率为Fout = Fclk 2N , 这个频率相当于“基频”。若 fword 为 B,则输出频率为Fout = B × Fclk 2N 。 因此理论上由以上三个参数就可以得出任意的fo输出频率。且可得出频率分 辨率由时钟频率和累加器的位数决定的结论。当参考时钟频率越高,累加器位数 越高,输出频率分辨率就越高。 从上式分析可得,当系统输入时钟频率Fclk不变时,输出信号频率由频率控 制字 B 所决定,由上式可得:B = 2N × Fout Fclk 。其中 B 为频率字且只能取整数。为 了合理控制 ROM 的容量,此处选取 ROM 查询的地址时,可以采用截断式,即 只取 32 位累加器的高 M 位。这里相位寄存器输出的位数一般取 10~16 位。 店铺:https://xiaomeige.taobao.com 官方网站:www.corecourse.cn 技术博客:http://www.cnblogs.com/xiaomeige/ 公众号:小梅哥 FPGA
小梅哥 FPGA 团队 武汉芯路恒科技 专注于培养您的 FPGA 独立开发能力 开发板 培训 项目研发三位一体 以上通过理论计算加数据变换的形式对 DDS 原理进行了较为严谨的解释, 但是 DDS 究竟是怎么实现频率和相位的控制的呢,以下通过一个简化的实例来 描述 DDS 实现频率和相位控制的过程。 图 6.4–4 为一个完整周期的正弦信号的波形,总共有 33 个采样点,其中第 1 点和第 33 点的值相同,第 33 点为下一个周期的起始点,因此,实际一个周期 为 32 个采样点(1~32)。 图 6.4–4 32 个采样点的正弦信号波形 当使用 FPGA 控制 DAC 输出一个周期的正弦信号时,每 1ms 输出一个数 值。如果每个点都输出,则总共输出这一个完整的周期信号需要输出 32 个点, 因此输出一个完整的信号需要 32ms,可知输出信号的频率为 1000/32Hz。 如果需要用这一组数据来输出一个 2*(1000/32)Hz 的正弦信号,因为输出 信号频率为 2*(1000/32)Hz,那么输出一个完整的周期的正弦波所需要的时间 为 32/2,即 16ms。为了保证输出信号的周期为 16ms,我们需要对我们的输出策 略进行更改,上面输出周期为 32ms 的信号时,我们采用的为逐点输出的方式, 以 32 个点来输出一个完整的正弦信号,而我们 FPGA 控制 DAC 输出信号的频 率固定为 1ms。因此,我们要输出周期为 16ms 的信号,只能输出 16 个点来表示 一个完整的周期。我们就选择以每隔一个点输出一个数据的方式来输出即可。我 们可以选择输出(1、3、5、7……29、31)这些点,因为采用这些点,我们还是 能够组成一个完整的周期的正弦信号,而输出时间缩短为一半,即频率提高了一 倍。最终结果如图 6.4–5 所示。 店铺:https://xiaomeige.taobao.com 官方网站:www.corecourse.cn 技术博客:http://www.cnblogs.com/xiaomeige/ 公众号:小梅哥 FPGA
小梅哥 FPGA 团队 武汉芯路恒科技 专注于培养您的 FPGA 独立开发能力 开发板 培训 项目研发三位一体 图 6.4–5 16 个采样点的正弦信号波形 如果需要使用该组波形数据输出频率为(1/2)*(1000/32)Hz 的信号,即周期 为 64ms,则只需要以此组数据为基础,每 2ms 输出一个数据即可,例如第 1ms 和第 2ms 输出第一个点,第 3ms 和第 4ms 输出第二个点,以此类推,第 63ms 和 第 64ms 输出第 32 个点,即可实现周期加倍,即频率减半的效果。 对于相位的调整,则更加简单。只需要在每个取样点的序号上加上一个偏移 量,便可实现相位的控制。例如,上面默认的是第 1ms 时输出第一个点的数据, 假如我们现在在第 1ms 时从第 9 个点开始输出,则将相位左移了 90 度,这就是 控制相位的原理。 实现 DDS 输出时,将横坐标上的数据作为 ROM 的地址,纵坐标上的数据 作为 ROM 的输出,那么指定不同的地址就可实现对应值的输出。而我们 DDS 输 出控制频率和相位,归结到底就是控制 ROM 的地址。 6.4.1.2 DDS 模块功能设计 在本设计中参考时钟Fclk频率为 50 MHz,相位累加器位数 N 取 32 位,频率 控制字位数 M 取 12 位。 经过以上的分析,可以得出 DDS 模块的端口模块图如图 6.4–6 所示。 店铺:https://xiaomeige.taobao.com 官方网站:www.corecourse.cn 技术博客:http://www.cnblogs.com/xiaomeige/ 公众号:小梅哥 FPGA
小梅哥 FPGA 团队 武汉芯路恒科技 专注于培养您的 FPGA 独立开发能力 开发板 培训 项目研发三位一体 图 6.4–6 DDS 模块接口示意图 其中,每个端口的功能描述如表 6.4-1 DDS 模块信号功能描述表 6.4-1 所 示。 表 6.4-1 DDS 模块信号功能描述 端口名称 I/O 功能描述 Clk Rst_n EN FWord PWord DA_Clk DA_Data I I I I I O O 为本模块的工作时钟,频率为 50MHz 控制器复位,低电平复位 DDS 模块使能信号 频率控制字 相位控制字 DA 数据输出时钟 DA 数据输出 新建 DDS_Module.v 保存至 rtl 文件夹下。从图 6.4–6 以及表 6.4-1 就得到 了端口列表: input Clk; input Rst_n; input EN; input [31:0]Fword; input [11:0]Pword; output DA_Clk; 店铺:https://xiaomeige.taobao.com 官方网站:www.corecourse.cn 技术博客:http://www.cnblogs.com/xiaomeige/ 公众号:小梅哥 FPGA DDS_ModuleClkRst_nFWord[31:0]ENDA_ClkPWord[12:0]DA_Data[9:0]
小梅哥 FPGA 团队 武汉芯路恒科技 专注于培养您的 FPGA 独立开发能力 开发板 培训 项目研发三位一体 output [9:0]DA_Data; 以下只需按照图 6.4–2 进行编写。相位累加器此处即为一个 32bit 的加法 器。 reg [31:0]Fre_acc; always @(posedge Clk or negedge Rst_n) if(!Rst_n) Fre_acc <= 32'd0; else if(!EN) Fre_acc <= 32'd0; else Fre_acc <= Fre_acc + Fword; 查找表地址生成,此处即为 12bit 的加法器。这里直接截取 32 位累加器结果 中的高 12 位作为 ROM 的查询地址,这样产生的误差会对频谱纯度有影响,但 是对波形的精度的影响是可以忽略的。 reg [11:0]Rom_Addr; always @(posedge Clk or negedge Rst_n) if(!Rst_n) Rom_Addr <= 12'd0; else if(!EN) Rom_Addr <= 12'd0; else Rom_Addr <= Fre_acc[31:20] + Pword; DA 数据输出时钟模块使能,通过选择器来进行控制。 assign DA_Clk = (EN)?Clk:1'b1; 6.4.1.3 制作波形数据存储器 现在只需要例化存有波形文件的 ROM 即可。其中单端口的 ROM 主要配置 数据如图 6.4–77 所示,其初始化文件选为已经生成的正弦 mif 文件。此处 mif 位宽为 10,深度为 4096。 店铺:https://xiaomeige.taobao.com 官方网站:www.corecourse.cn 技术博客:http://www.cnblogs.com/xiaomeige/ 公众号:小梅哥 FPGA
小梅哥 FPGA 团队 武汉芯路恒科技 专注于培养您的 FPGA 独立开发能力 开发板 培训 项目研发三位一体 图 6.4–7 ROM 主要配置参数 这样例化到 DDS_Module 中即为如下内容。 ddsrom ddsrom( .address(Rom_Addr), .clock(Clk), .q(DA_Data) ); 本模块编译无误后,点击 RTL Viewer 后可以看到如图 6.4–8 所示的模块逻 辑电路图,可与 DDS 原理图对比。这里有两个选择器的原因是加了使能端的缘 故,如果将使能端去掉即可看到如图 6.4–9 所示的电路图 图 6.4–8 DDS 模块设计逻辑电路图 店铺:https://xiaomeige.taobao.com 官方网站:www.corecourse.cn 技术博客:http://www.cnblogs.com/xiaomeige/ 公众号:小梅哥 FPGA
分享到:
收藏