• 基于fpga的花样流水灯 > 基于FPGA的双路可移相任意波形发生器
  • 基于FPGA的双路可移相任意波形发生器

    免费下载 下载该文档 文档格式:PDF   更新时间:2008-10-01   下载次数:0   点击次数:1
    文档基本属性
    文档语言:English
    文档格式:pdf
    文档作者:Mike Aquino
    关键词:
    主题:
    备注:
    点击这里显示更多文档属性
    基于FPGA的双路可移相任意波形发生器
    李航,曲永志,雷霆 (武汉理工大学自动化学院,机电学院 湖北 武汉 430070)
    摘要
    本设计的项目背景是为某公司设计的基于嵌入式系统的涡流传感器信号发生装置,在进行涡流 检测的缺陷分析时,需要高精度的载波信号检出缺陷信息,包含相位与幅度.本设计便是这样一种 具有两路输出,波形相位可调的多功能任意波形发生器. 本文论述了利用用 FPGA 来开发 DDS 函数发生器的总体设计思路,详细讨论了任意波形产生,频 率精确调整,双路移相输出,PWM 调制波产生,D/A 转换与滤波电路,键盘与显示等诸方面软硬件实 现方法. 整个设计基于 Altera 公司的 cyclone 系列的 FPGA,配合 Atmel 公司高性能 AVR 系列单片机来完 成.系统基于模块化的思想,采用自底向上的设计思路,将软件开发与硬件开发相结合.以 Quartus Ⅱ为主要开发和仿真环境,采用 VHDL 语言,定制用户交互界面,用户可通过键盘输入设置参数,并 可即时显示当前的波形数据. 关键词:直接数字频率合成,FPGA, 脉宽调制,任意波形,移相
    Arbitrary waveform generator with phase-shift based on FPGA Abstract
    This system mainly controlled by FPGA and micro-processor Atmega64 is based on the theory of DDS. The waveform generator with two independent outputs can supply any type of waveform, ranging from 100Hz to 500KHz. Amplitude can be modulated from 0 to 5.0 with a step of 0.1V .An extra function of PWM and phase-shift can meet the requirement of many special fields . This paper analyzes the general thought of how to develop a DDS waveform generator with Field-Programmable Gate Array(FPGA).The whole system is based on the idea of modularization and is developed from the bottom to higher hierarchies ,combining the software and the hardware. The main tool is QuartusⅡ software, whose language is VHDL .The design has a friendly human-machine communication interface, by which the user can set up the parameter with a keyboard and read the real-time data of the current waveform. Keyword: DDS, FPGA, PWM, Arbitrary Waveforms,Phase shift
    0 引言
    本设计的背景是改进某公司生产的涡流检测装置信号发生电路,提高设备的质量,降低生产成
    本.涡流检测是建立在电磁感应原理基础上的无损检测方法.根据法拉第电磁感应定律,在检测线 圈上接通交流电,产生垂直于工件的交变磁场.检测线圈靠近被检工件时,线圈周围的交变磁场在 金属表面产生感应电流.对于平板金属,感应电流的流向是以线圈同心的圆形,形似旋涡,称为涡 流.同时涡流也产生相同频率的磁场,其方向与线圈磁场方向相反.涡流通道的损耗电阻,以及涡 流产生的反磁通,又反射到探头线圈,改变了线圈的电流大小及相位,即改变了线圈的阻抗.因此, 探头在金属表面移动,遇到缺陷或材质,尺寸等变化时,使得涡流磁场对线圈的反作用不同,引起 线圈阻抗变化,通过涡流检测仪器测量出这种变化量就能鉴别金属表面有无缺陷或其它物理性质变 化 . 在涡流检测中,导体材料中的缺陷或物理性能变化的辨析,识别是最主要的目标.根据部分场 信息推断特定区域材质的相关信息时,由于影响电磁场分布的因素很多,其变化与材料内部的组织 结构等变化并非一一对应.需要对检测信号进行适当处理,以排除干扰信号,提取有效信息来反映 所研究的材质参量.在信号处理时采用了相位分析,频率分析及幅值鉴别等多种方法.所以,对涡 流检测仪的激励信号的保真度,频率的稳定性和准确性,幅值的稳定性提出了很高的要求,作为检 测系统必不可少的组成部分的信号源,在很大程度上决定了涡流检测系统的性能. 可以将整个系统所需数字电路完全集成在芯片内部, 所以利用 FPGA 由于 FPGA 有丰富内部资源, 开发嵌入式系统并不会显著增加硬件成本,具有关阔的市场价值.
    [4]
    1 函数发生器基本原理设计
    1.1 DDS原理
    DDS 的基本思路就是将要输出的波形的数据取样, 量化, 编码, 形成一个函数表,逐点存储在 ROM 里,然后在系统标准时钟下,按照一定的顺序从 ROM 里读出数据,再进行 D/A 变换和滤波后,得到一定 频率的输出波形 .如图 1 所示:
    [3]
    ROM 时钟 ROM里的数据
    6 5 4 3 2 1 0
    D/A
    低通滤波器
    D/A波形
    6 5 4 3 2 1 0 1 3
    滤波输出信号
    0,1,2,3,4,5,4,3,2,1, 0,1,2,3,4,5,4,3,2,1,0
    1 4 7 10 13 16 19 22 25 28 31 34 37 40
    5
    7
    9
    11
    13
    15
    17
    19
    图 1 DDS 基本原理图 DDS 技术是一种从相位概念出发把一系列数字形式的信号通过 DAC 转换成模拟形式的信号的合
    成技术. DDS 系统中的参考时钟通常是一个高稳定性的晶体振荡器,用来作为系统时钟同步整个系统 的各组成部分.频率控制字(FSW - Frequeency Setting Word)实际就是相位增量值,用来做相位累 加器的累加值. 相位累加器在每一个参考时钟脉冲输入时, 把频率字累加一次,其输出相应地增加一 个步长的相位增量,由于相位累加器的输出连接在波形存储器地址线上, 因此其输出的改变就相当 于进行查表.这样就可把存储在波形存储器内的波形采样值经过查表查出, 输出到 D/A 转换器.在 系统时钟脉冲的作用下, 相位累加器不停地累加,也即不停地查表,不停地把波形数据送到 D/A 转换 器转换成模拟量输出, 从而合成波形输出.滤波器则进一步平滑 D/A 转换器输出的近似所需波型的 锯齿阶梯波,同时滤除不必要的杂波. 同时由于相位累加器字长的限制, 相位累加器累加到一定数值 后, 其输出将会溢出,产生的波形存储器的地址数值就会循环一次,意味着输出的波形完成了一个周 期.所以改变频率控制字,就可以改变累加器的循环频率,在时钟频率不变的情况下就可以改变输出 率 .DDS 结构图如图 2.
    [3]
    图 2 DDS 结构图
    其输出频率为
    f 0 = FS W ×
    fs 2N
    其中 N 为相位累加器的位数; FSW 为频率转换字; 上式中,FSW 由外部控制电路预置,当时钟频率
    f s 为时钟频率
    f s 与 N 一定时,输出频率 f 0 仅仅取决于 FSW 的值.
    Δf = f 0 min = fs 2 N DDS 最大输出频
    当 FSW=1 时,DDS 所能产生的正弦信号的最低频率,即频率分辨率为
    fs fs f 率由 Nyquist 采样定理决定,即 2 ,实际中一般最高输出品率达不到 2 ,最高为 40% s ,足以满足
    设计要求 .
    [3]
    1.2 系统设计原理
    DDS 系统在主时钟和累加器的共同作用下,累加器输出波形数据表地址,在 ROM 中查得相应的 波形当前幅度值,经 D/A 转换后输出脉冲幅度调制信号,再经低通滤波器滤除高次谐波成分,最终
    输出频率为 fo 的模拟信号.基于 DDS 的数字移相信号产生是整个系统的设计核心部分.这部分完 全是由 VHDL 语言设计,并在 FPGA Cyclone 器件上实现的.电路要求能输出 2 路正弦信号,由 2 路 8 位 D/ A 分别实现波形输出.信号频率能通过输入的 24 位频率控制字同步控制;其中一路作为参 考信号,另一路是可移相的信号,可通过输入的 10 位相位控制字控制. 30 位累加器与寄存器配合, 用 实现频率控制和相位调整; RAM 存放波形数据的 ,8 位数据线,10 位地址线(数据和地址线最大可 以到 32 位).两个 8 位输出口,可以分别与两个高速 D/ A 连接,输出参考信号和可移相波形信号. DDS 数字电路部分完全集成在 Altera 公司的 cyclone 系列 FPGA 中,利用 FPGA 丰富的逻辑资源 来实现,通过键盘输入来调整幅度,显示部分由单片机来实现.系统引入模块化的思想,采用自底 向上的设计思路,将软件开发与硬件开发相结合.整个系统可以分为三部分:FPGA 内部逻辑单元设 计,模拟电路单元设计,以及单片机显示单元设计.系统设计功能框图如图 3:
    输出通道1
    显示
    低通滤波
    FPGA
    占空比调整
    I/V转换 PWM
    DAC0800
    频率控制字
    累 加 器
    波形表1
    幅度控制字 AM
    DAC0832
    单片机
    相位控制字 加法器
    波形表2
    DAC0800
    I/V转换 键盘
    输出通道2
    图 3 系统功能框图
    低通滤波
    2. FPGA内部逻辑设计
    2.1 累加器的设计
    累加器是 DDS 电路工作的最关键部分,累加器的工作速度决定了输出波形的频率精度 . 由 Δf = f min = f c / 2 n 知,累加器的位数决定了频率最小分辨率,设计中 f c 为 FPGA 工作频率,
    [7]
    f c =50MHz,根据设计需要将累加器位数设为 28 位,这样最小频率步进制为 Δf =0.18626Hz.
    Altera 开发工具 QuartusII 提供了强大的 IP 内核,累加器调用 LPM 宏模块,在原有基础上进 行二次设计.在设计累加器时引入了流水线结构,进一步提高了累加器的累加速度.所谓流水线加 法器,就是将加法运算分解成几部分.并将加法计算的每一步中间结果寄存.比如,可以将 8 位加
    法分解为[7:6],[5:4],[3:2],[1:0]四个 2 位加法.输入数据经过四级流水线加法得出输出结果.虽 然事实上输入数据还是得经过 4 个时钟周期才能得到输出结果,但是由于可以进行并行运算,等效 为一个时钟周期完成一次 8 位加法.本设计中采用 4 级流水线,图 4 给出了 28 位累加器的流水线结 构图:
    图 4 四级流水线的 28 位累加器结构图
    下面给出其 VHDL 描述: LIBRARY ieee; USE ieee.std_logic_1164.all; LIBRARY work; ENTITY pipeline3 IS port ( clk : IN STD_LOGIC; incre : IN STD_LOGIC_VECTOR(27 downto 0); result_out : OUT STD_LOGIC_VECTOR(27 downto 0) ); END pipeline3; ARCHITECTURE bdf_type OF pipeline3 IS component lpm_add_sub0 PORT(clock : IN STD_LOGIC; dataa : IN STD_LOGIC_VECTOR(27 downto 0); datab : IN STD_LOGIC_VECTOR(27 downto 0); result : OUT STD_LOGIC_VECTOR(27 downto 0) ); end component; component lmp_d PORT(CLK : IN STD_LOGIC; D : IN STD_LOGIC_VECTOR(27 downto 0); Q : OUT STD_LOGIC_VECTOR(27 downto 0) ); end component; signal SYNTHESIZED_WIRE_0 : STD_LOGIC_VECTOR(27 downto 0);
    signal SYNTHESIZED_WIRE_1 : STD_LOGIC_VECTOR(27 downto 0); BEGIN result_out clk, dataa => SYNTHESIZED_WIRE_0, datab => incre, result => SYNTHESIZED_WIRE_1); b2v_inst4 : lmp_d PORT MAP(CLK => clk, D => SYNTHESIZED_WIRE_1, Q => SYNTHESIZED_WIRE_0); END; INCLUDE "lpm_add_sub.inc"; --component lpm_add_sub0 SUBDESIGN lpm_add_sub0 ( clock : INPUT; dataa[27..0] : INPUT; datab[27..0] : INPUT; result[27..0] : OUTPUT; ) VARIABLE lpm_add_sub_component : lpm_add_sub WITH ( LPM_DIRECTION = "ADD", LPM_HINT = "ONE_INPUT_IS_CONSTANT=NO,CIN_USED=NO", LPM_PIPELINE = 4, LPM_TYPE = "LPM_ADD_SUB", LPM_WIDTH = 28 ); BEGIN result[27..0] = lpm_add_sub_component.result[27..0]; lpm_add_sub_component.dataa[27..0] = dataa[27..0]; lpm_add_sub_component.datab[27..0] = datab[27..0]; lpm_add_sub_component.clock = clock; END; ENTITY LMP_D IS --component lmp_d PORT( CLK:IN STD_LOGIC; D :IN STD_LOGIC_VECTOR(27 DOWNTO 0); Q :OUT STD_LOGIC_VECTOR(27 DOWNTO 0) ); END LMP_D; ARCHITECTURE A OF LMP_D IS BEGIN PROCESS(CLK) BEGIN IF CLK'EVENT AND CLK='1'THEN Q<=D; END IF; END PROCESS;
    END A; 通过文件转换可以得到编写的累加器电路封装图如图 5.其中:CLOCK 为工作时钟 data[23..0] 为累加器步进值输入端
    ACCUM10 clock
    INPUT VCC
    aclr clken clock data[23..0]
    ov erf low result[27..0]
    PIN_28
    incre[23..0]
    inst
    图 5 累加器模块电路图
    其中:CLOCK 为工作时钟 data[23..0]为累加器步进值输入端
    2.2 波形 RAM 表的设计
    利用 QuartusII 中的 MegaWizard Plug-In Manager 可以方便的生成大小任意大小和接口的 RAM, [8] 而关键是如何将波形表初始化到其中去.本设计采用的查表法所需函数表通过 Excel 的实现 . 首先建立数学函数模型,例如在一个周期内 ω t 的取值范围为 0~2π ,对应 y=f(x)形式,则
    0 ≤ x<2π ,即 y=sinx( 0 ≤ x<2π ).RAM 地址范围的大小取决于所要求的数据表精度,地址范围越
    大数据表越精确,但需要的存储空间越大.在 Excel 表格中可以用下拉单元格的方式迅速生成地址, 本设计中生成 256 个数据的数据表,地址范围 0 ~ 255,即波形表中每种波形每周期取 256 点.输入 公式"=sin((A1/256)*2*3.1415926)",再利用下拉单元格的方式,得到各个地址单元所对应得正弦 函数值.以上得到的正弦函数表往往不能被 D/A 转换器直接利用,需要将其置映射到 D/A 转换器所 能接受的数据空间内. 设计中所用 D/A 转换器为 8 位, 其数据空间是 0 ~ 255, 可以利用公式 "=127.5* (1+B1) "来映射数据,影射后的数据为小数,还须对其取整,输入公式 "=INT(C1), ".最后,为 使数据表能直接用于 Quartus II 程序中还须添加文本.添加语法文本可输入"=A1" "=&D1",
    在惊下拉单元格,得到完整的数据表.已生成的带有语法文本的函数表,经复制后可以直接粘贴到 用户程序中. 本设计中只需先建立波形表文件 wave1.mif,用记事本打开将 Excel 中数复制进去即可得波形表 如图 6.
    图 6 Quartus II 生成的波形表文件
    在原理图中双击 RAM 调入波形表文件即将波形表中数据写入 RAM 中.本设计中 RAM 设计为 2K, 即 2048 字节共存入波形 8 种,包括正弦波,方波,锯齿波,自定义波形三种和谐波一种.RAM 的低 8 位地址与累加器的输出的高 8 位数据相连,作为相位读取地址,RAM 表的高 3 位地址接波形选择模 块的输出,用来选择输出波形类型.实际应用中,用户可以将任意波形的数据表存入 RAM 表中,所 以本设计可以产生任意波形 .
    [2]
    2.3 调频模块(fm)的设计
    1)最高频率设定 根据 Nyquist 采样定理,每周期最少有两个采样点,便可以还原出数字信号的波形,所以最高
    fs 输出频率为 2 ,但实际中我们并不需要如此高的频率,并且随着采样点数的减少,对后面的抗混叠
    滤波提出了更高的要求,必然要增加模拟电路硬件成本 .实际中为保证每周期至少取到 64 个点, 将 最 高 频 率 设 为 500KHz , 这 样 , 当 输 出 500KHz 的 波 形 时 每 周 期 可 以 取 到 点 数 为 N= (1/ f o ) /(1/ f c ) =100,这样能保证输出波形能较容易从混叠波中滤出. 2)频率控制字的位数 由公式 Δf = f min = f c / 2 n 可计算出: Δf =50000000/ 2
    28
    [1]
    =0.18606Hz
    输出 500Hz 波形时频率控制 FSW 由下式得出:FSW= f o / Δf =2684355,
    FSW 〉 2 ,所以 FSW 至少取 22 位.实际中将 FSW 设为 24 位. 3)频率控制字(FSW)的输入 由于开发板上按键数量有限,在此选用分步进制调节的方法.最小步进制设为 100Hz,增加 1000Hz,10000Hz 和 100000Hz 三种步进制,由步进制设定按键循环控制当前步进制,并且通过单片 机即时显示当前的步进制.设定另外两个按键分别为频率控制字加和频率控制字减,用户可以方便 设定 100Hz~500KHz 之间任意频率. 4)调频模块的软件流程图
    21
    图 7 FM 模块的软件流程图
    5)频率控制模块电路图 VHDL 程序通过转换可自动生成模块电路块图 ,如下图所示:
    fm FRQ f clk f reselect outpulse f H_L incre[31..0] stepout[1..0]
    INPUT VCC INPUT VCC INPUT VCC STORE OUTPUT OUTPUT
    [6]
    FM_INT FM_ADDORSUB
    f reselect f add f sub STORE RELOAD
    PIN_138 f reqadd PIN_143 f reqsub PIN_144
    incre[31..0]
    PIN_128 PIN_118
    RELOAD
    OUTPUT
    stepout[1..0]
    inst9
    PIN_114 PIN_115
    图 8 频率控制模块
    其中:fselect 为步进制选择信号输入端 freadd 为步进制加输入端 fresub 为步进制减输入端 incre[31..0]为频率控制字输出,与累加器相连 FM_INT 为单片机频率显示中断信号
    FM_ADDORSUB 为显示加减控制信号
    2.4 调幅模块(AM)的设计
    1)调幅精度的设定 由于采用 8 位 DAC0832 来产生调幅电压, ΔV = Vmin =V/256,由于实际要求为 1%,即为 0.1V 精 度,故将 AM 步进制设为 0.1V. 2)幅度控制字的输入 同调频模块,采用幅度加减键来设定当前幅度值. 3)调幅模块电路图 同频率控制模块,生成的调幅模块电路如下图:
    PIN_45 PIN_43 PIN_41 PIN_38 PIN_20 PIN_18 PIN_16 PIN_14
    CLK AM_ADD OUT0832[7..0] ADDORSUB OUTPULSE
    OUTPUT OUTPUT OUTPUT
    AM FRQ
    INPUT VCC INPUT VCC
    OUTAM[7..0] AM_ADDORSUB AM_INT
    ADD STORE RELOAD SUBT STORE RELOAD inst6
    PIN_140 PIN_141
    AM_SUB
    PIN_117 PIN_127
    图 9 调幅模块电路图
    其中:AM_ADD 为幅度加信号输入端 AM_SUB 为幅度减信号输入端 OUTAM[7..0]为 DAC0832 数字量输出 AM_INT 为显示中断信号 AM_ADDORSUB 为单片机显示加减控制信号
    2.5 双路移相模块的设计
    双路移相输出是本设计的重点之一,采用 FPGA 设计 DDS 函数发生器可以方便的输出双路信号, 而不必增加硬件成本 . 设计中复制同样的波形 RAM 表,其查表地址通过相位加法器产生,即在第一路信号的波形表地 址的基础上加上相位增量,作为第二路信号的查表地址,由此实现移相输出.实现原理图如下:
    [9]
    图 10 双路输出示意图
    在硬件实现时由于开发板上无输入数字键,所以仍然采用设定相位步进制的方法来实现移相, 移相最大精度由波形表地址精度有关,其算法有下面公式给出:
    Δφ = 360°/2n
    当波形表地址为 8 位时,相位精度为 1.4 ° 如果增加波形表中每周期点数可以提高移相的精度,但 会增加硬件开销,在设计中可以根据需要来配置. 相位累加器 VHDL 语言实现如下: entity PHASE is --freuqency modulate PORT( PHRASE_UP:IN BIT; PHRASE_IN:IN STD_LOGIC_VECTOR(27 DOWNTO 0); PHRASE_OUT:OUT STD_LOGIC_VECTOR(27 DOWNTO 0) ); END PHASE; architecture PHR of PHASE is CONSTANT QUART:STD_LOGIC_VECTOR(27 DOWNTO 0):="0000001111111111111111111111"; SIGNAL X:STD_LOGIC_VECTOR(27 DOWNTO 0); BEGIN PROCESS(PHRASE_UP) BEGIN IF(PHRASE_UP'EVENT AND PHRASE_UP='1')THEN X<=X+QUART; END IF; END PROCESS; PHRASE_OUT<=X+PHRASE_IN; END PHR; 程序中相位步进值 QUART 可任意设定. 实现的电路符号如下图
    phrase phrase_up
    INPUT VCC
    phrase_out[27..0] PHRASE_UP PHRASE_IN[27..0] PHRASE_OUT[27..0]
    PIN_132
    result[27..0]
    inst3
    RAM2
    2 0 4 8 W o rd (s ) R AM
    data[7..0] w raddress[10..0] w ren
    ty pe[2..0],phrase_out[27..20]
    rdaddress[10..0] w rclock w rclocken rdclock rdclocken
    inst5 Block Ty pe: M4K
    q[7..0]
    OUTPUT
    out2[7..0]
    clock
    PIN_177 PIN_175 PIN_173 PIN_169 PIN_167 PIN_165 PIN_163 PIN_161
    图 11 移相输出模块电路
    (注:PHRASE_UP 为相位增量输入引脚,RAM 高三位地址为波形选择输入信号)
    2.6 脉宽调制波(PWM)模块设计
    脉冲宽度调制 (PWM) 是一种对模拟信号电平进行数字编码的方法. 通过高分辨率计数器的使用, 方波的占空比被调制用来对一个具体模拟信号的电平进行编码.PWM 信号仍然是数字的,因为在给 定的任何时刻, 满幅值的直流供电要么完全有(ON), 要么完全无(OFF). 电压或电流源是以一种通(ON) 或断(OFF)的重复脉冲序列被加到模拟负载上去的.通的时候即是直流供电被加到负载上的时候,断 的时候即是供电被断开的时候.PWM 广泛应用于电机调速系统,PWM 占空比的变化直接改变电机上的 电压有效幅值,可以精确实现电机的调速运行.现代开关电源大部分也是基于 PWM 原理的. 设计中直接利用累加器的输出量作为计数值来进行占空比调整,当累加器的结果小于某一预设 值时,设定输出为高,当超过该数值时输出为低
    [10]
    .如下图所示:
    图 12 PWM 产生原理示意图
    如图所示 PWM 的占空比可以任意调整,其调整精度与累加器最步进制相同,即 1/ 2 28 . PWM 实现代码如下: entity PWM is --freuqency modulate port(FRE_IN :in std_logic_vector(27 downto 0); PWM_OUT:OUT BIT_vector(7 downto 0);--OUTPUT PWM PWM_ADD :in BIT;--THE BOTTOM ADD WIDTH PWM_ALT:IN BIT;--ALT BETWEEN PWM OUTPUT AND NORMAL OUTPUT NORMAL_IN:IN BIT_vector(7 downto 0) ); end PWM; architecture f of PWM is SIGNAL COMP:STD_LOGIC_VECTOR(27 DOWNTO 0):=0001111111111111111111111111; SIGNAL X:BIT_VECTOR(7 DOWNTO 0):="00000000"; SIGNAL Y:BIT_VECTOR(7 DOWNTO 0); BEGIN PROCESS(PWM_ADD) BEGIN IF(PWM_ADD'EVENT AND PWM_ADD='1')THEN COMP<=COMP+"0001111111111111111111111111"; END IF; END PROCESS; PROCESS(FRE_IN,COMP) BEGIN IF(FRE_IN 2.7 其他模块设计及 FPGA 总电路原理图
    另外,系统还设计了波形存储功能和扫频输出功能.波形存取模块利用按键实现当前波形的保 存和取出,每当按下存储按钮系统将当前波形的频率,类型,幅度信息保存,每当按下取出按钮时 系统恢复存储的波形的频率,类型,幅度.能否实现掉电保存完全取决与波形信息的存储介质能否 实现掉电保存,若采用 EEPROM 作为存储介质可以方便的实现该功能;扫频控制模块集成在频率控制 模块中,当相应按键按下出发扫频指令,频率控制字按照预设速度进行递增,实现 100Hz-500KHz 的 扫频输出.以上功能全部在 QuartusII 中由 VHDL 语言实现. 至此,所有模块均已设计完毕,FPGA 核心原理图见图 13.
    图 13 FPGA 核心原理图
    2.8 FPGA 仿真
    Quartus II 的仿真包括功能仿真和时序仿真,在功能仿真中我们可以看出所写软件功能实现是 否正确.部分时序仿真输出如下:
    图 14 双路输出 Δφ =0 °
    图 15 双路输出 Δφ =180 °
    时序仿真结果显示输出结果均正确,但在读波形表时产生了相位截断误差,有待于后面的滤波 电路来消除. FPGA 编译报告显示其内部逻辑单元利用率为 11%,引脚使用 31%,存储单元使用 36%,说明器件 选型正确,并留有一定空间继续完善开发其他功能.
    2.9 FPGA外部电路设计
    系统中采用 ATMEL 公司的 Mega64 单片机,实时采集 FPGA 中频率相位等信息,并驱动 128× 64 液晶显示器显示出来.键盘接上拉电阻与 FPGA 直接相连,实现频率的改变和相位调整等功能. FPGA 输出的数字量化波形用 DAC0800 进行 D/A 数模转换电路是沟通模拟电路与数字电路的桥梁, 转换, DAC0832 则为 DAC0800 提供可控基准电压以实现信号幅度的精确数字控制, 控制字由 FPGA
    内部自行开发的幅度调整模块提供.DAC0800 输出的信号经 I/V 转换后接低通滤波器最后输出.该 系统采用巴特沃滋二阶有源低通滤波器,效果理想.外部电路具体设计在此不再赘述,给出 D/A 转 换及滤波电路如图 4:
    图 16 D/A 转换及滤波电路图
    3.结束语
    本系统最终实现主要参数和功能如下: 输出波形类型:正弦波,方波,三角波及波形表中的任意波形 频率范围:100Hz-500KHz 误差:±0.1% 电压范围:0-10V 误差:±1 % 输出阻抗:100Ω 相位调整范围:0 ° -180 ° ,精度 1.4 ° 具有波形存储和扫频输出功能,扫频范围 100Hz-500KHz,扫频速度由程序设定. 占空比可调方波输出,占空比 0%-100%可调,调整精度由程序确定,最高可达 1/ 2 28 本系统是基于 Altera 公司 FPGA 的 DDS 的任意信号发生器.在完成硬件设计 的基础上,通过设计控制程序可实现频率 可控,幅度可调的正弦波,方波和三角波 以及自定义波的输出.通过示波器观察, 可以看到清晰的输出波形.通过改变频率 控制字输入,可得到不同频率的稳定信 号.本设计充分利用了 FPGA 强大的硬件 功能, 将系统的数字电路一并集成在 FPGA 中,简化了电路的规模,提高了它的集成 性 ,保证了稳定性.数字电路路的设
    图 17 系统实际输出
    计主要是用 QuartusⅡ软件实现,其多元而灵活的 VHDL 语言输入方式和完善的仿真功能简化了硬件 的开发,缩短了开发周期.将 DDS 技术与 FPGA 相结合,实现了各种波形的生成,并且其生成的波形具 有波形平滑,无毛刺,波形稳定度高,频率稳定度和分辨率高,相位可移等优点;并且改变存储器波 形数据即可改变输出波形,这在实际应用中将十分方便.图 16 为本系统实际输出的正交信号.图 17 为输出用户自定义的任意波形.对于涡流传感器来讲,本设计基本达到所需全部要求,为涡流传感 器的后续项目研究打下一定的基础.
    图 18 用户自定义波形
    参考文献: [1] 稻叶 保(日).震荡电路的设计与应用.北京:科学出版社,2004 [2] 徐金龙,刘宇红,刘桥.基于 DDS 原理的任意波形信号发生器的设计.2006 [3] 宋磊.泰克信号源基础.泰克分销业务部,2005 [4] 刘家伟.无损检测手册.北京:机械工业出版社,2002 [5] 刘皖,何道君等.FPGA 设计与应用.北京:清华大学出版社,2006 [6] 李国丽,朱维勇.EDA 数字系统设计.北京:机械工业出版社,2005 [7] 周俊峰,陈涛.基于 FPGA 的直接数字频率合成器的设计与实现.北京:电子技术应用,2001. [8] 王松武,赵旦峰.常用电路模块分析与设计指导 .北京:清华大学出版社,2007 [9] 庞键涛.基于 DDS 技术高精度移相器的实现.西安电子工程研究所,2000 [10] 陈冬云 杜敬仓等.ATmega 128d 单片机原理与开发指导.北京:机械工业出版社,2006
    原创性声明:
    本人郑重声明,本论文《基于 FPGA 的双路可移相任意波形发生器》是我们作者三人在武汉理 工大学研究学习期间所取得的原创成果,论文中除注明的部分外不包含他人已发表或撰写过的研究 成果. 作者签字:李航,曲永志,雷霆 2008 年 8 月 11 日
    通讯地址:武汉理工大学马房山校区 90501 信箱 单 位:武汉理工大学自动化学院 电 话:13476039105
    邮政编码:430070 E-mail:lihang8741@163.com
  • 下载地址 (推荐使用迅雷下载地址,速度快,支持断点续传)
  • 免费下载 PDF格式下载
  • 您可能感兴趣的
  • 51单片机花样流水灯  花样流水灯的流程图  心形花样流水灯程序  花样全彩拖尾流水灯  爱心花样流水灯  fpga点亮灯  基于fpga的交通灯设计  51单片机流水灯电路图  简单心形流水灯电路图