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的刷新率,做了一个速度仪。我想方式估计也是这个。
最后奉上一张我自己弄出来的设备,美照一张。