"); //-->
第四部分是均方根有效值计量和FFT谐波分析模块。输入的数据经过处理后,首先进行均方根有效值的计
算。给定abcv,先求出datamd(abcv)(j)(j=0,…,15)这16个点的平方和,将其存储到datarsult(abcv)
中。为了防止溢出,dataresult(abcv)定义28位的位矢量。然后把dataresult(abcv)中的数据进行平方
的运算,结果存储在douts(i)中。开平方是利用函数sqt(a:std_logic_vector;b:integer)return
std_logic_vector来实现的。a为要开方的全矢量数据;整数b用来定义输出位矢量的长度。该函数被封
装成一个包(package),符合自顶向下(TopDown)的HDL语言设计思想。douts(i)是信号量,由赋值语
句douts(i)<=sqt(dataresult (i);16)(i=0,…,15)可以分别求出12路信号的有效值。电压有效值
和谐波分析完成以后,清ADFLAG为0。
第五部分为输出缓冲器单元。当DSP对FPGA产生读时序(FPGACS为低电平且RD下降沿来到时),FPGA根据
DSP的低五位地址线A0~A4的值(对应于FPGA的chansel:std_logic_vector(4 downto 0)信号量),以及
ADOR寄存器中的值,将相应的数据送到数据总线上。比如,若chansel为(00010)2,ADOR中的值为
FFFFH,那么,FPGA就会将通道2的有效值douts(2送到数据总线上。
图3 FPGA的A/D控制信号时序图
3 对数字量的控制与管理
在图2系统中,假定要对16个负载进行管理,每个负载包括1个控制输出量和2个状态返回量,因此共有16
路的数字量输出,32路的数字量输入。
FPGA对数字量的管理软件结构:
FPGA对数字量的控制管理也设置了三个16位的指令寄存器组。这三个指令寄存器的内部地址为03H、04H
和05H.03H为开关量输出允许寄存器(KGER);04H为跳闸闭合寄存器(KGCR);05H为开关量开闭寄存器
(KGIR)。
来自负载的总共32个状态反馈信号(DIN00、DIN01……DIN31)分成16组,分别接到FPGA的16个信号量
dini上(i=1,2,…,15)。dini是长度为2的位矢量std_logic_vector(1 downto 0),分别对应于1个负
载的两个状态反馈位。FPGA用16个进程process(din1)、process(din1)……process(din15)来对输入数
字量敏感。当dini的载位电平发生变化时,进程启动,FPGA结合MCU发送的控制指令,判断负载的状态,
并记录在输出数据缓冲区中。输出数据缓冲区包括16个数据存储器,这16个数据存储器在FPGA内部的地址
从(10000)2到(11111)2。(100000)2单元存储的是第1个负载的状态,以此类推,(10000)2单元
存储的是第16个负载的状态。每个16位数据存储器的8位固定为5AH,接下来的5位为(00000)2,只有最
后3位才是负载的状态位。
当MCU读FPGA时,process(rd)进程启动。这时,如果MCU地址线A4的电平(对应于FPGA的
chansel:std_logic_vector(4 downto 0)信号量的第四位)为“1”,FPGA就根据chanse1(3 downto 0)
的值,将对应的数据存储器的值发送到数据总线上。MCU读回数据存储器的值后,如果前13位不是
(0101101000000)2,说明产生了读错误,MCU重新再读一次。必须指出,在FPGA控制A/D采样时,读哪
个通道信息也是通过A0~A3地址线区分的,但是,A4的电平为低。
MCU根据系统处于不同的状态给负载发送接通/断开指令,这是通过写FPGA的寄存器KGIR实现的。KGIR的
16位依次代表16个负载,“1”为接通,“0”为断开,复位值是0000H.寄存器KGER是数字量输出的总开
关,复位后为0000H,不允许数字量输出;MCU对其写入FFFFH后,允许数字量输出。FPGA给负载发去接通
/断开指令后,负载将会有两个状态信号返回。FPGA结合寄存器KGIR的控制指令值,可以判定负载处于何
种状态之一。如果反馈的信息为跳闸,FPGA将根据寄存器KGCR的值作出相应的处理。如果为其它信息,
FPGA将不做处理,只是将状态信息存储在数据缓冲区中等待发送给权限高的MCU来决定。KGCR的复全值是
0001H,表示跳闸发生后,FPGA将自动再发一次接通指令。程序运行的过程中,MCU根据任务的紧急和系
统的布局,可以修改KGCR的值。如果KGCR的值为0003H,表示第一次跳闸发生后,FPGA可以重复发三次接
通指令。
因为FPGA是基于RAM工艺的,在掉电后本身不能保存信息,因此需要一个外置存储芯片来保存其信息,这
里采用一次可编程的PROM:XC17S100APD8I(OTP)。该PROM与Spartan-II芯片的接口只需要一个I/O;复
位引脚的极性可编程(高有效或低有效);供电电压为3.3V。
XC17S100A的DONE、INIT、CCLK信号来自FPGA芯片XC2S100。系统刚一上电,FPGA首先初始化,置INIT、
DONE为低。INIT为低后复位PROM,此时由于PROM的CE为低,因此PROM被选中,从而将数据流从DATA脚输
入到FPGA的DIN脚。配置完成后,FPGA将DONE接高,PROM处于低功耗的待机模式,并将DATA脚置为高阻态
。
在硬件调试和在线修改过程中,选用FPGA的CCLK、DONE、DIN、PROG引脚用做硬件调试编程。将下载电缆
接在计算机并口上,选择恰当的下载方式就会将Xilinx开发软件生成的位流文件下载到FPGA的内部配置
存储器中。配置下载流程可以分为3个阶段:初始化、清除配置内存、下载数据。清除内存在所有配置模
式中都是一样的,下载数据却随着配置方式的不同而不同。
实际应用中,一般都需要将数据流文件烧入到Xilinx PROM中,每次上电伊始,由PROM将数据流下载到
FPGA中,下载完毕,FPGA开始工作。
4 结论
针对监测系统监测信号一般较多的特点,本文提出了一种基于FPGA技术的多路模拟量、数字量采集与处
理系统,设计了相应的外围硬件电路和系统处理软件。在仿真和综合调试成功的基础上,本系统成功用
于某航空重点预研项目的电气负载管理系统试验中。试验结果表明,本系统成功地完成了对多路模拟量
、数字量的采集处理任务,因此,在电气测控系统中有较好的应用前景。
*博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。