基于FPGA的线阵CCD实时图像采集系统
2016/2/8 20:52:00
摘 要: 设计了一种基于现场可编程逻辑器件的线阵CCD实时图像采集系统。系统采用线阵CCD TCD2252D作为图像传感器,使用CCD专用信号处理芯片AD9826对CCD信号去噪并实现高速A/D转换,同时用USB接口芯片完成CCD数据的传输,最后在上位机显示采集的图像数据。整个系统由基于Verilog的CCD驱动模块、CCD输出信号处理模块、双口RAM缓存模块、USB接口控制模块等组成,结合上位机模块实现对CCD输出图像的准确采集、显示和保存。实验结果表明,该系统能实时采集和显示图像信息,USB传输速度可达28 MB/s,系统实时性好。
关键词: 实时采集;电荷耦合器件;现场可编程逻辑器件;信号处理
0 引言
目前,随着科学研究和工业生产的需要,越来越多的场合需要实时高速的图像采集处理系统。线阵CCD作为一种光电转换图像传感器,它利用光电转换原理将图像光信号转换为电信号,经过预处理和A/D转换后变为数字信号,通过一种上位机通信方式,可在逻辑器件的控制下实现对图像数据的采集传输,并在PC端进行后续处理。利用CCD采集图像具有检测精度高、处理速度快、抗干扰能力强、运行稳定等优点,其已广泛应用于图像采集、非接触式测量和实时监控等诸多领域[1]。
CCD器件的正常工作需要外加驱动时序脉冲,时序脉冲的产生方法有很多种,如数字电路驱动法、单片机驱动法、EPROM驱动法。虽然这些方法都可以产生时序脉冲,但是电路设计的难度大,兼容性差。本文直接使用FPGA来产生时序脉冲。FPGA高速、并行等优势使系统的设计非常灵活;FPGA的资源丰富,尤其是内部存储资源,可作为CCD数据的缓存,能够大大简化系统硬件电路的设计。
本文设计了一种基于FPGA的线阵CCD实时图像采集系统,它采用FPGA+USB的平台结构,以线阵CCD作为图像传感器,使用CCD专用信号处理芯片AD9826对CCD信号去噪并实现高速A/D转换,同时用USB接口芯片完成CCD数据的传输,最后在上位机上显示采集的图像数据。
1 系统设计方案
系统主要由CCD驱动模块、信号处理模块、数据缓存模块、双口RAM缓存模块、USB接口模块和上位机模块等组成,系统结构框图如图1所示。上电后,线阵CCD图像传感器在FPGA的驱动下接收前端图像信息,将光信号转换成电信号输出;然后,模数转换器AD9826对CCD输出信号作相关双采样并转换成数字信号,FPGA配置内部双口RAM作为数字信号的缓存区;最后,USB接口控制芯片把数字信号传输到上位机,在VS2008环境下开发上位机应用程序,实现图像数据的实时显示和存储,以便后续数据处理。
1.1 主控制器FPGA
FPGA是整个系统的核心,只有深入了解其内部结构,才能有效利用它。FPGA能够用较少资源实现较高的性能和更多的功能,满足低成本要求。本设计中的FPGA采用Altera公司的Cyclone IV系列的EP4CE6E22C8,其内部具有6 272个逻辑单元,30个M9K内存单元,270 Kbit嵌入式存储器,2个锁相环,92个用户I/O,可自由分配其功能与外部电路的连接。在该系统中,FPGA主要负责CCD的驱动控制、AD9826的采样控制、双口RAM的配置以及对USB接口芯片的控制。经过资源估算,该FPGA完全可以实现系统的功能。
1.2 CCD驱动模块
线阵CCD是采集系统的重要器件,完成光信号向电信号的转换。本文采用的线阵CCD是东芝公司生产的TCD2252D。TCD2252D是一款高灵敏度、低暗电流的双沟道彩色线阵CCD,它由光敏区、转移栅、模拟移位寄存器及信号输出单元组成。该器件包含3列2 700有效像元的光敏二极管,分别采集红绿蓝三色,最小像素单元尺寸为,相邻光敏列间距为64[2]。
在线阵CCD图像采集应用中,CCD对驱动时序要求较为严格,只有精确的时序驱动才能保证CCD输出正确的像素信号。所以在CCD的应用中,首先要设计满足时序要求的驱动电路。根据芯片手册,该器件工作在5 V驱动脉冲、12 V电源条件下,其中6路驱动脉冲分别是转移脉冲SH、二相驱动脉冲F1和F2、采样保持脉冲SP、复位脉冲RS和箝位脉冲CP。
图2所示为TCD2252D驱动时序仿真波形,这六路驱动时序有着严格的时序关系。转移脉冲SH高电平期间驱动脉冲F1必须为高电平,而且SH的下降沿必须对应F1的高电平才能保证光敏区的信号电荷向模拟移位寄存器并行转移。驱动脉冲F1和F2是两个占空比为1∶2、频率为0.5 MHz且极性相反的方波脉冲;SP、RS、CP均是占空比为1∶8、频率为1 MHz的方波脉冲。SH脉冲的周期决定了光积分时间的长短。由于CCD正常输出时会有76个哑元像素和2 700个有效像素,所以在一个行周期内至少要有2 776个RS脉冲,从而可以计算出每次光积分所需的时间为TSH>2 776TRS=2 776 。为了保证后续AD9826对CCD信号的有效采样,在仔细分析CCD输出信号特点后,设置一个RS上升沿计数器,当该计数器计数到64时置1,AD9826开始对CCD有效输出信号进行相关双采样。
TCD2252D需要5 V的CMOS驱动电平,但FPGA输出为3.3 V的TTL电平,因此需要使用电平转换电路增强FPGA输出信号的驱动能力。TI公司研发的电平转换芯片SN74LVC4245能实现8位总线的3.3 V和5 V逻辑电平的双向转换,工作频率高达10 MHz,能满足本系统CCD驱动频率1 MHz的要求。
1.3 信号处理模块
由于CCD输出的是带有暗电流噪声和输出放大器复位脉冲串扰的模拟信号,因此必须进行信号处理才能为后续电路使用[3]。本系统中,使用ADI公司生产的专用CCD信号处理芯片AD9826,该芯片集成16位ADC,速度可达15 MS/s。作为模数转换芯片,其片内集成相关双采样(Correlated Double Sampler,CDS)等多种功能电路,提高了信号预处理的质量,简化了电路的设计。
AD9826由VINR、VNG、VINB三路独立采样通道电路组成,每个采样通道都由输入箝位电路、相关双采样电路、偏移DAC和可编程增益放大器组成,并通过多路复用(MUX)接入一个16位模数转换器,采样输出信号通过8位并行数据总线分时输出16位数据。此处系统设计只取一路线阵CCD输出,选择VINR红色通道作为信号输入,采用单通道CDS和16 bit转换模式。CCD输出R信号经过隔直电容,将有效信号耦合输入到AD9826中VINR通道采样,其他两个通道要做接地处理,以防止对VINR通道产生干扰,如图3所示。
AD9826的工作模式可通过三线双向串行接口(SCLK、SLOAD、SDTATA)配置内部寄存器来设定。串行时钟SCLK最高频率为10 MHz,系统采用5 MHz频率,由主时钟50 MHz分频可得。CCD输出信号幅值为0~4 V,不需要AD9826内部增益放大。
AD9826工作在单通道CDS工作模式下,CDS电路在每一像素周期内对输入的CCD信号采样两次。CDSCLK1的下降沿采样参考信号,CDSCLK2的下降沿采样有效信号。CDS电路输出的是两次采样值之差,消除了噪声,此时信号即为有效视频信号。
分析CCD输出信号特点,FPGA内部产生AD9826的工作时序,确保对CCD输出信号的正确采样。CCD连续输出2 700个有效像素单元信号之前,先输出64个哑元信号,此处在CCD第64个复位脉冲上升沿到来后FPGA设置采样使能信号cds_en有效。考虑到单通道CDS模式下,模数转换的数据会延迟3个采样时钟周期输出,在第2 768个复位脉冲上升沿后拉低采样使能cds_en,这样才能采集到完整的2 700个CCD像素信号。由于TCD2252D输出像元频率为1 MHz,AD9826的相关双采样时钟CDSCLK1、CDSCLK2和采样时钟ADCLK都设置为1 MHz。
1.4 数据缓存模块
数据缓存模块的功能是保证数据采集与传输的连续性。由于USB接口芯片的传输速率和A/D转换后的数据速率不同步,需要在两者之间增加一个数据缓存单元。目前常用的数据缓存器件有SRAM、双口RAM、FIFO等。高速数据采集系统中,常使用异步FIFO进行数据缓存,但只能对FIFO顺序地读/写数据。当需要存取特定单元的数据而非全部存储空间时,系统的灵活性大大降低。因此本设计采用双口RAM进行数据缓存,较好地解决了时钟不匹配的问题。
为了有效利用FPGA片内资源,简化电路设计,本文在FPGA内部定制双口RAM来缓存模数转换后的数字信号。EP4CE6E22C8内部集成了30个M4K RAM块,足够CCD输出一帧图像数据(2 700×16 bit)的缓存。此处在FPGA内部配置深度为4 096、位宽为16 bit的双口RAM。写时钟和AD9826的采样时钟ADCLK一致,写地址计数到2 699时,开始读RAM。读时钟与写USB端点FIFO的时钟IFCLK一致,保证数据传输的完整性和稳定性。
1.5 USB接口模块
USB接口模块的功能是将FPGA内部缓存的图像数据读出来,传输给上位机。USB电路设计的主要对象是USB接口控制芯片。目前,市场上多家半导体厂商提供USB接口控制芯片。本系统采用Cypress公司的EZ-USB FX2系列USB接口控制芯片CY7C68013来传输图像数据。CY7C68013是一款具有USB2.0协议的微控制处理器,最高传输速率可达480 Mb/s,其片内集成USB2.0收发器、增强型的8051控制器、智能串行接口引擎(SIE)、4 KB的FIFO存储器和可编程I/O接口。
由于FX2芯片集成度高,用户在不熟悉复杂的USB底层协议的情况下也可以顺利开发USB接口设备。FX2有Slave FIFO和GPIF两种接口方式。此处采用Slave FIFO接口方式进行数据通信。在该模式下,FPGA作为主机,与USB通信传输数据不经过CPU的控制,而是经过芯片内部端点FIFO来传输,传输速度和CPU使用率更高。CY7C68013与FPGA的接口电路如图4所示,CY7C68013的并行数据引脚和控制状态引脚直接与FPGA接口相连即可。
USB接口设计主要是设计FPGA对USB接口芯片的逻辑控制[4]。FX2工作于Slave FIFO模式时,FPGA可以像对普通FIFO一样对FX2中端点的数据缓冲区进行读写。FPGA提供给芯片普通的时序信号、握手信号、读写信号和输出允许信号。本系统FX2工作于同步写方式,接口时钟由FPGA提供。当SLWR有效时,FD总线上的数据在每个时钟信号IFCLK上升沿时被写入FIFO。
FPGA程序中采用状态机实现同步写Slave FIFO方式,状态描述如下:(1)IDLE:总线空闲,当双口RAM中存储的数据达到设定深度时,写事件发生,转到状态state1;(2)state1:指向IN FIFO端口,激活FIFOADR[1:0],选择端点6,然后转向状态state2;(3)state2:判断FIFO“满”标志FLAGB的状态,如果为假,即FIFO不满,则转向状态state3,否则停留在该状态;(4)state3:写数据到总线上,激活SLWR,写数据到FIFO并增加FIFO指针,然后转向状态state4;(5)state4:检测是否有更多的数据要写,如果有则转向状态state2,否则转向状态IDLE。
1.6 上位机模块
上位机用来检测USB设备的连接状态,显示采集到的CCD数据。上位机采集有两个采集模式:实时采集模式连续地接收来自CCD的图像数据并显示;单帧采集模式单次接收来自CCD的图像数据并显示。保存数据将当前显示的一帧像素数据保存在安装目录下。
正常情况下,系统的USB设计包括三个方面的程序设计:固件程序设计、设备驱动程序设计和上位机应用程序设计[5]。Cypress公司为开发者提供了完善的软件开发工具包,开发者只需在官方例程固件框架上修改TD_Init函数即可变为自己的固件,至于USB驱动程序可以使用工具包自带的通用驱动程序,只需将驱动引导文件中对应的VID和PID修改成与固件一致即可。上位机程序在VS2008环境下开发,用户可以使用CYIOCTL控制函数类和CyAPI控制函数类来实现对USB设备读取数据。
2 实验分析
在室光条件下,系统以线阵CCD作为图像传感器,采集外界图像信息。当双口RAM中一帧数据存储完信号和读使能信号有效时,USB接口芯片开始传输CCD图像数据,送给上位机显示。图5为线阵CCD传感器部分遮光时采集到的一帧图像,图中低电平为CCD被遮部分的光强分布。由采集到的数据和上位机显示可以看出采集系统能够实现CCD数据的实时采集。
3 结论
本文设计了基于FPGA的线阵CCD实时采集系统,以线阵CCD作为图像传感器,使用CCD专用信号处理芯片AD9826对CCD信号去噪并实现高速A/D转换,同时用USB接口芯片完成CCD数据的传输,最后在上位机上显示采集的图像数据。系统采用集成了相关双采样、可编程增益放大器的专用CCD处理芯片,而不是像以往那样采用分立元件搭建模拟处理电路,并且充分利用FPGA内部RAM作数据缓存,简化了电路设计,减小了功耗,增加了系统的灵活性。系统扩展性较强,适用于机器视觉、非接触测量等领域。
参考文献
[1] 王庆有.CCD应用技术[M].天津:天津大学出版社,2000.
[2] 陆荣鑑,陈丰饶.基于CPLD的彩色线阵CCD在木板色选系统中的应用[J].机电工程,2012(6):737-740.
[3] 黄涛,廖胜,韩维强.基于AD9978A双通道的CCD相机设计[J].电子技术应用,2013,39(3):57-60.
[4] 辛凤艳,孙晓晔.基于FPGA和线阵CCD的高速图像采集系统[J].计算机技术与发展,2012(8):205-207,212.
[5] 薛圆圆,赵建领.USB应用开发宝典[M].北京:人民邮电出版社,2011.