1 引言
由于接收信号强弱差别、设备使用状况差异等因素,船舶导航过程中会出现信号不稳、输出中断等问题,给船舶导航带来极大不便。而电罗经和GPS是远洋船舶上常用的导航设备,合理地配合使用这两种设备可以有效地增加导航的可靠性。
为实现电罗经和GPS的配合使用,使用单片机设计了一种新型的船舶导航数据转换器[1]。在只有一种可靠导航数据的情况下,转换器可以实时地进行两种数据格式的转换,保证电罗经和GPS设备的正常工作,为船舶航行提供可靠导航。
2 串口扩展方案比较分析
数据转换器有两个输入端,分别与电罗经和GPS设备连接,且均为RS422接口[2]。GPS信号是标准NMEA-0183格式,并包括两种语句,其中HDT语句输出航向信号,ROT语句输出航向变化率信号。而电罗经信号只有一种格式,它包括了航向数据信号和航向变化率信号。
数据转换器对输入信号进行选择,当输入信号为电罗经时,转换器将电罗经的航向语句直接输出到接口为RS422的电罗经导航设备终端,同时将输入的数据转换为标准NMEA-0183格式的HDT与ROT语句数据输出到接口为RS232的GPS导航设备终端。而输入信号为GPS时,转换器将GPS的航向语句直接输出到接口为RS232的GPS导航设备终端,同时将输入的HDT与ROT数据转换为电罗经数据格式输出到接口为RS422的电罗经导航设备终端。数据转换器的功能框图如图1所示。
图1 数据转换器的功能框图
为实现数据的转换,就需要数据转换器至少具备三个标准的UART串口。有多种设计方案都能满足这一要求且不尽相同,成本、指标、可靠性等都存在差异。根据目前的串口器件设计,归纳起来主要有以下几种比较常用的多串口设计方案[3]。
(1) 多串口单片机。其中双串口的单片机的价格在30~70元左右,三串口的单片机价格更加昂贵,直接增加了系统设计的成本。同时,由于各单片机的指令不同,以及由于串口功能的扩展带来的陌生寄存器的使用都增加了设计人员的工作量和难度。
(2) 软件模拟串口。其主要优点是成本低,但是可靠性和串口指标都无法控制,存在缺点:一是采样次数低,一般只能做到2次/BIT,这样数据的正确性就难以保证;二是不能实现高波特率通讯,软件模拟串口一般不能实现高于4800 bps的波特率。
(3) 专用IC器件。使用专用串口扩展芯片,例如TI等公司开发的16C554系列串口扩展芯片,通过并行口扩展串行口,功能比较强大、通讯速度高;成都国腾微电子有限公司推出的GM8123/25系列串口扩展芯片,通过串行口扩展串行口,可简单方便地实现全硬件扩展。但总而言之,串口扩展芯片价格普遍较高。
根据数据转换器的设计要求,考虑降低成本,最后选取可通过RS232接口在线编程的飞利浦单片机P89C669作为数据转换的主处理器。并充分利用P89C669丰富的IO口,通过AT89C2051来扩展数据转换器所需要的第三个串口,以低成本实现了串口扩展[4]。
3 UART的低成本实现方案
3.1 单片机IO口的分配、连线
P89C669[5]是基于Philips半导体新51MX(存储器扩展)内核的Flash微控制器代表。它包含96k字节的Flash程序存储器、2k字节的片内数据RAM、1个可编程计数器阵列(PCA)、可配置成不同时间范围的看门狗定时器(通过SFR的位设置)、2个增强型UART以及字节型I2C总线串行接口等。
P89C669主要实现电罗经和GPS信号数据的接收、转换和发送,AT89C2051主要用来扩展串口[5],具体的IO分配如下。AT89C2051的P1口与P89C669的P0口相连,作为数据通信总线;单片机AT89C2051的P3.3引脚接P89C669的P3.2引脚,作为AT89C2051向P89C669的发送请求信号( );AT89C2051的P3.2引脚接P89C669的P2.7引脚,作为P89C669向AT89C2051请求中断的控制信号;AT89C2051的P3.4引脚接P89C669的P2.6引脚,作为P89C669对AT89C2051读写操作的控制信号( );AT89C2051的P3.5引脚接P89C669的P2.5引脚,作为P89C669向AT89C2051写入指令或数据的控制信号( )。AT89C2051与P89C669之间的连接图如图2所示。
图2 P89C669与AT89C2051的硬件连接图
3.2 单片机P89C669与AT89C2051通信程序的设计
单片机P89C669与AT89C2051之间的数据通信流程图如图3所示,具体实现如下。
(1) P89C669方面
① P89C669发送数据。首先,程序初始化后P89C669将AT89C2051有关的晶振信息、波特率等参数以命令字形式传送给AT89C2051,AT89C2051接收后查表求解进行串口波特率设置。然后P89C669将接收完毕的数据存入缓冲区,并检测 引脚,若为高电平则等待,直到变为低电平时通过并口将数据传给AT89C2051。在AT89C2051将接收缓冲区数据发送出去的同时检测缓冲区,如果缓冲区不满则将 引脚置低,反之则高。
② P89C669接收数据。AT89C2051接收到数据后用 引脚产生边沿信号向P89C669发出请求,P89C669收到请求信号后执行读取数据程序。
图3 P89C669方面的程序流程图
(2) AT89C2051方面
AT89C2051是作为IC芯片用来进行串口扩展的,在初始化阶段接收上位机传来的数据进行初始化设置,然后循环等待接收上位机发送的数据[6]。AT89C2051将并口传来的数据存在并口接收缓冲区,并复制到串口发送缓冲区,激活串口使用中断方式发送;将串口传来的数据存在串口接收缓冲区,并复制到并口发送缓冲区,同时改变 的电位,向上位机发出请求。在船舶导航数据转换器中,AT89C2051主要是用来串口发送电罗经信号,它与P89C669的通信流程图如图4所示。
4 结束语
文中应用AT89C2051扩展串口后,系统共有三个串行口。其中,一个串口用来选择接收电罗经或者GPS信号用以数据转换;一个串口经过MAX3232实现TTL电平与RS-232电平转换后可连接微机的串行口,从而简单方便地实现单片机P89C669的在线编程,它同时也作为GPS信号的输出接口;另一个串口主要用来输出电罗经信号。
该电路与采用专用芯片的电路相比,并不复杂,而且编程设计较简单,综合考虑是一种比较经济实用的低成本设计方法。
创新点:
文章本着低成本的指导思想进行设计。首先,选用可在线编程的P89C669单片机为主处理器,省去编程器,降低了成本;其次,采用价格便宜的AT89C2051单片机与充分利用P89C669单片机丰富的IO口进行串口扩展。最终,实现了多串口船舶导航数据转换器的低成本实现。