Робота з gps модулями на прикладі max-6q

Системи супутникової навігації стрімко набирають популярність. В основному це, звичайно, пов'язано з використанням їх на транспорті в зв'язці з картами або для стеження за перевезеннями. Але GPS використовується не тільки в цих областях. Геодезія, картографія, тектоніка, розваги, допомога при дтп - це не повний перелік областей де так чи інакше може використовуватися супутникове позиціонування. Це стає особливо актуально з постійним збільшенням точності таких систем.
У даній статті я не буду вдаватися в подробиці роботи систем GPS або ГЛОНАСС, тому що для їх використання це не потрібно. Зупинимося детальніше тільки на роботі з готовими GPS модулями. На щастя, всі вони приблизно однакові і розібравши роботу з одним з них, можна легко перейти на інший.

характеристики модуля

Як GPS модуля ми використовували MAX-6Q, фірми u-Blox. Його технічні характеристики:

  • 50-канальний приймач в діапазоні L1 (1,57542 ГГц)
  • Холодний і теплий старт - 26 с, гарячий старт - 1 з
  • Чутливість до -161 дБм
  • Точність положення - 2.5 м (з використанням диференціальної корекції - 2 м)
  • Точність вимірювання швидкості - 0.1 м / с
  • Точність визначення напряму - 0.5 градуса
  • Інтерфейс взаємодії з хостом - UART

Терморегулятори модуля і призначення висновків наведено в таблиці:

підключення

Треба сказати, що GPS модулі є одними з найпростіших в освоєнні, тому що являють собою практично закінчений пристрій. Все, що потрібно, це подати на них харчування, підключити антену і по інтерфейсу UART отримувати в текстовому вигляді дані про місцезнаходження, швидкості, напрямку і багато інших. Мінімальна схема підключення модуля представлена ​​на рис. 1.

Робота з gps модулями на прикладі max-6q

Малюнок 1. - Мінімальна схема включення модуля MAX-6Q

Трохи про протокол

Всі повідомлення протоколу NMEA починаються з символу $. Далі йде ідентифікатор повідомлення, в нашому випадку GPGLL, що розшифровується як Geographic Position: Latitude, Longitude, Time. Далі йдуть поля повідомлення розділені комами: шшшш.шш - широта, Ш - N (північна) або S (південна), ддддд.дд - довгота, Д - W (західна) або E (східна), ччммсс.сс - час: годинник , хвилини, секунди і мілісекунди, А - показник валідності даних, якщо А - дані достовірні, якщо V - дані не достовірні. Далі через символ * йде контрольна сума, яка присутня у всіх NMEA повідомленнях. Після контрольної суми йдуть символи перекладу рядка і каретки.
Звертаю увагу, що шшшш.шш це не градуси, хвилини і секунди, а градуси, хвилини і частки хвилин. Наприклад, таке повідомлення:

Чи означає - 52 градуси, 15.25 хвилини північної широти, 104 градуси, 28.16 хвилини східної довготи, протягом 7 годин, 14 хвилин, 00.00 секунд за Гринвічем (UTC).

Прийом і парсинг повідомлення NMEA

Тепер перейдемо безпосередньо до парсингу повідомлення. Мається на увазі, що у вас працює UART з перериванням по прийому байта. Для того, щоб не зчитувати всю посилку від модуля, яка може складатися з багатьох NMEA повідомлень, і не забивати буфер непотрібною інформацією, попередній відбір повідомлення робитимемо прямо в перериванні. Додаємо в нього наступний код:

Після установки прапора USART3_ReceivingFlag в одиницю в буфері буде лежати необхідна нам рядок без заголовка GPGLL.
Далі витягнемо з цього рядка власне широту, довготу і час: