《電子技術應用》
您所在的位置:首頁 > 可編程邏輯 > 設計應用 > 一種空間相機的數據通信系統(tǒng)設計
一種空間相機的數據通信系統(tǒng)設計
來源:電子技術應用2011年第1期
張培坤1,2, 高 偉1,宋宗璽1
1.中國科學院西安光學精密機械研究所,陜西 西安 710119; 2.中國科學院研究生院,北京 100039
摘要: 在空間相機數據采集應用中,為了滿足電路板體積重量以及可擴展性的要求,利用FPGA作為主控芯片,控制相機進行數據采集和傳輸。在數據通信系統(tǒng)中,FPGA替代了傳統(tǒng)的單片機作為CAN總線的主控制器,并給出了詳細的硬件電路設計方法。在對CAN協議控制器SJA1000進行功能及時序分析后,利用硬件語言對其通信流程進行設計。實踐證明,在嚴格的時序邏輯下,FPGA能夠控制CAN總線穩(wěn)定正確地對相機數據進行收發(fā)。
中圖分類號:TP336  
文獻標識碼: A
文章編號: 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定義的串行通信總線,主要用于各種過程檢測及控制。它是一種多主總線,具有高位速率和高抗電磁干擾性,而且能夠檢測出傳輸中產生的任何錯誤。顯著的優(yōu)點使得CAN總線成為國際上應用最廣泛的現場總線標準之一 [1]。
    由于其優(yōu)良的性能及獨特的設計,CAN總線已被廣泛地應用于各種分布式控制系統(tǒng)中。特別是由于CAN總線具有抗干擾性強、高數據傳輸率、低成本等優(yōu)點,在小衛(wèi)星和微小衛(wèi)星中得到了越來越廣泛的應用。在衛(wèi)星有效載荷數據控制傳輸中也會應用,如空間相機數據通信方面。
1 數據通信系統(tǒng)
    一般來說,每個CAN模塊能夠被分成三個不同的功能塊,其結構如圖1所示[2]。CAN總線收發(fā)器提供CAN協議控制器與物理總線之間的接口,控制從CAN 控制器到總線物理層或相反的邏輯電平信號。它的性能決定了總線接口、總線終端、總線長度和節(jié)點數,是影響整個總線網絡通信性能的關鍵因素之一。CAN控制器執(zhí)行在CAN 規(guī)范里規(guī)定的CAN協議,它通常用于報文緩沖和驗收濾波,對外具有與主控制器和總線收發(fā)器的接口。FGPA主控制器負責執(zhí)行應用的功能,例如對空間CCD相機控制命令的發(fā)送、讀取圖像數據等。它通過對CAN控制器的編程控制CAN總線的工作方式、工作狀態(tài)以及數據的發(fā)送和接收。

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

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

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

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

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

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

此內容為AET網站原創(chuàng),未經授權禁止轉載。