FPGA应用技巧和诀窍:模拟DDS(调频调相)

dds是直接数字式频率合成器(direct digital synthesizer)的英文缩写,是一项关键的数字化技术。与传统的频率合成器相比,dds具有低成本、低功耗、高分辨率和快速转换时间等优点。先说明一下,要产生真正的模拟信号,需要接a/d转换芯片,这次主要是产生fpga发出的数字信号(在modelsim中以模拟量查看)。
首先先看一下整体的连接图:
其中sin_rom模块是存储正弦波形数据的rom(rom调用quartusip核),深度256,宽度8位,我们用产生好的mif文件(可以利用mif_make2010这个软件产生,也可以利用c语言matlab产生但要注意文件格式)去初始化rom,假如我们采用mif_make2010产生mif文件,波形如下:
其中行坐标是是0-255,表示rom的256个存储单元,纵坐标表示的是每个存储单元的数值大小,波峰为0xff;波谷为0x00,即我们依次从rom的第一个地址读,一直读完,从rom中读出的数据就是正弦波形的数字量表示。所以程序中我们只需控制地址的产生就可以达到调相调频的目的,所以设置了gen_add模块。
调相原理:由于0-255个单元对应的相位是0-360度,所以我们只需调整初始相位的单元就可以到达调相的目的,例如假如初始单元就是0,那我们的波形就是标准的正弦波,如果我们的初始单元为64,那我们的波形就是余弦波。
调频原理:我们调整地址产生的频率快慢就可以调整波形频率。假如我们时钟50m,每个时钟上升沿从rom中读取一个数据,由于一个周期的sin波形是有256个点组成,所以我们相当于256个时钟产生一个完整的sin波,即周期为256*(1/50m);频率为50m/256;
从频率表达式我们可以看出波形的频率一是跟时钟有关,二是跟存储的rom单元数有关,我们上述采用的是256个单元,所以产生的频率为50m/256=195.3khz,这是我们顺序从rom中读取数据,即地址每个时钟加一产生的频率,若我们的每个时钟地址加2(步长),则我们的产生的频率则为原来的2倍,即2*50m/256=195.3*2。但我们想一想如果我们的的rom深度数256,那产生的频率分辨率最高也就是50m/256即195.3khz,,而且我们产生的频率只能是195.3khz的整数倍,这个有点难以接受。我们自然想到可以增大rom的位数来提高分标率,这个当然可以,但是我们rom都是提前固定的,有没有其他办法呢?
假如我们设定一个32的寄存器address_temp,我们只把address_temp的前八位真正的交给rom读数据,这样相当于减慢了地址的变化速度,但我们实际上提高了频率分辨率,现在的分辨率为50m/2^32=0.011hz,同样我们产生的频率只能是0.011hz的倍数,但是我们可以认为任何整数都可是0.011的倍数,假设步长为span_fre,则产生的频率为span_fre*50m/2^32;这有点类似之前的应用篇(三)精准分频,事实上它的原理就来源于此。
同理我们根据频率来调节步长即可。
程序如下:
仿真结果如下:
从结果我们可以看为起始相位为90度即cos波形,(虽然我们rom中存储的是sin波形的数据),频率为500k,注意data的显示格式是一定设置为无符号的模拟量。当我们把phase改为0时结果如下:
可以看出此时起始相位为0度,为sin波形。

笙泉M0系列MCU应用于电池管理系统(BMS)
比特币日证明了阿根廷对加密货币依然热爱
MTK 6765 八核安卓核心板主板定制方案!
如何用光做产品的个性化表达
面试中出现有关Xgboost总结
FPGA应用技巧和诀窍:模拟DDS(调频调相)
灵瑞科技发布RFID高频ISO15693协议大功率18000-3M3协议读写模块
MySQL数据库是如何应对故障恢复与数据恢复回滚的问题呢?
ofdm技术发展现状
射频接收电路和射频发射电路
ZG PDU电源分配解决方案 实现12V/24V电源输出分配管理
什么是VQF格式
电抗器的如何取电感值?独立滤波变换器电路设计
诺基亚VR相机设备OZO:由8个同步快门传感器和8个麦克风组成
大气过电压的含义_大气过电压分为哪几种
研究员借AI技术发现早期胃癌
电子芯闻早报:抢占制高点,布局第三代半导体
奥地利微电子以模拟技术为数字电子产品增光添彩
物奇首颗车规级Al语音芯片出货突破30万片
浅谈变频器的控制功能