《电子技术应用》
您所在的位置:首页 > 可编程逻辑 > 设计应用 > 一种空间相机的数据通信系统设计
一种空间相机的数据通信系统设计
来源:电子技术应用2011年第1期
张培坤1,2, 高 伟1,宋宗玺1
1.中国科学院西安光学精密机械研究所,陕西 西安 710119; 2.中国科学院研究生院,北京 100039
摘要: 在空间相机数据采集应用中,为了满足电路板体积重量以及可扩展性的要求,利用FPGA作为主控芯片,控制相机进行数据采集和传输。在数据通信系统中,FPGA替代了传统的单片机作为CAN总线的主控制器,并给出了详细的硬件电路设计方法。在对CAN协议控制器SJA1000进行功能及时序分析后,利用硬件语言对其通信流程进行设计。实践证明,在严格的时序逻辑下,FPGA能够控制CAN总线稳定正确地对相机数据进行收发。
中图分类号: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定义的串行通信总线,主要用于各种过程检测及控制。它是一种多主总线,具有高位速率和高抗电磁干扰性,而且能够检测出传输中产生的任何错误。显著的优点使得CAN总线成为国际上应用最广泛的现场总线标准之一 [1]。
    由于其优良的性能及独特的设计,CAN总线已被广泛地应用于各种分布式控制系统中。特别是由于CAN总线具有抗干扰性强、高数据传输率、低成本等优点,在小卫星和微小卫星中得到了越来越广泛的应用。在卫星有效载荷数据控制传输中也会应用,如空间相机数据通信方面。
1 数据通信系统
    一般来说,每个CAN模块能够被分成三个不同的功能块,其结构如图1所示[2]。CAN总线收发器提供CAN协议控制器与物理总线之间的接口,控制从CAN 控制器到总线物理层或相反的逻辑电平信号。它的性能决定了总线接口、总线终端、总线长度和节点数,是影响整个总线网络通信性能的关键因素之一。CAN控制器执行在CAN 规范里规定的CAN协议,它通常用于报文缓冲和验收滤波,对外具有与主控制器和总线收发器的接口。FGPA主控制器负责执行应用的功能,例如对空间CCD相机控制命令的发送、读取图像数据等。它通过对CAN控制器的编程控制CAN总线的工作方式、工作状态以及数据的发送和接收。

    在本项目的特殊环境要求下,使用FPGA作为主控芯片,控制空间相机进行数据采集与传输,并通过CAN总线进行数据收发。较之传统设计使用的单片机,FPGA能够在速度和体积上有更好的适应性。FPGA一方面减少了电路板的复杂程度,缩短了实现周期,另一方面是FPGA具有丰富的资源、超高的性能和灵活的可编程性[3],提高了整个设备的可靠性,大大增强了电路板设计的灵活性和可扩展性。
2 通信系统接口设计
   电路设计如图2所示。SJA1000的AD0~AD7地址数据复用端口、ALE地址锁存端口、读使能信号RD、写使能信号WR、片选CS端口, 均通过双向总线收发器74ALVC164245与FPGA的I/O口相连[4]。这是因为FPGA的3.3 V的LVTTL电平不支持SJA1000的5 V TTL电平,所以利用双向总线收发器实现两器件信号的电平转换。SJA1000的中断输出信号INT连入FPGA,这样CAN通信就可以采用中断或查询两种方式。RST端口的电路实现SJA1000的上电自动复位功能。MODE模式选择端接+5 V,设置SJA1000控制器为Intel模式。SJA1000的时钟晶振采用16 MHz,频率调整电容取15 pF。设计中CAN总线的终端电阻取120Ω[5]。CAN 驱动器PCA82C250的RS脚为工作模式选择位,接地工作于高速模式,接高工作于待机模式。系统通过电阻R将芯片设定于斜率控制模式, 电阻值为47 kΩ,这时CAN总线应工作于低速模式,可提高CAN总线抵抗射频干扰的能力。在这种情况下,可直接使用非屏蔽双绞线作为总线[6]。

    在接口设计中,有几点需要注意:(1)SJA1000的INT端口是开漏输出,所以在使用时应该加上拉电阻,不然电平一直为低,无法实现中断方式。(2)电平信号AD0~AD7必须按顺序连接在总线收发器74ALVC164245的一个8位端口上,不可分开。
3 通信系统软件设计
3.1 系统流程设计

     CAN总线通信模块的控制主要包括三大部分:CAN总线节点初始化、报文发送和报文接收。主流程如图3所示。

    CAN节点主程序主要包括:作为主控制器的FPGA的初始化、CAN控制器初始化、寄存器状态查询、接收发送报文以及数据处理。在此设计中,由于通信模块对接收数据的实时性要求并不是很高,因此CAN总线的接收和发送采用查询方式[7]。在整个流程实现中,主要是对CAN控制器SJA1000中的寄存器进行读写操作。
3.2 读写流程控制
    SJA1000 的数据和地址信号为时分复用,而FPGA 中不存在地址的概念,因此在读写寄存器时,要把SJA1000 中的寄存器地址当作数据写入。所以在系统的顶层模块设计中,将设计一个读写子模块来专门产生对CAN寄存器进行读写控制的时序,而核心主模块则只对通信流程进行描述。读写时序的状态机流程图如图4所示。在IDLE状态,对接口信号进行初始化,其中地址锁存信号ALE为低电平、写信号WR 为高电平、读信号RD为高电平、片选信号CS 为高电平、地址数据复用总线ADDR为高阻态、writeover和readover为低电平(writeover为高电平表示一个写时序的完成, readover为高电平表示一个读时序的完成) 。另外对于核心主模块的控制信号start和iswr,当start为低电平时继续在IDLE状态循环,反之则进入写地址状态Address0、Address1。然后根据iswr信号是高电平或低电平而进入写数据进程或读数据进程。读写数据过程均由两个状态完成,分别是RD0、RD1、WR0、WR1。当一个完整的读或写操作完成时,进入IDLE状态。每一个状态描述了ALE、WR、RD、CS、DIR1、ADDR的变化(OE0、OE1、DIR0分别为定值0、0、1,因此未列出来)。这里为了便于描述,设1为高电平,0为低电平,对以上几个信号在各个状态的值进行说明,将信号组{ALE、WR、RD、CS、DIR1}设为CtrS。

    FPGA的时钟为5 MHz,用以上状态机来实现SJA1000 寄存器的读写,在设计中每个状态占用的时间是一个周期,即200 ns。按照SJA1000 接口读写时序参数可知[8],片选信号必须在读写信号有效之前变为有效,并且读信号有效时存储数据总线上的数据。如此,设计的时序符合时序参数要求。其他的时序设计都要严格按照时序参数表来设计。
    在编写读写模块时,需注意双向总线的编写技巧。双向口最好在顶层定义,否则模块综合时容易出错。
3.3 INOUT双向端口
    芯片外部引脚很多都使用inout类型的,目的是节省管脚,即一个端口同时做输入和输出。inout 在具体实现上一般用三态门来实现。三态门的第三个状态就是高阻“Z”。 当inout端口不输出时,将三态门置为高阻。这样信号就不会因为两端同时输出而出错了。本设计中地址数据复用的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端口赋高阻态来断开与“映像寄存器”的连接。(2)在实例化含inout(双向)端口的模块时,与inout端口相连的只能是一个wire类型的变量。(3)不论是模块设计还是仿真, 由于inout端口兼有输人端口和输出端口的功能,所以必须分别指定当inout端口作为输人端口(输出端口)时,它与其他单元的连接情况和需要完成的操作。
4 实验结果
    在FPGA中利用Verilog编程产生SJA1000的片选信号CS,地址锁存信号ALE,读写信号RD、WR。这些控制信号共同驱动SJA1000进行数据接收发送,同时产生OE0、OE1、DIR0、DIR1,来控制双向总线收发器。设计选取的是Xilinx公司Virtex系列的芯片,逻辑开发在ISE平台上进行。在FPGA的调试阶段,使用Xilinx提供的在线逻辑分析仪ChipScope pro来在线观察FPGA设计内部信号的波形,它比传统的逻辑分析仪更方便。图5就是在线进行数据传送时的波形。

    在本文空间相机通信系统的设计中,放弃了传统的基于单片机的方法,而采用以FPGA为核心控制单元,代替单片机及其外围芯片电路。通过设计整个空间相机通信系统的硬件电路,并利用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总线在激光敌我识别系统中的应用[J].电子技术应用,2009,35(3):80-82.
[8] Philips Semiconductors. SJA1000 Stand-alone CAN controller[Z]. 2000.

此内容为AET网站原创,未经授权禁止转载。