基于GPS校园巡航定位系统模型设计.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
基于GPS校园巡航定位系统模型设计

基于GPS校园巡航定位系统模型设计   【摘 要】项目采用基于NMEA-0183协议的GPS模块作定位的数据采集部分,设计制作出一套能够实现校园定位的系统模型,为日后学校继续深入研究校园GPS应用指明研究方向,奠定算法基础,以便日后加以改进后能正式投入应用,或应用于校园导航或应用于校园车辆监控。   【关键词】GPS;校园巡航定位系统;设计   一、GPS校园巡航定位系统硬件设计方案   我们设计了一套硬件系统,发送模块作为手持终端,接收模块接收手持终端传来的数据并送至PC,在PC软件界面中观察手持终端的位置信息,从而实现定位功能。硬件设计方案如下图所示:   (1)接收在线数据。此模块通过打开现存在的串口,从而实时的接收下位机上传的定位数据。对现有串口进行打开的时候,必须设置波特率,校验位,停止位等相关参数。(2)接收离线数据。此模块是用于读取已经采集的定位数据,只能进行离线数据的解析。(3)提取经纬度。软件只针对GPRMC的定位信息进行解析,其他类型的定位信息过滤掉。从而提取出有效的经纬度。(4)显示位置。通过提取到的有效经纬度,根据已知点的经纬度,从而计算出现有经纬度在地图上的位置,从而显示出来   二、项目研究过程中的难点及解决途径,应用的关键技术   1.硬件设计过程中遇到的问题及解决方法。硬件程序设计中的难点是数据传输方面的问题,GPS模块与单片机进行通信把信息数据传入单片机,单片机把数据放入其外部缓存,无线数据传输模块再将数据从单片机缓存区中取出放入自己的数据寄存器然后打包发送,这之间遇到的问题是数据传输过程中的格式问题。NRF905在进行数据传输时是先把数据放入数组里再进行传输并且它只能以十六进制的数据形式发送数据,而GPS模块接收到的数据虽然是16进制的,但没有添加0x标志,这样NRF905发送出的数据就会是乱码。我们采取的解决方案就是把接收到的数据进行从16进制到ASCII码的整形,这样数据就有了统一格式,问题也得到了解决。其次就是时序匹配的问题,单片机从串口接收GPS数据的速度是很快的,一次5串GPS代码,而且每串代码从80位到96位长度不等,属于一种批量不定长数据传输,而NRF905的最大发送数据的位宽是32位,而且发送数据前要进行SPI总线读写时序配置,这样就会有一个数据发送的延迟。所以我们需要切割数据,并且注意发送速度与接收速度的匹配,如果发的太快,接收部分接收到的数据就会是乱码,如果发的太慢就会丢失有效数据,降低数据的有效率(因为单片机的片外数据缓存是有限制的,一旦占满了就会被新的数据覆盖,也就是说数据如果不及时取出就会被新的数据覆盖,而新的数据不一定是有效数据)。我们通过不断更改延时直到传输不会再一直出现乱码。   2.软件设计过程中遇到的问题及解决方法。在软件设计过程中,最棘手的问题是打开现存的串口,并且接收下位机发送给PC的定位数据方面。先期由于没有接触过串口编程,所以在这个模块方面还是摸索了很长时间,最后通过查阅资料,终于解决了问题。现列举此模块代码如下: BOOL SetSerielPort   (char * szPort,int rate,int checkBits,int bitSize,int stopbits)   {   BOOL istrue=FALSE;   m_hCom=CreateFile(szPort,   GENERIC_READ|GENERIC_WRITE,0,NULL,OP   EN_EXISTING,FILE_ATTRIBUTE_NORMAL|   FILE_FLAG_OVERLAPPED,NULL);   if( m_hCom == INVALID_HANDLE_VALUE )   {   MessageBox(“串口com创建失败”);   return FALSE;   }   DCB dcb;   ZeroMemory(dcb,sizeof(DCB));   dcb.DCBlength=sizeof(dcb);   dcb.BaudRate=rate;   dcb.ByteSize=bitSize;   dcb.Parity=checkBits;   dcb.StopBits=stopbits;   dcb.fBinary=TRUE;   dcb.fParity=FALSE;   istrue=SetCommState(m_hCom,dcb);   if (!istrue)   {   MessageBox(“串口设置失败”);   m_hCom=NULL;   return FALSE;   }   COMMTIMEOUTS comTimeOut;   comTimeOut.ReadIntervalTimeout=10;   // 将超时参数写

文档评论(0)

bokegood + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档