基于FPGA的微应变数据采集系统的设计
扫描二维码
随时随地手机看文章
摘要:提出了一种利用ARM和FPGA架构实现对多通道微应变信号进行数据采集的系统设计方案。通过FPGA输出模拟量调节和内部数字量调节的方法,实现了对微应变传感器的零点校准。可以通过ARM修改FPGA中的各项采样参数,如采样率,采样通道数,起始通道等。详细介绍了FPGA内部的各功能模块。应用结果表明,系统运行稳定可靠,采集精度高,具有一定的实用性。
1 引言
数据采集系统是计算机测控系统中不可或缺的组成部分,是影响测控系统的精度等性能 指标的关键因素之一。随着新的器件不断推出,新的技术不断应用,数据采集技术及其相关 电路得到了迅速的发展。如何提供更高的采样速率,更高的精确度和更大的灵活性是当前数 据采集系统需要解决的问题。FPGA 的迅猛发展,使FPGA 器件性能得到了不断的提升,已 逐步取代单片机、DSP,在数据采集系统中的得到了广泛的应用[1 ~ 4]。
本系统采集的对象是微应变传感器,由于微应变传感器自身的制造误差、贴片产生的初 始应力、结构安装时产生的附加应力等,都会产生一个比较大的零点,可能超出A/D 芯片 的量程范围。若这个零点过大,会使得信号放大器、ADC 的输出出现饱和现象,使数据采 集无法正常进行。通常对零点的修正有硬件与软件两种方法。如果只用软件测量校正的办法 无法解决ADC 芯片的饱和问题,只用硬件解决的话需要的硬件成本较高。因此如何准确的 测量微应变信号的零点,是本系统需要解决的关键问题。
2 数据采集系统的设计方案
本文设计的数据采集系统可以实现数据的采集、处理和存储功能。整个系统主要由 Atmel 公司的AT91RM9200 微处理器芯片, Xilinx 公司的FPGA 芯片XC3S200AN, TI 公司的 ADC 芯片TLC2551、DAC 芯片TLV5* 及信号调理电路等外围电路组成。系统硬件简图 如图1 所示。ARM 输出控制信号,控制FPGA。当ARM 启动FPGA 开始数据采集后,FPGA 输出通道地址,经过32 路模拟通道多路开关,选择某一通道,FPGA 控制DAC 芯片输出模 拟量对这一通道的输入量进行粗调零。然后由FPGA 控制ADC 芯片进行模数转换。将转换 得到的12 位数字量串行输送给FPGA。在FPGA 内部将12 位数据由串行改为并行,进行细 调零等相应的数据处理,然后加上4 位标明通道的数据送入FIFO 中。当FIFO 达到半满时, ARM 将数据读出进行相应的处理,整个数据采集的过程完成。
3 FPGA 的功能模块
FPGA使用的是Xilinx 公司Spartan3AN 系列的XC3S200AN芯片,片内集成了4M Flash, 288K 的块状RAM,集成密度高,可以将程序直接下载在片内ROM 上,无需片外ROM, 节省电路板面积。FPGA 在整个系统中负责数字信号的采集控制、处理,控制信号和时序信 号的产生,数据的缓存和异步输出,在整个数据采集系统中起到至关重要的作用。根据FPGA 的功能,将其模块化为数据处理模块、时序控制模块,通道控制模块、A/D 和D/A 芯片控 制模块、异步FIFO 缓存模块、接口和总线模块,具体模块结构如图2 所示。
(1)接口总线模块
此模块负责 FPGA 和CPU 的通信以及内部各模块之间的通信。CPU 和FPGA 之间通过 16 位双向数据总线和地址线通信,CPU 向FPGA 输入读、写、复位、开始等控制信号。FPGA 内部各模块设计成可由CPU 读写的模块,直接与内部数据总线连接。这样ARM 可以通过 向各模块写入数值实时的改变采样的各参数,并通过读各模块的参数实时监控系统的运行状 态。由于内部各模块众多,CPU 与FPGA 之间信息交互频繁,为了简化时序控制,避免各 模块之间的竞争、冒险,在FPGA 内部将16 位双向数据总线独立为16 位读总线(Readbus) 和16 位写总线(Writebus)。当CPU 输入写信号有效时,FPGA 内部写总线从与ARM 通信 的双向数据线读数,将数据送给内部各模块;当输入读信号有效时,双向数据总线从内部读 总线读数,向外输出给CPU,当读信号无效时,内部读总线为高阻状态。内部各模块都将 可读的参数值输出到多选一数据选择器,读总线根据地址译码读出某个参数值送给双向数据 总线输出。
(2) 时序控制模块
此模块控制通道采样频率和内部的时序逻辑,有两个主要信号,扫描时钟(scan_clock) 和采样时钟(sample_clock),都是由FPGA 主时钟分频而得。scan_clock 为高电平时,对各 通道信号采样保持,ADC 准备转换。当sample_clock 上升沿到来时,ADC 开始转换某一通 道的信号,sample_clock 的下一上升沿到来时,ADC 转换下一个通道的信号。通过改写 scan_clock 和sample_clock 可以改变采样的频率。由于通道数也是可以修改的,当扫描时钟 和采样时钟未变,采样通道数由25 变为12 个时,scan_clock 高电平有效时间被浪费。为了 解决这个问题,在设定的通道数转换完成后,就将扫描时钟置为零,节省了时间。如图3 所示,当采样通道数设置为12 时,采样完第12 个通道后就将scan_clock 置为零。
(3) 通道控制模块
此模块控制通道间的转换,输出当前采样通道号。内部有通道计数器,计算当前的通道 号。为了减少每一通道所用时间,当A/D 还未结束时,就提前给通道计数器信号EOC 进行 通道转换,AD 转换和通道转换并行进行,当AD 转换完成时,通道控制模块也已准备好当 前通道号。通过写数据总线向此模块写通道控制字可以改变需要采样的通道个数,采样的起 始通道。
(4) 控制AD 和控制DA 模块
此模块控制 AD 和DA 芯片,产生使AD 和DA 芯片工作的控制信号和时序逻辑。由于 需要采样的通道数多,达25 个,为节省印制电路板面积和成本,采用单片AD 芯片加多路 模拟开关进行模拟数字量的转换。AD 芯片TLC2551,是TI(Texas Instrument)公司生产的 精度为12 位的,单通道采样、低功耗芯片。其工作时序如图4 所示。时钟信号SCLK、控 制信号CS 都由FPGA 产生,时钟主频为19.2M,采样一次需要44 个时钟周期[5]。
DA 芯片采用TI 公司生产的TLV5*,它是一个带参考电压源的8 位DAC,数字接口为SPI 接口。FPGA 控制DA 芯片,使DAC 的输出与ADC 输入模拟电压相加,抵消输入的 零点,产生0-4.096V 有效输出送到ADC 输入端进行转换。TLV5* 的工作时序如图5 所示。 时钟信号SCLK 和控制信号CS,信号FS 由FPGA 产生,每次转换需要16 个时钟周期。
(5) 数据处理模块
由ADC 芯片输出的12 位串行数据,经过此模块,转化为12 位并行数据,然后完成数 据的细调零。细调零也由FPGA 完成,在数据处理模块中有一片分布式可读写的RAM,里 面存储了由ARM写入的各通道的零点数据。在每个通道完成ADC 转换时,自动由零点RAM 中读出给定通道的零点数据,由FPGA 完成减法运算,完成细调零。
(6) 双端口异步FIFO 缓存模块
由于 ARM 和FIFO 的时钟不同,ARM 读速度远远大于FPGA 采集数据的速度,因此设 计用FIFO 在ARM 和FPGA 间的跨时钟域数据传输中起缓存的作用。模块由两个深度为8K, 宽度为16 位的异步双端口FIFO 组成,数据存储总量为256K。若用FPGA 内部逻辑资源实 现FIFO,所有逻辑资源将全被耗尽,因此用芯片内部自带的288K Block Ram 来实现。设计 中,采用19.2M 主时钟做FIFO 的时钟,且为上升沿有效。ARM 的读信号有时无法被时钟 上升沿捕捉到,就产生了数据传输不可靠的问题。为解决这个问题,采用握手协议将读信号 延长。输入到FIFO 端口的读信号一直到时钟上升沿有效,才置为低电平,具体如图6 所示。
需要采集的实际通道数为 25 个,需用5 位数据标明当前通道值,AD 转换的有效数据 为12 位,而数据线为16 位,只有四位数据可供通道地址使用。为了完整标示当前的通道值, 根据通道值最低位的奇偶性把数据分别储存在FIFO0 和FIFO1 中。这样CPU 从FIFO0 读出 的数据就是偶数通道的采样值,从FIFO1 读出的数据就是奇数通道的采样值。
4 ARM 程序的编写
编程软件环境为 CodeWarrior for ARM Developer Suite,编程语言为C 语言。ARM 程序 主要通过和FPGA 的通信,控制FPGA 进行数据采集,适时改变FPGA 的各参数,向FPGA RAM 中写入粗调零,细调零的数据,并从FPGA 读取采样完的数据进行相应的处理。
5 零点的校准
FPGA 有两片专门可读写分布式RAM,一片用来储存8 位粗调零的数据,一片储存12 位细调零的数据,各通道的通道号就是调零数据存储在RAM 中的地址。DAC 的数据在通 道转换时,根据当前通道值,从粗调零分布式RAM 中读出,写到DAC 寄存器中,由FPGA 控制DAC 芯片转化成模拟量输出到ADC 芯片的输入端,与输入电压相加实现粗调零。然 后在FPGA 内部把转化得到的12 位数据减去存储在RAM 中的细调零值,所得的数据才是 真正有效的数据。
为了确定某一路微应变信号的零点,ARM 首先在通道地址写入数值0x7F,使DAC 输 出其可输出电压的中间值,然后启动ADC 芯片开始转换。此时的ADC 芯片工作在数据直 通模式,转换得到的12 位数据不经过数据处理和FIFO,直接由数据总线传送给ARM。ARM 根据读得的转换值,若发现依然是过饱和状态,则加大写入粗调零存储器的数值,直到读得 的ADC 数据为正常数值。DAC 模拟量输出值加ADC 测得的模拟量输入值既是此通道的零 点值。零点确定后,通过FPGA 输出模拟量和FPGA 内部数字量调节的方式,实现了8 位 DAC 芯片对12 位ADC 芯片零点的校准。
6 结论
本文介绍了一种基于 FPGA 和ARM 的数据采集系统。FPGA 程序全部采用Verilog-HDL 语言自顶向下模块化编写,在Xilinx ISE 集成开发环境下进行编译和仿真,整个系统和所有 功能模块均可在符合条件的FPGA 产品中应用,具有良好的可移植性。已应用在某机载数 据采集仪中,获得了很好的应用效果。
本文的创新点在于用 FPGA 芯片通过模拟量调节和数字量调节的方法,用较低的成本 实现了对微应变数据的零点校准,提高了采集的精度。并且ARM 和FPGA 的交互,实现了 可由ARM 在线实时改写和监控FPGA 中的各项采集参数,无需对FPGA 芯片重新下载编程, 大大提高了数据采集系统的灵活性。
参考文献:
[1].AT91RM9200 datasheethttp://www.dzsc.com/datasheet/AT91RM9200+_143939.html.
[2].TLC2551datasheethttp://www.dzsc.com/datasheet/TLC2551_1095377.html.
[3].ROM datasheethttp://www.dzsc.com/datasheet/ROM+_1188413.html.
[4].DA datasheethttp://www.dzsc.com/datasheet/DA+_1093508.html.
来源:xiaobai0次