>
首页 » 业界动态 » 基于Altera Nios平台的信号高速采集系统

基于Altera Nios平台的信号高速采集系统

作者:范江,吴军辉,徐立鸿  时间:2007-03-03 10:48  来源:

要:本文介绍了基于Altera Nios平台的光信号采集系统。我们详细地分析了本系统中各个组成部分的工作原理,包括光信号获取、光电信号转换、模数转换以及Nios片上系统获取信号的整个过程。

关键词:Nios,SOPC,FBG,光信号采集

引言

现今对于温度和形变的在线测量的需求日益提高,比如在航空航天应用,建筑结构监控。环境测量等领域。但是传统的温度和形变传感器,例如热电偶和形变测量器,却具有很多的缺点,诸如重量、硬度方面的缺陷以及对环境变化干扰的抵抗能力差等。

近来一项很有发展前景的新技术—纤维光学及FBG (Fiber Bragg Grating:光纤光栅)技术,已经被应用于温度及形变测量中。FBG传感器的特征就是具有良好的稳定性、可靠性。除此之外,它还具有基于光纤传感器的一些共有优点。如对电磁的不敏感性,尺寸小、传感器和数据获取装置之间距离可以很远。由此可以预见基于FBG的传感器对测量技术的发展具有重大应用意义。

本文主要是对FBG传感器信号的快速获取,侧重于利用基于FPGA的Altera公司的Excalibur开发板设计一个“片上”嵌入式测量系统,来对光信号进行获取。与目前具有同样功能的其它测量系统相比,它具有灵活、稳定、易维护、高效率等优点。本测量系统的硬件开发包括使用Altera Excalibur开发板配置并生成一个嵌有Nios处理器的“片上”测量系统以及使用CCD和高速ADC(AD转换器)设计光电信号的转换和采集电路;软件开发包括在Apex EP20K FPGA中时序信号的Verilog实现,使用C语言对光电信号的获取。

系统结构

我们的测量系统由以下几部分组成:光学系统、放置在被测物体内的光纤光栅(FBG)和信号采集处理部分。其中的光学系统包括光源和分光仪,我们使用高亮度的激光发生器作为光源,用于产生入射被测物体内的光纤的光波,它的功率大于1mW,光频谱位于808nm-858nm,入射后其中某一波长的光波被光栅反射回来,并进入分光仪。分光仪是由若干面反射镜和全息光栅组成,其主要作用是对光波进行光学处理后,并使光波能够准确的投射在CCD上,这样我们就可以将光信号转换成电信号便于信号的采集和处理。系统中信号采集处理部分是由CCD线列传感器、ADC以及Altera Excalibur开发板组成。它的作用是将投射在CCD上的光信号先变为模拟电信号,而后通过ADC将信号在转换成数字量信号,然后通过Altera’s Excalibur开发板上的“片上”Nios嵌入式系统对这些数字量信号进行采集和处理,得到相应的温度值和应变值,以便完成整个测量过程。系统框架的示意图如图1所示。

1 系统框架

光纤光栅(FBG)传感器工作原理

光纤光栅(FBG)传感器是光纤传感器的一种。光纤光栅(FBG)技术已经广泛地应用于电信及其相关产品中,现在这项技术也逐渐地应用于光传感器领域。光栅技术不仅可以用于静态信号还可以用于动态信号的采集,例如温度、形变和压力等。

以下我们将结合图2来介绍一下光纤光栅(FBG)的工作原理。

2 光纤光栅的结构

光纤光栅(FBG)传感器的功能就是用某一波长的光信号来表示我们希望采集的物理量。光纤中的光栅可以被看作是一个“滤波器”,进入光纤的光波,根据光栅本身的物理特性,其中某一波长被光栅反射回来,这一波长就被从入射的光波中“滤除”了,这样我们希望采集的物理量就被“调制”成这一波长的光信号。在图3中我们可以看到波长为的光波从入射光波中被滤除了。

3 入射光波 通过光栅的光波 被光栅反射的光波

我们假设光栅的反射系数为,光栅之间的几何距离为,则我们可以通过以下的公式得出被反射回的光波的波长。机械应力将改变光栅之间的几何距离,而温度的变化将改变光栅的反射系数。我们可以试想在已知温度和已知应力条件下,反射波长为,那么我们可以通过检测未知温度 和未知应力所对应反射波长之间波长偏移,来计算得到此刻的温度和应力。其计算公式如下:

CCD图像传感器的选择

光纤光栅(FBG)传感器的输出形式是光信号,即通过光纤光栅(FBG)将希望采集的物理量“调制”成一定波长的光波。为了方便系统对这些信号进行处理,我们必须将其转换成电信号。所以我们采用光电信号转换器来完成这方面的工作。在本系统中,因为发光源的波谱范围是808nm~858nm,所以我们选用了波谱范围为200nm~1100nm的CCD图像传感器ILX511。ILX511传感器是日本Sony公司出品的2048个像素的灰度线列CCD图像传感器。这款传感器被广泛地应用于光信号测量设备中,它的一些主要特性表现为以下几方面:

l 有效像素为2048

l 像素的几何尺寸:14um~200um

l 5V单电源供电

l 具有很强的光敏感度

l 内置的时钟发生器和时钟驱动器,内置的信号采样保持电路

l 最大的工作频率可以达到2MHz。

CCD将光信号转换成模拟电信号,每个像素产生一个模拟电信号,这样CCD每次进行光电转换就产生2048个模拟电信号,同时它将这2048个像素按位置串行地“封装”成一个有效数据字段。我们在外加时钟同步信号(CLK)和芯片使读端()作用下,从CCD中读出数据。根据ILX511的数据手册,外加的同步时钟信号由2087个时钟脉冲组成,当向端给出一个低电平后,CCD进入数据输出状态,在每个时钟脉冲作用下,一个数据位被读出。这2087个数据位由以下几部分组成:首部伪数据字段(33个数据位),有效数据字段(2048个数据位),尾部伪数据字段(6个数据位),其中每位有效数据的电平输出范围是0.5v~3.4v。需要注意的是,为了提高电磁兼容性,CCD的工作方式应该选择为采样-保持方式,同时CCD在上电后处于内部电路初始化阶段,这时为了避免得到错误的数据,最初22500个时钟脉冲用于初始化CCD,不要在此阶段读出数据。

ADC接口设计

经过CCD传感器转换输出的模拟量必须通过ADC转换器转换成为数字信号,这样系统才可以处理这些信号。因为CCD的动态范围是(dynamic range)48.5dB,根据公式

我们可以计算得到ADC精度>=8.06,所以我们选择ADC的精度必须是9位或9位以上的。

同时我们还将计算ADC的速度,根据以下的公式

所以通过上述的计算和分析,我们得到了所需ADC的两个主要特性指标,即精度至少要9位,采样的速率必须至少2Msps。

现在有很多款ADC转换器可以应用于CCD图像处理。我们在综合考虑了诸多因素后,我们选择Linear的串行ADC LTC1402。LTC1402具有以下一些特点

l 2.2Msps的采样速率,12位精度

l 支持单端 ,或双端

l 支持工作模式和休眠模式,降低了功耗

l 采样输入支持单端输入方式()和双端输入方式(

l 提供3线制接口,同时兼容SPI和MICROWIRE接口

参照下图4,我们将根据LTC1402的工作时序图来分析其工作原理。

4 LTC1402工作时序图

LTC1402在CONV(外加ADC转换启动信号)的上升沿作用下,对输入的模拟量信号进行保持,同时启动ADC进行模数转换。整个模数的转换过程在14个SCK(外加的同步时钟信号)的同步作用下完成,同时在每个SCK的上升沿的同步下,将前一次的A/D转换结果通过Dout依次输出。从Dout输出的数据由13位数据组成,其中的12位数据是A/D转换的结果,还有1位数据是REF。A/D转换的结果按照从最高位到最低位的次序依次输出,REF用于指明LTC1402的状态,如果REF为“0”,则LTC1402处于“休眠”状态,如果为“1”,则LTC1402处于正常工作状态。

在设计ADC接口电路时,要注意以下一些问题。首先由于LTC1402内部输入信号的“保持-采样”电路的速率达到80MHz,所以外部的噪音和干扰都可能通过LTC1402的输入端对A/D转换产生影响。根据LTC1402的数据手册的要求,我们解决的方法就是,在LTC1402的输入端加上一个一阶的滤波电路。将输入信号的频率限制在一定的范围内。其次CCD的输出对于外界的阻抗变化比较敏感,如果将ADC的输入端与CCD的输出端直接相连,则CCD的负载可能因为ADC输入端的内部阻抗的变化而变化。所以基于以上两点考虑,我们在CCD和ADC之间设计了缓冲电路,用于阻抗匹配和滤波。下图5是CCD与ADC的接口示意图。

5 CCD与ADC的接口示意图

具体的缓冲电路如下图6所示:

6 缓冲接口

由上图我们可以计算ADC的输入的最高频率:

Altera Nios平台

为了给我们的系统找到适合的开发平台,必须先对系统的需求做细致的分析,通过分析研究,我们系统的特点表现在以下几方面:

1. 因为我们的测量系统是一个嵌入式系统,所以我们必须选择一个具有高效嵌入式系统开发工具的平台。

2. 因为我们的测量系统要求比较高的测量速率,所以我们最好选择FPGA作为开发的硬件平台。这样我们可以使用VHDL或Verilog HDL来编制软件代码,同时可以利用一些已有的IP核来进行快速的算法。

3. 我们希望使用高级语言来进行软件开发,例如C,C++等,这样可以使我们的系统能尽快地应用于市场。

基于以上的一些分析,在比较了TI的TMSC6711、Altera Excalibur开发套件以及Altera DSP平台和开发套件后,我们决定选择Altera Excalibur开发套件。Altera Excalibur开发套件是专门针对嵌入式Nios处理器应用的,在开发套件的支持下,可以方便地完成基于Nios处理器的SOPC(System On A Programmable Chip)开发。开发套件包括以下部分:

l Nios处理器以及外围接口

l Quartus II开发软件

l GNUPro编译器

l 基于APEX EP20K200E FPGA的开发板

l 相关的开发例程

Nios嵌入式处理器是一款专门用于配置于Altera可编程器件上的RISC“软核”处理器。它具有16位的指令集,数据宽度可以配置成16位或32位,每个周期可以执行一条指令,最高执行速度可达50MIPS。Nios处理器还具有一些可配置的周边接口,它们包括UART、并行I/O、Timer、SPI、片上SRAM和ROM、与片外SRAM和FLASH的接口控制。

QuartusII是进行SOPC系统设计的高效工具,使用它可以快速设计整个应用系统。它提供了利用PLD进行百万门逻辑设计的能力,其中集成了用于在Altera器件上进行设计、综合、编译、验证的所有工具。

GNUPro Compiler&Debugger工具是由Cygnus公司提供的标准C/C++开发工具包。它为针对Nios嵌入式处理器的开发做了优化。工具包包括了经过优化的C/C++编译器、GNU汇编编译器、内置的调试器以及相关的二进制工具。

基于APEX EP20K200E FPGA的开发板是用于创建嵌入式处理器应用的硬件平台。它主要包括以下一些部分:一片APEX EP20K200E FPGA、1Mbyte的Flash存储器和256Kbyte的SRAM、3.3V/5V的电源接头、一个RS-232通讯接口,JTAG接口,2个PMC接口等。

我们使用集成在QuartusII中的SOPC Builder工具来配置生成“片上”系统。SOPC Builder是一个功能强大的基于图形界面的“片上”系统的定义和定制工具,它可以在短时间内完成用户定制的SOPC设计。我们根据应用的需要从SOPC Builder库中选择IP模块、memories、外围接口和处理器,并且配置生成一个高集成度的SOPC系统。根据本项目的需要,我们选取以下一些模块组成片上系统:

Nios 32-bit CPU、Boot Monitor ROM、Communication UART、debugging UART、Timer、Button PIO、User PIO、LCD PIO、LED PIO、DMA、SPI、Seven Segment PIO、External RAM Bus(Avalon Tri-State Bridge)、External RAM Interface、External Flash Interface。

同时SOPC Builder自动产生一些必需的仲裁逻辑来协调系统中以上各个部件的工作,我们将系统的工作频率设为33Mhz。定制完“片上”系统的硬件后,SOPC Builder还为我们编写操控这些“片上”硬件的软件代码提供了一个软件开发环境,这软件环境包括语言头文件、外围接口的驱动以及实时操作系统的内核。这一环境极大地方便了软件的开发。

系统实现

以下我们给出本系统的一些具体实现。我们将分成两部分来分析和介绍,这两部分分别是:使用Verilog编写时钟和控制信号发生器用于驱动CCD和ADC,并且协调两者的工作;使用c语言编写程序通过SOPC Builder配置的SPI接口读取ADC输出的数据。

1. 时钟和控制信号发生器

使用Verilog编写时钟和控制信号发生器,用于产生驱动CCD和ADC的时钟和控制信号。时钟发生器的工作原理是:我们使用频率为33MHz的系统时钟,作为时钟发生器的输入和同步信号,用于产生我们所需的CCD和ADC驱动的时钟和控制信号,根据系统的要求和CCD以及ADC芯片特性,我们将产生的CCD时钟频率设为1MHz,同时把ADC的时钟频率设为33MHz,在时钟发生器中,我们还要对产生CCD和ADC两个高速设备的时钟和控制信号进行匹配,使得两者能够正常地工作。

现在我们将详细地分析这两个高速设备如何完成时序的匹配。由于我们系统中的CCD和ADC都是依靠外加时钟同步的高速设备,因此这两个设备之间时序的匹配对于能否获取正确有效的数据来说至关重要。所以为了使两个设备协同工作,我们首先要分析每个设备所需的外加时钟和控制信号及其这些信号之间的时序关系。CCD光电转换器需要两个外加信号,分别是CCD_ROG和CCD_CLK。CCD_ROG信号使得CCD的输出数据有效,也就是每次从CCD读取数据时,都要先给CCD_ROG一个低电平,将CCD置成输出状态。同时在CCD_CLK信号的同步作用下,将光电转换后的数据一位位的输出。ADC进行模数转换也需要两个外加信号,分别是ADC_CONV和ADC_CLK。ADC_CONV信号是使得ADC芯片开始进行模数转换,每次进行转换前都要给ADC_CONV一个高电平,同时转换过程和转换后的结果输出在ADC_CLK信号的同步下完成。

我们先从CCD光电转换器读出模拟数据,所以要通过CCD_ROG给CCD一个长度为T1(T1=4000ns)的低电平,在CCD_ROG重新变为高电平后,CCD就在CCD_CLK信号的同步下输出数据了,在每个CCD_CLK作用下输出一个模拟量数据。CCD输出的每个模拟量数据都由ADC芯片将其转换为数字量信号。由于CCD每次输出的2087个模拟量分别有33个首部伪数据字段,2048个有效数据和6个尾部伪数据字段组成,其中的2048个有效数据和首部伪数据字段的后20个数据就是我们希望得到的,所以从第14个数据到第2081个数据中的每个模拟量,我们都通过ADC_CONV(ADC_CONV的高电平宽度为4ns)给出一个高电平启动ADC,同时ADC_CLK的作用下,完成模数转换过程和数字量输出。以下是我们的时钟和控制信号发生器的程序流程图和仿真时序图。

7 时钟和控制信号发生器的仿真时序图

图8 时钟和控制信号发生器的程序流程图

2. SPI接口的编程

ADC将模拟信号转换成数字信号后,Nios通过SPI接口读入这些信号并进行相应的处理。我们通过Quartus II中的SOPC Builder为Nios核配置SPI接口。SPI是一种简单、标准的总线接口,广泛地应用于嵌入式系统中。通过SOPC Builder配置SPI接口,我们可以将其设为主设备也可以设为从设备,在我们的应用中,将其设置为从设备。

软件通过访问存储器中映射的5个16位的寄存器来控制和读写SPI接口。读入的数据通过mosi引脚一位位的进入移位寄存器。等到一帧数据都收完,并且通过移位寄存器缓冲后,放入到寄存器rxdata,同时将状态寄存器的rrdy位置成1。我们就通过访问rxdata来得到一帧数据。数据被读取后,rrdy位自动置回0。如果前一帧数据还未从rxdata读取,后一帧数据就会将原数据覆盖,造成错误同时将状态寄存器的roe(read overwrite error)位置成1。每个SPI接口共有4个引脚,它们分别是miso(master input slave output)、mosi(master output slave input)、sclk(同步时钟)和ss_n。当ss_n为低电平时,从设备可以在sclk同步作用下读入数据。我们系统中的SPI接口是从设备,所以我们只使用mosi、sclk和ss_n三根引脚。以下是Nios中SPI与ADC的接口示意图。

ADC的芯片特性可知,当ADC_CONV在一个高电平的作用下,ADC开始进行模数转换。ADC_CONV回复到低电平后,因为ss_n和ADC_CONV连在一起,所以Nios中的SPI就处于可以读入数据的状态了,同时在ADC_SCK的作用下ADC输出数据,而SPI也在相同的时钟SCLK作用下通过mosi读入数据。为了能够准确的得到数据,我们还要对SPI的一些参数进行设置。其中的databits决定读写一帧数据的位数、即SPI寄存器rxdata的位数,其缺省值是8位,根据ADC的参数我们可知应该将其设为13位。同时将clockpolarity设为0,将clockphase设为1。表示数据改变发生在每个时钟的上升沿。软件中我们将通过等待SPI寄存器的rrdy位的置位,来读取rxdata中的数据,与此同时寄存器中roe的状态决定此帧数据的读取过程中是否存在数据溢出现象。以下是相关的读取数据的软件代码。

do

{....

//read a line data of the CCD

for(i=0;i<2069;i++)

{//wait till read ready

while((spi->np_spistatus&np_spistatus_rrdy_mask)==0)

;

//read data from spi rxdata register

c[i]=spi->np_spirxdata;

}

// read the overwrite status

b=spi->np_spistatus&np_spistatus_roe_mask;

}

while(b==8);

结论

本系统经过仿真测试,其功能达到了设计的要求,同时HP逻辑分析仪验证了系统的时序逻辑。

相关推荐

基于SOPC的分布式干扰系统嵌入式网关设计

干扰系统  网关  SOPC  2011-06-01

基于嵌入式的电缆故障检测仪设计

嵌入式  Nios  FPGA  2011-05-09

基于NiosII的SOPC多处理器系统设计方法

NiosII  SOPC  QuartusII  2010-12-29

建设EDA&SoPC实验室的优势

EDA  Protel  SoPC  2010-10-15

SOPC中NiosII的LCD显示驱动IP设计

NioslI  SOPC  LCD显示  Cyclone  2010-08-31

SoPC系统的综合优化设计策略

SoPC  综合优化  EP2S60  Nios  2010-06-09
在线研讨会
焦点