导航: 老古网老古论坛XMOS公共讨论区XMOS开源项目区单片机程序设计嵌入式系统广告区域
→交流模拟量采集的控制与管理

* 60249: 交流模拟量采集的控制与管理

   sz20120406 
sz20120406发表的帖子 

 交流模拟量采集的控制与管理
交流模拟量采集的控制与管理
在交流模拟量采集外围电路中,A/D芯片采用的是BB公司的ADS774。多路交流量是通过4051的多路开关后输入到ADS774芯片的。交流信号在进入ADS774之前要经过信号调量电路,调理成ADS774认可的模拟信号。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路。abcs2[0,1,2]总线信号每19.531 25μs加1,每156.25μs重新循环一次,满足8路交流同步采样的要求。
当(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个点的平方和,将其存储到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送到数据总线上。
(本文由Cogo商城-IC元器件在线采购平台搜集整理,
浏览了解更多详细信息)


发表时间:2012年4月17日19:13:06

  
回复该帖

本主题共有 1 帖,分页:>>>>>该主题的所有内容[1]条

 *树形目录 只列出部分跟帖的标题以及简单的摘要信息 该主题的部分跟帖如下:

[上一篇帖子]:谐波测量的主要方式谐波测量的主要方式 谐波测量是谐波问题的一个重要分支,它是谐波问题研究的主
[下一篇帖子]:基于多种EDA工具的FPGA设计基于多种EDA工具的FPGA设计 仿真工具Modelsim与