1 引言
GPS (全球定位系统)是为海上、陆地和空中各种运输工具和移动设备的导航和定位而开发的,具有高精度、全天候、全球性和点间无需通视等优点,使测量技术发生了质的飞跃。GPS技术引入我国后,特别是美国取消SA政策后的这几年发展十分迅速。目前,GPS已被广泛应用在工程测量、地理测绘、交通运输和军事等诸多领域,取得了明显的社会和经济效益,发展前景十分广阔。
在GPS的行业应用中,数据接收终端是最基本的设备。目前的数据接收终端具有智能化和可扩展性不断增强的发展趋势,表现为内嵌的MCU功能越来越强大,接口越来越丰富。本文介绍一种以目前比较流行的基于ARM7架构的嵌入式处理器S3C44B0X和Motorola的M12模块的GPS数据接收终端的设计。
2 终端的硬件设计
终端由S3C44B0X 和M12模块及一些外围器件组成,系统的硬件结构如图1所示。
S3C44B0X具有2个功能完整的串口(UART),其I/O操作电压范围为3.0~3.6 V,M12模块提供一个用于输入控制信息和输出定位与状态信息串口,其I/O电平符合TTL电平范围,为0~3 V,因此,可以将S3C44B0X的I/O输出高电平设置成3 V,把S3C44B0X 和M12的RxD、TxD和GND直接连接,进行异步串行数据交换。由于S3C44B0X内部存储空间非常有限,需要外扩存储器件,这里扩展了一片FLASH和一片SDRAM 存储器。此外,键盘和显示器被挂接在S3C44B0X上面,以提供人机交互的功能。
图1 系统硬件结构框图
2.1 S3C44B0X 与存储器的接口设计
S3C44B0X自身不具有ROM,因此必须外接ROM来存储掉电后仍需要保存的代码和数据。本系统采用SST39VF160闪速存储器(FLASH Memory)作为系统的ROM,此器件具有非易使性,可轻易擦写。该器件容量为1 MB×16,与S3C44B0X接口如图2所示。
图2 S3C44B0X与SST39VF160接口图
由于本终端采用SST39VF160作为程序存储器(内含处理器的启动代码),所以SST39VF160映射在处理器的Bank0区域内。因此,他的片选端与处理器的nGCS0相连。
为了提高程序运行的速度和效率,系统还扩展了SDRAM 作为程序数据暂存空间。SDRAM器件的型号为IS42S16400,其存储空间组织方式为1 MB×16×4 Bank,共64 Mb,数据总线宽度为16,其与S3C44B0X的接口如图3所示。
图3 S3C44B0X 与IS42S16400接口图
2.2 S3C44B0X与LCD的接口设计
本系统采用了G35_II LCD套件作为显示器,G35_II的液晶屏尺寸为3.5英寸,分辨率为320×240,颜色为16灰度。S3C44B0X内部含有一个LCD驱动控制器,能自动产生LCD 驱动控制所需的控制信号,因此S3C44B0X可以与诸如黑白灰度、STN型彩色等LCD屏直接接口,而不需要另外加LCD控制器。在这种接口方式下,LCD显示缓冲区映射在系统的存储器空间上,程序只需将象素点内容写入存储器对应地址就可以实现对应LCD屏上象素点颜色的显示。本终端采用S3C44B0X的PC口和PD口作为LCD驱动接口,使用4位象素灰度模式查找表和8位单扫描方式进行显示。本终端的显示器以显示数据发送接收情况和数据流量信息为主。
3 S3C44B0X与M12模块的接口程序设计
接收终端使用S3C44B0X的COM0口向M12模块发出控制指令和接收定位信息。M12模块支持Motorola二进制格式和NMEA0183格式两种的数据输出模式。在Motorola二进制模式下,M12以9600 b/s的速率输出数据和接收指令;在NMEA0183,M12以4800 b/s的速率输出数据和接收指令。默认状态下,M12模块工作在Motorola二进制模式下。为了获取更高的数据传输速度,本研究使用M12模块默认的工作模式,即Motorola二进制模式。在该模式下,串行数据传输格式为:8位数据位,1位停止位,无奇偶校验和硬件流控制。
S3C44B0X以通过向M12发送AT指令的方式对其进行控制。根据Motorola GPS Products-Oncore User'sGuide所列举的内容,Motorola的AT I/O指令一共有69条,其中M12模块所支持的指令有51条。利用这些指令可以很方便的对M12模块进行日期时问设定、自定义坐标设定和定位信息读取等操作。在接收终端中,只需要读取M12模块的定位信息,因此程序中只用到51条指令中的1条指令:
@@EqmC<CR><LF>
该指令用于控制M12模块输出定位信息。其中“@@”是I/O指令的前缀;“Eq”是指令的关键字;“m”是M12模块输出(响应)信息模式选择,其数值可以是0~255之间的整数,当“m”为0时,响应信息只输出一次,当“m”为1时,响应信息每秒钟输出一次,当“m”为2时,响应信息每2 s输出一次,如此类推,当“m”为255时,响应信息每255 s输出一次;“C”是指令的校验和(Checksum)数据;“<CR>”是回车符;“<LF>”是换行符。为了便于采集定位数据,将“m”的数值设置为0,使M12模块每接收一次指令就回复一次定位数据。
M12模块在默认状态下只能接受以Motorola二进制形式输入的指令。所谓的Motorola二进制形式是指将指令的前缀、关键字和后缀(回车和换行)变换成相应的ASCII码后,加上模式“m”与校验和“C”组合成的二进制指令代码。本研究中所用到的“@@EqmC”指令格式转换如下:
Message format:@@EqmC<CR><LF>
Hexadecimal:40 40 45 71 00 34 0D 0A
其中,校验和“C”是指“E”、“q”和“m”三个的校验和,即0x45、0x71和0x00之间的校验和(将0x45和0x71按位异或的结果再和0x00进行按位异或),结果为0x34。输入指令时,只需要按照9600 b/s、8位数据位、1位停止位、无奇偶校验和硬件流控制的串口格式,将0x40、0x40、0x45、0x71、0x00、0x34、0x0D和0x0A八个数从M12模块的串口连续输入进去即可,M12模块在接收到其可识别的指令之后会在1 s之内做出响应。
在接收和识别指令“@@EqmC”之后,M12模块在接收到正常的GPS卫星信号时会以相同的串口数据格式和速率输出以下格式的定位信息:
@@Eq,mm,dd,YY,hh,mm,ss,dd,mm.mmmm,n,ddd,
mm.mmmm,w,shhhh.h,sss.s,h,m,t,dd.d,nn,rrrr,aa,CC<CR><LF>
该信息是按照ASCII码的形式输出的,每段信息均以逗号相隔。根据Motorola GPS Products-Oncore User'sGuide对于该信息的解释,该信息按照所描述的内容可以拆分成7大部分,其拆分示意格式如下:
@@Eq,<1>,<2>,<3>,<4>,<5>,<6>,<7>,<8>
其中,第1部分信息为日期信息。“mm”是指月,数值为01~12;“dd”是指日,数值为01~31;“yy”是指年,数值为98~18。
第2部分信息是UTC(Universal Coordinated Time)时间信息。其中,“hh”为时,数值为00~23;“mh”为分,数值为00~59;“s”是秒,数值为00~60。
第3部分信息是纬度信息。其中,“dd”是度,数值为00~90;“mm.mmmm”是分,数值为00.0000~59.9999;n为方向,他有两个取值,一是“N”,代表北纬,二是“S”代表南纬。
第4部分信息是经度信息。其中,“ddd”是度,数值为000~180;“mm.mmmm”是分,数值为00.0000~59.9999;w为方向,他有两个取值,一是“w”,代表西经,二是“E”代表东经。
第5部分信息是海拔高度。其中,“s”是符号,有“+”和“-”两个取值;“hhhh.h”是以米为单位的高度数据。海拔高度信息的数值范围为:-1000.0~+18000.0。
第6部分信息是速度信息。其中“sss.s”是以节为单位的速度数据,其数值为000.0~999.9;“hhh.h”为以度为单位前进方位角数据,其数值为000.0~359.9。
第7部分是接收终端的状态信息。其中,“m”是定位工作模式信息,取值为0或1,0代表单机模式(Autonomous),1代表差分模式(Differentia1);“t”是定位类型信息,取值为0~3,0代表无定位,1代表2D定位,2代表3D定位,3代表广播模式;“dd.d”是几何因子信息,取值为00.0~99.9;“nn”使用中的卫星数目,数值为00~37;“rrrr”为参考站识别码,数值为0000~1023;“aa”以秒为单位的差分数据时间,数值为00~60;“CC”为校验和。
GPS接收终端只需要M12模块提供经纬度位置,所以需要通过程序提取上述的7大部分信息中第3和第4部分信息。S3C44B0X与M12模块接口的COM0初始化代码如下:
UFCON0=0x0;
UMCON0=0x0;
ULCON0=0x3;
UCON0= 0x245;
UBRDIV0= ((int)(Fclk/(16 * 9600))-1);
S3C44B0X与M12的接口程序流程如图4所示。S3C44B0X首先请求M12模块输出定位数据(向M12模块发出指令“@@EqmC”),然后等待M12模块回送数据。当M12模块回送数据时,S3C44B0X首先做出判断,确认其收到的是预期的定位信息,然后将定位信息(经纬度数据)截取下来,整理成可供显示数据信息后在LCD上显示经纬度数据,最后将串口的接收缓冲区清空,以免下次接收信息时出错。由于M12模块在1 s之内只能响应一条指令,所以接收终端的数据信息最快1 s更新一次。
图4 S3C44B0X与M12的接口程序流程图
4 结语
本文讲述了一个基于S3C44B0X和M12模块的GPS数据接收终端的设计。通过在华南农业大学工程学院土槽实验室的GPS基准点(坐标为:东经113°20.538 541',北纬23°09.581 834')的静态定位实验测定(持续进行了约50 min,采集到3125组经纬度数据,静态定位数据分布如图5所示),M12模块的单击静态定位精度为<7.81m,符合其用户手册上所标的无SA政策下<25m的精度范围。接收终端运行稳定,定位信息每1 s更新一次,可作为对精度要求不高的民用地理定位。
图5 系统静态定位值散布图