《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 可編程邏輯 > 設(shè)計(jì)應(yīng)用 > 一種空間相機(jī)的數(shù)據(jù)通信系統(tǒng)設(shè)計(jì)
一種空間相機(jī)的數(shù)據(jù)通信系統(tǒng)設(shè)計(jì)
來源:電子技術(shù)應(yīng)用2011年第1期
張培坤1,2, 高 偉1,宋宗璽1
1.中國科學(xué)院西安光學(xué)精密機(jī)械研究所,陜西 西安 710119; 2.中國科學(xué)院研究生院,北京 100039
摘要: 在空間相機(jī)數(shù)據(jù)采集應(yīng)用中,為了滿足電路板體積重量以及可擴(kuò)展性的要求,利用FPGA作為主控芯片,控制相機(jī)進(jìn)行數(shù)據(jù)采集和傳輸。在數(shù)據(jù)通信系統(tǒng)中,F(xiàn)PGA替代了傳統(tǒng)的單片機(jī)作為CAN總線的主控制器,并給出了詳細(xì)的硬件電路設(shè)計(jì)方法。在對(duì)CAN協(xié)議控制器SJA1000進(jìn)行功能及時(shí)序分析后,利用硬件語言對(duì)其通信流程進(jìn)行設(shè)計(jì)。實(shí)踐證明,在嚴(yán)格的時(shí)序邏輯下,F(xiàn)PGA能夠控制CAN總線穩(wěn)定正確地對(duì)相機(jī)數(shù)據(jù)進(jìn)行收發(fā)。
中圖分類號(hào):TP336  
文獻(xiàn)標(biāo)識(shí)碼: A
文章編號(hào): 0258-7998(2011)01-0077-03
Data communication system design in a space camera
Zhang Peikun1,2, Gao Wei1, Song Zongxi1
1. Xi’an Institute of Optics Precision Mechanics, Chinese Academy Sciences, Xi’an 710119, China; 2. Graduate School of the Chinese Academy of Sciences, Beijing 100039, China
Abstract: Data collection in a spcace camera application, to fulfil the demands of the circuit board about size, weight, and scalability, using FPGA as the main chip, control the camera for data collection and transmission. In data communication systems, FPGA replaces the traditional MCU as the main controller of the CAN communication system. And give the detailed hardware circuit design method. After analyzing the CAN protocol controller SJA1000 on function and timing demand, we design its communication flow with the hardware description language. Proctice has proved that, under strict sequential logic, FPGA is able to control the CAN bus to send and receive the camera data accurately and steadily.
Key words : space camera; data communication; CAN bus; FPGA


    CAN總線是由ISO定義的串行通信總線,主要用于各種過程檢測(cè)及控制。它是一種多主總線,具有高位速率和高抗電磁干擾性,而且能夠檢測(cè)出傳輸中產(chǎn)生的任何錯(cuò)誤。顯著的優(yōu)點(diǎn)使得CAN總線成為國際上應(yīng)用最廣泛的現(xiàn)場(chǎng)總線標(biāo)準(zhǔn)之一 [1]。
    由于其優(yōu)良的性能及獨(dú)特的設(shè)計(jì),CAN總線已被廣泛地應(yīng)用于各種分布式控制系統(tǒng)中。特別是由于CAN總線具有抗干擾性強(qiáng)、高數(shù)據(jù)傳輸率、低成本等優(yōu)點(diǎn),在小衛(wèi)星和微小衛(wèi)星中得到了越來越廣泛的應(yīng)用。在衛(wèi)星有效載荷數(shù)據(jù)控制傳輸中也會(huì)應(yīng)用,如空間相機(jī)數(shù)據(jù)通信方面。
1 數(shù)據(jù)通信系統(tǒng)
    一般來說,每個(gè)CAN模塊能夠被分成三個(gè)不同的功能塊,其結(jié)構(gòu)如圖1所示[2]。CAN總線收發(fā)器提供CAN協(xié)議控制器與物理總線之間的接口,控制從CAN 控制器到總線物理層或相反的邏輯電平信號(hào)。它的性能決定了總線接口、總線終端、總線長度和節(jié)點(diǎn)數(shù),是影響整個(gè)總線網(wǎng)絡(luò)通信性能的關(guān)鍵因素之一。CAN控制器執(zhí)行在CAN 規(guī)范里規(guī)定的CAN協(xié)議,它通常用于報(bào)文緩沖和驗(yàn)收濾波,對(duì)外具有與主控制器和總線收發(fā)器的接口。FGPA主控制器負(fù)責(zé)執(zhí)行應(yīng)用的功能,例如對(duì)空間CCD相機(jī)控制命令的發(fā)送、讀取圖像數(shù)據(jù)等。它通過對(duì)CAN控制器的編程控制CAN總線的工作方式、工作狀態(tài)以及數(shù)據(jù)的發(fā)送和接收。

    在本項(xiàng)目的特殊環(huán)境要求下,使用FPGA作為主控芯片,控制空間相機(jī)進(jìn)行數(shù)據(jù)采集與傳輸,并通過CAN總線進(jìn)行數(shù)據(jù)收發(fā)。較之傳統(tǒng)設(shè)計(jì)使用的單片機(jī),F(xiàn)PGA能夠在速度和體積上有更好的適應(yīng)性。FPGA一方面減少了電路板的復(fù)雜程度,縮短了實(shí)現(xiàn)周期,另一方面是FPGA具有豐富的資源、超高的性能和靈活的可編程性[3],提高了整個(gè)設(shè)備的可靠性,大大增強(qiáng)了電路板設(shè)計(jì)的靈活性和可擴(kuò)展性。
2 通信系統(tǒng)接口設(shè)計(jì)
   電路設(shè)計(jì)如圖2所示。SJA1000的AD0~AD7地址數(shù)據(jù)復(fù)用端口、ALE地址鎖存端口、讀使能信號(hào)RD、寫使能信號(hào)WR、片選CS端口, 均通過雙向總線收發(fā)器74ALVC164245與FPGA的I/O口相連[4]。這是因?yàn)镕PGA的3.3 V的LVTTL電平不支持SJA1000的5 V TTL電平,所以利用雙向總線收發(fā)器實(shí)現(xiàn)兩器件信號(hào)的電平轉(zhuǎn)換。SJA1000的中斷輸出信號(hào)INT連入FPGA,這樣CAN通信就可以采用中斷或查詢兩種方式。RST端口的電路實(shí)現(xiàn)SJA1000的上電自動(dòng)復(fù)位功能。MODE模式選擇端接+5 V,設(shè)置SJA1000控制器為Intel模式。SJA1000的時(shí)鐘晶振采用16 MHz,頻率調(diào)整電容取15 pF。設(shè)計(jì)中CAN總線的終端電阻取120Ω[5]。CAN 驅(qū)動(dòng)器PCA82C250的RS腳為工作模式選擇位,接地工作于高速模式,接高工作于待機(jī)模式。系統(tǒng)通過電阻R將芯片設(shè)定于斜率控制模式, 電阻值為47 kΩ,這時(shí)CAN總線應(yīng)工作于低速模式,可提高CAN總線抵抗射頻干擾的能力。在這種情況下,可直接使用非屏蔽雙絞線作為總線[6]。

    在接口設(shè)計(jì)中,有幾點(diǎn)需要注意:(1)SJA1000的INT端口是開漏輸出,所以在使用時(shí)應(yīng)該加上拉電阻,不然電平一直為低,無法實(shí)現(xiàn)中斷方式。(2)電平信號(hào)AD0~AD7必須按順序連接在總線收發(fā)器74ALVC164245的一個(gè)8位端口上,不可分開。
3 通信系統(tǒng)軟件設(shè)計(jì)
3.1 系統(tǒng)流程設(shè)計(jì)

     CAN總線通信模塊的控制主要包括三大部分:CAN總線節(jié)點(diǎn)初始化、報(bào)文發(fā)送和報(bào)文接收。主流程如圖3所示。

    CAN節(jié)點(diǎn)主程序主要包括:作為主控制器的FPGA的初始化、CAN控制器初始化、寄存器狀態(tài)查詢、接收發(fā)送報(bào)文以及數(shù)據(jù)處理。在此設(shè)計(jì)中,由于通信模塊對(duì)接收數(shù)據(jù)的實(shí)時(shí)性要求并不是很高,因此CAN總線的接收和發(fā)送采用查詢方式[7]。在整個(gè)流程實(shí)現(xiàn)中,主要是對(duì)CAN控制器SJA1000中的寄存器進(jìn)行讀寫操作。
3.2 讀寫流程控制
    SJA1000 的數(shù)據(jù)和地址信號(hào)為時(shí)分復(fù)用,而FPGA 中不存在地址的概念,因此在讀寫寄存器時(shí),要把SJA1000 中的寄存器地址當(dāng)作數(shù)據(jù)寫入。所以在系統(tǒng)的頂層模塊設(shè)計(jì)中,將設(shè)計(jì)一個(gè)讀寫子模塊來專門產(chǎn)生對(duì)CAN寄存器進(jìn)行讀寫控制的時(shí)序,而核心主模塊則只對(duì)通信流程進(jìn)行描述。讀寫時(shí)序的狀態(tài)機(jī)流程圖如圖4所示。在IDLE狀態(tài),對(duì)接口信號(hào)進(jìn)行初始化,其中地址鎖存信號(hào)ALE為低電平、寫信號(hào)WR 為高電平、讀信號(hào)RD為高電平、片選信號(hào)CS 為高電平、地址數(shù)據(jù)復(fù)用總線ADDR為高阻態(tài)、writeover和readover為低電平(writeover為高電平表示一個(gè)寫時(shí)序的完成, readover為高電平表示一個(gè)讀時(shí)序的完成) 。另外對(duì)于核心主模塊的控制信號(hào)start和iswr,當(dāng)start為低電平時(shí)繼續(xù)在IDLE狀態(tài)循環(huán),反之則進(jìn)入寫地址狀態(tài)Address0、Address1。然后根據(jù)iswr信號(hào)是高電平或低電平而進(jìn)入寫數(shù)據(jù)進(jìn)程或讀數(shù)據(jù)進(jìn)程。讀寫數(shù)據(jù)過程均由兩個(gè)狀態(tài)完成,分別是RD0、RD1、WR0、WR1。當(dāng)一個(gè)完整的讀或?qū)懖僮魍瓿蓵r(shí),進(jìn)入IDLE狀態(tài)。每一個(gè)狀態(tài)描述了ALE、WR、RD、CS、DIR1、ADDR的變化(OE0、OE1、DIR0分別為定值0、0、1,因此未列出來)。這里為了便于描述,設(shè)1為高電平,0為低電平,對(duì)以上幾個(gè)信號(hào)在各個(gè)狀態(tài)的值進(jìn)行說明,將信號(hào)組{ALE、WR、RD、CS、DIR1}設(shè)為CtrS。

    FPGA的時(shí)鐘為5 MHz,用以上狀態(tài)機(jī)來實(shí)現(xiàn)SJA1000 寄存器的讀寫,在設(shè)計(jì)中每個(gè)狀態(tài)占用的時(shí)間是一個(gè)周期,即200 ns。按照SJA1000 接口讀寫時(shí)序參數(shù)可知[8],片選信號(hào)必須在讀寫信號(hào)有效之前變?yōu)橛行?,并且讀信號(hào)有效時(shí)存儲(chǔ)數(shù)據(jù)總線上的數(shù)據(jù)。如此,設(shè)計(jì)的時(shí)序符合時(shí)序參數(shù)要求。其他的時(shí)序設(shè)計(jì)都要嚴(yán)格按照時(shí)序參數(shù)表來設(shè)計(jì)。
    在編寫讀寫模塊時(shí),需注意雙向總線的編寫技巧。雙向口最好在頂層定義,否則模塊綜合時(shí)容易出錯(cuò)。
3.3 INOUT雙向端口
    芯片外部引腳很多都使用inout類型的,目的是節(jié)省管腳,即一個(gè)端口同時(shí)做輸入和輸出。inout 在具體實(shí)現(xiàn)上一般用三態(tài)門來實(shí)現(xiàn)。三態(tài)門的第三個(gè)狀態(tài)就是高阻“Z”。 當(dāng)inout端口不輸出時(shí),將三態(tài)門置為高阻。這樣信號(hào)就不會(huì)因?yàn)閮啥送瑫r(shí)輸出而出錯(cuò)了。本設(shè)計(jì)中地址數(shù)據(jù)復(fù)用的ADDR為8位雙向端口,使用時(shí)可以寫為:
    inout ADDR;
    wire [7:0] ADDR;
    wire [7:0] input_of_ADDR;
    wire [7:0] output_of_ADDR;
    wire en;
    assign ADDR =  (en==1)?output_of_ADDR:8'hzz ;
    assign input_of_ADDR  = ADDR;
    可見,此時(shí)input_of_ADDR和output_of_ADDR就可以當(dāng)作普通信號(hào)使用了。對(duì)于雙向端口的測(cè)試用例如下:
    wire [7:0] ADDR;
    reg link;
    reg [7:0] data_in_t;
    assign ADDR=link?data_in_t:8'hzz;
    對(duì)于有inout(雙向)端口的verilog程序設(shè)計(jì),需要注意幾點(diǎn):(1)對(duì)于inout端口,要定義一個(gè)與之相連的“映像寄存器”。當(dāng)inout端口作為輸出端口時(shí),將兩者連通;而當(dāng)inout端口不作為輸出端口時(shí),要給i~t端口賦高阻態(tài)來斷開與“映像寄存器”的連接。(2)在實(shí)例化含inout(雙向)端口的模塊時(shí),與inout端口相連的只能是一個(gè)wire類型的變量。(3)不論是模塊設(shè)計(jì)還是仿真, 由于inout端口兼有輸人端口和輸出端口的功能,所以必須分別指定當(dāng)inout端口作為輸人端口(輸出端口)時(shí),它與其他單元的連接情況和需要完成的操作。
4 實(shí)驗(yàn)結(jié)果
    在FPGA中利用Verilog編程產(chǎn)生SJA1000的片選信號(hào)CS,地址鎖存信號(hào)ALE,讀寫信號(hào)RD、WR。這些控制信號(hào)共同驅(qū)動(dòng)SJA1000進(jìn)行數(shù)據(jù)接收發(fā)送,同時(shí)產(chǎn)生OE0、OE1、DIR0、DIR1,來控制雙向總線收發(fā)器。設(shè)計(jì)選取的是Xilinx公司Virtex系列的芯片,邏輯開發(fā)在ISE平臺(tái)上進(jìn)行。在FPGA的調(diào)試階段,使用Xilinx提供的在線邏輯分析儀ChipScope pro來在線觀察FPGA設(shè)計(jì)內(nèi)部信號(hào)的波形,它比傳統(tǒng)的邏輯分析儀更方便。圖5就是在線進(jìn)行數(shù)據(jù)傳送時(shí)的波形。

    在本文空間相機(jī)通信系統(tǒng)的設(shè)計(jì)中,放棄了傳統(tǒng)的基于單片機(jī)的方法,而采用以FPGA為核心控制單元,代替單片機(jī)及其外圍芯片電路。通過設(shè)計(jì)整個(gè)空間相機(jī)通信系統(tǒng)的硬件電路,并利用Verilog硬件語言描述通信流程,快速準(zhǔn)確地實(shí)現(xiàn)了相機(jī)數(shù)據(jù)的通信功能。在軟硬件的聯(lián)調(diào)和驗(yàn)證時(shí),利用chipscope在線邏輯儀功能,方便準(zhǔn)確地實(shí)現(xiàn)了預(yù)期目的。
參考文獻(xiàn)
[1] 饒運(yùn)濤,鄒繼軍,鄭勇蕓.現(xiàn)場(chǎng)總線CAN原理與應(yīng)用技術(shù)[M].北京:北京航空航天大學(xué)出版社,2007.
[2] Philips Semiconductors. Application note of SJA1000[Z]. 1997.
[3] Xilinx Inc. Product Specification:Virtex 2.5v FPGA Complete Data sheet. 2001.
[4] 陳萍.星載電場(chǎng)儀地面檢測(cè)設(shè)備設(shè)計(jì)與研制[D].北京:中科院研究生院,2009.
[5] 郭慧玲,劉羽,魏文.基于SJA1000的CAN總線雙機(jī)通訊技術(shù)的研究[J].儀表技術(shù)與傳感器,2008(9):46-48.
[6] Philips  Semieonduetors. PCA82C250 CAN Controller interfaee datasheet[Z]. 1997.
[7] 林志琦,宋國明. CAN總線在激光敵我識(shí)別系統(tǒng)中的應(yīng)用[J].電子技術(shù)應(yīng)用,2009,35(3):80-82.
[8] Philips Semiconductors. SJA1000 Stand-alone CAN controller[Z]. 2000.

此內(nèi)容為AET網(wǎng)站原創(chuàng),未經(jīng)授權(quán)禁止轉(zhuǎn)載。