杨勇奇 王典洪 徐朝玉 倪效勇 罗林波
摘 要: 设计一种以Sony面阵CCD器件ICX618为传感器的实时图像采集系统。该系统采用FPGA作为控制核心,由AD9945芯片对CCD的输出信号进行相关双采样处理和A/D转换,经USB接口完成数据的高速传输,最后由上位机对数据进行处理和显示。实验表明,设计的CCD图像采集系统在40 f/s的帧频下工作稳定,系统性能好、成本低、可靠性高,具有较好的实用价值,能够为其他型号CCD的應用提供参考。
关键词: 图像采集; 面阵CCD; FPGA; USB; 传感器; 数据高速传输
中图分类号: TN386.5?34 文献标识码: A 文章编号: 1004?373X(2018)16?0022?04
Abstract: A real?time image acquisition system with the area array CCD ICX618 made by Sony as the sensor is designed. In the system with FPGA as the control core, the AD9945 chip is used to perform the related double sampling processing and A/D conversion for output signals of the CCD. The USB interface is used to complete high?speed data transmission, and data is processed and displayed on the upper computer. The experimental results show that the designed CCD image acquisition system can work stably at the frame frequency of 40 f/s, has good performance, low cost, high reliability, and good practical value, and can provide a reference for the application of other types of CCDs.
Keywords: image acquisition; area array CCD; FPGA; USB; sensor; high?speed data transmission
CCD是一种能将光信号转变为电信号的探测器件,鉴于其体积小、功耗低、动态范围大、响应速度快等优点,在图像传感和图像检测领域得到广泛应用[1]。在X射线衍射仪(X?Ray Diffraction,XRD)中,利用面阵CCD替代测角仪是实现仪器便携式应用的关键技术[2],但应用于X射线波段的科研级大面阵CCD价格十分昂贵,单片价格达到数万元,而且其内部工艺复杂,对控制电路要求极其严格,容易因为控制不当造成损坏[3]。采用工业级的CCD搭建一个图像采集系统,为科研级面阵CCD的应用提供一个前期验证的参考模型是非常必要的。本文设计了一套实时图像采集系统,采用FPGA为系统控制核心,以CCD为图像传感器,经AD9945实现高速A/D转换,通过USB接口连接FPGA和计算机完成数据和命令的传输,最后在上位机程序中实时显示采集的图像数据。
系统架构如图1所示,该系统硬件架构图由CCD图像传感器、FPGA、信号处理电路和USB接口组成。
系统上电后,首先完成FPGA内各模块参数的初始化。当FPGA接收到采集命令后,输出CCD的驱动时序,CCD在驱动时序的控制下输出光电转换后的模拟电压。其经射极跟随器后对AD9945芯片进行相关双采样和A/D转换,转换结果经FPGA缓存和处理后传输至USB芯片内置的FIFO中。当FIFO达到给定深度时自动向计算机发送存储的数据,上位机对接收的数据进行存储、处理,最终实现图像的实时显示。
1.1 FPGA驱动及控制模块
系统选用的是Altera公司的Cyclone Ⅱ系列的EP2C8T144C8N 芯片。其性价比高,拥有8 256个逻辑单元,144个I/O口,可满足系统的要求。FPGA是整个系统的核心,主要负责各芯片的初始化参数配置、CCD驱动时序的产生、A/D采样的控制、采样数据的预处理以及与USB接口的通信。
1.2 CCD驱动模块
CCD选用的是一款由Sony公司生产的ICX618面阵图像传感器,其总像素为692(V)×504(H),采取隔行扫描方式允许所有像素信号在[160] s读出,可以通过电子快门控制芯片的曝光时间长短,其具有高分辨率、高灵敏度、低暗电流噪声的特性[4],非常适合作为图像传感器件。CCD的技术应用中其驱动电路的设计是最为关键的技术。只有符合器件要求的驱动信号才能有效转移CCD的光生电荷,这直接影响成像质量。因而根据器件的驱动要求设计出规范合理的驱动电路显得尤为重要,设计的驱动电路如图2所示。
根据手册要求,ICX618需提供10路驱动时序,分别为6路垂直转移信号、2路水平转移信号、1路复位信号、1路积分控制信号。垂直转移信号中[V?1]和[V?4]要求为-5.5 V,0 V两个等级,[V?2A/B]和[V?3A/B]要求为-5.5 V,0 V,15 V三个等级。由于FPGA输出的TTL电平为0 V,3.3 V两个等级,故引入XSG1,XSG2与垂直信号相组合,配合垂直时钟驱动芯片CXD1267得到三个等级的输出。水平转移信号[H?1]和[H?2]以及复位信号[?RG]可由FPGA直接驱动,这里使用ACT04芯片将输入信号反向,使其与垂直信号相统一。
1.3 信号处理模块
信号处理模块包括射极跟随器和A/D转换电路。CCD的输出接一个射级跟随器,起到缓冲输出提高负载的作用,以减少与A/D转换电路直接相连带来的影响,增强系统的抗干扰能力[5]。A/D采样选用ADI公司的AD9945芯片完成,该芯片是一款针对逐行扫描面阵型CCD而设计的信号处理器。其内部集成了可调增益放大(VGA)、黑电平钳位、CDS以及12位高速A/D转换等功能[6]。上电后,FPGA通过三线串行接口对AD9945的内部寄存器进行设置,主要设置钳位电平和VGA增益等级。工作时,相关双采样电路在每一像素周期内对输入的CCD信号[7]采样两次,一次为复位后保持的电平,一次为有效信号的电平,两者分别对应采样时序信号SHP和SHD,经过差分消除了噪声干扰,得到了质量较高的有效信号,同时给芯片输入光学黑电平和空白像素的时序信号,以进一步消除暗电流噪声的影响。通过一系列的采样处理,最终得到12位的数字信号传输给FPGA,进行数据的缓存和预处理。
1.4 USB接口模块
选用USB作为图像系统的通信接口,是因为其兼容性好、支持热插拔、成本低、传输速率高等优点,理论上最高传输速率为480 MB/s,完全满足实时图像传输要求。本设计中选用Cypress公司生产的CY7C68013A芯片,其内部集成了USB 2.0协议的处理器、增强型8051内核, 8.5 kB的RAM和4 kB的FIFO存储器等,用于数据传输的主要有两种模式:GPIF和Slave FIFO[8]。由于不考虑内部CPU处理,只利用芯片的传输功能,故选择Slave FIFO模式更利于图像数据的高速传输。USB接口电路如图3所示,FPGA可与CY7C68013A芯片直接相连,通过固件程序配置芯片为同步Slave FIFO写模式,即由FPGA提供芯片的时钟信号(IFCLK),
系统中设置与像素采样频率一致为16 MHz。SLWR是数据写入FIFO的控制信号,当其有效时,数据总线上的数据才会在时钟信号IFCLK的上升沿被写入FIFO,所以控制SLWR有效信号出现的时间作为有效图像信号的范围,而无需添加图像的帧头帧尾结构就能准确得到一帧图像,这样有利于减少数据传输量并提高图像帧率。ON/OFF是图像采集开启与关闭的控制信号。SCLK和SDAT是USB芯片与FPGA串行通信的时钟和数据线。FULL是USB芯片内部FIFO满状态标识,当FPGA向FIFO发送的数据达到满状态时该标识位会发出相应的指示状态。系统中FIFO设置为四重缓冲,512 B的缓冲区,满标识为低电平有效。
系统软件设计包括FPGA程序、USB固件程序、USB设备驱动程序和上位机程序。各程序基于不同的软件编写平台和语言编写,彼此相互配合,共同完成图像采集工作。
2.1 FPGA程序
FPGA程序使用Quartus Ⅱ软件以VHDL硬件描述语言编写,采用自上而下模块化的编程方法,主要分为ICX618驱动时序产生模块、USB串行通信模块、AD9945配置模块、数据发送模块、倍频模块。这里主要介紹ICX618驱动时序产生模块:FPGA的主时钟采用40 MHz,像素读出时钟由PLL分频产生为16 MHz,又由于水平转移信号H1,H2和复位信号RG是在每个像素周期内的不同时间产生,因此以160 MHz的时钟进行计数,一个像素周期被放大10倍,这样可以精确地控制水平和复位信号出现的位置和占空比。芯片每行分为780个像素时序,用cnt表示,共有512行,用cnt_line表示。当cnt计数满779时自动清零,cnt_line自动加1,表示一行数据传输完成。当cnt_line计数满511时自动清零,表示一帧图像数据传输完成。图像分辨率设计为640×480,因此取cnt_line>15且cnt_line<495,cnt>=140且cnt<780时为有效像素输出。通过cnt和cnt_line两个变量的不同取值,就可以得到各个驱动信号在不同阶段的输出情况。不同阶段是指根据ICX618 CCD的工作原理而划分的几个状态:空闲(idle)、光积分(integration)、帧转移(transfer)、像素读出初始化(init_readout)、像素读出(read_out)。状态间的转移也是通过cnt和cnt_line的组合变量进行的。用Modelsim进行功能仿真和时序仿真,图4为驱动时序仿真结果。图中划分出了时序所对应的状态, XSG1和XSG2只有在Transfer阶段产生50个时钟周期的低电平,目的是控制[V?2A/B ]和[V?3A/B]产生15 V的脉冲,将光积分区的电荷全部转移到垂直寄存器中;其他阶段,水平信号H1,H2保持不变时,垂直转移信号(XV1,XV2,XV3,XV4)发生改变,将电荷转移到水平寄存器中,垂直信号保持不变时,水平信号H1,H2交替变化,将水平寄存器中的电荷逐个输出。
2.2 USB驱动程序
USB驱动程序是计算机与外部设备通信的前提条件,如果缺失或存在缺陷,会导致外部设备无法识别或者功能无法实现。本设计中使用的芯片由Cypress公司提供通用的USB驱动程序,主要包含驱动程序Cyusb.sys和INF文件Cyusb.inf。驱动程序提供应用程序与外部硬件设备的接口以及协调二者之间的关系,一般无需作更改[9]。INF即设备信息文件,用来指示安装Windows驱动程序(.sys),包含相应USB设备的详细信息和所使用的驱动程序。只需将USB设备的VID/PID值添加到INF文件的适当位置即可,设计中PID为1002,VID为0505,这样在USB设备接入计算机时,系统查找与设备ID相一致的INF文件,使用INF文件指示的驱动程序完成与计算机的通信。
2.3 USB固件程序
USB固件程序的主要功能是完成相关寄存器初始化,对各种USB请求进行响应,在响应和中断中实现具体的功能。Cypress公司提供了USB固件开发的基本框架,因此只需将相关Slave FIFO模式的寄存器配置正确,并在USB请求中添加接收和发送数据以及对I/O口控制的程序即可[10]。主要步骤包括:
1) 在PERIPH.c文件的TD_Init()函数中将芯片设置为同步Slave FIFO模式,使用端点2进行数据传输,方向为自动写入,相应的寄存器配置为512×4的缓存方式。
2) 在FW.c中添加自定义请求响应以及对应的处理程序,包括:开始采集、初始化寄存器、停止采集、设置积分时间、设置增益等级、设置箝位电平,对应的请求码分别为0xb2,0xb3,0xb4,0xb5,0xb6,0xb7。
3) 调试编译成功后生成HEX文件,使用自带的Hex2bix.exe程序将HEX文件转换为iic文件,通过CyConsole控制面板将iic文件烧写到E2PROM中,上电后便执行固件程序。
2.4 上位机程序
上位机应用程序主要完成对图像系统参数设定、图像采集过程控制、图像数据的处理与显示功能。上位机基于.NET平台的Visual C#语言进行开发,通过调用动态链接库CyUSB.dll中提供的函数,就能方便地对USB设备进行操作。程序界面分为功能区和图像显示区,功能区包含5个按键分别是连接USB设备、开始采集、积分时间、增益、钳位电平。连接USB设备按键通过USBDeviceList函数获取USB设备列表,在列表中将USBDevices[0x0505,0x1002]设定为所用的USB设备,返回值为真时会在软件界面显示“已经连接”,然后就可以调用相关函数对USB设备进行读写操作。开始采集按键控制启动和关闭数据采集,单独开启线程,通过inEndpoint.XferData函数不断接收EP2端发送来的数据,当接收的数据量达到640×480时对数据进行处理与显示。
系统各部分研制完成后进行功能测试。首先测试CCD驱动电路的工作情况。使用示波器,对经过预处理后的CCD输出信号进行测试和分析。图5a)为无光条件下的输出,图5b)为强光条件下的输出。
无光环境时峰峰值电压为980 mV,而强光环境时峰峰值电压为1.24 V,可以看到不同条件下,信号幅值变化程度与光照强度成正比,CCD工作正常,因而验证了驱动电路的正确性。
其次测试系统的整体性能,将设备连接到Windows 32位系统的PC机上,按照提示安装好驱动程序,硬件被识别后,运行上位机程序,点击连接设备和开始采集按钮进行图像采集。采集的图像实时显示在应用程序图像显示区,通过调节焦距使得图像达到最佳显示效果。图6是经外加光学镜头对焦后显示的图像结果。图像的分辨率为640×480约为30万像素,可达到40 f/s的采集速度。实验结果表明系统工作正常,功能完善,可以实现图像的实时采集、传输和显示。
本文设计了一种以ICX618 CCD为传感器的图像采集系统。该系统以FPGA为控制核心,由USB接口进行数据传输,开发了上位机软件用于操控系统和显示图像。系统成像质量清晰,具备USB即插即拔的特性,同时有专用的驱动和上位机程序,安装方便,使用简单。这样使得系统具有良好的可移植性,能够广泛满足图像处理前端数据采集的需求。通过试验,初步验证了系统功能可靠性,能够为科学级CCD的应用提供一种低成本的前期验证方案。
[1] 黄以华,黄剑峰.基于USB的高清彩色CCD图像采集系统[J].电子设计工程,2012,20(4):170?173.
HUANG Yihua, HUANG Jianfeng. A high resolution color CCD image acquisition system based on USB [J]. Electronic design engineering, 2012, 20(4): 170?173.
[2] SARRAZIN P, BLAKE D, FELDMAN S, et al. Field deployment of a portable XRD/XRF instrument on Mars analog terrain [J]. Advances in x?ray analysis, 2005, 48: 194?203.
[3] 沈扬.新型X射线探测设备的探索性研究[D].上海:复旦大学,2011:15?16.
SHEN Yang. An exploratory study of the new X?ray detection device [D]. Shanghai: Fudan University, 2011: 15?16.
[4] Sony Corporation. ICX618AKA: diagonal 4.5 mm (type 1/4) progressive scan CCD image sensor with square pixel for color cameras [EB/OL]. [2011?09?10]. https://wenku.baidu.com/view/d397b40fba1aa8114431d943.html.
[5] 李亚鹏,何斌,付天骄.行间转移型面阵CCD成像系统设计[J].红外与激光工程,2014,43(8):2602?2606.
LI Yapeng, HE Bin, FU Tianjiao. Design of imaging system of interline area CCD [J]. Infrared and laser engineering, 2014, 43(8): 2602?2606.
[6] Analog Devices, Inc. AD9945: complete 12?bit 40 MHz CCD signal processor [EB/OL]. [2003?01?08]. https://wenku.baidu.com/view/a8147f452b160b4e767fcf51.html.
[7] 邵冬冬.基于FPGA的彩色CCD的荧光图像采集和驱动模组设计[D].杭州:浙江大学,2015:16?17.
SHAO Dongdong. The fluorescence image acquisition and driving module design of color CCD based on FPGA technology [D]. Hangzhou: Zhejiang University, 2015: 16?17.
[8] 趙林,孟令军,于磊,等.基于CY7C68013A的USB 2.0高速接口设计[J].电子技术应用,2014,40(1):131?133.
ZHAO Lin, MENG Lingjun, YU Lei, et al. USB 2.0 high?speed interface design based on CY7C68013A [J]. Application of electronic technique, 2014, 40(1): 131?133.
[9] 郑杰.USB 3.0编程宝典[M].北京:电子工业出版社,2013:226?227.
ZHENG Jie. USB 3.0 programming treasure [M]. Beijing: Publishing House of Electronics Industry, 2013: 226?227.
[10] Cypress Semiconductor Corporation. CY7C68013A: EZ?USB? FX2LPTM USB microcontroller, high?speed USB peripheral controller [EB/OL]. (2012?02?07) [2013?05?23]. https://www.element14.com/community/docs/DOC?54523/l/cypress?datasheet?for?cy7c68013a?ez?usb?fx2lp?usb?microcontroller?high?speed?usb?peripheral?controller.