一种基于ARM+FPGA的高精度数据采集系统设计

1、引言 随着图像处理、工业控制、无线通信等领域的飞速发展,对数据采集系统的速度、精度等性能要求也越来越高。这些要求都对数据采集系统的设计和实现提出了新的挑战。目前数据采集系统的设计方案通常分为以下几类:
1)以微处理器单一控制芯片和a/d转换器形式为主,该设计方案简单,在对性能要求不高的应用场合为了降低成本甚至可以采用集成a/d转换器的微处理器。
2)采用通用计算机配置数据采集卡的方式,通常需要开发计算机端应用程序,可以完成复杂的计算,但不同的采集卡相应的驱动程序不同,如果需求改变需要更换采集卡时,相应的应用程序也需要重新开发。因此,该设计方案通用性差,实时性不高。
3)以arm和fpga或dsp和fpga组合方式作为采集系统的核心,arm处理器适合控制领域,dsp处理器适合信号处理领域,fpga器件由于其自身特点,适合高速并行采集与处理领域,具有arm或者dsp等处理器无法比拟的优势。这类组合方式结合各自特点,处理能力强,应用范围广。
arm和fpga之间的数据交换采用双口ram芯片来实现fifo功能。系统中arm处理器作为系统控制核心,负责控制整个系统工作时序、并将数据通过网络上传到服务器中进行存储。fpga负责a/d转换器的模式配置,数据传输。该组合方式结合arm在控制方面和fpga在采集方面的优势,具有通用性强、配置灵活的特点。
2、系统设计 本系统硬件主要由信号调理电路、模数转换器ads1278、fpga器件cyclone系列ep1c6、双口ramidt7205和处理器pxa270及外围电路组成,系统结构框图如图1所示。输入信号经过信号调理电路后,进入a/d转换器进行数据转换,将模拟信号转换成23位尾数和一符号位的数据,fpga配置a/d转换器并将转换的数据按照顺序存储到双口ram中,当转换数据存储满后中断arm处理器,arm处理器将数据从双口ram读出进行运算,并通过网络接口将采集数据传输到服务器。
图1 系统结构
2.1、24位a/d转换芯片ads1278 ads1278是德州仪器(ti)公司推出的采样率高达128ks/s、24位8通道同步采样σ-δadc。支持多种工作模式,内部集成线性相位数字滤波器,数据输出接口支持spi或可选帧同步,便于与fpga互连。可满足国防、航天和医疗应用。
ads1278转换器内部集成的数字滤波器通过奈奎斯特采样将输入信号抽取为长度为1比特的高分辨率数字信号。8通道输入信号分别进入独立的8个a/d转换器,它内部由高阶斩波器、数字滤波器、调制器组成,可将输入模拟信号经过高阶滤波器后得到数字信号。图2为ads1278的spi格式下,时钟和数据时序图。
图2 spi格式下时序
2.2、arm与fpga的接口设计 本系统核心采用arm和fpga的组合方式,在arm和fpga之间采用3片双口ramidt7205进行24bit数据传输,其中,fpga器件控制a/d转换,并将转换数据按照一定顺序存储到双口ram中,当数据存储完后将中断arm,arm将双口ram中的数据进行读取,比使用fifo传输的方案降低了成本、提高了数据传输的吞吐量。
本系统中fpga的设计作用如下:复位并配置ads1278的工作模式,fpga内部设置一个地址加法器控制将a/d转换器的数据写入双口ram中,当双口ram写满后,大小24kb,地址加法器复位。arm与fpga的接口方式有很多种,如iic、spi等串行接口或总线等并行接口,串行接口由于本身的局限性限制了其在大数据量、实时数据的传输的应用,而总线的形式更合理一些,稳定性较之更好一点。但arm与fpga通过地址、数据、控制总线直接连接的方式在大数据传输时会影响系统的效率,因此,在arm与fpga之间采用双口ram进行连接的方式,arm与fpga异步工作,提供了系统的效率。其接口如图3所示。
图3 arm与fpga的接口
fpga的控制信号wr、rd、nreset与双口ramidt7205的复位信号rs、读写信号wr和rd连接,数据总线d0~d23与双口ram的数据总线连接,fpga通过内部地址加法器依次将将a/d转换器的数据串并转换后写入双口ram中。双口ram的ef、hf信号分别与pxa270的gpio0和gpio1连接,接受数据写满后产生的中断。pxa270提供6个分区的静态存储器bank0~bank5,设计将双口ram的存储空间映射到pxa270的bank3上。
3、驱动程序设计 为了实现arm与fpga通过双口ram的数据传输,需要设计嵌入式linux下的驱动程序。当fpga将数据写到双口ram中,根据双口ram中数据的状态中断arm处理器进行数据读取。这一过程主要需要中断和总线驱动程序配合。
在中断驱动程序中,通过request_irq()函数为双口ram的中断分配中断请求(irq)号,当处理器检测到这一irq号对应的中断产生时,将启动该irq对应的中断服务例程[9]。irq号与中断处理例程是一一对应的,在系统/porc/interrupts文件中可以为设备选择irq号。fp-ga将a/d转换的数据写入双口ram后,当数据写满后会中断arm处理器,arm会响应中断处理例程,读取双口ram中的数据。中断处理例程首先要清除pxa270的中断寄存器相应的位,需要通过对状态寄存器相应位进行写操作,这是为了能够继续响应双口ram产生的中断。然后是设置数据传输标志位,当主程序中检测到标志位,进而调用总线驱动程序进行数据传输,这种工作方式可以避免中断处理例程的冗长,提高系统传输效率。
由于应用程序工作在用户空间,它无法完成对总线的操作,而驱动程序工作在内核空间,可完成对总线的操作,因此,在总线驱动程序中,必须支持应用程序对总线的操作,以完成数据的传输。传统的linux应用程序需要通过总线驱动程序完成对总线空间的访问方法是通过2个函数完成用户空间与内核空间之间的数据传递,其中内核空间向用户空间传输数据使用copy_from_user函数,用户空间向内核空间传输数据使用copy_to_user函数。copy_from_user,copy_to_user等。这种方法虽然能完成2个空间的数据传输,但是效率不高,最好的方法是将内核空间能访问的物理地址直接映射到用户空间,linux内核提供了remap_page_range函数,应用程序对该用户空间的地址访问相当于直接对物理地址的访问。本文的总线驱动程序就是直接映射的方法,来完成快速的读写。
下面是驱动程序代码段,它使用remap_page_range()函数在驱动程序中完成mmap系统调用中物理空间到虚拟空间的映射,remap_page_range()函数原型如下:
intremap_page_range(vma_area_struct*vma,un-signedlongfrom,unsignedlongto,unsignedlongsize,pg-prot_tprot);
remap_page_range()函数的调用需要初始化。
虚拟内存空间指针vma、起始地址、物理地址、映射区域字节数等参数。首先计算物理地址,然后通过右移page_shift位,本系统使用pxa270的bank3的物理空间,起始地址0x0c000000,大小为4kb映射到虚拟空间。驱动程序中,还需要判断虚拟内存大小和偏移了指定距离后物理内存的大小,如果虚拟内存过大,应该返回并提示映射超出允许的内存空间。
调用remap_page_range()函数过程如下:remap_page_range(vma,vma->vm_start,0x0c000000+vma->vm_pgoff<<page_shift,vma->vm_end-vma->vm_start,pgprot_noncached(vma->vm_page_prot));
应用程序中调用mmap系统就是对mmap()函数的参数初始化。mmap()函数原型如下:
void*mmap(void*start,size_tlength,intprot,intflags,intfd,off_toffset);
首先将文件描述符fd指定的设备文件与start处开始的内存空间关联,通常将start设为0,mmap()函数返回实际关联的内存地址。length为内存映射的字节长度,prot为内存保护类型,flag为映射类型,map_shared标识符表示与其他所有映射这个对象的进程共享内存区域。本设计调用mmap()函数过程如下:
base=(unsignedlong*)mmap(0,0x100,prot_read|prot_write,map_shared,fd,0);
4、系统实验结果分析 本系统中,fpga外部晶振频率采用32.768mhz,经过内部16分频器后得到2.048mhz时钟频率作为ads1278的工作时钟。ads1278完成8通道24位精度的采样传输大约需24μs,采样数据被fpga写入双口ram基本在采样结束后同步完成。当双口ram数据被写满后,中断arm处理器进行数据读取,arm的工作频率为520mhz,外部总线时钟频率为104mhz,配置pxa270外部bank3的msc寄存器为0x7ff4满足系统对双口ram时序读写的需要。
为了提高采集精度,首先需要对a/d转换器进行零偏校准,零偏校准后,通过动态范围计算公式20×lg(信号电压/噪声电压)得到各通道实际动态范围如表1所示。其中零偏电压以转换后的数字形式给出。从表1中动态范围一列中可以看出,系统各通道实现的动态范围都接近a/d转换器24位采样精度时的理想动态范围111db,测量结果表明本文设计的系统可充分发挥a/d转换器高精度、大动态范围的特性。
表1各通道参数
系统测量加速度信号各通道显示界面如图4所示,从图中可以看出,加速度信号实时、连续地显示验证了本文提出的采用双口ram作为arm与fpga之间的数据传输方式及相应的总线、中断驱动程序的正确性和可行性。该方案也可应用于电力频率测量等其他高精度采集领域。
图4系统采集显示界面
5、结论 充分利用arm和fpga各自的优势,设计一种arm和fpga组合的高精度数据采集系统,采用双口ram设计了arm与fpga之间的数据传输方式,解决了使用传统fifo芯片成本高、容量小的问题,提高了arm与fpga传输吞吐量。编写了linux下设备的驱动程序,采用中断方式及用户空间对内核空间的直接访问方式进行数据传输,大大提高了系统传输的效率。设计的基于双口ram的arm与fpga采集系统具有成本低、精度高、动态范围大等特点,是高精度采集处理的一种高效可行的解决方案。

百度无人车在长沙开放了无人驾驶出租车服务 百度地图可以直接打车
5个1W的LED灯珠怎样接48v电压
科技与互动结合之美,LED感应地砖屏强势来袭
杭州国芯科技完成数亿元C轮融资
GaN-on-Si技术助力降低LED及功率元件成本
一种基于ARM+FPGA的高精度数据采集系统设计
关于电池安全技术特点及保护方法介绍
PRBTEK分享Tektronix泰克P7240有源单端探头产品规格及其应用
如何设计一个具有最低安全和性能要求的L3自动驾驶系统呢?
IIC总线检修注意事项
预计到2025年5G网络建设投资累计将达1.2万亿元
物联网+区块链的融合将成为新的行业趋势
盘点一下今年手机圈的几项重要革新
哪些企业将被列入“不可靠实体清单”?联邦快递或成为首个“幸运儿”
戴森360eye吸尘机器人评测 到底值不值得买
220vLED灯在12v电压下工作的改动方法
膨化机数据采集远程监控物联网解决方案
PCB行业中日立钻机维修实例
HL型栅极驱动器内部结构解析
混合信号系统接地揭秘之第二部分