摘要:介绍一种扫频仪——兼有任意波形发生器和数字存储示波功能的虚拟仪器。可网时显示幅频特性、相频特性,还可显示采集的波形。在设计技术上,采用FPGA、EDA技术和VC++6.0Windows编程技术。
关键词:完EDA ISP FPGA VHDL VC++ DLL
随着计算机技术、电子设计自动化(EDA)技术和在系统可编程技术(ISP)的广泛应用,使得虚拟仪器的设计列为灵活、测试更为方便,从而使虚拟世界更为丰富多彩。
虚拟仪器的设计包括硬件和软件部分。本系统的框图如图1所示。
1 系统硬件
由图1可看出硬件部分主要包括:EPP口、DDS(直接数字频率合成)、信号调理、鉴相及数据采集等模块。
1.1 EPP口
因为EPP(增强型并行端口)比SPP(标准并行接口)传输速率高,最高可达2Mbytes/s,所以本项目选用它以提高系统速率。实现时,用VHDL编写简单的接口译码电路。
1.2 DDS
本系统利用DDS技术合成精度高、频率稳定度好和控制方便的优点来产生扫频信号。其基本原理如图2所示。
设相位累加器的位数为n,累加器的输入控制字为F_word,系统时钟频率为Fclk,则输出信号S_out的频率Fout为:
Fout=(Fclk×F_word)/2 n
因此,通过计算机给DDS的累加器发同的频率控制字就可得到不同的频率。该频率的精度主要由相位累加器的位数n决定(注:Fout与波形存贮器RAM的深度没有关系,存储器容量只改变一个周期内的数据点数,因而地址宽度m只影响波形的精度)。本系统取n=32,m=15。所以,频率分辨率为Fclk/2 32,一个周期内最多有2 15个数据点。下面给出相位累加器的VHDL源程序:
ENTITY dds_adder IS
PORT(
clr :in std_logic;
clk :in std_logic;
f_word :in std_logic_vector(31 downto 0);
addr_end :in std_logic_vector(31 downto 0);
address :out std_logic_vector(14 downto 0);
);
END dds_adder;
ARCHITECTURE behav OF dds_adder IS
SIGNAL mid_address:std_logic_vector(31 downto 0);
BEGIN
PROCESS (clk,clr,f_word,addr_end)
BEGIN
IF(clr='0') THEN
IF(mid_address=addr_end)
--CHECK ONE CIRCLE'S END
THEN
mid_address<="0000000000 00000000";
ELSE mid_address<=mid_address + f_word;
--PHASE ADDER
END IF;
END IF;
END PROCESS;
Address<=mid_address(31 downto 17);
--OUTPUT 15 HIGH BITS
BND behav;
由程序可看出f_word为频率控制字,addr_end为一个周期的结束地址,这两个输入都是32位的,而输入address为位累加器的中间信号mid_address的高15位。Address直接寻址波形存储器。
1.3 鉴相部分
鉴相部分原理如图3所示。扫频信号S1和S1经过被测网络的输出信号S2,首先分别经过比较器形成占空比相同的方波I1和I2。接着以I1为参考,两者通过数字鉴相器,得到高电平宽度受S1和S2相位差调制的方波P0。图3(b)和图3(c)分别给出了I2滞后I1和I2超前I1的两种情况。
最后通过积分电路得到平均电平Peven,送到A/D转换器进行转换。这里用R-S触发器来进行数字鉴相,鉴相范围-π~π。
1.4 数据采集
通过A/D转换电路,先后把S2经过调理的信号波形和载有相位差信息的直流平均电平采集下来,存入RAM中,最后计算机统一读取。这部分中,关键是采集RAM地址发生器的设计。采集RAM地址发生器的VHDL源程序如下:
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNEC.ALL;
ENTITY c_15 IS
PORT (
clk :in std_logic;
en :in std_logic;
clr :in std_logic;
co :out std_locig;
addr :out integer range 0 to 32767
);
END c_15;
ARCHITECTURE behav OF c_15 IS
SIGNAL mid: integer range 0 to 32767;
BEGIN
PROCESS(clk)
BEGIN
IF(clr='0')THEN
mid<=0;
co<='0';
ELSE
IF(clk'event and clk='1') THEN
IF (en='1') THEN
mid<=mid+1;
ELSE null;
END IF;
IF(mid=32767) THEN
co<='1';
ELSE co<='0';
END IF;
END IF;
END IF;
END PROCESS;
Addr<=mid;
END behav;
计算机读采集RAM地址发生器基本和上面一样,只不过时钟clk由EPP口通信信号译码得到(采集地址发生器的时钟clk用的是A/D转换器的时钟)。另外,采集地址发生器不用co信号(地址写满标志信号,由计算机读取判断。若为高电平,则采集RAM已写满,计算机可以读取数据)。
1.5 信号调理
信号调理部分主要是对模拟信号进行滤波、隔离、推动,调节信号的直流偏移及信号的程控衰减和放大。
系统硬件的数字部分用一片Altera公司的FPGA芯片Flex10K10,运用FPGA的现场可重构技术,使虚拟仪器的智能化和自动化得以实现。其开发平台为Altera公司的Muxplus Ⅱ。各模块的设计主要用VHDL硬件硬件语言来编写,使得设计更为灵活、方便,尤其在控制逻辑的实现方面更显示其优点。
2 系统软件
Microsoft公司的VC++ 6.0有MFC(Microsoft Foundation Classes)支持,因此可实现强大功能,编程效率高,运行速度快。本项目利用上述优点,运用DLL(动态链接库)技术进行编程。软件框图如图4所示。软件主要分为控制、数据处理、图形显示三大模块。
2.1 控制模块
控制主要是设置DDS的频率控制字,波形RAM数据的写入,采集数据的读取以及控制硬件部分的通路选择,设置信号调理的衰减和放大器。
2.2 数据处理模块
要得到网络的频率特性,就要处理采集过来的波形数据(采集过来的数据包括经过被测网络的波形数据和相位差平均电平的相位数据)。这里利用软件的“起泡算法”来得到波形峰值,计算衰减量和放大量,得到网络的幅度频率特性。相位频率特性直接由相位数据得到。
2.3 图形显示模块
调用MFC的CpaintDC类现图函数进行现图。CpaintDC类中有丰富的画图函数,包括画线(可选择线的形式、颜色)、画点等基本函数。本项目中主要由三个图形显示模块:波形显示、振幅频率特性曲线显示(线性、对数坐标)、相位频率特性曲线显示(线性、对数坐标)。
软件设计中,采集数据的处理、外部FPGA的配置和三个显示模块分别做成了DLL(动态链接库)函数,被主执行程序动态调用。
通过以上分析可知,系统中有信号产生通道和数据采集通道。对滤形存储器RAM写入不同的波形,可产生任意波形。另外,还可采集外部波形,加入测频和触发模块,具有示波器的完整功能。所以该仪器兼有多种功能,可和为扫频仪、信号源及数字存储示波器。其设计思想新颖,手段先进,性价比较高,充分体现了虚拟世界的无穷魅力。
上一篇:FPGA构建高性能DSP
下一篇:HDTV接收机吕Viterbi译码器的FPGA实现
- 热门资源推荐
- 热门放大器推荐