切换到宽版
  • 3517阅读
  • 39回复

[无线](小白学步)压榨GPS性能,提升刷新率10倍!干货分享 [复制链接]

上一主题 下一主题
离线0611留守bs
 
发帖
68
M币
515
专家
4
粉丝
17

1、前言
2、硬件&工具
3、指令
4、代码分享
5、效果(延伸)

一、前言
   一般,我们购买的GPS模块,默认状态下波特率是9600或者4800,输出频率是1hz。
但是这个是不满足高速刷新的需求的,设想一下速度100km/h,1秒钟能跑出27.8m
(100000/3600=2.78),跑将近30米刷新一次,我的天啊,一不留神,我要错过这个高速出口了。。。
如果能提高10倍,ok这个数据变成2.8m,是不是很爽,好接下来我告诉你怎么做
二、硬件&工具
   以GPS模块ublox G7020一个,(大约30RMB,一体机包含天线)(其他的模块控制指令不一样,不在此讨论范围)ublox的,一般都能支持。
   usb转TTL串口线一条,
   PC一台
   串口调试助手
三、指令
   调整到10hz
   0xB5,0x62,0x06,0x08,0x06,0x00,0x64,0x00,0x01,0x00,0x01,0x00,
0x7A,0x12,0xB5,0x62,0x06,0x08,0x00,0x00,0x0E,0x30
通过串口助手发送这些数据到,Ublox模块,刷新频率会立即提升。很明显看到串口助手的接收端变化
   这就ok了吗?
   当然没有,我们看到GPS发出的数据GPGSV,GPGSA,GPGLL等很多条信息指令,这些对于4800波特罗
是显得有点慢了,因此我们需要做处理,
1、提高波特率或者关闭我们不需要的一些信息输出
2、提高波特率又删除不需要的信息
这两个选择看自己的需求

四、代码分享
指令给出
//关闭GPGSV输出
const UINT8 Ublox_G7020_RM_GSV[]={0x24,0x45,0x49,0x47,0x50,0x51,0x2c,0x47,0x53,0x56,0x2a,0x32,
0x34,0x0d,0x0a,0xb5,0x62,0x06,0x01,0x03,0x00,0xf0,0x03,0x00,0xfd,0x15};
//关闭GPGLL输出
const UINT8 Ublox_G7020_RM_GLL[]={0x24,0x45,0x49,0x47,0x50,0x51,0x2c,0x47,0x4c,0x4c,0x2a,0x32,
0x31,0x0d,0x0a,0xb5,0x62,0x06,0x01,0x03,0x00,0xf0,0x01,0x00,0xfb,0x11};
//关闭GPGSA输出
const UINT8 Ublox_G7020_RM_GSA[]={0x24,0x45,0x49,0x47,0x50,0x51,0x2c,0x47,0x53,0x41,0x2a,0x33,0x33,0x0d,0x0a,0xb5,0x62,0x06,0x01,0x03,0x00,0xf0,0x02,0x00,0xfc,0x13};
//关闭GPGGA输出
const UINT8 Ublox_G7020_RM_GGA[]={0x24,0x45,0x49,0x47,0x50,0x51,0x2c,0x47,0x47,0x41,0x2a,0x32,0x37,0x0d,0x0a,0xb5,0x62,0x06,0x01,0x03,0x00,0xf0,0x00,0x00,0xfa,0x0f};
//关闭GPVTG输出
const UINT8 Ublox_G7020_RM_VTG[]={0x24,0x45,0x49,0x47,0x50,0x51,0x2c,0x56,0x54,0x47,0x2a,0x32,0x33,0x0d,0x0a,0xb5,0x62,0x06,0x01,0x03,0x00,0xf0,0x05,0x00,0xff,0x19};

//设置模块波特率为115200
const UINT8 Ublox_G7020_Set115200BAUDRATE[]={0xb5,0x62,0x06,0x00,0x14,0x00,0x01,0x00,0x00,
0x00,0xd0,0x08,0x00,0x00,0x00,0xc2,0x01,0x00,0x07,0x00,0x07,0x00,0x00,0x00,0x00,0x00,0xc4,
0x96,0xb5,0x62,0x06,0x00,0x01,0x00,0x01,0x08,0x22};

//设置模块波特率为38400
const UINT8 Ublox_G7020_Set38400BAUDRATE[]={0xb5,0x62,0x06,0x00,0x14,0x00,0x01,0x00,0x00,
0x00,0xd0,0x08,0x00,0x00,0x00,0x96,0x00,0x00,0x07,0x00,0x07,0x00,0x00,0x00,0x00,0x00,0x97,0xa8};

我曾经在一个系统里面做了处理,提高波特率又删除不需要的信息
只留下一条$GPRMC数据,其他都不要,然后以10hz的 38400波特率发出。
RMC 其实比较包含了我所需要的全部信息,时间、纬度、方向、定位状态

为什么我不选更快的115200,这是因为接受自这些数据,是用单片机的中断进行接受,速率越快,单片机处理能力就得越高。统筹系统的稳定和需求,定在38400,已经能达到一个处理和性能平衡的状态了。

以上的数据,均通过单片机串口发送到GPS模块,因此单片机的RX TX需要连接到GPS的TX RX。
如果GPS没有flash做保存,每次开机都需要这样执行一次。

技巧:
1、发送一条指令结束后,等个200ms。给GPS处理时间。
2、调整波特率后,自身(串口助手or 单片机)的波特率也跟着调整匹配

五、效果
   我之前设计的是一个车用的东西,有速度和方向显示的功能。
测试的时候,系统正常定位了,拿着它走路,转圈,都能看到速度和方向的变化,非常快,没有1hz那种迟疑。特别是急加速或者减速的时候,速度刷新刚刚的。
延伸,提高GPS的性能,从而达到,整体机器的性能提高。有能力的朋友可以试着改改自己的车载导航,改改自己的GPS时钟,会有不一样的感受啊。
   我曾经看过论坛里面的一个哥们发帖有着10hz的刷新率,做了一个速度仪。我想方式估计也是这个。

最后奉上一张我自己弄出来的设备,美照一张。


本文内容包含图片或附件,获取更多资讯,请 登录 后查看;或者 注册 成为会员获得更多权限
本帖最近打赏记录:共8条打赏M币+158专家+1
發騷友 专家 +1 以資鼓勵 07-12
發騷友 M币 +100 以資鼓勵 07-12
yangly6443 M币 +13 原創內容,牛人! 07-12
吴鹏930 M币 +3 謝謝分享 07-11
飞向狙沙 M币 +13 謝謝分享 07-11
csjsone M币 +13 謝謝分享 07-11
李志路 M币 +8 原創內容 07-11
verv1998 M币 +8 - 07-11
离线清池

发帖
2081
M币
2034
专家
3
粉丝
28
只看该作者 1楼 发表于: 07-11
牛人啊,如果能改车载导航就好了

内容来自Android手机客户端

离线worldlyguest

发帖
1674
M币
6009
专家
5
粉丝
37
只看该作者 2楼 发表于: 07-11
提供了一种提高精度的思路,学习了!
离线verv1998

发帖
215
M币
2015
专家
0
粉丝
23
只看该作者 3楼 发表于: 07-11
这个厉害了,小白不会搞啊
离线wqjuyu

发帖
1700
M币
745
专家
14
粉丝
23
只看该作者 4楼 发表于: 07-11
不错啊,学习啦
离线blueflash

发帖
3264
M币
617
专家
4
粉丝
29
只看该作者 5楼 发表于: 07-11
能加到导航地图上就实用了,现在导航都是提前几公里就叫,提醒你注意快到路口的方法
离线x3159

发帖
12077
M币
4525
专家
1
粉丝
35
只看该作者 6楼 发表于: 07-11
如果用这个模块的都可以改,模块要涨价了
离线blueflash

发帖
3264
M币
617
专家
4
粉丝
29
只看该作者 7楼 发表于: 07-11
楼主你好,我是京东快递的,有个快件请签收一下。嗯,对,请交代一下你为某组织改装导弹导航的犯罪事实!!!
离线0611留守bs
发帖
68
M币
515
专家
4
粉丝
17
只看该作者 8楼 发表于: 07-11
回 x3159 的帖子
x3159:如果用这个模块的都可以改,模块要涨价了 (2018-07-11 16:28) 回 x3159 的帖子

可以改,亲测,确认无误。性能提升明显
离线磨盘街

发帖
299
M币
4063
专家
3
粉丝
11
只看该作者 9楼 发表于: 07-11
看上去 ‘高、大、上‘’的样子!