GPS传感器 - 从零开始认识各种传感器【第三十期】
作为最后一期的传感器百科,将为大家介绍GPS传感器的工作原理;常见种类;以及通过MCU实际演示对于传感器数据的读取过程。
标签
嵌入式系统
Lucia
更新2024-08-08
53

1、什么是GPS传感器 

GPS,全称全球定位系统,Global Positioning System,GPS传感器是一种利用卫星信号进行定位和导航的设备,广泛应用于交通运输、地理信息系统等各个领域。

当前存在多种不同的全球卫星定位系统,除了规模最大的美国 GPS,还有俄罗斯的全球导航卫星系统GLONASS,中国的北斗卫星导航系统BDS,欧盟的伽利略定位系统。它们其实都属于全球导航卫星系统GNSS概念。

通常我们使用或者看到的全球导航卫星定位系统标志可能都是沿用最早部署的GPS,其实更为准确的名词应该是GNSS。

2、GPS传感器是如何工作的 

任何一个GPS卫星/GNSS卫星定位系统都由数十颗时刻围绕地球旋转的卫星组成。

卫星的数量保证了在地球上任何一点的任何时刻,都能接收到天空中至少4颗卫星的信号。每颗GPS卫星都在不间断的发送信号,该信号内包含了卫星的位置及时间信息。由于电磁波传播速度是已知并恒定的(约为3x108 m/s)那么由从卫星发出的电波到达测量点经过的时间差,便可以推算出每颗卫星与测量点的距离。

原则上,要确定被测量点的XYZ座标,也就是方位和高度信息,只要接收三个卫星讯号,因为三个卫星当前所处的空间位置是系统已知的,通过三点定位就可以确定测量点位置。但是考虑到测量点传感器的时间信息和卫星的时间信息的依据不同,例如测量点可能使用的是手机上的时间,GPS卫星使用的是非常精确的原子钟计量的时间。如果这两者存在小小的差异,即使是百万分之一秒的误差,由于电磁波传播的高速特性,就会带来300米的定位误差。所以系统中需要第四个卫星的数据来消除这个时间误差,因此,GPS定位要至少接收四个卫星的信号才可以显示准确的位置。

3、常见的GPS传感器的种类以及性能对比 

除了前面提到的几个主要的全球卫星定位系统,印度和日本也开发了各自的区域性导航定位系统RNSS和QZSS,以上是它们的对比表格。表格中的MEO代表中高轨道卫星,卫星离地面距离为1万到2万公里之间;GEO代表高轨道卫星,处于地球同步轨道3.5万公里高度。大部分全球定位系统都采用多颗MEO中高轨道卫星,其绕地球旋转周期为12小时,轨迹覆盖全球范围,按照计算,只要大于24颗MEO轨道卫星,就能保证地球上任何一点在任何时刻天空中都有4颗可用的卫星用于定位。而区域性的定位系统采用GEO高轨道卫星,也叫做地球静止轨道卫星,其卫星旋转相对于地球同步,其位置不变,适合单一国家区域的卫星定位导航。

4、GPS传感器实验演示 

我们来演示使用 MCU 读取显示GPS传感器的数据。这是一款ADAfruit出品的 GPS 模块PA1616S。测试环境是在实验室窗口附近,以确保传感器对卫星信号的接收。可以看到,目前传感器准确给出了当前的定位信息。

主控板卡:基于RP2040的带屏调试助手

以下是主程序中对于GPS传感器数据的获取代码示例:

from machine import UART,Pin,Timer,PWM,SPI,time_pulse_us, I2C,freq
import _thread
from time import sleep_us,ticks_us,sleep
import uos
import test.st7789 as st7789
from test.fonts import vga2_8x8 as font1
from test.fonts import vga1_16x32 as font2
import random
import math,array
import struct
import framebuf
freq(150_000_000)
st7789_res = 0
st7789_dc = 1
disp_width = 240
disp_height = 240
spi_sck=Pin(2)
spi_tx=Pin(3)
spi0=SPI(0,baudrate=60_000_000, phase=1, polarity=1, sck=spi_sck, mosi=spi_tx)
display = st7789.ST7789(spi0, disp_width, disp_width,
reset=machine.Pin(st7789_res, machine.Pin.OUT),
dc=machine.Pin(st7789_dc, machine.Pin.OUT),
xstart=0, ystart=0, rotation=0)
display.fill(st7789.WHITE)

f_list = [open("/bin/{}.bin".format(i), "rb") for i in range(18)]

uart1 = UART(1, baudrate=9600, tx=Pin(20), rx=Pin(21))

class GPS():
buff = bytearray(270)
def __init__(self):

self.a = 0
self.b = 0
self.flag = 0
self.array1 = '$GPGGA,'
self.array2 = ''
def read_and_process(self):

buff = uart1.read(1)
if buff == None:
# print(1)
self.b = 0
else:
if buff == b'\n':
self.a = 1
# print(buff)
if self.a == 1:

buff = uart1.read(270)
# print(buff)
self.array2 = buff[0:6]
# print(self.array2)
if self.array2 == b'GPGGA,':
self.array2 = buff[7:44]
if self.array2[24]==b'A' or self.array2[25]==b'A' :
display.text(font2, 'N:'+str(self.array2[14:15], 'utf-8')+'*'+str(self.array2[16:17], 'utf-8')+'\''+str(self.array2[19:20], 'utf-8'),10, 30)
display.text(font2, 'E:'+str(self.array2[24:26], 'utf-8')+'*'+str(self.array2[27:28], 'utf-8')+'\''+str(self.array2[30:31], 'utf-8'), 10, 80)
else :
display.text(font2, 'N:serching...',10, 30)
display.text(font2, 'E:serching...', 10, 80)

self.a = 0

gps = GPS()

while True :
for f in f_list:
f.seek(0)
for row in range(100):
buffer = f.read(200)
display.blit_buffer(buffer, 120, row+120, 100, 1)
gps.read_and_process()
团队介绍
你了解生活中常见的各种传感器是如何工作的吗?本系列将选择30种不同类型的传感器,通过5分钟左右的视频和文章带你一步步了解每个传感器的内部结构和工作原理,并推荐选型和购买合适的传感器。
团队成员
硬禾学堂
硬禾核心团队举办实战培训营已有超过6年的经验。自成立起矢志建立专业化、系统化、工程化技能培训体系,以在工业界中的最佳实践为行业培养技术中坚和领军人才。 硬禾采用Project-Based Learning(PBL)项目制教学方法,在基于实际产品和项目的教学过程中借助短期的高强度、快节奏的系统性实战训练,让学员迅速积累优秀工程师应具备的专业技能、职业素养和全区思维,加速其职业成长。
得捷电子
DigiKey 总部位于美国明尼苏达州锡夫里弗福尔斯市,是全球电子元器件和自动化产品前沿商业分销领域公认的领航者和持续创新者。我们通过分销来自 2,900 多家优质品牌制造商的 1,530 多万种元器件获得了强大的技术优势,并凭借行业领先的产品存货广度和深度以及立即发货的能力,确立了我们在分销领域的领导地位。DigiKey 还为工程师、设计师、创建者和采购专业人员提供丰富的数字解决方案、无障碍互动和工具支持,以帮助他们提升工作效率。如需了解更多信息,请访问 www.digikey.cn 并关注我们的微信、微博、腾讯视频和 BiliBili 账号。
评论
0 / 100
查看更多
硬禾服务号
关注最新动态
0512-67862536
info@eetree.cn
江苏省苏州市苏州工业园区新平街388号腾飞创新园A2幢815室
苏州硬禾信息科技有限公司
Copyright © 2024 苏州硬禾信息科技有限公司 All Rights Reserved 苏ICP备19040198号