新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 基礎(chǔ)知識之全球定位系統(tǒng)GPS模塊

基礎(chǔ)知識之全球定位系統(tǒng)GPS模塊

作者: 時間:2024-02-22 來源:電子森林 收藏

1.什么是?

全稱為Global Positioning System,是一種基于衛(wèi)星系統(tǒng)的。它由一組衛(wèi)星和地面接收設(shè)備組成,用于準(zhǔn)確確定地球上的位置、速度和時間信息。系統(tǒng)通過將地球上的衛(wèi)星信號與接收設(shè)備之間的距離計算來確定位置。接收設(shè)備通過接收來自多顆衛(wèi)星的信號,并使用三角定位原理計算自身的準(zhǔn)確位置。GPS系統(tǒng)由美國政府的國防部負(fù)責(zé)維護(hù)和運營,目前由全球共有約30顆工作衛(wèi)星,其中至少有4顆衛(wèi)星同時可見任何地方。GPS接收設(shè)備可以是專用的GPS導(dǎo)航器、手機(jī)、智能手表、車載導(dǎo)航系統(tǒng)等,這些設(shè)備接收衛(wèi)星信號,并提供定位和導(dǎo)航功能。

本文引用地址:http://2s4d.com/article/202402/455608.htm

GPS模塊是一種在手機(jī)或者機(jī)器的主板上結(jié)合的無線芯片模塊,可以和GPS聯(lián)絡(luò),從而實現(xiàn)定位和導(dǎo)航。


GPS內(nèi)有原子鐘用來計時,它以原子共振頻率標(biāo)準(zhǔn)來計算時間。原子鐘是目前世界上最準(zhǔn)確的衡量時間和頻率的標(biāo)準(zhǔn),廣泛用于控制廣播頻率和衛(wèi)星信號。


GPS定位原理: 當(dāng)我們需要定位時,我們可以從GPS衛(wèi)星上接受一些信息,就是衛(wèi)星的星歷,星歷里有衛(wèi)星自己的空間坐標(biāo)x1,y1,z1,衛(wèi)星有原子鐘,所以可以獲得一個準(zhǔn)取得時間t1,衛(wèi)星會把這些信息發(fā)送給我們的設(shè)備上的GPS模塊。通過坐標(biāo)和時間都可以算出GPS模塊和衛(wèi)星之間的距離。 已知:衛(wèi)星的空間坐標(biāo)x1,y1,z1,時間t1 未知:設(shè)備的空間坐標(biāo)x2,y2,z2,時間t2


四個未知數(shù),所以需要4個這樣的方程,所以需要4個衛(wèi)星,這樣就可以解出x2,y2,z2,t2 實際上,衛(wèi)星定位的誤差還是較大,因為信號在大氣中傳輸速度會有損耗,一般會使用差分GPS技術(shù)來減小誤差。


差分GPS技術(shù): 在地面上建立位置已知的GPS基站,當(dāng)定位時,基站也可以接收到為我們提供位置信息的4顆衛(wèi)星的信號,根據(jù)位置信號測出坐標(biāo)值,與已知坐標(biāo)比較,得出偏差量,將偏差量或者實時測得的載波相位,通過數(shù)傳鏈路或者移動通信網(wǎng)絡(luò)發(fā)送給終端設(shè)備,然后終端設(shè)備根據(jù)這個信息進(jìn)行修正位置,得出比較精準(zhǔn)的位置信息。


GPS可以在多個領(lǐng)域和應(yīng)用中使用,下面是一些常見的應(yīng)用GPS的示例:

  • 1. 位置導(dǎo)航和車輛導(dǎo)航:GPS在導(dǎo)航系統(tǒng)中被廣泛應(yīng)用。使用GPS接收設(shè)備,可以確定當(dāng)前位置,并根據(jù)目的地提供導(dǎo)航指引,幫助人們準(zhǔn)確到達(dá)目標(biāo)地點。車輛導(dǎo)航系統(tǒng)將GPS技術(shù)與地圖和交通信息結(jié)合使用,提供實時的車輛導(dǎo)航和路線規(guī)劃。
  • 2. 航空和航海導(dǎo)航:在航空和航海領(lǐng)域,GPS在飛行員和船員導(dǎo)航中起著重要作用。它可以提供飛機(jī)、船只或無人機(jī)的準(zhǔn)確位置和航向信息幫助導(dǎo)航員進(jìn)行飛行路徑劃、定位和導(dǎo)航。
  • 3. 運輸和物流管理:GPS在運輸和物流管理中用于車隊管理、貨物追蹤和路線優(yōu)化。通過實時地跟蹤車輛位置,管理者可以監(jiān)控車輛的行駛情況,優(yōu)化路線和交付時間,提高運輸效率和物流管理。
  • 4. 戶外運動和健身追蹤:GPS可用于追蹤戶外運動活動,如跑步、騎行、徒步等。通過攜帶GPS設(shè)備或智能手表,可以記錄運動軌跡、距離和速度等數(shù)據(jù),并提供實時和后期分析,幫助人們追蹤運動活動的進(jìn)展和提高個人健身效果。
  • 5. 地震監(jiān)測和地質(zhì)研究:GPS技術(shù)被用于地殼運動監(jiān)測、地震研究和地質(zhì)勘探中。通過在地球上的多個接收點上放置GPS設(shè)備,可以監(jiān)測地殼的運動和變形,并幫助科學(xué)家研究地質(zhì)活動和地震風(fēng)險。

- Garmin

Garmin是一家總部位于美國的跨國科技公司,成立于1989年。該公司專注于設(shè)計、制造和銷售各種全球定位系統(tǒng)(GPS)產(chǎn)品,包括手持式導(dǎo)航設(shè)備、智能手表、運動追蹤器、航空設(shè)備和汽車導(dǎo)航系統(tǒng)等。 Garmin的產(chǎn)品廣泛應(yīng)用于航空、航海、汽車、戶外運動和健身等領(lǐng)域。公司的產(chǎn)品以其高精度、可靠性和創(chuàng)新性而聞名,被廣泛使用于個人消費者、專業(yè)人士和軍事領(lǐng)域。

- UBlox

UBlox是一家瑞士的全球領(lǐng)先的無線通信和定位技術(shù)提供商。該公司成立于1997年,總部位于瑞士的蒙特勒。UBlox專注于提供高精度、高可靠性的定位和導(dǎo)航解決方案,包括全球衛(wèi)星導(dǎo)航系統(tǒng)(GNSS)接收器、芯片組和軟件。 UBlox的產(chǎn)品廣泛應(yīng)用于汽車導(dǎo)航、智能交通系統(tǒng)、物聯(lián)網(wǎng)、航空航天、農(nóng)業(yè)、測繪、無人機(jī)等領(lǐng)域。公司的產(chǎn)品包括GNSS接收器、GNSS芯片組、GNSS模塊、GNSS天線、數(shù)據(jù)鏈路模塊、無線通信模塊等。

- NXP

NXP公司全稱為恩智浦半導(dǎo)體公司,它成立于2006年,其前身是荷蘭飛利浦公司于1953年成立的半導(dǎo)體事業(yè)部。恩智浦總部位于荷蘭埃因霍溫,并在全球30個國家和地區(qū)設(shè)有辦事處,員工人數(shù)超過30000人。 恩智浦提供低成本、便攜式GPS設(shè)備完整解決方案,包括軟件和硬件方面。通過swGPS Personal軟件實現(xiàn)GPS計算,從而取代了一個GPS基帶處理器,降低了材料清單成本并支持現(xiàn)場升級。

- SiRF

SiRF公司是一家全球領(lǐng)先的定位芯片供應(yīng)商,成立于1995年,總部位于美國加州的圣荷西市。SiRF專注于研發(fā)、制造和銷售GPS芯片和軟件產(chǎn)品,其GPS芯片和軟件產(chǎn)品廣泛應(yīng)用于移動設(shè)備、汽車、個人電腦、服務(wù)器和其他嵌入式設(shè)備中。SiRF公司在全球擁有眾多客戶和合作伙伴,包括GPS模塊廠商、移動設(shè)備制造商、汽車制造商等。

  • https://github.com/traccar/traccar

下面是一項使用RP2040作為主控芯片,驅(qū)動中科微電子的ATGM336H型號的的參考案例,通過UART進(jìn)行與主控之間的數(shù)據(jù)通信,當(dāng)有數(shù)據(jù)回傳回來時,將數(shù)據(jù)按照指定的流程分割好,找到其中的GPS坐標(biāo),并且通過ssd1306芯片驅(qū)動的OLED屏幕打印出來,主控芯片與OLED屏幕通過SPI協(xié)議進(jìn)行數(shù)據(jù)通信。


效果如圖所示:

代碼如下

  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()


評論


相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉