许培培,杨国豪,徐轶群
(集美大学轮机工程学院,厦门361021)
北斗卫星导航系统(BDS)是我国正在实施的自主建设、独立运行的全球卫星导航系统。有着集定位、授时、短报文通信及用户检测于一体的优势,然而目前北斗卫星导航系统的实际应用并不理想,用户终端设备价格偏高且研发滞后,应用规模不大。尤其在航海领域,许多与卫星导航有关的先进设备、先进技术(如电子海图导航系统)暂不支持北斗卫星导航服务,目前船载卫星导航系统中使用最普遍的仍是GPS系统。
本文利用现有的电子海图导航系统,在其基础之上同时加载北斗及GPS导航定位信息,选用泰斗微电子科技有限公司推出的支持BD2/GPS的双模授时定位模组实现北斗/GPS卫星导航信息的接收,选用具有双串口的一款单片机负责系统的控制、信息采集、传输,最终实现电子海图导航系统与北斗卫星导航系统的对接,对北斗卫星在航海领域的民用推广有一定意义。
本系统将导航信息进行解析转换,通过串口传递给上位机,最终在电子海图显示系统中显示定位导航。按照功能要求,可将系统分为单片机控制模块、BD/GPS双模接收模块、串口通信模块、存储系统、电源模块等,如图1所示。
图1 系统结构图
TD3017芯片是北斗/GPS双模接收模块的核心,它是一款支持BD2B1/GPS L1的双模授时定位模组,内部整合了双模基带芯片和高性能可配置的双模双通道射频芯片,提供高精度、高灵敏度、低功耗、低成本的BD2/GPS双模导航、授时服务,且具备天线状态检测及天线短路保护功能,支持休眠工作模式,支持软件升级等功能[1]。
通常情况下,北斗/GPS双模接收模块通过外接BD2 B1/GPS L1有源天线,可接收到北斗B1频段(即1561.098±2.046MHz)及GPS的L1频段(即1575.42±1.023 MHz)内的卫星导航信号。有源天线接收到高频卫星信号后,经过TD3017A模组内射频芯片完成对信号的放大、变频得到中频模拟信号;再经滤波、解调、A/D转换等操作,实现微弱射频信号到数字中频信号的转换;然后再通过TD3017A模组内基带芯片进行捕获和跟踪、定位结算等一系列算法处理后,解译出北斗以及GPS的导航电文[2];最后输出NMEA格式的定位数据和1PPS授时信号。
模块上电完成初始自检后,自动接收来自天线的射频信号,解析出导航电文,最后由串口输出NMEA-0831数据。TD3017的串口引脚通过MAX232电平转换芯片,可直接与上位机串口连接通信,也可以通过简单的跳线连接与单片机系统进行串口通信[3],硬件电路图如图2所示。
图2 TD3017硬件接口电路
STC12C5A60S2单片机是一款低功耗、高性能、抗干扰能力强、价格低廉、操作简单、实用性强的CMOS 8位微控制器,指令代码完全兼容传统8051,片上集成1280字节RAM,具有串口1(RxD/P3.0及TxD/P3.1和串口2(RxD2/P1.2,可通过寄存器设置到P4.2;TxD2/P1.3可通过寄存器设置到P4.3)双串口[4]。
单片机与上位机可通过电平转换电路实现RS232格式通信;单片机与BD/GPS信号接收模块间,可经由MAX232进行电平转换实现RS232通信,也可以通过简单的跳线链接进行串口通信。
电源部分电路如图3所示,其中AS1117-3.3是一款低压差线性稳压器,它能提供完善的过流保护和过热保护功能,确保芯片和电源系统的稳定性[5]。
图3 电源电路
上位机的电子海图系统选用OpenCPN,它是一个开源代码的简洁电子海图导航软件,支持GPS/GPDS定位信息输入、BSB栅格图表显示、S57Vector ENChart Display、AIS输入解码、Waypoint Autopilot Navigation等功能[6]。单片机将从北斗/GPS信号接收模块中接收到的BD2或GPS报文进行解析、转换后,得到NMEA标准格式的“$GPRMC”定位报文,通过串口传递给电子海图加以显示定位。整个程序可分为几个部分,即主控程序、BD2/GPS定位解析程序、串口通信程序。
TD3017模块输出的消息语句符合NMEA-0183通信标准格式,基本格式定义如下:
IDsss是语句类型标识,它由两部分组成:ID为语句标识符,sss为语句格式符。语句标识符有BD、GP、GN、CC、P,分别代表BD2系统、GPS系统、GNSS系统、Computer Control语句、专用语句;而语句格式符分为输入语句格式符(用于对TD3017模组进行工作模式等的切换设置),以及输出语句格式符(有GGA、GLL、GSA、GSV、RMC、TXT,除了TXT是段文本信息的传送,用于输出天线检测状态或者输出一些控制命令的响应以外,其余的与标准NMEA-0831协议一致)。
类型标识符后为数据体,由若干数据字段(d1,d2,…,dn)组成;校验和的计算是从$到*之间的所有字符;<CR><LF>表示回车换行。例如:
本实验中利用卫星接收模块接收到其中一条信息—$BDRMC为帧头,表明该语句为北斗RMC格式定位信息;字段1(084300.00)为UTC时间,hhmmss.sss为时分秒格式,即UTC时间8时43分0秒(北京时间16时43分0秒);字段2(A)表示状态,A=定位,V=未定位;字段3(2434.90608)为纬度ddmm.mmmm,度分格式;字段4(N)表示N(北纬)或S(南纬);字段5(11805.83229)为经度dddmm.mmmm,度分格式;字段6(E)表示E(东经)或W(西经);字段7(0.067)为速度,单位为节,Knots;字段9(151014)为UTC日期,DDMMYY格式,即14年10月15日[7]。
北斗/GPS信号接收模块上电后会自动不停地将接收到的数据通过串口发送出去,单片机系统由串口2接收这些数据,因而,在串口初始化(串口1及串口2都要初始化)后,等待串口2接收终端标志位置1,在串口2终端程序中,判断串口2的接收缓冲寄存器S2BUF中的字符是否为“$”,若是则将其存入table[] 数组中,并继续将接下来接收到的字符逐个存入table[] 数组中,直到接收满63个字符,即一条NMEA信息中除“*”及回车换行以外的其他字符的总个数。暂时关闭串口2中断,等待接下来的判断,否则,重新判断下一个接收到的字符是否为“$”。
回到主程序中判断table[4] 是否为“M”,若是则说明该条信息是一条RMC格式的信息,否则丢弃该条信息重新开始接收。接着判断table[17] 为“A”,若是则说明该条信息定位有效,否则丢弃该条信息重新开始接收[]。
将table[] 数组中的数据前3位修改为“$GP”后,将该数组中数据逐个发送给串口1的发送缓冲寄存器SBUF,由串口1发送给上位机电子海图系统。程序流程如图4所示。
图4 定位模块流程图
串口通信包含两部分:串口2从北斗/GPS信号接收模块中接收卫星信号,再通过串口1将解析后的数据发送给上位机。源程序如下:
系统各模块连接正确后,串口通信指示灯闪烁。图5为上位机收到的北斗模块直接输出的ASCII信息,模块默认接收GNSS,即北斗与GPS混合定位信息,图6为单片机传递给上位机的ASCII信息,图7为电子海图系统中显示的定位信息。
图5 北斗与GPS混合定位信息
图6 单片机输出信息
图7 电子海图系统显示界面
我国北斗导航系统起步较晚,尤其海上民用中许多与卫星导航有关的先进设备、先进技术暂不提供北斗卫星导航服务。本文利用简单的单片机系统成功实现在现有电子海图中显示北斗卫星的船舶导航定位信息,对积极推广北斗卫星导航系统在各种民用航海领域的应用有着一定意义。在项目设计中,通过需求分析选用合适型号的单片机系统,制定合理的软、硬件功能划分,实现了所需的功能。
[1] 泰斗自主导航模块产品中心[EB/OL] .[2014-11] .http://www.techtotop.com/detail.aspx?cid=769.2014.10.24.
[2] 祖秉法.“北斗二号”民用软件接收机关键技术研究[D] .哈尔滨:哈尔滨工程大学,2010:38-47.
[3] 郝潇敏.基于北斗卫星船载导航系统研究[D] .大连:大连海事大学,2012:20,24,28-30.
[4] STC12C5A60S2系列单片机器件手册[EB/OL] .[2014-11] .http://www.stcmcu.com/datasheet/stc/STC-ADPDF/STC12C5A60S2.pdf,2013.12.30.
[5] 华成英,童诗白.模拟电子技术基础[M] .4版.北京:高等教育出版社,2006.
[6] OpenCPN User Manual[EB/OL] .[2014-11] .http://opencpn.org/ocpn/setting_up_gps.
[7] 钱德俊,张哲,胡晨.NMEA0183协议解析[J] .电子器件,2007,30(2):698-701.
[8] 杨永,杜文龙.51单片机接收GPS数据的算法与实现[J] .现代电子技术,2008,31(22):50-53.
[9] 王长涛,夏兴华,韩忠华.单片机原理及应用:C语言程序设计与实[M] .北京:人民邮电出版社,2014.