首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

基于ARM和WINCE的便携式差分GPS导航定位系统设计及实现(2)

基于ARM和WINCE的便携式差分GPS导航定位系统设计及实现(2)

2.2 设置HC12参数
通过串口建立差分GPS模块与ARM或PC机的连接,借助NMEA0183指令,通过任意一串口均可以设置HC12。可用开发软件串口通信区“发送”命令按钮或串口助手软件(WINCE或WINXP均可)进行通信,首先设置接收机应用模式为SBAS,再设置串口通信波特率、串口输出的NMEA语句及输出速率,最后设置最大差分龄期和卫星仰角。
差分GPS模块串行通讯参数为:波特率=19200,数据位=8位,停止位=1位,无奇偶校验。通过串口建立ARM和GPS的连接,GPS加电后便自动搜索卫星,并通过串口以每秒1次的频率向ARM发送GPRMC格式的定位信息,在定位信息有效后ARM便可以提取所需要的定位信息。
2.3 读取串口
获取GPS导航数据实际上就是通过串口读取HC12输出的NMEA格式数据的过程,下面介绍WINCE下读取串口程序的开发过程。
2.3.1 打开串口
点击“打开”按钮,进入此按钮的消息响应函数,函数中执行打开串口和串口参数配置等操作。首先调用CreateFile()函数打开指定的端口,接着对串口进行参数配置,包括波特率、数据位、停止位、奇偶校验等。参数设置过程为:先调用GetCommState()获取串口的当前配置,得到结构体DCB(Device  Control Block,设备控制块)的指针,通过它给DCB结构体赋值,然后传给SetCommState()函数对串口进行配置。
最后设置串口的超时参数,设置方法与上述参数设置类似,先通过GetCommTimeouts()得到一个结构体指针,赋值后传给Set Comm Time  outs()进行设置。
2.3.2 接收数据
串口打开后,自动开始接收,函数中调用了CreateThread()开辟了一个线程,用于接收串口数据。由于接受过程需要调用WaitCommEven()函数来不停地等待数据到来事件,会致使程序无法响应其他操作,因此采用开辟线程的办法来防止信息拥堵。
图4所示为接收串口数据的线程中执行的操作流程。程序实现了串口数据的接收,并把接收到的数据传递给Dig类,用于后期进行定位信息提取及显示等操作。
2.4 提取定位数据
NMEA-0183通信标准的输出数据采用的是ASCⅡ码,主要有GGA、GLL、GSA、GSV、RMC、VCT等不同的结构,每种类型的帧均是以“$”开头,然后是两个字母的“识别符”和3个字母的“语句名”组成ID信息头,接着就是以逗号分割的数据体,末尾为校验和,以回车换行符结束。本设计只关心日期、时间、经纬度、地面速度等,选用GPRMC语句,表1中对该语句结构作了详细说明,按图5所示的流程即可完成GPS数据的提取。注意在编写程序中不要出现m_strRecv[i+k](k>0)这样的表达式,例如以(m_strDataReceived==‘$’&&m_strDataReceived[i+3]==‘R’)为判断条件来提取ID头,容易造成超出数组元素个数的错误。
3 系统实验及精度分析
实验地点选在运动场场开阔处,先采用静态内符合法进行精度测试。连接差分GPS天线,给系统上电,运行开发软件,设置好串口参数,打开串口COM2,待差分GPS模块进入稳定差分定位后开始保存数据,采集数据约3  000组,用MATLAB处理采集数据,结果如图6所示。
导航定位等功能测试:手持该系统进行直线和圆形运动,观察海图区域航迹向轨迹形状;设定1个目标点,画半径为200米的圆并设置航线,分别按直线和曲线前进,观察距离、偏离、方位等参数变化;对海图进行放大、缩小和平移,分别点选本舰居中和目标居中,观察海图显示变化。
测试表明,终端软件能平稳地运行在嵌入式WINCE5.0系统上,操作界面简洁、直观、实用、功能全面,具有良好的实时性和准确性,系统定位精度(2DRMS)优于1  m。
4 结束语
文中基于ARM硬件平台,以WINCE为嵌入式操作系统,在Visual  Studio2008下开发了串口通信导航数据软件,通过串行接口实现差分GPS模块与ARM之间的通信,构建了一个体积小、功耗低、功能全面的便携式差分GPS导航定位系统,并给出了详细的硬件和软件设计实现。实验表明:该系统能实时显示精度较高、持久有效的GPS定位数据,具有重要的实用价值和一定的参考意义。
继承事业,薪火相传
返回列表