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