引言
数据采集模块是自动测试系统中的主要功能模块之一,在光谱分析、医疗成像等领域,通常需要组建多时基、多通道虚拟仪器系统,有些领域要求输入信号频率并不高,从几赫兹到几百赫兹。对于不同频率范围的信号,通常要求的采样率也不同。有时为了配合信号处理算法,甚至要求采样率可以在一定范围内随意设定。这些应用通常要求多个通道循环扫描采集,甚至是差分单端方式可选择的输入,对于不同的应用还要求增益的可变性。针对这些要求,本文介绍了一种三十二通道扫描数据采集模块的设计方案。该方案最高采样率为200KSa/s,存储深度IM×16bit ,垂直分辨率16bit,增益可编程为1、2、5、10、100五个等级的PCI数据采集模块的设计与实现。
总体设计方案的确定
根据上述系统的技术指标,本设计硬件电路主要包括信号调理电路、信号输入方式选择电路、程控增益电路、A/D转换、数据存储、触发控制以及PCI接口几个部分。三十二个通道的模拟信号经过信号调理电路使信号的带宽、峰值和偏置电压等达到ADC的输入信号要求后,经过单端变差分的转换(前端也可以是直接输入的三十二路差分信号),通过多路开关选择输入的多种方式,再通过两级可编程增益仪用放大器进行增益的控制,然后进入ADC把模拟信号转换成相应的数字信号。逻辑控制单元在接收到采集命令后,根据相应的触发方式启动ADC进行采样,采样得到的数据通过FPGA内部FIFO直接发送到上位机处理或者存储到高速的静态RAM中以便历史显示。三十二个通道共享RAM最大的采样速率是200KSa/s,那么连续采样存储时间最大可以达到4s。上位机通过32位的数据总线,采用查询、中断或者DMA方式将采集的数据读取到内存中进行后期的数据处理和分析。基本结构如图1所示。
本设计信号调理电路包括输入方式选择电路和增益选择电路。将经过前端模块调理电路变成的三十二路差分信号(或者直接从接口输入的三十二路差分信号)通过低导通阻抗、低泄漏电流、带过压保护的多路模拟开关切换成一路差分通道,再通过普通运放构成的电压跟随器进行阻抗变换,避免后级的多路开关的导通阻抗影响前级电路。多路开关选择DG408,它是八选一多路开关,具有较低的导通阻抗和低功耗、低泄漏电流。通过八个DG408把三十二通道的差分输入变换成四通道的差分输入,再通过一个DG409(4路差分开关),将输入信号变成一路差分输入,然后再经过一个DG409选择信号的输入方式,通过这样的电路能实现四种输入方式:零输入、单端正极输入、单端负极输入和差分输入,电路如图2所示。
选择一种输入方式后,经过两级可编程增益仪表放大器AD8250,可以实现增益值可选1、2、5、10、100五个等级。AD8250具有较宽工作电压范围,可以工作在±5V~±15V;输入阻抗可以达到G?级别,有效防止了消耗的衰减;单个AD8250有1、2、5、10四个增益选择,在G=10的时候仍具有最小98dB的高共模抑制比和低增益漂移。AD8250有两个增益控制端A0、A1,通过写这两个位选择增益值,通过WR可以锁存状态值,从而稳定保持在该增益值上。本设计通过在FPGA内部内嵌32bit NIOSII软核处理器,NIOSII通过SPI总线传送数据给CPLD然后控制选择信号的输入方式和写AD8250增益控制位。增益选择电路如图3所示。
A/D转换器是数据采集系统的核心,对A/D器件的选择往往影响到整个系统的性能指标,甚至可能需要重新设计电路。为了实现三十二通道扫描采样,本设计采用多路提取技术,把三十二路差分输入信号经过两级多路开关提取出一路差分信号,再通过增益变换电路将差分信号变成单端模拟信号输入到ADC中进行采样,通过FPGA控制CPLD定时扫描的方式实现三十二通道轮流采样。本设计选择的A/D转换器是ADI公司的AD7612,它具有-路双极性的高阻抗输入,采样速率为750KSa/s,具有可选择的并行或者串行的输出接口,容易与其他器件连接。AD7612内部集成了采样的时钟电路,具有可选择的内部2.5V参考电压或者外部用户自己提供的参考。AD7612有四个差分输入范围和三个差分输入模式,不同的模式对应不同的特点。Warp模式具有最快的吞吐率,正常模式具有最快的异步吞吐率,脉冲模式可以实现吞吐率和功耗的线性映射。根据技术要求本设计选用正常模式,采用并行16位数据的输出方式和FPGA直接接口。根据AD7656的内部时序将采集的数据并行输出到数据缓冲池和SRAM中。
本设计数字控制部分由FPGA和外扩的CPLD共同合作完成。FPGA内部嵌入一个NIOSII软核,负责数据采集、数据传输和输入方式以及增益的选择控制。下面详细分析这三个数字控制电路的实现方法。 信号输入方式和增益选择控制逻辑的实现
FPGA和CPLD之间通过SPI同步串行总线通信。通过在FPGA内部构建一个5bit地址总线,5bit数据线的RAM块用来存储三十二个通道码。再构建一个8bit地址线,8bit数据线的RAM块用来存储信号的输入方式和增益值。8bit数据的前两位是输入方式的选择码,后六位是增益选择码。在送通道码之前只送一次输入方式和增益值码,直到下一次需要改变的时候再送。在CPLD中构建一个二选一的开关和64bit的串并转换把通道码或者输入方式选择码和增益选择码送到相应的引脚。从而实现信号顺序扫描和点名扫描以及相应的输入方式和增益选择控制逻辑的实现。 数据采集和传输控制逻辑的实现
为了便于控制,本设计在FPGA内部嵌入一个NIOSII软核处理器,NIOSII处理器通过 Avalon总线与外设通信,根据设计的要求,在NIOSII处理器中定制带中断的定时器、DMA控制器、SPI控制器和PIO控制器。由于设计要求最高采样率是200KSa/s,而AD7612从启动采样到得到稳定的数据时间是1.5μs ,所以通过设定定时器最短的时间5μs(<200KSa/s任意设定,可以通过实时设置定时器的值来完成)来实现。每隔5μs,定时器计数到0,产生一次IRQ中断,在中断服务程序中执行如下操作: 读取ADC采集的结果;
是否需要改变输入方式和增益,如果需要,送下一个值;
送下一个通道码;
判断ADC缓冲池( 30K×16bit FIFO)是否已满,如果满则把读取的数据扔掉,否则把数据送到FIFO中;
在送数据到FIFO的同时,也需要复制数据到RAM中。RAM数据的存储需要在FPGA中设计一个20bit的向上增加的地址计数器来制定数据的存储位置,也要设计一个数据比较器,当计数器计满时,跟数据比较器预设的值相等,产生一个电平,将RAM的数据通道断开,同时告诉NIOSII启动DMA控制器,在PCI9054的本地总线和RAM之间建立一个DMA通道,把数据取走。图4是系统控制流程图。
本设计采用PCI总线作为数据总线连接采集模块和上位机进行通信,用以实现数据的分析处理和历史显示等功能。
由于本文设计的采集模块需要工作在连续采集的系统中,所以当存储器存满之后,需要快速地输出通道并将数据通过PCI接口传输出去,本设计采用DMA的方式传输数据,这样做既可以不占用CPU资源,又能实现快速的数据传输。基于以上原因本设计选用PCI接口芯片PCI9054作为总线控制器和上位机通信。该芯片符合PCI2.2总线规范,支持低成本从属适配器,PCI时钟为0~33MHz,基本可达到60Mbyte/s的平均传输速率。
FPGA按照PCI9054的读写时序设计读写控制逻辑,接收上位机传来的命令,对电路进行相应的设置后,启动ADC采集数据,然后将采集的数据送到ADC缓冲FIFO中(或者控制将存储在RAM中的数据),当FIFO满后(或者RAM满后)通过相应的传输方式将数据发送到PCI9054的本地数据线上,并将地址译码作为局部器件的地址片选,从而实现对PCI总线的局部器件的访问。PCI9054从模式的局部总线包括局部时钟线LCLK,数据线LD[31..0],地址线LA[31..2],控制状态线ADS#,LBE[3..0]#,BLAST#,LW/R#,READY#和仲裁线LHOLD和LHOLDA。本设计使用了16位的本地数据总线和24位地址总线进行数据传送和地址译码控制。PCI9054 DMA方式工作时序图如图5所示。
通过详细分析各种数据指标,本文所设计的PCI数据采集模块,充分考虑设计中各种影响信号质量的因素,包括噪声的抑制和信号衰减等。合理的设计保证了PCB板设计方面的电磁兼容性和信号回路方面的要求,同时综合考虑各种方案,减小了PCB板的尺寸,减少了设计成本。通过FPGA内嵌NIOSII和扩展的CPLD可靠地实现了三十二个通道不同输入方式、增益改变、顺序扫描或者点名扫描的要求,通过定时中断实现最高实时采样率200KSa/s和低于200KSa/s时任意采样率的设置指标。通过选用高精度的ADC实现了设计对16bit分辨率的需求,合理的元件选择保证了检测信号的幅值范围为±100mV、±1V、±10V的各种量程需求。通过真实的硬件测试,各项指标均得到满足。本文设计的PCI扫描采集模块适用于最多三十二通道扫描采集的场合,同时根据设计思路可以扩展更多输入通道和更高采样速度和分辨率的采集模块。