Colectăm gps-radar bazat pe stm32f3discovery și u-blox neo-6m

Deci, ce ar trebui să facă dispozitivul nostru?

  1. Obțineți informații despre poziția curentă din receptorul GPS.
  2. Dezasamblați-l.
  3. Afișați pe ecran poziția curentă a receptorului, precum și sateliții vizibili.

Pentru a face acest lucru, va trebui să aflăm ce sunt termenii GPS, NMEA-0183 și algoritmul Brezenham.







Desigur, nu este necesară înțelegerea detaliată a nuanțelor GPS, deoarece toate lucrările de calcul al coordonatelor, vitezei, cursului și a altor parametri pentru noi vor avea un receptor GPS. Dar trebuie să cunoașteți baza.

Pentru a afla distanța dintre receptor și transmițător, trebuie mai întâi să sincronizați ceasul și apoi să calculați distanța necesară, cunoscând viteza de propagare a undei radio, precum și întârzierea dintre timpul de transmisie și timpul de recepție.

După cum am scris mai sus, receptorul trebuie să cunoască pozițiile exacte ale emițătoarelor. Aceste informații sunt furnizate de emițător și se numește "almanah". Firește, această informație este depășit, cu toate acestea, în funcție de „prospețime“ almanah pot distinge trei tipuri de întârziere între pornirea de pe receptor, și de a determina coordonatele exacte ale primului „pornire la rece“, „începe cald“ și „hot start“.

Există modalități care pot reduce timpul de pornire: AGPS (aliasuri alternative - prin Internet sau prin poșta din Rusia), DGPS (excepția distorsionării semnalului de către atmosferă) și altele. Dar nu le voi considera, pentru că nu este necesar pentru a îndeplini această sarcină.

Acum, să analizăm forma în care apar coordonatele calculate la ieșirea dispozitivului. Există un standard special pentru acest lucru.

NMEA este Asociația Națională de Electronică Marină, iar NMEA-0183 (conform Wikipedia) este un protocol text pentru comunicarea dintre echipamentele maritime (de obicei navigația) (sau echipamentele folosite în trenuri). Iată liniile care vin de la receptorul meu.

Mai întâi definim părțile similare ale fiecărei linii. Este ușor de văzut că toate încep în același mod și se termină mai mult sau mai puțin în mod egal. $ GP - Informațiile provin din receptor GPS (realizezi că nava o grămadă de alt senzor: dacă am avut un far de urgență, linia va începe cu $ EP și, dacă este mai sănătos, apoi $ SD și așa mai departe.). . Fiecare linie se termină în mod necesar cu o sumă de control XOR a tuturor octeților într-o linie începând de la $ și terminând cu * - exact acele două caractere de la sfârșitul liniei. Și nu uitați de personaje și după suma de control. Să analizăm mai detaliat fiecare din aceste linii.

  • $ GPVTG - GPS Track Made Good și Ground Speed ​​- o linie cu informații despre curs și viteză.
  • a.a - curs în grade.
  • T - Este adevărat, steagul fiabilității informațiilor.
  • b.b - direcția declinării magnetice (nu o avem).
  • M - Magnetic, da, cu adevărat magnetic.
  • c.c - viteza orizontală la noduri (se înmulțește cu 1.852 pentru a obține viteza în kilometri pe oră).
  • N - kNot, noduri.
  • d.d este viteza orizontală în kilometri pe oră (și nu aveți nevoie să multiplicați nimic).
  • K - kilometri pe oră.
  • ee este suma de control.
  • $ GPGGA - Sistem de poziționare globală Fix Data - un șir cu informații despre locația curentă.
  • hhmmss.ss - timpul de la UTC, când poziția a fost fixată.
  • a.a este valoarea latitudinii.
  • N este latitudinea nordică. Dacă S. atunci la sud.
  • b.b este magnitudinea longitudinii.
  • E este longitudinea estică. Dacă W. apoi Occidentul.
  • c este steagul de calitate a semnalului GPS.
  • d este numărul de sateliți utilizați.
  • e.e - factorul de scădere a acurateței (DOP, Diluție de precizie).
  • f.f este altitudinea receptorului deasupra nivelului mării.
  • M - înălțimea este dată în metri.
  • g.g - diferența dintre geoid (adevărata formă a planetei noastre) și elipsoidul WGS84 (sistem de coordonate tridimensional pentru poziționare).
  • M - diferența este dată în metri.
  • h.h este numărul stației care transmite corecțiile DGPS.
  • i este suma de control.
  • $ GPGSA - GPS DOP și sateliți activi - un șir cu informații despre sateliții utilizați pentru a determina locația și factorii care reduc acuratețea.
  • A - modul automat de selectare a lucrării în 2D sau 3D, M - modul manual, atunci când este selectat rigid, de exemplu, 2D.
  • x - modul de funcționare a receptorului: 0 - coordonatele nu sunt definite, modul 1 - 2D, 2 - modul 3D.
  • y1..y12 - numerele sateliților utilizați pentru a determina locația receptorului.
  • z1..z2 - PDOP, HDOP, VDOP (factori de scădere a preciziei în poziție, în plan orizontal și, respectiv, în plan vertical).
  • i este suma de control.
  • GPGSV - Sateliții GPS în Vedere - linia conține informații despre numărul, azimutul, altitudinea deasupra orizontului și raportul semnal-zgomot al satelitului. Pot exista patru sateliți în linie.
  • a este numărul total de linii GPGSV.
  • b - numărul liniei curente.
  • c1..c4 este numărul de satelit.
  • d1..d4 - înălțimea deasupra orizontului în grade (0..90).
  • e1 ... e4 - azimut de satelit în grade (0..359).
  • f1..f4 - raportul semnal / zgomot în dB (0..99).






$ GPGLL, 5,541.23512, N, 03,749.12634, E, 174,214.00, A, A * 6D - nu există nici un punct de pe această linie intra în detalii, deoarece conține coordonatele și timp, pe care le avem deja în rânduri GPRMC și GPGGA.

Desigur, producătorilor de receptoare GPS nu li se interzice să-și adauge propriile linii. La receptorul meu este posibil la început să vadă astfel:

Algoritmul Brezenham

Acest algoritm este unul dintre cei mai vechi algoritmi de grafică pe calculator - a fost dezvoltat de Jack Brezenham (IBM) deja în 1962. Cu aceasta, se produce rasterizarea primitivului grafic, cu alte cuvinte, acest algoritm determină coordonatele pixelilor care trebuie să fie luminate pe ecran, astfel încât imaginea rezultată a primitivului să coincidă cu originalul.

Algoritmul Brazenham utilizează numai operațiile de adăugare și scădere a numerelor întregi: de obicei, utilizarea numărului fracțional de aritmetică încetinește controlerul. De obicei, dar nu în cazul nostru, deoarece nucleul STM32F303VC este nucleul ARM Cortex-M4 cu FPU. FPU (unitatea cu puncte plutitoare) este un dispozitiv care accelerează lucrul cu numere fracționate (un coprocesor matematic), astfel încât nu există nimic care să ne limiteze și putem folosi algoritmul de linie DDA. O demonstrație interesantă a accelerației muncii lui MK la desenarea fractalurilor poate fi văzută pe YouTube.

Ce folosim în proiect?

  • Instrument de depanare STM32F3-Discovery;
  • UART GPS modul NEO-6M de la WaveShare bazat pe receptorul u-blox NEO-6M;
  • LCD matrice MT-12864A.
  • 1 - Ucc - putere - la 5V la Discovery.
  • 2 - GND - pământ - la GND la Discovery.
  • 3 - Intrare Uo - putere a panoului LCD pentru a controla contrastul - la rezistorul de tuns.
  • 4..11 - DB0..DB7 - magistrala de date - la PD0..PD7 pe Discovery.
  • 12, 13 - E1, E2 - selectarea controlerului - la PD8, PD9 la Discovery.
  • 14 - RES - Resetare - la PD10 la Discovery.
  • 15 - R / W - selecție: citire / scriere - la PD11 la Discovery.
  • 16 - A0 - selecție: comandă / date - la PD12 la Discovery.
  • 17 - E-gating date - la PD13 pe Discovery.
  • 18 - Uee - ieșirea convertorului DC-DC - la rezistorul de tuns.

Receptorul Neo-6M are următoarele proprietăți:

  • timpul de pornire la rece sau cald este de 27 s;
  • timpul de pornire la cald este de 21 s;
  • frecvența maximă de ieșire a informațiilor este de 1 Hz;
  • raza de frecvență a impulsurilor per pin PPS - 0.25 Hz - 1 kHz;
  • acuratețea maximă a poziționării - 2,5 m;
  • acuratețea maximă a măsurării vitezei este de 0,1 m / s;
  • Acuratețea maximă a cursului este de 0,5 grade.

Neo-6M pot folosi SBAS (Satellite Based Augmentation System) - sistem prin satelit diferențială de corecție, care crește precizia determinării poziției la 2 m și AGPS (GPS asistat) pentru a reduce timpul de pornire la rece. Primirea datelor AGPS provine de pe site-ul u-blox folosind serviciile AssistNow Online și AssistNow Offline (almanah pe termen lung). Modulul acceptă protocoalele NMEA, UBX și RTCM. UBX este un protocol proprietar de la u-blox, iar RTCM este protocolul pentru transmiterea datelor de corecție diferențială DGPS către modul. Interfețele UART, I2C, SPI și USB sunt, de asemenea, disponibile pentru comunicare.

Pentru a lucra cu receptoare, există un u-center utilitar original, care, la momentul acestei scrieri, versiunea 8.11 (Figura 1).

Colectăm gps-radar bazat pe stm32f3discovery și u-blox neo-6m
Fig. 1. Vedere generală a u-centru

Se poate observa că neo-6M are un mare potențial, dar pentru a descrie în detaliu toate caracteristicile sale nu este suficient spațiu, așa că restricționăm oferit din cutie: numai UART 9600 numai NMEA, frecvența pulsului - 1 Hz.

În ceea ce privește conexiunea, totul este extrem de simplu: conectați liniile VCC, GND, RX și TX pe receptor la + 3.3V, GND, PA9 și PA10 pe Discovery.

Ar trebui să afișeze poziția curentă a receptorului, viteza, direcția de mișcare, factorii de reducere a preciziei, a timpului, a datei și să afișeze sateliții utilizați de sateliți polari. Aceasta este aproximativ modul în care u-centrul din Fig. 2.

Colectăm gps-radar bazat pe stm32f3discovery și u-blox neo-6m
Fig. 2. Așteptați ce va fi afișat pe ecranul de 128 x 64

De îndată ce linia de linie de la Neo-6M este recepționată de către controler, ea este împărțită în tokenuri (matrice de charTokens) - în substring-uri, care sunt separate prin virgule în linia sursă.

Ar fi destul de logic să folosiți funcția strtok. dar nu știu. Motivul pentru care voi arăta un exemplu. Fie un șir a, b. c. Rezultatul ruperii lui în tokens cu strtok este: 'a', 'b', 'c'. Pentru parsarea NMEA, acest lucru nu este permis deoarece, în acest protocol, valorile token-urilor depind de poziția din șir. Rezultatul metodei de mai sus include jetoanele goale - 'a', 'b', '0', '0' 'c'.

Pentru stocarea convenabilă a informațiilor despre poziția receptorului, precizia determinării poziției, precum și a parametrilor sateliților, au fost scrise trei structuri de date.

Poziția și viteza receptorului, precum și data și ora:

Structura de precizie a determinării coordonatelor:

Structura numărului de satelit, poziția sa și calitatea semnalului:

Dacă informațiile despre satelit nu sunt complete, de exemplu, există informații despre altitudine și azimut, dar nu există niciun raport semnal-zgomot, apoi valoarea zero este scrisă în câmpul isFull. Astfel de sateliți vor fi ignorați la ieșirea la radar.

Completarea structurii bazate pe o serie de jetoane este foarte simplu: după parsing rând GPGSA în valorile de precizie charTokens matrice reduse ale factorilor * Elementele sunt numerotate de la 15 DOP, 16 și 17.

Acum puteți afișa în siguranță informațiile dezasamblate pe ecran (Figura 3).

Colectăm gps-radar bazat pe stm32f3discovery și u-blox neo-6m
Fig. 3. Și aici este realitatea!

Acum știi că GPS-ul este, de asemenea, nu e mare (dacă nu urca în junglă), dar dacă doriți să înțeleagă esența de navigație prin satelit, apoi bun venit la curs de la GPS Stanford: O Introducere în navigație prin satelit, cu un nivel mondial de laborator interactiv folosind telefoanele inteligente sau de la Universitatea din Minnesota De la GPS și Google Maps la Spatial Computing la Coursera.

Și ca temă, voi pune în fața dvs. trei sarcini: 1. Adăugați abilitatea de a înregistra o piesă. 2. Înlocuiți ecranul monocrom cu un ecran color. 3. Împreună cu WizFi220 (de la numărul 188), furnizați dispozitivului posibilitatea de a primi A-GPS. Dacă aveți întrebări, scrieți-mi un e-mail, care poate fi găsit la începutul articolului. Mult noroc!

Nu uitați să fiți împământați! Amintiți-vă că descărcarea electricității statice poate distruge atât modulul GPS, cât și antena, ecranul și controlerul!

  • Acum 31 minute

Google a dezvăluit detaliile vulnerabilităților în sistemul de operare Chrome, care a adus expertul care le-a găsit 100.000 $

Cele mai noi patch-uri ale Microsoft au dus la eșecuri în activitatea imprimantelor Epson

Specialistul a găsit chei private, acreditări AWS în depozitul DJI, iar acum el este amenințat de un tribunal

Oracle a lansat un patch de urgență pentru vulnerabilități critice în produsele PeopleSoft







Trimiteți-le prietenilor: