本项目设计了一种基于FPGA技术的高效能正弦信号发生器,采用DDS算法实现高精度、低相位噪声的正弦波形输出。
FPGA设计正弦信号发生器
本项目基于FPGA芯片、DA芯片以及数码管构建了一款可调频率范围的正弦波发生器,并支持峰峰值与直流分量程控调节,同时在数码管上显示输出频率。
一、系统任务设定
* 频率:0~10KHZ,步进为100Hz
* 峰峰值:0~5V,调幅步进为500mV
* 直流分量调节范围 -2.5V至+2.5V
二、方案对比与选择
在设计中需要生成正弦波信号。之前的方法是使用算法直接产生信号,但这种方法对于本项目来说效率低下且难以精确控制数据变化。因此我们采用了基于ROM定制的波形数据方法来实现频率调节和步进功能。尽管该方案存在分频比不准确的问题,在实践中会导致某些周期性的误差增大现象,但我们通过改进算法以确保输出频率稳定。
三、系统设计概述
首先使用MATLAB生成所需正弦信号的数据,并将其导入到FPGA的波形数据ROM中;接下来利用读地址的方式从ROM中提取数据。按键值经过消抖处理后被读取并控制着分频操作,以此实现对输出信号频率的调整。同时通过共阴极数码管显示当前设定频率。
四、系统设计原理说明
为使FPGA能够生成正弦波信号, 使用了定制化的波形数据ROM方法。具体来说是先用MATLAB产生所需的正弦信号数据,并将这些数据复制到初始化的ROM文件中,保存格式可以是.mif或.hex类型;之后通过指定地址来读取ROM中的内容以输出相应的数字信号。然后利用DAC0832芯片进行数模转换得到电流型的数据,再经由集成运放(如LM324)将这种形式转变为电压输出以便于观察。
五、频率调节机制
为了完成正弦波的生成并实现其频率调整功能,在检测到用户输入改变时会通过以下算法更新读取ROM数据的位置:当value等于0或1时,地址递增;如果达到最大值511,则重置为零。否则根据计算出的新k和m值来动态地设定新的地址范围并进行循环处理。
六、幅度调节机制
调幅过程主要依赖于dataout<=(out*acount)>>4这个算法实现。这里需要注意的是,用于存储dataout的寄存器大小要足够大以防止溢出现象发生;此外由于直接除以10会导致逻辑单元不足的问题, 因此我们选择右移四位来替代原来的除法操作,将调幅步进调整为312.5mV。