基于STM32+iCE40的电赛训练平台 DDS信号发生器
本次是以项目3进行开发,本篇以正弦波为例。
项目3 - DDS任意波形发生器/本地控制
具体要求:
-
通过板上的高速DAC(10bits/最高125Msps)配合FPGA内部DDS的逻辑(最高48Msps),生成波形可调(正弦波、三角波、方波)、频率可调(DC-)、幅度可调的波形
- 生成模拟信号的频率范围为DC-5MHz,调节精度为1Hz
- 生成模拟信号的幅度为最大1Vpp,调节范围为0.1V-1V
- 在OLED上显示当前波形的形状、波形的频率以及幅度
- 利用板上旋转编码器和按键能够对波形进行切换、进行参数调节
首先我对DDS认识与理解:
什么是DDS?
DDS(Direct Digital Synthesizer)即数字合成器,是一种新型的频率合成技术,具有相对带宽大,频率转换时间短、分辨率高和相位连续性好等优点。较容易实现频率、相位以及幅度的数控调制,广泛应用于通信领域。
DDS的组成:
DDS主要由相位累加器、相位调制器、波形数据表以及 D/A 转换器构成。
DDS的工作过程:
其中相位累加器由 N 位加法器与 N 位寄存器构成。每个时钟周期的时钟上升沿,加法器就将频率控制字与累加寄存器输出的相位数据相加,相加的结果又反馈至累加寄存器的数据输入端,以使加法器在下一个时钟脉冲的作用下继续与频率控制字相加。这样,相位累加器在时钟作用下,不断对频率控制字进行线性相位累加。即在每一个时钟脉冲输入时,相位累加器便把频率控制字累加一次。
相位累加器输出的数据就是合成信号的相位。相位累加器的溢出频率,就是DDS输出的信号频率。相位累加器输出的数据,作为波形存储器的相位采样地址,这样就可以把存储在波形存储器里的波形采样值经查表找出,完成相位到幅度的转换。波形存储器的输出数据送到D/A转换器,由D/A转换器将数字信号转换成模拟信号输出。
DDS 信号流程示意图:
然后又研究起这个锁相环:我就不多分享,贴一个连接感觉写的非常的不错。
phase-locked-loop-pll-fundamentals_cn.pdf (analog.com)
项目的资源:
实现流程框图:
FPGA资源
网络分析图:
利用MATLAB生成的波形:
方波/三角波:
正弦波:
模块功能描述:
1、OLED:显示相关的信息,显示DDS信号发生器;
2、编码器,调节频率大小,旋转以1HZ增加频率,按下编码器按键以100hz,1khz,1mhz 在OLED显示循环切换;
3、按键:K1清掉当前设定频率(考虑到设定值时要退回来麻烦),K2输出当前设定频率。
4、MCU:STM32G0点亮OLED,接收按键输入,与FPGA通信等。
5、FPGA:ICE40与DAC再输出,用于波形产生。
操作过程:接入电源,屏幕上显示DDS信号发生器,频率显示0.0KHZ,递增值100HZ,最大输出的是5MHZ。当通过旋转编码器,(编码器旋转一次时,以1的值增加或者减小)可以设定输出的频率大小,再通过按轻触开关K2输出波形,如果要设定1KHZ的波形,第一种方法是一直旋转编码器,第二种方法是按下编码器开关,OLED屏上会把递增值上显示的100HZ更改为1KHZ,再按一下编码开关,就会更改为1MHZ,循环切换。如果此时想从头来调整输出的波形,或者要100HZ的波形输出,可以直接按下K1,可以得到一个原始波形输出。
总结:
此开发板其实难度还是蛮大的,但是如果要把这个完整的弄好,编码器非常的流畅,任意波形都按要求实现还是要花费很多的时间和经历, 这个开发板真心觉得非常的好,特别是FPGA部分,MCU完成系统的设置,FPGA完成波形的产生和功能的调试,有着一定的优势。后续我如果闲下来了,我会把此板的外壳做出来,做成成品,弄一个完整的信号发生器,供自己以在研发的道路上添一个好的工具。
链接:https://pan.baidu.com/s/1zSonczASTAgx_rQQgiLg1A lf8z