基于FPGA的CMOS工业相机设计

周光宇 程萍
摘 要: 针对传统的工业相机成本高昂、灵活性差的缺点,设计了基于FPGA的CMOS工业相机。在分析工业相机原理的基础上设计了CMOS工业相机的硬件电路,利用FPGA配置图像传感器并采集图像数据,然后在FPGA中缓存处理,最后通过Camera Link接口输出图像数据。仿真结果显示,该相机可以以20 f/s的帧频输出960P的图像数据,同时该相机可稳定连续工作,相机可将图像处理算法移植进来,有着较好的灵活性。
关键词: 工业相机; 图像传感器; 可编程逻辑门阵列; Camera Link接口
中图分类号: TN409?34 文献标识码: A 文章编号: 1004?373X(2017)22?0134?03
Abstract: The traditional industrial camera has the characteristics of expensive cost and poor flexibility, so a CMOS industrial camera based on FPGA is designed. The hardware circuit of the CMOS industrial camera was designed on the basis of the analysis of the industrial camera′s principle. The FPGA is used to configure the image sensor, acquire the image data and conduct buffer processing of the data in FPGA. The image data is output through the Camera Link interface. The simulation results show that the camera can output the image data (960 pixel) with the frequency of 20 f/s, work stably and continuously, and transplant the image processing algorithm into it, which has perfect flexibility.
Keywords: industrial camera; image sensor; FPGA; Camera Link interface
机器视觉不再仅仅替代人眼获取图像,更具有人的大脑提取、处理信息的功能。相机在机器视觉技术中扮演着眼睛的作用,它不仅直接决定所采集到的图像分辨率、图像质量等,同时也与整个系统的运行模式直接相关[1]。传统的工业相机是由专用的集成芯片控制图像传感器完成光电转换后将数据传输到计算机中,成本高且灵活性差[2]。20世纪80年代,FPGA技术的引入为数字逻辑设计开创了新的可行性,FPGA同时具备了硬件的并行性及软件的灵活性[3]。由于FPGA可编程逻辑的容量大、灵活性强击并行处理能力和内嵌DSP多模块等特点,本文设计了一款基于FPGA的CMOS工业相机,实现了图像采集及数据传输的功能。
1 系统总体设计
本相机主要包括四部分:图像传感器模块、FPGA核心控制模块、Camera Link接口电路以及SRAM存储器模块,系统结构如图1所示。上位机通过Camera Link接口电路中的串口通信将相机的工作参数及命令输出给FPGA,FPGA按接收到的命令控制图像传感器并采集图像,采集到的图像数据传输至FPGA中按行缓存,最后通过Camera Link接口输出到上位机中。
2 相机硬件电路设计
2.1 图像传感器外围电路设计
采用安森美半导体公司的MT9M034图像传感器。MT9M034是一款1/3.0英寸,1 280×960有源像素阵列的CMOS数字图像传感器,可以产生清晰,锐利的数字图像。在线性模式下,每个像素时钟下可并行输出12位原始数据,可同时输出线和帧信号,相机还可通过外部触发信号工作[4]。MT9M034图像传感器共需要5种供电,分别为像素电源2.8 V、模拟电源2.8 V、I/O电源1.8 V、核心电源1.8 V和PLL电源2.8 V。供电电源要充分解耦。设计时数字部分和模拟部分要分开。
2.2 Camera Link电路设计
Channel Link由一对驱动器和接收器组成。驱动器接收28位单端数据信号和一位单端时钟。驱动器总共驱动5条LVDS数据流,包括以7∶1方式串行化的4条LVDS数据流和1个专用的时钟传输通道。接收器接收4路LVDS数据信号和1路LVDS时钟信号,将数据流转换回28位的CMOS/TTL并行数据和一位时钟[5]。电路结构如图2所示,相机与FPGA之间分别由差分信号驱动器DS90CR287、接收器DS90LV048、驱动接收器DS90LV019转换。FPGA的输入输出信号经过转换以后连接到MDR26连接器上,在差分信号之间要100 Ω的差分阻抗。
3 相机软件设计
3.1 相机控制模块
在本设计中FPGA为主设备,图像传感器为从设备。FPGA产生时钟(SCLK),输入到图像传感器以同步传输,数据(SDATA)在FPGA与图像传感器之间双向传输。SDATA上拉1.5 kΩ电阻到VDD_IO[6]。I2C接口总线定义传输代码如图3所示。
Start bit是起始位,Slave Address是器件地址,包括7个地址位和1个方向位,最低有效位为“0”时表示写模式,为“1”时表示读模式;ACK/NoACK是应答位,每一个被传送的字節后面都跟随1位应答位;8 b Message是数据,每次传送8位数据,其后是应答位;Stop bit是停止位,时钟线为高电平,数据线由低电平变为高电平时有效[7]。
相机控制模块主要是对图像的尺寸,输出时钟频率自动曝光,增益和积分时间等寄存器进行了相应的设置。I2C 控制模块主要对 SCLK 和 SDATA 按照标准控制来进行寄存器的读/写。I2C总线仿真图如图4所示。
3.2 串口通信模块
串口通信模块用于设置相机的控制参数,主要有图像的尺寸、积分时间和增益。
(1) 波特率产生器。根据过采样采集原理,要产生一个为UART传输波特率的16倍的采样频率[8]。对于9 600 b/s波特率而言,采样频率应为153 600。系统时钟为50 MHz,波特率产生器需要模为326的计数器。
(2) UART接收器/发送器。接收器包括三个状态:开始、数据传输和停止状态,对应于UART传输协议中的开始位、数据传输位、停止位。
(3) FIFO缓冲器。本设计采用FIFO(First In First Out)缓存器,FIFO缓冲器由FPGA中的IP核生成[9]。
UART的接收和发送子模块结合起来,就可建立完整的UART模块,图5为串口通信模块的RTL视图,接收模块和发送模块共用一个波特率产生器。
3.3 图像接收与输出模块
图像数据采集到后,首先在FPGA内部的RAM中进行缓存,然后再通过Camera Link接口输出图像数据。图像传感器的图像数据输出格式如图6所示,当FV为高的时候代表帧有效,LV为高的时候代表线有效,FV与LV同时为高时图像数据有效。
在本設计中,图像像素大小为1 280H×960V。图像传感器输出图像数据至FPGA后,数据缓存至双端口RAM中。同时Camera Link驱动模块从双端口RAM中读取数据输出至差分驱动器DS90CR285。采用乒乓操作的方式,写第1行时读第2行,写第2行的时候读第1行。双端口RAM采用不同的读写时钟,写时钟为图像传感器输出像素时钟(PIXCLK)74.25 MHz。当FV和LV同时有效时写使能有效,写地址线为12位,数据线为12位;读时钟为Camera Link时钟50 MHz,采用A/B的方式输出图像,RAM的读地址线为11位,数据线为24位。Camera Link输出模块状态转移示意图见图7。
利用DALSA图像采集卡X64 Xcelera?CL LX1采集图像,通过图像采集软件可观察到相机的帧频为20 f/s,图像大小为1 280×960,可实时观察到图像且无卡顿。
4 结 论
本文设计的基于FPGA的CMOS工业相机以FPGA为核心控制器,通过I2C总线配置CMOS图像传感器MT9P034,将采集到的图像数据在FPGA内缓存后通过Camera Link接口输出,同时可通过Camera Link接口修改图像传感器的配置参数。本相机的软件配置都是通过FPGA进行的,可将图像处理算法如边缘检测、图像滤波等移植到该相机软件中,具有较高的实用性。
参考文献
[1] 黄钉劲,李飞,杨爽,等.高速Camera Link工业相机视频采集研究[J].价值工程,2015(4):43?44.
[2] 程瑶,周娜,王荣秀.基于FPGA的线阵型CCD驱动电路设计[J].电子器件,2017(1):82?86.
[3] 徐思燕.FPGA器件设计技术发展综述[J].通讯世界,2015(19):223.
[4] ON Semiconductor. 1/3?inch CMOS digital image sensor MT9M034 data sheet [EB/OL]. [2012?06?27]. https://wenku.baidu.com/view/d2b67d11866fb84ae45c8dcf.html.
[5] 肖儿良,韦荣明,颜文超,等.基于Aurora及Camera Link的高速数字图像传输[J].信息技术,2015(4):94?97.
[6] 杨龙,李范鸣,刘士建.DSP EMIF与FPGA双口RAM高速通信实现[J].现代电子技术,2014,37(13):10?12.
[7] 汤伟,刘慧忠,连钰洋,等.基于FPGA的工业数字摄像机系统的设计[J].液晶与显示,2015(1):103?108.
[8] 刘宝军,王中训,娄阳,等.基于FPGA的UART设计与实现[J].中国集成电路,2016(6):38?41.
[9] 刘慧忠.基于FPGA的纸病检测预处理系统的研究与实现[D].西安:陕西科技大学,2015.
[10] 周光宇,刘慧忠.边缘检测算法的FPGA实现[J].计算机系统应用,2015(10):271?275.