李 平 ,魏仲慧 ,何 昕 ,何家维
(1.中国科学院长春光学精密机械与物理研究所,吉林 长春 130033,2.中国科学院研究生院,北京100039)
星敏感器是一种高精度的航天器姿态测量仪器,通过探测天球上不同位置的恒星并进行解运算,来确定航天器的姿态,其工作的可靠性对航天器姿态的测量和控制起着重要作用。空间环境温度和太阳光热效应的变化对星敏感器的光学系统成像质量有很大影响,会造成恒星成像光斑偏移和成像光斑能量分布变化[1];光学系统中的CCD组件对星敏感器探测精度影响比较大,光电子的热运动会导致暗电流噪声,且暗电流噪声对温度非常敏感,温度每升高15℃,噪声会增加一个量级[2];此外会造成镜筒的热变形,从而导致透镜几何位置偏离原来固定的安装位置,透镜的曲率和折射率也会随着温度的变化而变化[3]。因此,星敏感器环境温度的测量和控制对提高星敏感器的测量起着重要作用。有研究人员提出用热敏电阻加模数转换器对CCD温度进行测量[2],但热敏电阻感温时间长,不适合温度的实时测量。本文利用ADI公司推出的10位高精度数字温度传感器AD7416,与可编程逻辑器件FPGA构成了星敏感器的温度测量控制系统,再通过芯片内部的10位模数转换器将采集到的温度值转换为数字量,通过FPGA内部的判断逻辑,对星敏感器的温度进行调节。AD7416高精度测量和FPGA对数据的高速并行处理满足系统温度快速测量和控制的要求。
由于星敏感器的光学系统对温度的变化非常敏感,因此,选择高精度温度传感器对星敏感器的成像质量和工作稳定性具有重要意义。本系统中所使用的CCD工作在-200℃~0℃范围内时,星敏感器测量误差最小,对温度传感器的感温时间要求较高,本文选用AD7416温度传感器作为CCD温度测量器件。AD7416[4]是一款多功能温度传感器,内部采用10位逐次逼近型模数转换器,典型的温度转换时间为 400 μs,分辨率可达 0.25℃,测量范围为-40℃~+125℃,最低功耗可达1.2 μW,采用I2C总线进行数据传输,并且具有过温保护和采样防错机制。由于AD7416内部采用I2C总线接口,使得它很容易和其他器件组成温度测量系统。目前基于AD7416的温度测量系统大多数采用的是单片机作为主控制器[5-6],其结构简单,容易编程,在工业控制领域得到了广泛应用。由于单片机资源有限,外部可用的I/O接口有限,工作稳定性不好,程序编写依靠具体的器件,不具有可移植性。为了满足系统实时性要求,能在复杂环境下稳定工作,本系统采用资源更为丰富、可靠性更高的FPGA作为AD7416的主控制器。Xilinx公司Spartan-3系列的FPGA器件XC3S400具有丰富的内部逻辑资源和外部接口资源,最大I/O数可达264,内部的RAM块为288 KB,广泛应用于控制领域。利用FPGA作为主控制器,AD7416作为从设备,构成了星敏感器的温度测量控制系统,AD7416和FPGA之间采用的是I2C通信协议,当温度高于0℃时,启动制冷系统对星敏感器制冷,使其工作在0℃以下。为了验证程序的正确性,通过RS232接口将采集到的温度值传送给计算机,并通过上位机软件来观察采集到的温度值和当前制冷器的工作状态。系统的组成和测试框图如图1所示。
采用Verilog HDL设计AD7416的控制程序。由于Verilog HDL是IEEE的标准,能应用于各种型号的FPGA和CPLD,因此,程序具有可移植性,且 FPGA的执行效率更高,程序运行稳定性更好,满足星敏感器实时温控的要求。
图2是系统具体的硬件连接图,由外部50 MHz晶振作为系统输入时钟,FPGA与AD7416之间采用I2C通信,AD7416将温度转换为数字量后通过SDA数据线串行传送到FPGA内部缓存器中,FPGA将采集到的温度值转换为并行数据,输出给显示设备或作为其他控制逻辑的输入;FLAG是星敏感器制冷控制信号。
AD7416采用串行总线进行数据传输,时钟周期最小为25 μs,即时钟频率最高为 400 kHz,在 FPGA内需要对输入50 MHz的晶振进行分频,本系统中采用125 kHz时钟对AD7416进行读写操作,读写的时序符合I2C时序要求;温度传感器输出的数据是串行输出的,而且是高10位有效,低6位无效,FPGA需要将串行数据转换为并行数据输出,同时根据温度值来输出制冷器的控制信号,FPGA功能模块设计如图3所示。
温度传感器AD7416采用I2C总线接口。I2C总线是PHILIPS公司推出的一种串行总线,是具备多主机系统所需的包括总线裁决和高低速器件同步功能的高性能串行总线,其传输速率在标准模式下可达100 kb/s,在快速模式下可达 400 kb/s,在高速模式下可达3.4 Mb/s。I2C总线只有两根双向信号线:数据线SDA和时钟线SCL;I2C总线通过上拉电阻接正电源,在总线空闲时均保持高电平。当连接到总线上的任一器件输出低电平时,总线信号将被拉低。连接到I2C总线上的器件都有唯一地址,因此可以有多个器件同时连接到I2C总线上,通过不同地址片选来确定当前工作的器件。I2C协议规定SDA上的数据必须在时钟的高电平期间保持稳定,数据的变化只能发生在时钟的低电平期,因为在时钟高电平期间数据线上由高电平跳变到低电平被认为是起始信号,由低电平跳变到高电平被认为是停止信号。主机每发送一个字节给从机,从机会产生一个响应,主机每读取一个字节,也要向从机发送一个响应。
AD7416中的I2C总线接口与标准的I2C协议略有不同,其时钟线SCL是单向传送,SDA是双向传送,数据的传送符合标准的I2C协议。AD7416串行地址的前4位是固定的,为1001,后三位串行地址由A2~A0确定,原理图中将A2~A0直接接地,因此,AD7416的串行地址为90 H。AD7416内部有4个数据寄存器,数据寄存器的地址由内部的地址寄存器指定,前5位固定为0,低两位 (P1和P0)表示四个数据寄存器地址,其地址分配如表1所示。
表1 数据寄存器地址分配
温度寄存器是一个16位的只读寄存器,其高10位为模数转换器得到的温度值的二进制编码,低6位无效,温度值采用10位补码形式,最高位为1表示负温度,最高位为0表示正温度,分辨率为 0.25℃;配置寄存器为8位读/写寄存器,用来配置AD7416的工作方式,具体配置如表2所示。
表2 配置寄存器
对于AD7416,配置寄存器的高三位缺省设置为000;D3~D4设置错误序列的长度,表示检测到多少个错误序列后OTI输出有效,缺省为01,表示检测到一个错误序列后OTI输出有效;D2设置 OTI输出的极性;D1设置AD7416是处于比较模式(=0)还是中断模式(=1);D0设置工作方式为正常工作方式(=0,缺省设置)或低功耗方式(=1),本系统中错误序列计数器采用缺省配置,器件工作在比较模式,采用正常工作模式,因此配置寄存器的配置数据为04H。
对AD7416的读/写时序如图4所示。
从读写时序可以看出,每读或写1B需要9个时钟周期,因此采用有限状态机来设计读写控制程序。为了满足I2C时序要求,避免在时钟高电平期间数据线上的数据跳变,设计时钟时采用不同的跳变沿触发。分频后得到的时钟作为状态机的工作时钟,在其上升沿触发;AD7416的SCL时钟在分频时钟的下降沿触发,对其进行二分频得到SCL时钟信号。因此,状态机工作时钟的上升沿发生在SCL的高电平期和低电平期,而不会在SCL的跳变沿发生,通过对此时SCL的状态(低电平/高电平)的判断来改变或保持数据,避免了数据的混乱,满足I2C数据传输协议的要求。
读写控制模块和起始、停止信号均用有限状态机设计,将起始、停止和读1 B、写1 B设计成task子程序,方便在读、写操作时调用。
利用示波器观察SDA和SCL上的波形,验证其是否符合I2C时序要求。图5为示波器观察到的波形图,从图中可以看出程序符合I2C协议,在SCL高电平期间,SDA从高电平跳变到低电平为起始信号,表明从下一个时钟周期开始传送数据。从图5(a)中可以看出,起始信号后,SDA传送的是AD7416串行地址90H,表示此时对AD7416进行写操作,且数据的变化发生在SCL低电平期,在SCL高电平期间数据是保持稳定的,在 SCL高电平期间,SDA由低电平跳变到高电平即结束数据传送。图 5(b)中 SDA上传送的是串行地址 91H,表示此后将读取AD7416转换的温度值,仿真结果表明程序符合I2C协议要求。
将AD7416固定在CCD传感器背面,对星敏感器进行环境实验,将所测得到的温度值通过RS232接口传送给计算机。为了实时观测CCD温度值,利用VC编写了的温控数据接收软件。实验结果表明,星敏感器工作在正常状态,其测量误差在允许范围内。
本文在研究环境温度对星敏感器测量精度影响的基础上,利用高精度温度传感器AD7416与FPGA设计了星敏感器的温度测量系统,对星敏感器的环境温度进行测量和控制。对系统进行了时序仿真和硬件平台仿真。实验仿真结果表明,本系统能快速测量环境温度,使星敏感器工作在-20℃~0℃的稳定范围内,减小了环境温度对星敏感器光学系统结构和成像质量的影响,提高了星敏感器的测量精度。
[1]刘海波,黄水花,谭吉春,等.热-光效应对星敏感器测量准确度地影响[J].光子学报,2009,38(7):1835-1839.
[2]王辰,王宏强,陈明华,等.星敏感器成像电路噪声分析及降噪处理[J].激光与红外,2008,38(7):692-696.
[3]刘海波,谭吉春,沈本剑.星敏感器光学系统的热/结构/光分析[J].宇航学报,2010,31(3):875-879.
[4]10-Bit Digital Temperature Sensor(AD7416)and Four Single-Channel ADCs(AD7417/AD7418).
[5]唐宏亮.基于AD7416多点温度测量系统的实现[J].湖北第二师范学院学报,2010,27(2):80-83.
[6]李学海,董丹,李建良.用 AD7416+PIC16F84+PC机构建的测温系统[J].单片机与嵌入式系统应用,2004(11):65-68.