差别
这里会显示出您选择的修订版和当前版本之间的差别。
两侧同时换到之前的修订记录 前一修订版 后一修订版 | 前一修订版 | ||
gps [2023/07/11 14:22] meiling |
gps [2023/07/25 09:40] (当前版本) lijiran [5. 参考案例] |
||
---|---|---|---|
行 2: | 行 2: | ||
### 1.什么是GPS? | ### 1.什么是GPS? | ||
- | 什么是GPS | + | GPS全称为Global Positioning System,是一种基于卫星系统的全球定位技术。它由一组卫星和地面接收设备组成,用于准确确定地球上的位置、速度和时间信息。GPS系统通过将地球上的卫星信号与接收设备之间的距离计算来确定位置。接收设备通过接收来自多颗卫星的信号,并使用三角定位原理计算自身的准确位置。GPS系统由美国政府的国防部负责维护和运营,目前由全球共有约30颗工作卫星,其中至少有4颗卫星同时可见任何地方。GPS接收设备可以是专用的GPS导航器、手机、智能手表、车载导航系统等,这些设备接收卫星信号,并提供定位和导航功能。 |
- | [[http://example.com|外部链接]] | + | --- |
+ | {{ :wiki:lalalalala.png?300 |}} | ||
- | {{:上升沿d触发器结构.png?300 |}} | + | GPS模块是一种在手机或者机器的主板上结合的无线芯片模块,可以和GPS联络,从而实现定位和导航。 |
- | {{ :上升沿d触发器结构.png |}} | + | --- |
+ | {{ :gps模块.jpg?300 |}} | ||
+ | } | ||
+ | ### 2. GPS是如何工作的? | ||
+ | GPS内有原子钟用来计时,它以原子共振频率标准来计算时间。原子钟是目前世界上最准确的衡量时间和频率的标准,广泛用于控制广播频率和卫星信号。 | ||
+ | |||
+ | --- | ||
+ | GPS定位原理: | ||
+ | 当我们需要定位时,我们可以从GPS卫星上接受一些信息,就是卫星的星历,星历里有卫星自己的空间坐标x1,y1,z1,卫星有原子钟,所以可以获得一个准取得时间t1,卫星会把这些信息发送给我们的设备上的GPS模块。通过坐标和时间都可以算出GPS模块和卫星之间的距离。 | ||
+ | 已知:卫星的空间坐标x1,y1,z1,时间t1 | ||
+ | 未知:设备的空间坐标x2,y2,z2,时间t2 | ||
+ | |||
+ | --- | ||
+ | {{ ::屏幕截图_2023-07-14_171837.png?300 |}} | ||
+ | |||
+ | 四个未知数,所以需要4个这样的方程,所以需要4个卫星,这样就可以解出x2,y2,z2,t2 | ||
+ | 实际上,卫星定位的误差还是较大,因为信号在大气中传输速度会有损耗,一般会使用差分GPS技术来减小误差。 | ||
+ | |||
+ | --- | ||
+ | {{ :0530-4.jpg?300 |}} | ||
+ | |||
+ | 差分GPS技术: | ||
+ | 在地面上建立位置已知的GPS基站,当定位时,基站也可以接收到为我们提供位置信息的4颗卫星的信号,根据位置信号测出坐标值,与已知坐标比较,得出偏差量,将偏差量或者实时测得的载波相位,通过数传链路或者移动通信网络发送给终端设备,然后终端设备根据这个信息进行修正位置,得出比较精准的位置信息。 | ||
+ | |||
+ | --- | ||
+ | {{ :oip.jpg?300 |}} | ||
- | ### 2. GPS是如何工作的? | ||
### 3. 如何应用GPS? | ### 3. 如何应用GPS? | ||
+ | |||
+ | GPS可以在多个领域和应用中使用,下面是一些常见的应用GPS的示例: | ||
+ | |||
+ | - 1. 位置导航和车辆导航:GPS在导航系统中被广泛应用。使用GPS接收设备,可以确定当前位置,并根据目的地提供导航指引,帮助人们准确到达目标地点。车辆导航系统将GPS技术与地图和交通信息结合使用,提供实时的车辆导航和路线规划。 | ||
+ | |||
+ | - 2. 航空和航海导航:在航空和航海领域,GPS在飞行员和船员导航中起着重要作用。它可以提供飞机、船只或无人机的准确位置和航向信息帮助导航员进行飞行路径划、定位和导航。 | ||
+ | |||
+ | - 3. 运输和物流管理:GPS在运输和物流管理中用于车队管理、货物追踪和路线优化。通过实时地跟踪车辆位置,管理者可以监控车辆的行驶情况,优化路线和交付时间,提高运输效率和物流管理。 | ||
+ | |||
+ | - 4. 户外运动和健身追踪:GPS可用于追踪户外运动活动,如跑步、骑行、徒步等。通过携带GPS设备或智能手表,可以记录运动轨迹、距离和速度等数据,并提供实时和后期分析,帮助人们追踪运动活动的进展和提高个人健身效果。 | ||
+ | |||
+ | - 5. 地震监测和地质研究:GPS技术被用于地壳运动监测、地震研究和地质勘探中。通过在地球上的多个接收点上放置GPS设备,可以监测地壳的运动和变形,并帮助科学家研究地质活动和地震风险。 | ||
+ | |||
+ | |||
+ | |||
### 4. 主要的GPS供应商 | ### 4. 主要的GPS供应商 | ||
+ | |||
+ | **- [[https://www.garmin.com.cn/|Garmin]]** | ||
+ | |||
+ | Garmin是一家总部位于美国的跨国科技公司,成立于1989年。该公司专注于设计、制造和销售各种全球定位系统(GPS)产品,包括手持式导航设备、智能手表、运动追踪器、航空设备和汽车导航系统等。 | ||
+ | Garmin的产品广泛应用于航空、航海、汽车、户外运动和健身等领域。公司的产品以其高精度、可靠性和创新性而闻名,被广泛使用于个人消费者、专业人士和军事领域。 | ||
+ | |||
+ | ** - [[https://www.u-blox.com/zh/|UBlox]]** | ||
+ | |||
+ | UBlox是一家瑞士的全球领先的无线通信和定位技术提供商。该公司成立于1997年,总部位于瑞士的蒙特勒。UBlox专注于提供高精度、高可靠性的定位和导航解决方案,包括全球卫星导航系统(GNSS)接收器、芯片组和软件。 | ||
+ | UBlox的产品广泛应用于汽车导航、智能交通系统、物联网、航空航天、农业、测绘、无人机等领域。公司的产品包括GNSS接收器、GNSS芯片组、GNSS模块、GNSS天线、数据链路模块、无线通信模块等。 | ||
+ | |||
+ | |||
+ | **- [[https://www.nxp.com|NXP]]** | ||
+ | |||
+ | NXP公司全称为恩智浦半导体公司,它成立于2006年,其前身是荷兰飞利浦公司于1953年成立的半导体事业部。恩智浦总部位于荷兰埃因霍温,并在全球30个国家和地区设有办事处,员工人数超过30000人。 | ||
+ | 恩智浦提供低成本、便携式GPS设备完整解决方案,包括软件和硬件方面。通过swGPS Personal软件实现GPS计算,从而取代了一个GPS基带处理器,降低了材料清单成本并支持现场升级。 | ||
+ | |||
+ | |||
+ | **- [[https://sirf.ngo/|SiRF]]** | ||
+ | |||
+ | SiRF公司是一家全球领先的定位芯片供应商,成立于1995年,总部位于美国加州的圣荷西市。SiRF专注于研发、制造和销售GPS芯片和软件产品,其GPS芯片和软件产品广泛应用于移动设备、汽车、个人电脑、服务器和其他嵌入式设备中。SiRF公司在全球拥有众多客户和合作伙伴,包括GPS模块厂商、移动设备制造商、汽车制造商等。 | ||
+ | |||
+ | |||
### 5. 参考案例 | ### 5. 参考案例 | ||
+ | |||
+ | |||
+ | - [[https://github.com/traccar/traccar|https://github.com/traccar/traccar]] | ||
+ | |||
+ | |||
+ | 下面是一项使用RP2040作为主控芯片,驱动中科微电子的ATGM336H型号的传感器的参考案例,通过UART进行传感器与主控之间的数据通信,当有数据回传回来时,将数据按照指定的流程分割好,找到其中的GPS坐标,并且通过ssd1306芯片驱动的OLED屏幕打印出来,主控芯片与OLED屏幕通过SPI协议进行数据通信。 | ||
+ | |||
+ | |||
+ | --- | ||
+ | 效果如图所示: | ||
+ | {{ :微信图片_20230725093622.jpg?300 |}} | ||
+ | |||
+ | |||
+ | 代码如下 | ||
+ | from machine import UART,Pin,SPI | ||
+ | import time | ||
+ | import uasyncio | ||
+ | from ssd1306 import SSD1306_SPI | ||
+ | import framebuf | ||
+ | from utime import sleep_ms | ||
+ | spi1_mosi = 11 | ||
+ | spi1_sck = 10 | ||
+ | spi1_dc = 9 | ||
+ | spi1_rstn = 8 | ||
+ | spi1_cs = 16 | ||
+ | spi = SPI(1, 100000, mosi=Pin(spi1_mosi), sck=Pin(spi1_sck)) | ||
+ | oled = SSD1306_SPI(128, 64, spi, Pin(spi1_dc),Pin(spi1_rstn), Pin(spi1_cs)) | ||
+ | uart1 = UART(1, baudrate=9600, tx=Pin(4), rx=Pin(5)) | ||
+ | flag = 0 | ||
+ | class GPS(): | ||
+ | buff = bytearray(270) | ||
+ | def __init__(self): | ||
+ | self.a = 0 | ||
+ | self.b = 0 | ||
+ | self.array2 = “” | ||
+ | def read_and_process(self): | ||
+ | buff = uart1.read(1) | ||
+ | if buff == None: | ||
+ | self.b = 0 | ||
+ | else: | ||
+ | if buff == b'\n': | ||
+ | self.a = 1 | ||
+ | if self.a == 1: | ||
+ | buff = uart1.read(270) | ||
+ | if buff != None: | ||
+ | self.array2 = buff[0:6] | ||
+ | if self.array2 == b'GNGGA,': | ||
+ | self.array2 = buff[7:44] | ||
+ | if self.array2[-1] == 44: ##ascii value ',' | ||
+ | flag = 1 | ||
+ | print(flag) | ||
+ | oled.fill(0) | ||
+ | oled.show() | ||
+ | oled.text(self.array2[10:22],0,0) | ||
+ | oled.text(self.array2[23:-1],0,32) | ||
+ | oled.show() | ||
+ | gps = GPS() | ||
+ | while 1: | ||
+ | gps.read_and_process() | ||
+ | |||
+ | |||
+ | |||
+ |