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