切换到宽版
爱科技/爱创意/爱折腾/爱极致;技术知识分享平台,点击进入新版数码之家网站
  • 9121阅读
  • 45回复

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

上一主题 下一主题
离线0611留守bs
 
发帖
68
M币
530
专家
4
粉丝
24
只看楼主 倒序阅读 我要置顶 楼主  发表于: 2018-07-11

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的刷新率,做了一个速度仪。我想方式估计也是这个。

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


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

发帖
2211
M币
2361
专家
3
粉丝
32
只看该作者 1楼 发表于: 2018-07-11
离线worldlyguest

发帖
2238
M币
7072
专家
5
粉丝
39
只看该作者 2楼 发表于: 2018-07-11
请登录后查看
离线verv1998

发帖
221
M币
2018
专家
0
粉丝
25
只看该作者 3楼 发表于: 2018-07-11
请登录后查看
离线wqjuyu

发帖
1803
M币
858
专家
14
粉丝
26
只看该作者 4楼 发表于: 2018-07-11
请登录后查看
离线blueflash

发帖
3267
M币
609
专家
4
粉丝
30
只看该作者 5楼 发表于: 2018-07-11
请登录后查看
离线x3159

发帖
13395
M币
6654
专家
1
粉丝
39
只看该作者 6楼 发表于: 2018-07-11
请登录后查看
离线blueflash

发帖
3267
M币
609
专家
4
粉丝
30
只看该作者 7楼 发表于: 2018-07-11
请登录后查看
离线0611留守bs
发帖
68
M币
530
专家
4
粉丝
24
只看该作者 8楼 发表于: 2018-07-11
回 x3159 的帖子
请登录后查看
离线磨盘街

发帖
300
M币
4186
专家
3
粉丝
13
只看该作者 9楼 发表于: 2018-07-11
请登录后查看
快速回复
限80 字节
温馨提示:欢迎交流讨论,请勿发布纯表情、纯引用等灌水帖子;以免被删除
 
上一个 下一个