1、 基于 FPGA 的数字 波形发生器 作 者:张清明 林杰文 方 艾 指导老师:王 彦 黄智伟 摘要 : 系统 基于 FPGA 设计, VHDL 编程 实 现。 系统 集成于一片 Xilinx 公司的 Spartan系列XC2S100-PQ208 芯片上, 核心 技术是 直接数字频率合成 技术 ,其中包括 固定 分频器,正弦波合成器,三角波 、 矩形波 、锯齿波 发生器 , 波形选择模块, 键盘控制模块 ,它们输出的 8位 数据通过 D/A 转换并 经 功率放大后即得所需波形 , 通过改变 相位步进 可调 频 率 , 通过改变 D/A 电阻网络的 基准 电压可调 幅度 。 系统的频率范围宽,
2、可 从 10Hz 到 10kHz 之间 等步进调节, 最小 步进 10Hz,幅度和频率精度高。 关键字: 现场 可编程 逻辑 门阵列 直接数字频率合成 数模转换 Abstract: The system is implemented by programmed with VHDL base on FPGA. the system whose basic technique is DDFS (Direct Digital Frequency Synthesis) is integrated into a Xilinxs SpartanXC2S100-PQ208 FPGA chip that co
3、nsisted of a frequency divider, a sine wave synthesizer, a triangular wave, rectangular wave and sawtooth wave generator, a wave selecting module and a keyboard module. The 8-bit output data of the FPGA are converted by a D/AC and then amplified. By altering the phase increment, the frequency of the
4、 output wave can be changed. By altering the reference voltage of the D/AC resistances, the amplitude of the output wave can be adjusted. The system has a wide frequency range and is able to step evenly with the minimum of 10Hz. The frequency and the amplitude are in high accuracy. Keywords: FPGA DD
5、FS D/AC 初稿: August 13, 2003 最后修改: September 23, 2003 目录 第一章 方案比较与论证 .3 1.1 总体方案设计 .3 1.2 波形数据的产生 .3 1.3 频率调节 .3 1.4 幅度调节 .3 1.5 总体设计 .3 第二章 单元电路设计 .4 2.1 波形合成器的设计 .4 2.2 频率与幅度调节的原理及实现 .4 2.3 波形选择模块与键盘控制模块设计 .5 2.4 FPGA接口与数模转换电路设计 .5 第三章 软件设计 .5 3.1 正弦波合成器设计 .5 3.2 三角波、矩形波、锯齿波发生器 . 6 3.3 波形选择模块 . 6 3
6、.4 键盘控制模块 . 6 第四章 系统测试 . 6 第 五章 结论 . 7 参考文献 . 7 附录 . 8 一、 方案比较与论证 1.1 总体 方案 设计 方案一: 采用锁相环 锁定 频率,稳定度和精确度高,但是频率调节不便且调节范围小,只能得到方波和正弦波,对 其它波形需外加整型电路,使得系统复杂。 方案二:采用直接数字频率合成, 用 单片机 作为核心控制部件 ,能达到较高的要求,实现各种波形输出,但受限于运算位数及运算速度,产生的波形 往往 需通过滤波器才能达到满意效果,并且频率可调范围小 , 很难得到较高频率 。 方案三:采用直接数字频率合成,用 FPGA 器件 作为核心控制部件, 精
7、度高 稳定性好 , 得到波形 平滑, 特别是由于 FPGA 的高速度,能实现较高频率的波形 。控制上更方便,可得到较宽频率范围的波形输出,步进小。 因此 采用方案三。 1.2 波形数据的产生 : 方案一:使用 Visual C+计算正弦波 及指定函数波 的 N 点采样值, 然后写入到 ROM 中待用。 方案二:使用 Matlab 计算上述数据。 两种方案都是利用软件计算波形参数的较佳方案 。 VC+对计算值的舍入是直接取整,因此方案一得到的数据有较大误差,而且该方案编程复杂。 Matlab 能对数据进行四舍五入,因此方案二得到的数据误差较小,且编程简单,修改容易 ,调用方便 。因此采用方案二。
8、 1.3 频率调节: 方案一:通过预置 FPGA 的分频系数调节频率。 方案二:通过预置 FPGA 的分频系数以及 改变相位步进 调节频率。 方案一的调节步进只能以指数形式递增,对 于较高的频率范围有较多空白,无法等步进调频;方案二采用粗调与细调相结合,可以实现等步进调频,因此选用方案二。 1.4 幅度调节: 方案一:采用双 D/AC 实现幅度调节。 方案二:模拟方式调幅。 方案一实现数字调幅,精度较高, 但 其输出幅度无法连续,由于幅度本身是以模拟量输出的,采用高精度的立式电位器调节已能满足要求,故采用方案二。 1.5 总体设计 : 综上方案论证,得到 系统框图如图 1.1 所示。 图 1.
9、1 波形发生器系统框图 二、 单元电路设计 2.1 波形合成 器 的设计: 2.1.1 正弦波合成: 对一个幅度为 1 的正弦波 的一个周期 进行 1024 点采样 , 用 Matlab 计算得到每一 点 对应的幅度值, 然后 量化成 8 位 二进制 数据存放在 ROM 中,理论上, 采样 的 点数及量化的位数越多,合成的波形精确 度越高 ,但是, D/AC0832 的位数 只有 8 位,量化等级最高为 256,其量化误差 已 能达到要求, 对于查正弦表的舍 入 误差也可忽略,故不再细分。这里采用 1024 个采样点,是为了调频时能得到较好的波形。 依次取出 ROM 中的数据,即可得到幅度上是
10、阶梯型的正弦波。再经过 D/A 转换,便可得到连续的正弦波。 2.1.2 三角波 、锯齿波、矩形波 的合成 : 由于三角波、锯齿波 、矩形波波形变化是线性 ,因此不需要进 行 波形存储 。三角波的产生是使幅度逐次增加一个相位 进 ,一直到最大值后变为步逐次 减少一个相位步进,如此便产生一个周期的波形,锯齿波与三角波类似,只是到达最大值后又从 0 开始。矩形波的产生更为简单, 只需根据占空比, 调节 一个周期内输出 高 、 低电平的时间即可。 2.2 频率 与 幅度调 节 的 原理及 实现 : 2.2.1 频率等步进调节的实现 : 由于采用 DDFS,在 ROM 中存有波形一个周期的 n 个等间
11、隔归一化采样数据,改变 相位累加器的步进, 从而改变对 ROM 中数据的读取速度,即可合成不同频率的波形, 存储器 中存入过量的 采样 值,使得采样点数较 少 时 , 依然能够得到较好的波形输出,从而得到较高的频率输出。否则,采样点数太少 会使产生的波形严重失真。 输出波形的频率可由式 ( 2-1) 计算: Skff N osc 20 式 ( 2-1) 其中, fosc为晶振频率, k 为分频系数, N 为相位累加器位数, S 为相位累加器步长。 若 取 fosc 32.768MHz,k=50,N 16,带入上式 得到 f0 10S( Hz) 。 因此,只要控制 S 的值就可以准确地实现频率步
12、进为 10Hz 的等步进调频 。但是,现有的晶振为 32MHz,通过实验测试 、 比较,可用下式计算频率: )(10496 5 3 0 63 2 0 0 0 0 0 00 HzSSf 式 ( 2-2) 也能得到 10Hz 精确的等步进调节,但牺牲了波形的质量,因为 65306 不是一个 2N 的数,这样波形会漏掉少量采样点。不过,即使这样,得到的波形依然很平滑,可以满足设计要求。若要使频率调节步进减小到 1Hz,对晶振 有特殊要求,它的振荡频率必须是 2 的 N次幂 。由式( 2-1) 举例说明累加器位数不同产生 的差异: )(1321 0 4 8 5 7 63 3 5 5 4 4 3 2 H
13、zSS 式 (2-3) )(13 3 5 5 4 4 3 23 3 5 5 4 4 3 2 HzSS 式 (2-4) 式( 2-4)产生的波形将远远优于式 (2-3),更优于我们现在所得 到 的波形,最高频率可提高几倍。 另外,由于 DAC0832 的电流建立时间是 1 s,因此输出波形的最高频率 由 下式决定: )(3 1 2 5 0)(321 0 0 0 0 0 0Hz1 0 0 0 0 0 0101m a x 6HzHzf 最小采样点数最小采样点数 因此,要得到更高频率的波形需使用更高速的 D/A 转换器。 2.2.1 幅度调节 : 直接对数模转换芯片的电阻网络的基准电压进行调节, DA
14、C0832 的基准电压为 10V,因此 理论上 输出 波形的幅度范围 10V。通过在 ADC0832 的 8 脚(基准电压输入脚)接一个立式电位器便可实现,调节精度高。 2.3 波形选择模块 与 键盘控制模块 设计: 波形选择用于按键选择输出的波形类型,采用一个按键,每按一次变换一种波形,选到最后一个之后又重头开始。键盘控制模块连接相位步进累加器和波形选择模块,是完成波形选择与调频的人机界面。使用有限状态机设计,可以减少大量的按键,操作简单。 2.4 FPGA 接口及数模转换电路设计 : 电路如图 2.1 所示 图 2.1 FPGA 接口与模数转换电路 三、 软件设计 3.1 正弦波合成 器设
15、 计 : 3.1.1 正弦波波形数据产生: 利用 Matlab6.5 计算波形数据 , 程序及结果如下: step=2*pi/1023; x=0:step:2*pi; y=127.5*sin(x)+127.5; z=round(y) z = Columns 1 through 10 128 128 129 130 131 131 132 133 134 135 Columns 11 through 20 135 136 137 138 138 139 140 141 142 142 Columns 1021 through 1024 125 126 127 127 3.1.2 波形 存储 器
16、的设计 : 使用开发软件为 Xilinx ISE 4.2,编程语言为 VHDL,仿真工具为 ModelSim Xilinx Edition 5.3d XE, 程序见附录第 9 页。 3.2 三角波、矩形波、锯齿波发生器 及相位累加器 : 三角波、矩形波、锯齿波发生器及相位累加器 集成于同一个模块中 ,程序流程图如图 3.1 所示。 程序见附录第 9 页 。 图 3.1 三角波、矩形波、锯齿波发生器及相位累加器 程序流程 3.3 键盘控制模块 : 程序见附录第 11 页 。 3.4 波形选择模块 : 程序见附录第 12 页 。 四、 系统测试 使用仪器: 示波器: 绿扬 YB4365, 100M
17、Hz, 江苏扬中电子仪器厂 ; FPGA 实验仪: DP-FPGA, 广州致远电子有限公司 ; 频率计: SP-1500A 等精度频率计,南京盛普电子实业有限公司 。 理论值( HZ) 实测值( HZ) 误差() 理论值( HZ) 实测值( HZ) 误差() 10 10.00 0 800 799.34 0.00825 20 20.00 0 1k 998.57 0.00143 30 30.00 0 2k 1997.14 0.00143 40 40.00 0 5k 4985.24 0.002952 50 50.00 0 8k 7975.03 0.003121 100 99.99 0.0001 9k
18、 8970.69 0.003257 200 199.96 0.0002 10k 9970.47 0.002953 500 499.67 0.0066 表 4.1 正弦波理论值与实测值比较 图 4.1 理论值与实测值曲线 图 4.2 误差分析图 频率范围: 10Hz10kHz, 最小 可调步进: 10Hz。 幅度范围: 2.89V5.1V 五、 结论 将 DDFS 技术与 FPGA 的相结合,实现了各种波形的产生,且波形平滑,无毛刺,质量较高,采用 Matlab 计算波形数据,更符合工程要求。输出波形的频率可调范围宽,可等步进调节且步进小。人机界面 经过 精简,按键少且操作方便。 参考文献: 1
19、. 黄正谨,徐坚,章小丽等 .CPLD 系统设计技术入门与应用【 M】 . 北京:电子工业出版社 .2002。 2. 潘松,黄继业 .EDA 技术实用教程【 M】 .北京:科学出版社 .2002。 3. 赵俊超等 .集成电路设计 VHDL 教程 .【 M】 .北京 .北京希望电子出版社 .2002。 4. 周俊峰 陈 涛 . 基于 FPGA 的直接数字频率合成器的设计和实现 .http:/.2003 年 附录 : -顶层程序 - -文件名: top.vhd- library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.
20、ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; entity top is Port (sysclk,reset,key1,add,sub,key_route:in std_logic; led1,led10,led100,led1000: out std_logic; data : out std_logic_vector( 8 downto 0); end top; architecture Behavioral of top is component key Port (sysclk,key1,reset,add,sub: in std_logic; led1
21、,led10,led100,led1000,clock3200: out std_logic; N:out integer range 1023 downto 0); end component; component pir_add Port ( sysclk,reset : in std_logic; N :in integer range 1023 downto 0; addr: out integer range 1023 downto 0; aslant,triangle,rectangular:out std_logic_vector( 8 downto 0); end compon
22、ent; component sinx PORT ( Qt : in INTEGER RANGE 1023 DOWNTO 0 ; DD : out std_logic_vector(8 downto 0) ); end component; component choice_function Port (clk3200,reset,key_route:in std_logic; sin_data,tri_data,asl_data,rec_data:in std_logic_vector(8 downto 0); function_data: out std_logic_vector(8 do
23、wnto 0); end component; signal N_p,addr_p :integer range 1023 downto 0; signal clock3200_p :std_logic; signal sin_data_p,tri_data_p,asl_data_p,rec_data_p :std_logic_vector(8 downto 0); begin key_u : key port map (sysclk=sysclk,reset=reset,add=add,sub=sub,key1=key1,clock3200=clock3200_p, led1=led1,le
24、d10=led10,led100=led100,led1000=led1000,N=N_p); pir_add_u : pir_add port map (sysclk=sysclk,reset=reset,N=N_p,addr=addr_p,aslant=asl_data_p,triangle=tri_data_p, rectangular=rec_data_p); sinx_u :sinx port map (Qt=addr_p,DD=sin_data_p); choice_function_u : choice_function port map clk3200=sysclk,reset
25、=reset,key_route=key_route, sin_data=sin_data_p,tri_data=tri_data_p,asl_data=asl_data_p,rec_data=rec_data_p,function_data=data); end Behavioral; -正弦波波 形存储 - -文件名: sinx.vh- -说明:限于篇幅,只给出部分程序代码 - library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; e
26、ntity sinx is PORT ( Qt : in INTEGER RANGE 1023 DOWNTO 0 ; DD : out std_logic_vector(8 downto 0) );end sinx; architecture Behavioral of sinx is SIGNAL D : INTEGER RANGE 255 DOWNTO 0 ; BEGIN PROCESS(Qt) BEGIN CASE Qt IS when 0001 = D D D D D D D D D D D D D D D D D D D D D D D D NULL ; end case; END PROCESS; DD D D D D D D32768 then rectangular=“111111111“; else rectangular=“000000000“; end if;
Copyright © 2018-2021 Wenke99.com All rights reserved
工信部备案号:浙ICP备20026746号-2
公安局备案号:浙公网安备33038302330469号
本站为C2C交文档易平台,即用户上传的文档直接卖给下载用户,本站只是网络服务中间平台,所有原创文档下载所得归上传人所有,若您发现上传作品侵犯了您的权利,请立刻联系网站客服并提供证据,平台将在3个工作日内予以改正。