新闻中心

EEPW首页 > 测试测量 > 海气通量自动测量系统设计*

海气通量自动测量系统设计*

——
作者:国家海洋技术中心 门雅彬 徐俊臣 刘佳佳 中国海洋大学 刘金涛时间:2007-02-04来源:电子产品世界收藏

摘要: 本文介绍了以为控制核心的船载海气通量自动系统的设计,给出了数据采集设计,对的一些编程细节也做了详尽的叙述。

关键词: 海气通量;  ;  ; 

在相互制约和作用的大气海洋系统中,大气对海洋的作用主要是动力的,称为动量通量;海洋对大气的作用主要是热力的,称热通量。动量通量和热通量通称为海气通量,它是气候形成和变化的重要机制之一。

国家十五“863”计划项目——“船载海气通量自动系统”,要求使用直接协方差法来分三个层次测量海气界面的动量通量,该方法是利用快速响应风传感器测量风速值的脉动,由获取的脉动资料的时间序列进行统计相关平均,获得海气界面动量通量。

测量原理及传感器组成

理论上,直接协方差法测量海气动量通量只需要快响应三维超声风传感器来测量出风速度矢量,并以此来计算风应力矢量。海气动量通量τ定义为[1]:

由于是船载系统,要得到真实的三维风速值必须剔除船体运动的影响。这些影响来源于以下三个方面:(1)船体的前后颠簸、左右摇摆和航向引起的风传感器即时倾斜;(2)船体的摇摆而带动风传感器相对于船体参考系角速度的变化;(3)船体相对于地面的移动速度。使用紧耦合系统消除上述因素引起的误差,真实的海面风速Vtrue可以表示为[1]:

其中Vobs为三维风速计相对于船体测得的风速矢量,T为由测量坐标系到真实风速坐标系的变换矩阵;Ω为船体相对于自己重心旋转、俯仰和摇摆的三维转动角速度矢量;Vmot是风速计重心相对于海面的移动速度矢量,R是三维风速计相对于船体的位置矢量。

因此,系统所需的传感器除了测量三维风速值的三个超声风传感器外,还需要测量船体运动姿态的姿态传感器、测量船体运动方向的电子罗盘、测量船体位置和运动速度的GPS。其中,姿态传感器与罗盘构成运动测量单元,每秒采集一次船体运动姿态,包括三维线加速度、三维角速度、横滚角、俯仰角和航向。以上各传感器的数据输出形式均为RS-232。

海气通量数据采集

数据采集部分是船载系统的核心部分,主要完成数据的采集、处理、传输和过程控制。该部分结合总体设计要求,根据当前嵌入式技术的发展,以模块化、高可靠的设计思想来研制。

方案选择

数据采集部分所要完成的主要功能是:单片机按固定时序和频率采集各传感器的输出数据,经过运算和处理后,按照预定通信协议以RS-232方式实时地将数据以4~20Hz的频率通过单片机的串行口传送给PC机,上位PC机进行数据存储和动量通量的计算。

由于海气通量数据采集系统需要与三个超声风传感器、电子罗盘、姿态传感器、GPS和PC机进行异步串行通信,而一般的单片机至多只有2个串口,因此至少需要扩充5个串口。扩充串口的方法很多,如采用软件模拟法成本低、易于实现,但其采样频率低,软件开销大、难以保证数据的实时性、正确性,而且一般不能模拟过高的波特率。利用串行口扩展串行口,控制简单,但在多通道模式下,所有子串口工作波特率只能设置成统一值,不适用于各从机波特率不一致、又要求同时工作的系统。并行口扩展串口方法的功能强大,能提供MODEM控制信号、通讯速度高,实时性好,可以满足多个串口同时工作的要求。在本系统中,GPS和电子罗盘的输出速率是1Hz,三维超声风速计和姿态传感器的数据输出速率可达20Hz,具有数据通讯量大、输出速率高、数据输出格式多、数据爆发性强的特点,因此优选并行口扩展的方法。

模块开关电源输出5V和12V两种电压,12V电压给测量传感器供电,5V电源使用电源管理芯片变换成3.3V电源,给GPS模块、单片机、外部存储器和串口芯片供电。

系统硬件框图如图1所示。

图1  系统框图

主控单元设计

系统的主控部分采取了如下的设计方案:单片机采用了Silicon Laboratories公司的高性能微控制器作为数据采集和控制的核心。它具有与8051完全兼容的CIP-51微控制器内核,采用高速流水线结构(25 MIPS),大多数指令执行时间为1~2 时钟周期;具有64 KB可在系统编程FLASH 和大容量内部SRAM,具有外部存储器接口;最多可达22个中断源,这对实时多任务系统的实现是很重要的。

虽然C8051F020内部有4KB的SRAM,但是对于整个系统数据流量来说还是不够的,因此使用高位端口P5~P7外扩32KB的外部存储器,采用地址/数据线非复用方式。它占用的I/O空间地址范围是0x0000~0x7FFF。注意与其他8051不同的是C8051F020内部有两个SFR(EMI0CF和EMI0TC)控制SRAM的读写时序,在对SRAM进行操作之前,应根据芯片数据手册配置好这两个寄存器,否则可能会出现读写不正常的现象。

C8051F020的UART0用于PC机通讯,UART1用于GPS通讯。

串行口扩展设计

如上所述,系统共需要与6个串行设备通信。而C8051F020只具有两个串行UART,无法满足系统的需求。设计共采用了两片扩充8个串行口,其中5个串行口分别连接三个三维超声风传感器、电子罗盘和姿态传感器,剩余3个串行口备用。

ST16C554是EXAR公司生产的带有FIFO的通用四串口(UART)器件,具有集成度高、使用方便、兼容性强的优点。它主要具有两项功能,一是把从外部设备接收进来的串行数据转换成并行数据;二是把CPU的并行数据转换成串行数据以利于发送。一片ST16C554可以提供4个标准UART端口。

ST16C554的功能特点如下:

*各带有16个字节的发送/接收FIFO增强型UART。可以大大减少对CPU的中断次数,减少对UART的中断服务时间。
*可以在24MHz的晶体或外部时钟输入下使用1.5Mbps发送和接收速率。在14.7464MHz晶体下,用户最高可选择921.6Kbps的数据传输速率。
*每个通道具有独立的发送、接收、线路状态和设置中断功能。
*用户可编程的波特率发生器和标准的调制解调器接口。
*四种可选择的FIFO接收中断触发。

ST16C554与C8051F020的接口如图2所示。D0~D7连接单片机的数据总线,A0~A1用来选择ST16C554的内部寄存器地址,RD、WR分别接单片机的读写信号,总线模式引脚接VCC选择Intel方式。C8051F020的A12~A14经74HC138译码后,输出CS0~CS7所代表的地址范围分别是:8000~8FFFH,9000~9FFFH,A000~AFFFH,B000~BFFFH,C000~CFFFH,D000~DFFFH,E000~EFFFH,F000~FFFFH。IT0~IT7是U5、U6各路UART的中断输出。可以发生中断的条件有:接收错误、缓冲区数据有效、发送缓冲区空等。

图2 ST16C554与C8051F020的接口

ST16C554中断引脚输出IT0~IT7分别接单片机的P1.0~P1.7,且连接到CD4002的两个四输入或非门(U15A和U15B)的输入端,CD4002的两个输出分别连接至C8051F020的两个外部中断输入端INT0和INT1,这样CPU就可在相应的中断服务程序中查询P1.0~P1.7的状态,以确定是哪个UART是中断源。该部分设计利用两个四输入或非门连接至单片机的外部中断,解决了单片机中断资源有限的问题,降低了系统成本。ST16C554工作在FIFO模式,采用中断方式收发数据并设置8字节的硬件收发送缓冲区,降低了CPU的开销。

在本部分的设计中,还需要有电平转换电路。这是由于C8051F020和经ST16C554扩充的UART均是TTL电平,而各传感器的通讯方式是均是RS-232。因此,必须进行它们之间的电平转换。传统的方法使用MC1488与MC1489进行电平转换,使用这两种芯片时,除了系统的+5V电源外,还需要+12V和-12V电源,很不方便而且功耗比较大。为此这里选用5片MAX3232来完成这项工作,连线方式使用简单三线方式即TXD、RXD、GND。MAX3232是单电源低功耗的电荷泵式RS-232电平转换芯片,在电源电压3.0~5.0V之间均能正常工作,它的工作电流仅为300mA。

值得一提的是,系统还设计了比较完善的串口保护电路。具体实现方法是在MAX3232的RS-232一侧加保护芯片MAX367。MAX367是MAXIM公司的ESD保护芯片,它有两个限制电压输入端V+和V-,当信号的电平超过V+或者低于V-时,可自动切断该路的连接,待故障解除后,又可自动恢复连接。V+和V-分别是+15V和-15V。在传感器信号的RS-232信号端还串接了50mA自恢复保险和双向TVS管,有效地抑制了瞬变电压和电流给系统造成的破坏。

ST16C554编程要点

ST16C554的控制比较复杂,使用前应充分了解各个寄存器的功能和设置要点。事实上控制它并不难,关键是准确把握各控制寄存器的含义,熟悉其控制流程。

ST16C554具有4个完全相同的端口,各组控制寄存器均是相互独立的。系统上电后需先对ST 16C554 进行初始化,包括设置波特率、传输数据的帧格式、中断允许位、对FIFO的控制等。对MCU来说,ST16C554相当于MCU的外部数据存储器。它的寄存器中有一个寄存器(Scratchpad Register),在初始化之前,可以先读写这个寄存器,如果结果一致,证明单片机与ST16C554接口电路无误。若不一致,则应检查硬件接口电路或者芯片本身是否损坏。初始化代码如下:
XBYTE[BASE_ADDR+LCR] = 0x80;       //向
 LCR寄存器写0x80,使能波特率设置XBYTE[BASE_ADDR +DIVLSB] =BAUD_L  ;
 //写波特率低字节
XBYTE[BASE_ADDR +DIVMSB] = BAUD_H;
 //写波特率高字    XBYTE[BASE_ADDR +LCR] = 0x00;       //禁止波特率设置
XBYTE[BASE_ADDR +LCR] = lcr_byte;   
 //设置数据位,停止位,奇偶校验位
XBYTE[BASE_ADDR +FCR]=0x87;      
 //使用并清除8字节FIFO,
XBYTE[BASE_ADDR +IER]=0x03;      
 //使能发送和接收中断

编程时最好启用FIFO功能,以减轻CPU中断系统的负担。FIFO的接收中断字节最好设置在8 字节左右,不要设置成16字节。否则如果CPU在FIFO满的情况下产生中断,系统来不及响应,会产生接收数据溢出的危险。

ST16C554发生中断时,CPU转向外部中断0(或1)服务程序。在中断服务程序中,CPU应逐个轮询P1.0~P1.3(或者P1.4~P1.7)的状态,如果有任何一个引脚是高电平,则进入相应端口的中断处理程序,处理完毕后,应继续查询有无其它端口发生中断,以防止端口中断的遗漏。以外部中断0服务程序为例,示例代码如下:
IntSource =P1&0x0f;  //读取中断源
while(IntSource!=0)  //ST16C554(U5)有中
   断发生
{
     if(P1^0) //串口A有中断产生
    IntUart1() ;   //判断串口A中断源子
   程序
     if(P1^1)         //串口B有中断产生
        IntUart2();  //判断串口B中断源子
   程序
        if(P1^2)        /串口C有中断产生
             IntUart3(); //判断串口C中断源
   子程序
           if(P1^3)       //串口D有中断产生
            IntUart4();   //判断串口D中断源
   子程序
          IntSource = P1&0x0f; //继续读取中
        断源,直至无串口中断产生
    }

结语

“船载海气通量自动测量系统”试制成功后,经过在西北太平洋近两个月的海上实验,取得了大量宝贵海气通量实验数据,实践证明该数据采集系统的设计是可靠,稳定的,该项目已经于2005年11月通过863专家组的验收。

参考文献
1.J.B.EDSON,etc. Direct Covariance Flux Estimates from Mobile Platforms at Sea. Journal of Atmospheric and Oceanic Technology.Vol 15,1998.
2. Silicon Laboratories.C8051F020/1 Datasheets. 2001.
3. EXAR Corporation. ST16C554 Datasheets REV.3.10. 1994

加速度计相关文章:加速度计原理


评论


相关推荐

技术专区

关闭