引言
浮标是一种重要的助航标志,通常设置于江河、湖海的狭窄航道,用于标示航道的走向、宽度、水上或水下障航物。浮标通常是通过锚石和锚链系留于水中,具有一定的浮动半径;但是在大的风暴潮等极端天气情况下,浮标有可能产生移位、漂走等异常情况。一旦出现上述情况,浮标不但不能起助航作用,还有可能危及航行安全造成重大航行事故。为此有必要对浮标的位置进行不间断的监视,一旦发现浮标位置异常,可及时采取纠正措施或发出航行警告,以确保航道安全畅通。
GPS是一种被动式定位系统,用户只需要一台GPS接收机,即可获得系统提供的免费导航、定位服务。GPS接收机的OEM板,以其优良性能、轻巧灵便、价格低廉、易于开发等特点,已在GPS各领域得到广泛应用。将OEM板输出的信息,利用计算机进行数据采集、图像处理,再加上GSM通信模块即可组成浮标位置远程监控系统。本文以Garmin公司的GPS25 OEM板为例,阐述如何利用单片机以及GPSOEM板和GSM通信模块,实现浮标位置的远程监测功能。
1 基本原理
浮标位置监控系统由监控中心和监控终端组成,如图1所示。监控终端安在浮标上,它由GPS接收模块、GSM通信模块及单片机构成。GPS接收模块只要处于工作状态,就会源源不断地接收导航卫星信号并推算出监控终端所在位置的经度和纬度;将这些定位信息通过模块的串行通信接口传送到单片机。这些结构化的信息都以NMEA0183格式输出,在没有经过分类提取时无法利用,因此,必须通过单片机程序将各个字段的信息从缓存字节流中分离出来,将其转化成有实际意义的、可供使用的定位信息数据,再经GSM模块发送出去供航标监控中心接收。航标监控中心的监控计算机通过GSM模块并结合电子海图,将接收到的浮标位置信息和浮标的位置显示在电脑屏幕上,航标管理人员便可以时时刻刻监视浮标的位置变化情况。一旦出现浮标位置异常,就可立刻采取措施,以保证航道安全。
图1 浮标位置监控系统组成
2 系统硬件设计
浮标位置监控终端硬件电路如图2所示,现就主要部件加以说明。
2.1 GPS模块的组成和工作原理
通常GPSOEM板主要由GPS接收天线、变频器、信号通道、数字信号处理器、存储器、串行通信接口以及电源等部分组成。在加电启动完成初始化之后,将自动从天
图2 浮标位置监控终端电路原理
本方案采用的GPS模块是Garmin公司的GPS25LP OEM板。该OEM板为12并行通道单频接收机,只接受L1波段卫星信号,即C/A码。接收卫星信号强度为-165 dBm(最小),定位精度分别为5 m(DGPS)和15 m(非GPS),速度精度为0.2 m/s(均方根稳定状态);热启动时间为15 s(所有数据已知),冷启动时间为45 s(初始位置、时间、年历已知,星历未知),自动定位时间为1.5 min(年历已知,初始位置和时间数据未知),搜索天空时间为5 min(所有数据未知);电源电压为3.6~6 V(GPS25LVx)或6~40 V(GPS25HVx),电流消耗典型值为120 mA,最大值为140 mA,休眠电流为20 mA。
GPS25LP OEM板提供一个单排12引脚对外硬件接口,其中TXD1(4脚)为第1路串行数据发送脚。在LVC模式时,输出电平为0 V~VIN;在LVS和HVS模式时,此脚具有一个与RS232兼容的输出驱动器。该脚输出格式为NMEA0183(2.0版),波特率可在300、600、1 200、2 400、4 800、9 600和19 200中选择,其默认波特率为4 800 bps。
RXD1(5脚)为第1路串行数据接收脚。RS232兼容最大输入电压为-25~+25 V;也可以直接连接在标准3~5 V CMOS逻辑电平,低电平为0.8 V(最小),高电平为2.4 V(最大)。该输入端可用于接收串行初始化和OEM板配置。
GND(8脚)为电源和信号地。
VIN(10脚)为电源输入脚。在LVx模式下,此引脚的稳压输入为3.6~6 V。天线电流是通过一个50 mA的限流器提供的。在HVS模式下,此引脚可以输入未稳压的6~40 V直流电压,该电压经开关稳压器产生4.4 V直流电,为天线、内部线性稳压器和CMOS输出缓冲等各部分供电。
由于OEM板的TXD1和RXD1兼容CMOS电平和RS232电平,所以OEM板不需要进行电平转换,可直接与串行口扩展芯片SP2328DP直接连接。
2.2 GSM通信模块
GSM系统是基于时分多址技术的移动通信体制中比较成熟、完善、应用最广的一种系统,GSM的短信息功能以其快捷、方便、廉价的特点拥有众多的用户;同时GSM系统也为远程遥控遥测提供了一种新的通信技术手段。本方案借助于GSM短信息平台对浮标定位数据进行实时传输,系统具有投资少、成本低、可靠性高等特点。
符合GSM标准的无线传输模块很多,本例选用西门子公司的CT35 GSM模块。该模块是为满足无线通信而设计的一个GSM 模块;不仅可以工作在GSM 900 MHz和GSM 1 800 MHz两种频段,而且CT35模块还提供宽频带的GSM应用,能进行语音和数据传输。在CT35模块的开发期,西门子公司就考虑到了模块后期设计的需要,因而模块的外围电路设计尽可能少,从而减少了进行二次开发所需的其他外围电路。
CT35模块和系统处理器通过串行TIUT RS232标准串行总线进行数据交换。可选波特率为300 bps~115 kbps,自动波特率为1.2 kbps~115 kbps。所有操作的高电平都是CMOS电压(2.65 V),因而,RS232转换芯片的逻辑电平必须采用低压供电形式(3.3 V),不能用5 V的串口转换芯片。本例选用了Maxim公司的MAX3232实现数据电平转换。
2.3 串口扩展芯片SP2328
在本方案中,单片机采用比较流行的AT89C52作为CT35模块和GPS OEM板的控制器,用来接收OEM板的定位数据,控制CT35模块与监控站进行数据交换。而AT89C52仅有一个串行口,所以需要采用SP2328对单片机的串口进行扩充。
SP2328有4个UART串行口,其中串口0、串口1和串口2为子串口,串口3为母串口。母串口和3个子串口都为全双工工作模式,所有串口允许同时接收、发送串行数据。每个子串口的工作波特率为75~4 800 bps,而母串口的波特率是子串口的4倍。
ADRO0和ADRO1为串口3发送上行数据的子串口地址线,“00”、“01”和“10”分别对应串口0、串口1和串口2的地址。子串口收到上行数据后,把数据送到串口3,同时给出相应的子串口地址(ADRO0、ADRO1)。当单片机收到串口3送来的数据时,立即读取地址线ADRO0、ADRO1的状态,根据地址线的状态就可判断出接收的数据是由哪一个子串口上传的。
ADRI0和ADRI1为串口3收到下行数据时的子串口地址线,“00”、“01”和“10”分别对应串口0、串口1和串口2的地址。当单片机要向某一子串口发送数据时,首先要将ADRI0、ADRI1置成相应的状态,再将数据发送到串口3即可。
SP2328芯片的波特率不需要用软件设置,只要改变芯片的晶振频率即可。其子串口的波特率的计算公式如下:
式中子串口波特率的单位为bps。
子串口波特率一旦选定,母口的波特率也随之确定,即母串口的波特率为子串口的4倍。若子串口波特率定为4 800 bps,则母串口的波特率为19 200 bps,而晶振频率fosc应为16 MHz。
3 监控终端的软件设计
监控终端软件的主要功能是完成OEM板数据帧的读取、数据帧处理及控制CT35模块发送定位信息至航标监控中心。
3.1 GPS模块数据的读出
GPS接收OEM板的定位信息串行输出格式采用美国国家海洋电子协会制定的NMEA0183(2.0版)通信标准格式,其输出数据采用的是ASCII码,内容包含了纬度、经度、高度、速度、日期、时间、航向以及卫星状况等信息。
从OEM板输出的数据帧由帧头、帧内数据、校验和及帧尾四部分构成。数据帧头是数据帧的标识符,不同的数据帧具有不同的数据帧头;帧内数据紧跟在帧头标识后,不同的数据帧具有不同的帧内数据;校验和是用ASCII码表示的有关数据的“异或”值;最后以回车换行符<CR> <LF>作为语句的结束标识符。
由于本设计只关心与浮标位置相关的定位信息,因此,只要读取“$GPRMC”语句即可。“$GPRMC”语句是GPS推荐的最短数据帧,1条“$GPRMC”语句帧包括15个记录,一共占用73个字节(其中还包括用于分隔记录所使用的12个逗号)。该语句帧的结构如下:
$GPRMC,<1>,<2>,<3>,<4>,<5>,<6>,<7>,<8>,<9>,<10>,<11>,<12>*hh<CR> <LF>
数据帧内各字段释义如表1所列。
表1 数据帧内各字段释义
其中: 工作状态占1个字节,A 为有效位置,V为非有效接收警告,即当前天线视野上方的卫星个数少于3颗;工作模式也占1个字节, A为自主,D为差分,E为评估,N为数据无效;hh为校验和,是用ASCII码表示的$和*之间除$和*之外所有数据的“异或”值。
至于其他几种帧格式,除了特殊用途外,平时并不常用。虽然接收机也在源源不断地向主机发送各种数据帧,在处理时一般先是对帧头的类别进行识别,然后再对“$GPRMC”语句的帧内数据进行提取处理。如果情况特殊需要从其他帧获取数据,那么处理方法与之完全类似。
现以查询方式为例,说明提取“$GPRMC”语句帧内数据的汇编程序:
MOVR0,#80H;设置数据存储区
Search:JNBRI,$;等待串口中断标志
CLRRI; 清除接收中断标志
MOVA,P1 ;读取子串口地址
ANLA,#00001100B
;去掉无关位,保留P1.2和P1.3位(P1.2和P1.3
;为子串口上行数据地址)
CJNE A,#00001000B,Search
;若非GPS信息,则重新接收(00001000B为子
;串口2上行数据地址,即GPS串口地址)
MOV SBUF;读串口数据
CJNE A,#24H,Search;若非“$”,则重新接收
JNB RI,$
CLR RI
MOV A,P1;读取子串口地址
ANL A,#00001100B
;去掉无关位,保留P1.2和P1.3位
CJNE A,#00001000B,Search
;若非GPS信息,重新接收
MOVA, SBUF
CJNEA, #47H,Search;若非“G”,则重新接收
JNB RI,$
CLR RI
MOV A, P1 ;读取子串口地址
ANL A, #00001100B
;去掉无关位,保留P1.2和P1.3位
CJNEA,#00001000B,Search
;若非GPS信息,重新接收
MOV A,SBUF
CJNEA,#50H,Search; 若非“P” ,重新接收
JNB RI,$
CLR RI
MOV A,P1;读取子串口地址
ANL A,#00001100B
;去掉无关位,保留P1.2和P1.3位
CJNE A,#00001000B,Search
;若非GPS信息,重新接收
MOV A,SBUF
CJNE A,#52H,Search;若非“R”,重新接收
JNB RI,$
CLR RI
MOV A,P1;读取子串口地址
ANL A,#00001100B
;去掉无关位,保留P1.2和P1.3位
CJNE A,#00001000B,Search
;若非GPS信息,重新接收
MOV A,SBUF
CJNE A,#4DH,Search;若非“M”,重新接收
JNB RI,$
CLR RI
MOV A,P1;读取子串口地址
ANL A,#00001100B
;去掉无关位,保留P1.2和P1.3位
CJNE A,#00001000B,Search
;若非GPS信息,重新接收
MOV A,SBUF
CJNE A,#43H,Search;若非“C” ,重新接收
Storage: INBRI,$
CLRRI
MOV A,P1;读取子串口地址
ANL A,#00001100B
;去掉无关位,保留P1.2和P1.3位
CJNE A,#00001000B,Search
;若非GPS信息,重新接收
MOV A,SBUF; 接收字符
MOV@ R0,A; 存储字符
INC R0; 指向下一单元
CJNE A,#0DH,Storage
;若非“CR” ,继续接收字符
3.2 GSM模块的数据发送
单片机接收到的定位信息,按顺序存放在RAM从80H开始的65个单元中。这些信息包含时间、日期、经度、纬度及数据可用性等信息,对于浮标位置监测来说已足够了,可以将这些信息通过CT35模块全部发出,也可以择其部分发出。例如,需要经度和纬度信息时,只需读出8AH~A1H单元(从“$GPRMC”语句帧的第17字节到第39字节,包括纬度、南/北半球、经度、东/西半球4个数据及用于分隔这4个数据的3个逗号,共23个字节)的内容发出就可以了。
由于CT35模块是通过SP2328的子串口0与单片机连接的,所以通过CT35发送数据时首先要发出子串口0地址(P1.0=0,P1.1=0),然后再通过向母口3发送AT命令控制CT35模块将浮标定位信息发出。
限于篇幅,通过CT35模块传输监控数据的程序设计从略,有兴趣的读者可以查阅相关资料。
结语
本文要介绍的是,了用GSM和GPS进行浮标位置监测定位的实现过程。在这个系统中,综合应用了单片机技术、GSM通信技术、GPS OEM板的定位技术,并通过SP2328芯片扩展了单片机串行接口。通过进一步设计还可与浮标上的LED航标灯结合,使其具有集航标闪光灯工作状态控制和浮标位置监测为一体的综合助航系统。该系统的软件和硬件都是基于通用性设计的,可以应用于如水文、水利、气象等众多领域。