设计了基于ONSEMI(安森美半导体)公司的PYTHON300/PYTHON500/PYTHON1300系列图像传感器的成像电路。
最近设计了ONSemi安森美半导体公司的PYTHON系列图像传感器的成像电路,sensor用的是NOIP1FN1300A,以这个探测器为例,其他的几个型号应用方式是一样的。
这颗sensor的主要特点就是高输出帧率,高灵敏度。如果用全速输出,主频72MHz,LVDS数据率将达到720MHz,对电路设计和FPGA器件及程序、时序设计等等,都有一定的难度。
首先设计了硬件电路,FPGA用cyclone4(EP4CE55),ddr2存储器(MT47H64M16),flash(128M存储),外加USB2.0(CY7C68013A)图像传输。sensor采用4通道LVDS输出,主频降低到36MHz。程序里面,从sensor输出的数据写入到DDR2的过程中,只例化了一个FIFO,而没有做乒乓操作,所以,在行有效期间,像素数据写入fifo,在行消隐期间,数据存入DDR2。为了保证数据能够正常写入到DDR,这就需要额外的增加行消隐的时间。为了配合DDR的写入和USB2.0图像传输,行间(即行消隐时间)手动设置了较大的延时,造成帧率下降,根据实测,目前含USB传输的条件下,帧率达到64fps(1280*1024)。如果将人为增设的延时取消掉,实际帧率可达122fps(1280*1024)。
硬件上设计了三块电路板,一个USB接口板,一个FPGA核心处理板,一个CMOS焦面电路板。FPGA板与接口板之间采用50pin板对板连接器对插。sensor焦面板与FPGA板之间,使用90度板对板高速LVDS连接器对插。
编写FPGA程序代码:
sensor对上电时序有严格的要求,在datasheet上有单独章节,对上、下电时序做说明。最优的操作是遵循datasheet上的标准操作流程。但是如果条件受限,也不必太考虑上下电时序。我实际测试过,正常同时上下电,sensor也是可以正常工作的。
程序上首先是sensor的上电时序配置->sensor输出串并转换->行场同步信号译码->图像拼接->图像储存DDR->图像读出->USB2.0图像传输->上位机VC demo程序显示。
说实话,这颗sensor不是太好用,资料有限,手里仅限于一个datasheet。按照手册要求,编译好程序后,下载调试,经过努力,终于将图像调出。测试环境比较简陋,用个镜头贴在sensor前面,不可避免的会出现漏光,干扰成像效果。
全分辨率图像调试出来之后,又进行了开窗口操作,将sensor设置为640*512分辨率进行输出:
sensor内部有8组寄存器对应8个窗口的设置,也就是说,在前期初始化配置时,就可以先预置好8个窗口。当然,程序也可以设计成在线开窗口的方式,只不过程序里面需要设置窗口寄存器,另外做一些帧是否输出完毕的判断逻辑即可。
目前有些功能还待进一步实现,待续中.......