張?;?,李彬華,季凱帆,何 春
(昆明理工大學(xué)信息工程與自動化學(xué)院,昆明 650051)
NiosⅡ處理器是是一種可配置軟核處理器,這種可配置性使得它具有很強的靈活性,加之其在成本和性能上的優(yōu)勢,因而得到了廣泛應(yīng)用,成為目前最流行的軟核處理器之一。NiosⅡ處理器在天文成像、數(shù)據(jù)采集、望遠鏡控制等方面已有多個成功應(yīng)用的例子[1-5],本文介紹的內(nèi)容,也屬于NiosⅡ處理器在天文成像方面的開發(fā)應(yīng)用范疇。
近年來,我們一直致力于一種特殊成像方式的研究,即同幅雙速跟蹤成像(Dual-Speed Tracking Imaging on Same Frame,簡記為DSTIS)。在該相機的成像方法、工作原理、可能的科學(xué)應(yīng)用場合以及具體的相機研制技術(shù)方面(如硬件設(shè)計制作、數(shù)字控制技術(shù)和控制軟件設(shè)計等)做了大量的工作[6-8]。
本文介紹DSTIS相機NiosⅡ控制軟件的設(shè)計思想、方法和部分關(guān)鍵技術(shù)。該軟件是以Altera公司為NiosⅡ提供的μC/OS-Ⅱ多任務(wù)實時操作系統(tǒng)下的Simple Socket Server模板為基礎(chǔ),結(jié)合相機的具體要求,開發(fā)出的相機端本地控制軟件。下面先討論該CCD相機控制軟件的設(shè)計要求,再重點介紹相關(guān)控制模塊,最后簡單介紹調(diào)試過程并對調(diào)試結(jié)果進行分析。
DSTIS相機是一個具有遠程聯(lián)網(wǎng)控制功能的相機系統(tǒng),相機是一個本地網(wǎng)絡(luò)設(shè)備,它受遠程主機的控制。這就要求相機端控制軟件能夠正確接收和解析遠程主機的命令;精確控制其數(shù)字控制器[8],并通過NiosⅡ處理器和數(shù)字控制器對模擬電路[7]進行驅(qū)動和控制。在模擬電路的CCD信號處理鏈路中,為消除CCD輸出圖像信號中的低頻噪聲和白噪聲,并對信號進行調(diào)理,設(shè)置了前置放大、濾波和一個可編程控制的增益選擇放大電路,采用雙斜積分電路來消除CCD輸出放大器產(chǎn)生的復(fù)位噪聲。增益選擇放大電路主要由數(shù)字信號控制的電阻網(wǎng)絡(luò)和運放組成,通過不同的數(shù)字信號組合,可以有效地改變網(wǎng)絡(luò)中的增益電阻和反饋電阻,從而控制放大器的增益。雙積分電路對CCD視頻信號在一個周期內(nèi)進行正相和反相兩次積分,其差值即為需要處理的有用信號。在積分電路中設(shè)置了可供選擇的兩檔積分電容。在數(shù)字控制器中,要提供DSTIS相機4種工作方式的控制模塊,使每種工作模式能輸出相應(yīng)的CCD控制信號。為此,控制器加入一個頂層控制模塊,實現(xiàn)4種工作模式的順利切換,減少控制器的對外接口,節(jié)省硬件資源。
這樣就對相機的NiosⅡ控制軟件提出了相應(yīng)要求,要能正確控制模擬電路和數(shù)字控制器實現(xiàn)相應(yīng)功能,并能將數(shù)據(jù)正確上傳至遠程主機。即要使相機能實現(xiàn)與遠程主機的通信連接,命令下傳時采用TCP/IP協(xié)議、數(shù)據(jù)上傳時采用UDP協(xié)議;根據(jù)實際測試的需要對數(shù)字控制器頂層模塊進行控制以設(shè)置數(shù)字控制器的工作模式、讀出頻率、曝光時間;能正確控制模擬電路的增益、積分方向和積分電容的選擇,積分時間的設(shè)定;并將經(jīng)過模數(shù)轉(zhuǎn)換之后的圖像數(shù)據(jù)利用NiosⅡ處理系統(tǒng)的DMA通道轉(zhuǎn)存到SDRAM中,最后經(jīng)Internet網(wǎng)絡(luò)將這些數(shù)據(jù)打包上傳到遠程主機。
采用Altera公司的FPGA,可以使用QuartusⅡ開發(fā)軟件包。QuartusⅡ還包含一個SOPCBuilder設(shè)計平臺,用戶可以在該平臺上設(shè)計自定義的NiosⅡ嵌入式軟核處理器。然后使用NiosⅡ集成開發(fā)環(huán)境(IDE)設(shè)計、開發(fā)NiosⅡ應(yīng)用軟件。在軟件設(shè)計時,用戶可以利用NiosⅡ IDE的一些樣例或稱模板,加速應(yīng)用程序的設(shè)計。
控制軟件的底層是NiosⅡ處理器和μC/OS-Ⅱ多任務(wù)實時操作系統(tǒng)。軟件設(shè)計包括兩方面的工作:一個是生成NiosⅡ處理器及用戶軟件開發(fā)包(SDK),另一個是NiosⅡ應(yīng)用程序的設(shè)計。首先,根據(jù)相機控制要求,用SOPC Builder設(shè)計并生成了一個自定義的NoisⅡ處理器及相應(yīng)的用戶軟件開發(fā)包。然后,使用NiosⅡ IDE新建一個基于Simple Socket Server的C/C++應(yīng)用工程,獲得一個包含5個C文件、2個頭文件以及帶有l(wèi)wIP協(xié)議的系統(tǒng)函數(shù)庫的應(yīng)用軟件模板。
系統(tǒng)運行時,NiosⅡ處理器首先從main()中調(diào)用lwip_stack_init()來創(chuàng)建lwIP網(wǎng)絡(luò)棧的相關(guān)任務(wù),即通過回調(diào)函數(shù)init_done_func()創(chuàng)建lwIP網(wǎng)絡(luò)棧任務(wù)、網(wǎng)絡(luò)DHCP任務(wù)、網(wǎng)絡(luò)套接字服務(wù)任務(wù)。接著,調(diào)用OSTaskCreateExt()函數(shù)創(chuàng)建一個初始化任務(wù)。該任務(wù)初始化操作系統(tǒng)數(shù)據(jù)結(jié)構(gòu),其中包括各任務(wù)消息(即信號量)在內(nèi)的實時操作系統(tǒng)(RTOS)資源,并創(chuàng)建LED管理任務(wù)和LED顯示任務(wù),完成后刪除自己。最后,調(diào)用OSStart()來啟動多線程。
但此模板只能實現(xiàn)簡單的網(wǎng)絡(luò)通信及Altera開發(fā)板上LED燈控制任務(wù),并不能真正完成所需要的相機控制任務(wù)。要實現(xiàn)相機的控制功能,必須在此模板的基礎(chǔ)上進行相機控制應(yīng)用程序的開發(fā)。主要工作是刪除LED管理任務(wù)和LED顯示任務(wù)及相應(yīng)的消息,修改網(wǎng)絡(luò)套接字服務(wù)任務(wù),增加3個與相機管理控制、圖像數(shù)據(jù)讀出和上傳相關(guān)的任務(wù)(即相機管理控制CAMManagementTask、DMA處理任務(wù)CAMFIFOInputTask和UDP包發(fā)送任務(wù)SSSUDPSendTask)及相應(yīng)的消息(即圖像數(shù)據(jù)到來/FIFO半滿狀態(tài)的信號量CAMDataComingSem和DMA結(jié)束的信號量CAMDMAFinishSem)。
由此可見,相機管理控制任務(wù)、DMA處理任務(wù)和UDP包發(fā)送任務(wù)是本相機NiosⅡ控制軟件設(shè)計的主要內(nèi)容。前一個任務(wù)主要進行相機狀態(tài)監(jiān)控和具體控制任務(wù)執(zhí)行與管理,后兩個任務(wù)則主要是進行圖像數(shù)據(jù)的采集和上傳,屬于同一個模塊。因此,下面將NiosⅡ控制軟件劃分為相機管理控制和數(shù)據(jù)上傳兩個模塊來介紹。
相機管理控制任務(wù)主要是等待和接收網(wǎng)絡(luò)套接字服務(wù)任務(wù)中通過消息隊列發(fā)送過來的相機控制命令。一旦收到控制命令,立即根據(jù)自定義的通信協(xié)議進行命令解析,獲得命令代碼及其參數(shù)。之后根據(jù)命令代碼,采用switch-case語句進行分支,以便執(zhí)行相應(yīng)的命令。命令執(zhí)行完成后,又處于等待遠程主機命令的狀態(tài)。相機管理控制模塊的程序框圖如圖1。下面簡單介紹圖中各命令的實現(xiàn)方法。
工作模式的設(shè)置:DSTIS相機有多種工作模式,在不同的工作模式下,使用DMA通道轉(zhuǎn)存和UDP上傳的圖像數(shù)據(jù)量也不盡相同。但由于每一種工作模式下的數(shù)據(jù)量是確定的,所以,只要設(shè)定各工作模式下對應(yīng)的DMA次數(shù)(total_dma)、UDP包數(shù)(total_udp)以及每個DMA和UDP所處理的數(shù)據(jù)大小,使得在DMA進行到所定義的次數(shù)和UDP進行到所定義的包數(shù)時就停止,這樣就能保證圖像數(shù)據(jù)傳輸過程既簡單又基本可靠。另外,通過系統(tǒng)庫支持的輸出語句IOWR_ALTERA_AVALON_PIO_DATA()向自定義的NiosⅡ處理器的一個2比特位寬PIO口賦值,從而使相機數(shù)字控制器的工作模式選擇輸入端口獲得需要的設(shè)置參數(shù)。
圖1 相機管理控制模塊框圖Fig.1 Block diagram of the camera control module
讀出速率的設(shè)置、曝光時間的設(shè)置、電容選擇、積分時間的設(shè)置、增益設(shè)置這5個命令的實現(xiàn)方法基本相同,都是根據(jù)命令參數(shù)值,通過系統(tǒng)庫支持的輸出語句IOWR_ALTERA_AVALON_PIO_DATA()向NiosⅡ處理器的5個相應(yīng)的PIO口賦值,設(shè)置相機數(shù)字控制器的對應(yīng)的輸入端口。
采集圖像:在相機其它各項設(shè)置完成后,遠程PC可以通過網(wǎng)絡(luò)向相機發(fā)送這一命令。執(zhí)行此命令時,先通過PIO端口給FIFO發(fā)出復(fù)位信號(一個脈沖),使FIFO清零;然后,調(diào)用Altera中斷處理函數(shù),設(shè)置FIFO半滿中斷方式并使能該中斷;最后,通過PIO端口給相機數(shù)字控制器發(fā)出啟動曝光和采集圖像的信號。數(shù)字控制器收到此信號后,在一個時鐘周期后立即執(zhí)行CCD清零,然后開始曝光和成像的過程。在曝光結(jié)束后,控制器輸出CCD驅(qū)動時鐘及模擬電路邏輯控制信號,將CCD上的光電圖像經(jīng)垂直、水平轉(zhuǎn)移到輸出放大器,并通過模擬信號處理鏈路及模數(shù)轉(zhuǎn)換器(ADC)轉(zhuǎn)換成數(shù)字圖像,再經(jīng)數(shù)據(jù)緩沖器送到FIFO緩沖器。
模擬數(shù)據(jù)上傳測試:因為相機圖像信號在經(jīng)過模數(shù)轉(zhuǎn)換之后將數(shù)據(jù)上傳至遠程主機時要經(jīng)過FIFO緩沖器、DMA處理程序、UDP打包傳送這些步驟。在這幾個步驟中若是有一個環(huán)節(jié)出了問題就會導(dǎo)致整個圖像采集過程失敗。為便于調(diào)試,增加了一個由NiosⅡ處理器生成的模擬數(shù)據(jù)經(jīng)FIFO緩存、DMA處理、UDP打包上傳的測試。實現(xiàn)的方法是在NiosⅡ軟件中用雙循環(huán)語句生成一組有規(guī)律的數(shù)據(jù)(例如,重復(fù)的0至1023)由NiosⅡ處理器的一個PIO端口輸出到FIFO,經(jīng)FIFO、DMA、UDP上傳到PC機,根據(jù)PC機接收到的數(shù)據(jù)與生成的模擬數(shù)據(jù)比較,就可以判斷數(shù)據(jù)上傳鏈路是否正確。
如前所述,數(shù)據(jù)上傳模塊主要由2個任務(wù)組成,一個是DMA處理任務(wù)CAMFIFOInputTask,另一個是UDP包發(fā)送任務(wù)SSSUDPSendTask。經(jīng)過模數(shù)轉(zhuǎn)換后的CCD信號,在進行DMA處理之前,為防止由于AD轉(zhuǎn)換的速率和數(shù)據(jù)采集系統(tǒng)處理的速率不匹配而丟失數(shù)據(jù),通常在AD轉(zhuǎn)換到數(shù)據(jù)采集系統(tǒng)之間加一個FIFO緩沖器。使用的FIFO是32bits×4096,半滿狀態(tài)可存儲兩行CCD像元的數(shù)據(jù)。下面以全凝視、沒有超越讀出(overscan)的工作模式為例來說明這兩個任務(wù)。
圖2 DSTIS相機數(shù)據(jù)上傳流程圖Fig.2 Flowchart of data upload of a DSTIS camera
DMA處理任務(wù)CAMFIFOInputTask:DMA處理進程啟動后,調(diào)用OSSemPend()函數(shù),使其一直處于等待CAMDataComingSem這個信號量的狀態(tài)。當(dāng)FIFO達到半滿狀態(tài)時就會發(fā)出一個中斷信號,CPU收到中斷信號后啟動中斷服務(wù)程序?qū)⒅袛嗉拇嫫鲝?fù)位,并調(diào)用OSSemPost()函數(shù)發(fā)出一個信號量CAMDataComingSem。當(dāng)DMA進程收到這個信號量以后,啟動DMA處理程序,將來自FIFO的數(shù)據(jù)存入存儲容量為16Mbytes的SDRAM中。每一行CCD像元個數(shù)是2048個,每一個像元在經(jīng)過AD轉(zhuǎn)換之后是16位的數(shù)據(jù),在這里設(shè)定每次DMA處理程序處理1024個像元的數(shù)據(jù),那么總共2080行的數(shù)據(jù)就要進行4160次DMA處理。DMA計數(shù)器在每完成一次DMA后加1,當(dāng)計數(shù)器的計數(shù)達到前面所設(shè)定的值total_dma時,DMA處理進程結(jié)束,同時會發(fā)出一個CAMDMAFinishSem的信號量。
UDP包發(fā)送任務(wù)SSSUDPSendTask:這個進程在完成網(wǎng)絡(luò)初始化后就會一直處于等待信號量CAMDMAFinishSem的狀態(tài)。當(dāng)收到這個信號量以后,啟動UDP進程開始執(zhí)行,將SDRAM里的數(shù)據(jù)打包上傳。在這里設(shè)定每個UDP包傳送512個像元的數(shù)據(jù),即1024bytes。為了識別相機是在什么工作模式下上傳的數(shù)據(jù),在這512個像元數(shù)據(jù)前面增加了4bytes的數(shù)據(jù)頭。這樣2080行的數(shù)據(jù)就要進行8320個UDP包傳送。UDP計數(shù)器在每完成一次UDP后就會加1,當(dāng)計數(shù)器的計數(shù)達到前面所設(shè)定的total_udp的值時,UDP包傳送進程結(jié)束,上傳的數(shù)據(jù)即可在PC機上實時顯示和存盤,整個數(shù)據(jù)采集和上傳過程結(jié)束。
根據(jù)上節(jié)所述的NiosⅡ控制軟件設(shè)計方法和開發(fā)過程,設(shè)計并調(diào)試了DSTIS相機的NiosⅡ處理器端控制程序。同時,也在遠程PC機上使用VC++設(shè)計了的上位機控制軟件,并進行了綜合調(diào)試工作。下面簡單介紹NiosⅡ控制軟件的部分調(diào)試結(jié)果。
NiosⅡ控制軟件必須完成對相機數(shù)字控制器的正確控制,以使相機數(shù)字控制器向硬件電路輸出CCD成像和圖像讀出所需要的全部數(shù)字邏輯信號。這是該控制軟件的首要任務(wù)。圖4即是綜合調(diào)試時用示波器直接保存的一幅實測波形圖。
圖3顯示的是相機模擬信號處理板上的5個關(guān)鍵點實測波形,從上往下記為第1路至第5路。第1路是從前置放大輸出到模擬信號處理板的CCD信號;第2路是CCD信號經(jīng)差分放大后正向信號與反向信號做減法之后的波形;第3路是對CCD信號積分后進行差分放大的正向信號;第4路是對CCD信號積分后進行差分放大的反向信號;第5路是對CCD信號積分之后的波形。在這個波形中可以看到,控制軟件能夠正確控制數(shù)字控制器的時序輸出,模擬電路對信號進行處理,與要實現(xiàn)的功能符合,達到了系統(tǒng)對相機端NiosⅡ控制軟件的要求。
圖3 模擬電路調(diào)試波形Fig.3 Waveforms at some test points in the analog circuit
當(dāng)相機圖像出現(xiàn)問題時,測試人員首先需要區(qū)分是硬件問題還是軟件問題。模擬數(shù)據(jù)上傳測試可以幫助調(diào)試人員快速判斷整個數(shù)據(jù)傳輸鏈路(FIFO-DMA-UDP-PC)中軟件的各部分是否正常。模擬數(shù)據(jù)上傳測試正常,說明控制軟件的數(shù)據(jù)上傳模塊工作正常。
圖4 模擬數(shù)據(jù)上傳測試Fig.4 Test image after the simulated data upload
圖4是NiosⅡ系統(tǒng)生成的模擬數(shù)據(jù)上傳所顯示出來的結(jié)果。在實際成像時,進入FIFO的數(shù)據(jù)是32位的,即CCD芯片一個水平寄存器的兩端各讀出一個像元,每像元16位,這兩個16位數(shù)組成32位數(shù)。在圖像復(fù)原并進行顯示時,需要先將這兩個像元的數(shù)據(jù)(即高16位和低16)位分開,然后分別從圖像顯示界面的最左端和最右端開始往中間依次排列,這樣就能將CCD所成的圖像還原出來。在軟件中生成模擬數(shù)據(jù)的時候,是從0到1023依次遞增的有規(guī)律的數(shù),每個數(shù)以16位二進制數(shù)的形式發(fā)送給FIFO,每次發(fā)送兩個相同的數(shù)拼成32位,以此模擬從ADC經(jīng)緩沖器傳送到FIFO的兩個并行像元的32位數(shù)據(jù)。上傳的模擬數(shù)據(jù)在圖像顯示界面上顯示成圖像就是兩邊暗,中間亮的效果。經(jīng)過100多次實際測試,對每次所上傳的模擬數(shù)據(jù)進行統(tǒng)計對比分析,沒有發(fā)現(xiàn)誤碼。
從本控制軟件在DSTIS相機系統(tǒng)上的調(diào)試結(jié)果可以看出,NiosⅡ處理器系統(tǒng)能很好地完成對相機數(shù)字控制器的控制,進而完成對相機模擬電路的控制。系統(tǒng)軟件的調(diào)試成功,進一步證明了同幅雙速跟蹤成像原理的技術(shù)可行性。不過,要能將CCD圖像信號正確的進行AD轉(zhuǎn)換、采集、顯示和存儲,還需要進行制冷、對差分放大的偏置電壓及AD的偏置電壓進行反復(fù)調(diào)試,相關(guān)研究工作正在進行中。
[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] 李彬華,李勇明,王慧娟.空間運動目標(biāo)位置較差測量的CCD成像方法[R]//上海:2006中國天文學(xué)會年天文儀器與技術(shù)分會報告,2006.
[7] 李勇明,李彬華,王慧娟,等.同幅雙速跟蹤成像CCD相機模擬電路系統(tǒng)設(shè)計[J].天文研究與技術(shù)-國家天文臺臺刊,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相機數(shù)字控制器設(shè)計[J].天文研究與技術(shù)-國家天文臺臺刊,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.