基于FPGA的多路模拟量、数字量采集与处理系统
第一部分为设定的3个与A/D采样有关的16位指令寄存器组:A/D参数寄存器(ADPR)、输出控制寄存器(ADOR)、A/D控制寄存器(ADCR)。
ADPR(XXXXXXXXX XXXXX XX)的各位定义如下:位1、位0选择每周波采样的点数(00表示每周波采16个点,01表示每周波采32个点,10表示每周波采64个点,11表示每周波采128个点)。位6~位2用来表示FPGA的时钟频率,00001表示时钟频率为1MHz,11111表示时钟频率为31MHz,00000表示时钟频率为32MHz。位15~位7表示所采样信号的频率,这9位表示的范围为1Hz~512Hz。
ADOR是与FPGA输出有关的寄存器。该寄存器的作用是:当MCU要读取某通道信号的信息时,FPGA应该输出该信号的哪次谐波电压。如为FFFFH,表示DSP读到的是该通道信号的有效值;如果ADOR的值为0010H,那么,DSP读到的是该通道信号的2次谐波电压。
ADCR寄存器控制A/D采样的通道数的选择以及与A/D采样有关的寄存器的复位控制等,这也是考虑到系统的通用性而设计的:如000C表示采样第11路交流模拟量电压;0011则表示同时采样前六路信号等等。
第二部分为设计产生A/D与CD4051芯片的控制信号。如在图2中,在采样12路交流模拟量的情况下,FPGA需要产生7路控制信号,这7路控制信号应该满足一定的时序要求。图3给出了同时采样前六路信号时FPGA的控制信号时序。
Abcs2[0,1,2]总线信号实际上是多路开关通道选择的3个控制信号selA、selB、selC。需要说明的是,因为要进行修正,在对6路交流信号采样的同时,也对4051的+5V和AGND进行了采样,所以实际上测量的通道数为8路。
从图3可看出,abcs2[0,1,2]总线信号每19.531 25μs加1,每156.25μs重新循环一次,满足8路交流同步采样的要求。
从25μs时刻的局部放大图可以看出,当(23.6μs时刻)4051选择通道1时,ADS774的CS和R/C信号同时为低,延时0.5μs左右CE端出现上升沿(24.1μs),启动A/D转换,这符合ADS774的A/D转换时序。需要指出,如果CE端直接接高电平,那么,R/C的下降沿将直接启动A/D转换。之所以用两个信号来启动A/D转换,是为了减少A/D的误触发。考虑到4051的导通延时,所以在通道切换0,5μs后才启动A/D转换。图3中没有画出4051的INH信号,在采样前6路交流信号时,该信号一直为低。如果同时采样12路信号,那么,abcs2[0,1,2]总线信号每9.765 625μs加1,每78.125μs重新循环1次;INH信号每78.125μs电平变化1次,用来选择哪个4051导通。
第三部分为A/D输入数据缓冲区和数字滤波模块。A/D转换完成后,ADS774的引脚STS给FPGA输出转换完成信号(低电平)。FPGA接收这一信号后,将产生读ADS774的时序,把12位的A/D转换数据读入到数据缓冲区的二维数组datain(abcv)(sampn)中。Abcv为通道号,sampn表示周波信号中所采样的第几个点。将一个周期的12路信号采样完后,置标志ADFLAG为1,进行数据的滤波处理。首先,对datain(abcv)(sampn)的值进行修正;给定sampn,对前6路信号来说,datain(7)(sampn)存储的是AGND的A/D转换值,将datain(i)(sampn)减去datain(7)(sampn)的值存储在datamid(i)(sampn)中(i=1,…,6)。与此类似,后六路的采样值datain(i)(sampn)减去datain(15)(sampn)的值存储在datamid(i)(sampn)(i=8,…,14)。然后,给定abcv,对datamid(abcv)(j)(j=0,…,15)这16个点的数据进行FIR滤波,将FIR滤波后的数据存储在datamd(abcv)(sampn)数组中。
第四部分是均方根有效值计量和FFT谐波分析模块。输入的数据经过处理后,首先进行均方根有效值的计算。给定abcv,先求出datamd(abcv)(j)(j=0,…,15)这16个点的平方和,将其
《基于FPGA的多路模拟量、数字量采集与处理系统(第2页)》