基于PCI Express总线的高帧频CMOS相机图像采集系统设计
2009-06-30
作者:杨会玲1, 杨会伟2, 王 军3
摘 要: 基于PCI Express总线设计了一种高帧频CMOS相机图像采集系统。选用帧频250帧/s的LUPA-300作为高帧频图像传感器,通过FPGA实现对图像传感器的参数配置与图像数据处理,采用PCI Express总线作为图像数据传输总线,大大提高了传输速度。实验结果表明该系统结构简单、成像清晰稳定、拍摄速度快,可应用于高速目标的拍摄。
关键词: PCI Express; 高帧频; CMOS图像传感器; FPGA
随着信息科学的飞速发展,人们对数据采集系统的要求愈来愈高。数据采集技术是现代信号处理和信号存储的基础,广泛应用于雷达、通信、遥测遥感等领域。在数字信号处理及存储工作中,实现对所需数据高速、实时采集具有重要意义。为了实现对高帧频CMOS相机高速、大容量图像数据实时存储,要求光电测控设备的数据采集系统具有数据传输效率高、传输延时低、系统集成度高、系统可维护性高等特点。现在的大多数图像采集卡多数是基于PCI接口的,其数据传输率很难满足大容量、高速的图像数据传输。PCI Express(简称为PCI-E)是一种新型的点对点的串行连接的I/O体系。PCI-E为总线技术带来了颠覆性的革命,其所能提供的高带宽和引入低延迟是其前几任总线所望尘莫及的。相比传统的PCI总线,PCI-E总线有很大的优势:首先,PCI-E降低了芯片连接的管脚数量,简化了PCB板的设计和布局;其次,PCI-E是非共享的串行差分接口,不会出现多个设备共享带宽的情况,PCI-E X1的理论带宽为发送、接收均为250 MB/s,PCI-E X4发送、接收的理论带宽均为1 GB/s,并且在PCI-E 2.0协议中会使用更高速5 GB/s的物理层收发器,其速度将会翻倍。因此,PCI-E总线接口特别适合于超高速的数据传送,研发基于PCI-E总线接口的数据采集卡具有重要意义[1-3]。
本文基于PCI Express总线设计出该高速CMOS相机图像采集系统。在本系统中,高速CMOS相机帧频为250帧/s,分辨率为640×480,每个像元数据位为10位,系统中采用FPGA芯片实现对整个系统的控制,利用FPGA内部提供的FIFO IP核实现了高速图像数据的缓存处理。为了提高CPU利用率,设计中专门采用2个FIFO的乒乓操作来实现图像数据的缓存处理。
1 系统构成及原理
整个高帧频图像采集系统由成像单元、FPGA控制单元、PCI-E图像采集单元、驱动程序及图像采集存储软件组成,如图1所示。
系统工作原理:系统上电后,FPGA控制单元首先对高帧频CMOS传感器内部参数实现配置,配置完成后,高帧频CMOS图像传感器开始工作,通过内部的光电转换、模数转换将外部镜头采集到的图像转换成数字图像的帧频信号、行频信号、像素时钟信号,并将图像数据传送给FPGA内部的FIFO进行缓存处理。为了提高数据的缓存处理速度,提高CPU的利用率,系统中采用了2个FIFO的乒乓操作来完成数据的缓存。经过FIFO缓存处理后的图像数据输入到PCI-E图像采集单元的DMA数据流,上位机软件结合驱动程序控制PCI-E采集单元,通过中断操作触发DMA操作,将数据通过DMA数据流传输到计算机内部存储器中,上位机软件实现图像的处理与显示,重现成像单元捕获的图像。
2 系统硬件
2.1高帧频CMOS成像单元
高帧频CMOS 成像单元主要由CMOS图像传感器与FPGA控制芯片组成。CMOS图像传感器是系统的成像部件,它是系统的“眼睛”,能够捕获高速运动物体的图像,其电路输出为数字信号图像数据。本文中所采用的CMOS图像传感器是Cypress公司推出的产品LUPA-300,它将模拟图像获取、数字化和数字信号处理的功能集成在单一芯片中,分辨率为640×480;帧频达到250帧/s,属于高帧频图像传感器,可以实现动态目标的跟踪拍摄;动态范围为61 dB,采用多斜率积分最高可达到90 dB;内部集成有4个独立的模数转换器(ADC),采样率为80 MS/s,集成的ADC提供10 bit的数字信号输出,内部有大量的寄存器和控制器,可以对传感器的工作状态进行选取,实现实时调整;采用同步快门,具有随机开窗与亚采样功能,可对片上任意感兴趣的区域进行读取,并且每帧图像可以读取不同的区域。该传感器的时钟频率可达到80 MHz。
LUPA-300供电要求比较复杂,需要提供6种电源:VDDA(模拟电源+2.5 V)、VDDD(数字电源+2.5 V)、VPIX(像素电源+2.5 V)、VRES(复位电源+3.3 V)、VMEM_H(像素存储电源+3.3 V)、VADC(ADC电源+2.5 V)。由于需要电源较多,在电路设计中考虑到元件的管脚分布情况,尽量做到电源和地到相应的管脚距离最短。同时为了保证传感器工作稳定,在位于传感器底座下方的TOP层进行了大面积铺地。出于冗余保护的考虑,传感器的所有供电管脚都并接了2个0.1 μF和0.01 μF电容。为了使传感器正常成像,选用F=50 mm的V5013标准镜头。外壳由铝制材料加工而成,正中心位置提供镜头接口。
2.2 时序控制与自动化参数配置
LUPA-300图像传感器内部有16个寄存器,地址从0000~1111,每个寄存器有16位,其中高4位代表寄存器的地址,低12位是寄存器的数据,每一位都有特定的含义,通过改变每一位的数值就可以改变LUPA-300的功能特性。LUPA-300传感器提供了专用的SPI总线接口,设计中采用FPGA与图像传感器之间通过SPI总线传输协议实现对LUPA-300图像传感器内部参数的配置。SPI总线的工作时序如图2所示,每个数据有16位,后4位(bit<15:12>)为地址位,对应于CMOS图像传感器内部寄存器的地址,前12位(bit<11:0>)为数据位,对应于系统成像单元的成像参数。
为了方便地更改传感器内部参数,以根据不同需求来改变传感器的工作状态,系统采用了串行通信。上位机通过串行通信向FPGA发送数据,FPGA接收到数据后对数据进行处理,一方面将接收到的数据反馈给计算机,检验数据的正确性;另一方面通过SPI总线将数据传送到图像传感器内部,实现内部参数的改变。结构原理图如图3所示。
2.3 FPGA控制单元
FPGA控制芯片是系统的“指挥中心”,也是系统设计中的一个核心器件,用以协调整个系统的工作,其作用贯穿于整个系统。完成的主要功能包括:(1)进行自身的I/O口和有关功能控制寄存器的初始化;(2)系统上电后完成对高帧频CMOS图像传感器的图像参数配置;(3)内部FIFO资源实现高速图像数据的缓存处理;(4)为PCI9054接口芯片提供外部中断信号及DMA控制时序; (5)接收计算机的控制命令控制整个系统的功能实现。本系统选用Xilinx公司的XC2S200,片内集成有56 KB的Block RAM, 4个延迟锁相环DLL(Delay-locked Loop)。
XC2S200能兼容多种I/O电压,并且具有丰富的I/O引脚。核心电压为+2.5 V,设计中采用的I/O电压为+3.3 V。
2.4 图像采集单元
为了实现对CMOS相机大容量、高速图像数据记录,要求数据采集系统具有数据传输效率高、传输延时低、系统集成度高、系统可维护性高等特点。本系统采用PCI-E总线实现数据的传输,PCI-E采用了目前业内流行的点对点串行连接,比起PCI以及更早期的计算机总线的共享并行架构,每个设备都有自己的专用连接,不需要向整个总线请求带宽,而且可以把数据传输率提高到一个很高的频率,达到PCI所不能提供的高带宽。相对于传统PCI总线在单一时间周期内只能实现单向传输,PCI-E的双单工连接能提供更高的传输速率和质量,它们之间的差异跟半双工和全双工类似。
系统采用PCI-E插卡实现图像数据的采集,采集单元主要由采集接口电路与图像采集卡组成。采集接口电路与硬件的数据总线和控制总线相连,并提供采集单元的标准数据接口;采集单元通过采集接口电路与系统的控制总线和数据总线相连。PCI-E接口芯片采用PLX公司的专用接口芯片PEX8311来实现[4]。PEX8311是PLX公司推出的第一款从PCI-E总线到本地总线的接口芯片,它完全符合PCI-E1.0规范,支持热插拔功能,并且其本地端寄存器与PLX公司PCI系列接口芯片基本兼容,这为使用PLX公司产品的用户开发PCI-E接口提供了方便。PEX8311在PCI-E端实现了×1的PCI-E接口,2对差分线分别负责发送和接收数据,一对参考时钟差分线供PCI-E接口的通信双方在训练时建立连接使用,接口的单向数据传输率为2.5 Gb/s,由于串行数据采用8 bit/10 bit编码,其有效总线带宽为256 MB/s;本地端为32 bit、66 MHz的1.ocal Bus,总线带宽为264 MB/s。
3 系统软件
3.1 驱动程序
PCI-E总线与PCI总线在软件层是完全兼容的,因此,PCI-E卡驱动程序的开发过程与PCI设备驱动程序的开发过程是一样的,本设计开发了PCI-E卡的WDM 驱动程序。
驱动程序的开发选用Comppuware公司的开发工具包Driver Studio,Driver Studio开发工具包简化了Windows平台下设备驱动程序的开发、调试以及测试,它包括VtoolsD、DriverWorks和SoftICE等开发工具。该软件包是基于C/C++的,支持Borland C++和Visual C++,使用和维护都比较方便,它可以集成到Visual C++环境中,针对特定的应用生成相应的驱动程序框架,在编程中采用面向对象的编程方法,极大地提高了编程效率。
驱动程序主要完成的功能:(1)设备的初始化,找到所要控制的硬件,在驱动程序对象中设置驱动程序分发例程的程序入口点;建立所有驱动程序对象或其他系统资源; (2)创建设备对象,利用AddDevice函数创建了一个设备对象,并将其连接到以PDO为底的设备堆栈中;(3)中断的响应与处理,完成了对外部硬件中断的响应,并将中断信息传递给应用程序,通过应用程序实现一定的功能;(4)DMA操作,完成DMA的读写操作,并在DMA传输结束后产生DMA中断,通过响应的DMA中断处理将传输的数据发送到外部总线或应用程序。
3.2 上位机软件
上位机应用程序使用Visual C++开发,采用Visual C++的MFC框架,编写一个多线程图像采集与处理程序。为了方便用户操作,创建了一种基于对话框的应用程序,用户只需要控制相关的按钮及菜单即可实现图像采集的相应功能。应用程序主要完成的功能包括:(1)传输计算机指令到采集单元,对系统硬件进行控制;(2)配置数据采集卡,采集处理FIFO输出的数据;(3)进行简单的图像处理与分析; (4)对采集数据的硬盘存储与图像恢复显示。软件流程如图4所示。
4 实验结果
系统测试过程中,整个系统通过PCI-E插槽与计算机相连,通过上位机软件控制系统硬件电路工作,并通过PCI_E总线传输获取图像数据进行显示,系统在全帧模式(640×480)下对实际目标进行了实时跟踪拍摄,拍摄到的图像如图5所示。
图5中两幅图像分别显示了同一运动物体在不同时刻的运行状态,所拍摄物图像较为清晰, 体现了系统的高速拍摄特性和实时行,在对系统进行长时间的拷机实验时,系统未发生不正常工作现象,说明系统工作稳定性较好。
本文设计了基于PCI Express总线高帧频CMOS相机图像采集系统,完成了硬件电路的设计,并针对硬件电路开发了驱动程序和上位机应用程序。该系统采用PCI Express总线实现硬件电路与计算机之间的高速数据传输,接口芯片采用PLX公司推出的第一款从PCI Express总线到本地总线的接口芯片PEX8311来实现。实验结果表明,本文给出的基于高帧频CMOS相机的图像采集系统具有容易控制、安全可靠、性能稳定等优点。图像数据传输速率将不再是限制采集图像实时存储和实时显示的瓶颈。
参考文献
[1] 周立国,梁淮宁,谢冬冬.基于PCI Express总线的SAR回波数据实时记录系统[J].电子器件,2008,31(2):592-
594.
[2] 刘波,库锡树,孙兆林.基于PCIE总线协议的数据采集设备驱动程序实现[J].工业控制计算机,2007,20(7):28-31.
[3] 魏鹏,罗武胜,杜列波.PCI Express 总线及其应用设计研究[J].电测与仪表,2007,44(494):43-45.
[4] 黄小红,李峰,倪卫芳.PEX8311芯片数据传输研究[J].电子工程师,2007,33(10):64-67.