同幅双速跟踪成像CCD相机NiosⅡ控制软件的设计*
2010-01-25张牛虎李彬华季凯帆
张牛虎,李彬华,季凯帆,何 春
(昆明理工大学信息工程与自动化学院,昆明 650051)
NiosⅡ处理器是是一种可配置软核处理器,这种可配置性使得它具有很强的灵活性,加之其在成本和性能上的优势,因而得到了广泛应用,成为目前最流行的软核处理器之一。NiosⅡ处理器在天文成像、数据采集、望远镜控制等方面已有多个成功应用的例子[1-5],本文介绍的内容,也属于NiosⅡ处理器在天文成像方面的开发应用范畴。
近年来,我们一直致力于一种特殊成像方式的研究,即同幅双速跟踪成像(Dual-Speed Tracking Imaging on Same Frame,简记为DSTIS)。在该相机的成像方法、工作原理、可能的科学应用场合以及具体的相机研制技术方面(如硬件设计制作、数字控制技术和控制软件设计等)做了大量的工作[6-8]。
本文介绍DSTIS相机NiosⅡ控制软件的设计思想、方法和部分关键技术。该软件是以Altera公司为NiosⅡ提供的μC/OS-Ⅱ多任务实时操作系统下的Simple Socket Server模板为基础,结合相机的具体要求,开发出的相机端本地控制软件。下面先讨论该CCD相机控制软件的设计要求,再重点介绍相关控制模块,最后简单介绍调试过程并对调试结果进行分析。
1 DSTIS相机对NiosⅡ控制软件的要求
DSTIS相机是一个具有远程联网控制功能的相机系统,相机是一个本地网络设备,它受远程主机的控制。这就要求相机端控制软件能够正确接收和解析远程主机的命令;精确控制其数字控制器[8],并通过NiosⅡ处理器和数字控制器对模拟电路[7]进行驱动和控制。在模拟电路的CCD信号处理链路中,为消除CCD输出图像信号中的低频噪声和白噪声,并对信号进行调理,设置了前置放大、滤波和一个可编程控制的增益选择放大电路,采用双斜积分电路来消除CCD输出放大器产生的复位噪声。增益选择放大电路主要由数字信号控制的电阻网络和运放组成,通过不同的数字信号组合,可以有效地改变网络中的增益电阻和反馈电阻,从而控制放大器的增益。双积分电路对CCD视频信号在一个周期内进行正相和反相两次积分,其差值即为需要处理的有用信号。在积分电路中设置了可供选择的两档积分电容。在数字控制器中,要提供DSTIS相机4种工作方式的控制模块,使每种工作模式能输出相应的CCD控制信号。为此,控制器加入一个顶层控制模块,实现4种工作模式的顺利切换,减少控制器的对外接口,节省硬件资源。
这样就对相机的NiosⅡ控制软件提出了相应要求,要能正确控制模拟电路和数字控制器实现相应功能,并能将数据正确上传至远程主机。即要使相机能实现与远程主机的通信连接,命令下传时采用TCP/IP协议、数据上传时采用UDP协议;根据实际测试的需要对数字控制器顶层模块进行控制以设置数字控制器的工作模式、读出频率、曝光时间;能正确控制模拟电路的增益、积分方向和积分电容的选择,积分时间的设定;并将经过模数转换之后的图像数据利用NiosⅡ处理系统的DMA通道转存到SDRAM中,最后经Internet网络将这些数据打包上传到远程主机。
2 DSTIS相机NiosⅡ控制软件的设计
采用Altera公司的FPGA,可以使用QuartusⅡ开发软件包。QuartusⅡ还包含一个SOPCBuilder设计平台,用户可以在该平台上设计自定义的NiosⅡ嵌入式软核处理器。然后使用NiosⅡ集成开发环境(IDE)设计、开发NiosⅡ应用软件。在软件设计时,用户可以利用NiosⅡ IDE的一些样例或称模板,加速应用程序的设计。
2.1 相机NiosⅡ控制软件设计方法与过程
控制软件的底层是NiosⅡ处理器和μC/OS-Ⅱ多任务实时操作系统。软件设计包括两方面的工作:一个是生成NiosⅡ处理器及用户软件开发包(SDK),另一个是NiosⅡ应用程序的设计。首先,根据相机控制要求,用SOPC Builder设计并生成了一个自定义的NoisⅡ处理器及相应的用户软件开发包。然后,使用NiosⅡ IDE新建一个基于Simple Socket Server的C/C++应用工程,获得一个包含5个C文件、2个头文件以及带有lwIP协议的系统函数库的应用软件模板。
系统运行时,NiosⅡ处理器首先从main()中调用lwip_stack_init()来创建lwIP网络栈的相关任务,即通过回调函数init_done_func()创建lwIP网络栈任务、网络DHCP任务、网络套接字服务任务。接着,调用OSTaskCreateExt()函数创建一个初始化任务。该任务初始化操作系统数据结构,其中包括各任务消息(即信号量)在内的实时操作系统(RTOS)资源,并创建LED管理任务和LED显示任务,完成后删除自己。最后,调用OSStart()来启动多线程。
但此模板只能实现简单的网络通信及Altera开发板上LED灯控制任务,并不能真正完成所需要的相机控制任务。要实现相机的控制功能,必须在此模板的基础上进行相机控制应用程序的开发。主要工作是删除LED管理任务和LED显示任务及相应的消息,修改网络套接字服务任务,增加3个与相机管理控制、图像数据读出和上传相关的任务(即相机管理控制CAMManagementTask、DMA处理任务CAMFIFOInputTask和UDP包发送任务SSSUDPSendTask)及相应的消息(即图像数据到来/FIFO半满状态的信号量CAMDataComingSem和DMA结束的信号量CAMDMAFinishSem)。
由此可见,相机管理控制任务、DMA处理任务和UDP包发送任务是本相机NiosⅡ控制软件设计的主要内容。前一个任务主要进行相机状态监控和具体控制任务执行与管理,后两个任务则主要是进行图像数据的采集和上传,属于同一个模块。因此,下面将NiosⅡ控制软件划分为相机管理控制和数据上传两个模块来介绍。
2.2 相机管理控制模块的设计
相机管理控制任务主要是等待和接收网络套接字服务任务中通过消息队列发送过来的相机控制命令。一旦收到控制命令,立即根据自定义的通信协议进行命令解析,获得命令代码及其参数。之后根据命令代码,采用switch-case语句进行分支,以便执行相应的命令。命令执行完成后,又处于等待远程主机命令的状态。相机管理控制模块的程序框图如图1。下面简单介绍图中各命令的实现方法。
工作模式的设置:DSTIS相机有多种工作模式,在不同的工作模式下,使用DMA通道转存和UDP上传的图像数据量也不尽相同。但由于每一种工作模式下的数据量是确定的,所以,只要设定各工作模式下对应的DMA次数(total_dma)、UDP包数(total_udp)以及每个DMA和UDP所处理的数据大小,使得在DMA进行到所定义的次数和UDP进行到所定义的包数时就停止,这样就能保证图像数据传输过程既简单又基本可靠。另外,通过系统库支持的输出语句IOWR_ALTERA_AVALON_PIO_DATA()向自定义的NiosⅡ处理器的一个2比特位宽PIO口赋值,从而使相机数字控制器的工作模式选择输入端口获得需要的设置参数。
图1 相机管理控制模块框图Fig.1 Block diagram of the camera control module
读出速率的设置、曝光时间的设置、电容选择、积分时间的设置、增益设置这5个命令的实现方法基本相同,都是根据命令参数值,通过系统库支持的输出语句IOWR_ALTERA_AVALON_PIO_DATA()向NiosⅡ处理器的5个相应的PIO口赋值,设置相机数字控制器的对应的输入端口。
采集图像:在相机其它各项设置完成后,远程PC可以通过网络向相机发送这一命令。执行此命令时,先通过PIO端口给FIFO发出复位信号(一个脉冲),使FIFO清零;然后,调用Altera中断处理函数,设置FIFO半满中断方式并使能该中断;最后,通过PIO端口给相机数字控制器发出启动曝光和采集图像的信号。数字控制器收到此信号后,在一个时钟周期后立即执行CCD清零,然后开始曝光和成像的过程。在曝光结束后,控制器输出CCD驱动时钟及模拟电路逻辑控制信号,将CCD上的光电图像经垂直、水平转移到输出放大器,并通过模拟信号处理链路及模数转换器(ADC)转换成数字图像,再经数据缓冲器送到FIFO缓冲器。
模拟数据上传测试:因为相机图像信号在经过模数转换之后将数据上传至远程主机时要经过FIFO缓冲器、DMA处理程序、UDP打包传送这些步骤。在这几个步骤中若是有一个环节出了问题就会导致整个图像采集过程失败。为便于调试,增加了一个由NiosⅡ处理器生成的模拟数据经FIFO缓存、DMA处理、UDP打包上传的测试。实现的方法是在NiosⅡ软件中用双循环语句生成一组有规律的数据(例如,重复的0至1023)由NiosⅡ处理器的一个PIO端口输出到FIFO,经FIFO、DMA、UDP上传到PC机,根据PC机接收到的数据与生成的模拟数据比较,就可以判断数据上传链路是否正确。
2.3 数据上传模块的设计
如前所述,数据上传模块主要由2个任务组成,一个是DMA处理任务CAMFIFOInputTask,另一个是UDP包发送任务SSSUDPSendTask。经过模数转换后的CCD信号,在进行DMA处理之前,为防止由于AD转换的速率和数据采集系统处理的速率不匹配而丢失数据,通常在AD转换到数据采集系统之间加一个FIFO缓冲器。使用的FIFO是32bits×4096,半满状态可存储两行CCD像元的数据。下面以全凝视、没有超越读出(overscan)的工作模式为例来说明这两个任务。
图2 DSTIS相机数据上传流程图Fig.2 Flowchart of data upload of a DSTIS camera
DMA处理任务CAMFIFOInputTask:DMA处理进程启动后,调用OSSemPend()函数,使其一直处于等待CAMDataComingSem这个信号量的状态。当FIFO达到半满状态时就会发出一个中断信号,CPU收到中断信号后启动中断服务程序将中断寄存器复位,并调用OSSemPost()函数发出一个信号量CAMDataComingSem。当DMA进程收到这个信号量以后,启动DMA处理程序,将来自FIFO的数据存入存储容量为16Mbytes的SDRAM中。每一行CCD像元个数是2048个,每一个像元在经过AD转换之后是16位的数据,在这里设定每次DMA处理程序处理1024个像元的数据,那么总共2080行的数据就要进行4160次DMA处理。DMA计数器在每完成一次DMA后加1,当计数器的计数达到前面所设定的值total_dma时,DMA处理进程结束,同时会发出一个CAMDMAFinishSem的信号量。
UDP包发送任务SSSUDPSendTask:这个进程在完成网络初始化后就会一直处于等待信号量CAMDMAFinishSem的状态。当收到这个信号量以后,启动UDP进程开始执行,将SDRAM里的数据打包上传。在这里设定每个UDP包传送512个像元的数据,即1024bytes。为了识别相机是在什么工作模式下上传的数据,在这512个像元数据前面增加了4bytes的数据头。这样2080行的数据就要进行8320个UDP包传送。UDP计数器在每完成一次UDP后就会加1,当计数器的计数达到前面所设定的total_udp的值时,UDP包传送进程结束,上传的数据即可在PC机上实时显示和存盘,整个数据采集和上传过程结束。
3 调试结果
根据上节所述的NiosⅡ控制软件设计方法和开发过程,设计并调试了DSTIS相机的NiosⅡ处理器端控制程序。同时,也在远程PC机上使用VC++设计了的上位机控制软件,并进行了综合调试工作。下面简单介绍NiosⅡ控制软件的部分调试结果。
3.1 控制软件与数字控制器、模拟电路联调结果
NiosⅡ控制软件必须完成对相机数字控制器的正确控制,以使相机数字控制器向硬件电路输出CCD成像和图像读出所需要的全部数字逻辑信号。这是该控制软件的首要任务。图4即是综合调试时用示波器直接保存的一幅实测波形图。
图3显示的是相机模拟信号处理板上的5个关键点实测波形,从上往下记为第1路至第5路。第1路是从前置放大输出到模拟信号处理板的CCD信号;第2路是CCD信号经差分放大后正向信号与反向信号做减法之后的波形;第3路是对CCD信号积分后进行差分放大的正向信号;第4路是对CCD信号积分后进行差分放大的反向信号;第5路是对CCD信号积分之后的波形。在这个波形中可以看到,控制软件能够正确控制数字控制器的时序输出,模拟电路对信号进行处理,与要实现的功能符合,达到了系统对相机端NiosⅡ控制软件的要求。
图3 模拟电路调试波形Fig.3 Waveforms at some test points in the analog circuit
3.2 软件调试结果
当相机图像出现问题时,测试人员首先需要区分是硬件问题还是软件问题。模拟数据上传测试可以帮助调试人员快速判断整个数据传输链路(FIFO-DMA-UDP-PC)中软件的各部分是否正常。模拟数据上传测试正常,说明控制软件的数据上传模块工作正常。
图4 模拟数据上传测试Fig.4 Test image after the simulated data upload
图4是NiosⅡ系统生成的模拟数据上传所显示出来的结果。在实际成像时,进入FIFO的数据是32位的,即CCD芯片一个水平寄存器的两端各读出一个像元,每像元16位,这两个16位数组成32位数。在图像复原并进行显示时,需要先将这两个像元的数据(即高16位和低16)位分开,然后分别从图像显示界面的最左端和最右端开始往中间依次排列,这样就能将CCD所成的图像还原出来。在软件中生成模拟数据的时候,是从0到1023依次递增的有规律的数,每个数以16位二进制数的形式发送给FIFO,每次发送两个相同的数拼成32位,以此模拟从ADC经缓冲器传送到FIFO的两个并行像元的32位数据。上传的模拟数据在图像显示界面上显示成图像就是两边暗,中间亮的效果。经过100多次实际测试,对每次所上传的模拟数据进行统计对比分析,没有发现误码。
4 结束语
从本控制软件在DSTIS相机系统上的调试结果可以看出,NiosⅡ处理器系统能很好地完成对相机数字控制器的控制,进而完成对相机模拟电路的控制。系统软件的调试成功,进一步证明了同幅双速跟踪成像原理的技术可行性。不过,要能将CCD图像信号正确的进行AD转换、采集、显示和存储,还需要进行制冷、对差分放大的偏置电压及AD的偏置电压进行反复调试,相关研究工作正在进行中。
[1] Hu K,Y Deng,Ma X.Data acquirement and process system based on Ethernet for multichannel solar telescope [C]// Proc Of SPIE,2004,5496:489-496.
[2] Shang Y,Ye B,Song Q.A CMOS camera with extended dynamic range[C]//Proc Of SPIE,2004,5499:414-422.
[3] Zhao Z,Ye B,Astronomical Array Control & Acquisition System at NAOC[C]//In Beletic J E,Beletic J W,Amico P.Scientific Detector Workshop 2005.Dordrecht,Netherlands:Springer,2006,661-668.
[4] Deng J,Wang S,Shang Y,et al.An infrared imaging system based on SWIR FPA of SOFRADIR[C]//Proc Of SPIE,2006,6276:62761L.
[5] Li B,Hu K,Wang C,et al.Data acquisition system based on the Nios II for a CCD camera[C]//Proc Of SPIE,2006,6274:62741C.
[6] 李彬华,李勇明,王慧娟.空间运动目标位置较差测量的CCD成像方法[R]//上海:2006中国天文学会年天文仪器与技术分会报告,2006.
[7] 李勇明,李彬华,王慧娟,等.同幅双速跟踪成像CCD相机模拟电路系统设计[J].天文研究与技术-国家天文台台刊,2007,4(4):376-382.
Li Yongming,Li Binhua,Wang Huijuan,et al.Design of Analog Circuit and System for a CCD Camera with Dual-Speed Tracking Imaging on Same Frame[J].Astronomical Research & Technology,2007,4(4):376-382.
[8] 王慧娟,李彬华,李勇明,等.同幅双速跟踪成像CCD相机数字控制器设计[J].天文研究与技术-国家天文台台刊,2007,4(4):369-375.
Wang Huijuan,LiBinhua,LiYongming,et al.Design of Digital Controller for a CCD Camera with Dual-Speed Tracking Imaging on Same Frame[J].Astronomical Research & Technology,2007,4(4):369-375.