波形发生器实例篇,DDS任意波形发生器设计下篇
扫描二维码
随时随地手机看文章
波形发生器在生活中不可或缺,在往期文章中,小编曾对各类型波形发生器予以介绍,如任意波形发生器、Arduino波形发生器、pwm波形发生器等。本文对波形发生器的讲解,承接于《波形发生器实例篇,DDS波形发生器设计上篇》一文,将对DDS任意波形发生器设计的后续部分加以介绍。如果你对本文即将阐述的内容存在一定兴趣,不妨继续往下阅读哦。
一、固定波形输出
在FPGA内部实现高速的多位数相位累加器,输出地址信号,控制读出波形存储器中存放的波形幅度数字信号。通过改变相位累加器的相位增量M,即地址间隔的改变,控制读出波形存储器一个周期正弦波幅值的数目,达到输出频率的控制。其输出的频率为 ,
其中fclk为系统时钟频率,N为相位累加器的位数,M为相位增量--频率控制字,由公式可知fout与肘成正比,控制M就可以控制输出的频率。如要频率步进为l0Hz,则要求
保证在输出最高频率输出时有32个点的波表数据输出,则要求时钟为3.2MHz。将50MHz的时钟10分频,得到5MHz的信号作为累加器的计数信号。则fclk=5MHz,2N=500000,因此,N可取20,2N=1048576。则fout=-4.77M,M=0.21fout。利用计算机输入要输出的频率,发送到单片机,单片机将对接收到的数据进行预算处理后发送给FPGA。
频率输入电路如图所示,接收8位的频率字长,输出为20位。
下面为STC89C52RC与EPlC3T144C8的接口程序,用控制字:
二、加法器
加法器为20位,自动累加,它以设定的频率控制字k作为步长来进行加法运算,当其和满时清零,并进行重新运算。电路图如下:
程序如下:
三、高十位寄存器
实现数据输入为20位,输出为10位,实现高位截断。程序为:
四、波形ROM及选择
本设计使用几个8bit的ROM,存储深度为1024点,用来存储正弦波等波形数据。每个波形数据存储在一个固定的ROM里,如下图。其中SineROM为正弦波存储模块,SquareROM为方波存储模块,Triangle-ROM为三角波存储模块,SwtoothROM为锯齿波存储模块。它们通过一个使能模块控制,采取低电平有效的方式,选择性读取任意模块的波形。一般每个模块都为高电平状态,即为不工作状态。每次输出波形时,仅有单独一个ROM_T_作(即工作模块为低电平,其他模块均为高电平),这样不仅保证可以按照需要输出固定波形,还可以避免波形输出发生非控制性的混杂。使能模块的输入端为行列式键盘,键盘中每一键单独使用,当某一键按下,则对应某一波形输入。因为4×4的键盘输出线为8位,仅为一根,因此输入端设为一根8位输入端口。通过设定,实现单键控制某~波形输出。本设计仅设定了4个固定波形ROM输出,即正弦波、方波、三角波和锯齿波,因此使能模块的选择输出线为4条,若增加新波形模块,可以更改输出端口的数量,进行扩展。
五、时钟分频
时钟分频电路如下,所以模块在同步时钟下协调工作,电路图如下:
程序如下:
六、任意波形输出
关于根据需要而产生的任意波形的设计如下:因为该任意波形是由上位机下传的波形数据,由单片机控制,所以必须设计一个能随时接受数据更新的RAM。数据传至任意波形的寄存器里,然后便可实现任意波形的输出。
选用的DA转换器为8位,所以RAM的字长也为8位,因此波形RAM的地址线的位数取lO位。为了实现任意波形数据的更新,波形RAM设计成为双口RAM。
以上便是小编此次带来的“波形发生器”所有相关内容,通过本文,希望大家可结合小编前期带来的《波形发生器实例篇,DDS波形发生器设计上篇》内容,对DDS任意波形发生器设计的全流程有所了解。如果你对波形发生器存在浓厚兴趣,可尝试自己动手哦。最后,十分感谢大家的阅读,have a nice day!