GPS модуль – подключение к микроконтроллеру

Подключение GPS модуля к микроконтроллеру
В этой статье я расскажу про подключение GPS приемника к микроконтроллеру, на примере модуля u-blox GY-NEO6MV2. Приемник представляет из себя небольшую плату на которой расположены модуль NEO-6M-0-001, стабилизатор напряжения 3.3В, EEPROM память, аккумулятор и светодиод. Модуль продается вместе с активной антенной квадратной формы. Как и все GPS приемники, для передачи данных, модуль использует широко распространенный интерфейс UART, что облегчает его сопряжение с микроконтроллером.

Связь с GPS приемниками осуществляется по протоколу NMEA 0183, это текстовый стандарт связи, использующийся в морском (навигационном) оборудовании. Протокол NMEA 0183 включает в себя множество различных сообщений и команд, я рассмотрю несколько основных сообщений, связанных с глобальной системой позиционирования.

Модуль можно приобрести здесь, есть более дешевый вариант собранный на красной плате с маленькой антенной, можно заказать тут.

По стандарту NMEA все сообщения начинаются с символа “$” и заканчиваются спецсимволами <CR> – возврат каретки (шестнадцатеричное значение 0x0D) и <LF> – перевод строки (шестнадцатеричное значение 0x0A).  Первые два символа после “$” являются идентификатором системы, следующие три символа – идентификатор сообщения, например $GPZDA, где GP  – глобальная система позиционирования, ZDA – означает, что сообщение содержит информацию о дате по UTC и локальный часовой пояс. После идентификатора сообщения следуют поля, содержащие значения параметров, в конце сообщения после символа “*” находится контрольная сумма. Поля разделяются запятыми, некоторые значения в полях могут отсутствовать, при этом запятые в сообщении не удаляются.

Для того чтобы увидеть сообщения которые выдает GPS модуль, я подключил его к компьютеру через USB-UART преобразователь на чипе PL2303. Для подключения использовал только один вывод на GPS модуле, выход передатчика TX, так как отправлять команды на модуль я не буду, только принимать сообщения. В качестве терминальной программы использовал Terminal v1.9b by Bray. По умолчанию модуль настроен на скорость 9600 бит/сек, в программе необходимо установить следующие настройки: 8 бит данных, без проверки четности, один стоповый бит, управление потоком отключаем.

Ниже приведен скриншот окна программы с сообщениями, полученными от GPS модуля.
Лог сообщений GPS модуля
В зависимости от количества видимых спутников, данный модуль выдает от 6 до 8 сообщений, которые обновляются каждую секунду (стандартное время для большинства приемников). При достаточном количестве спутников и устойчивом сигнале на модуле начинает мигать светодиод.

Информация о координатах местоположения, времени и скорости в разных сообщениях могут дублироваться. Рассмотрим назначение полей каждого сообщения:

RMC – минимальная рекомендуемая навигационная информация, содержит информацию о времени, дате, координатах местоположения, скорости и направлении курса.

$GPRMC,170840.00,A,5509.68339,N,06125.49498,E,0.204,,311015,,,A*7D
170840.00Время UTC: 17ч. 08м. 40.00 сек.
AСтатус достоверности: A – достоверные данные, V – недостоверные данные
5509.68339Широта: 55 градусов, 09.68339 минут
NN – северная, S – южная
06125.49498Долгота: 061 градусов, 25.49498 минут
EE – восточная, W – западная
0.204Горизонтальная скорость (узлов в час)
Направление курса относительно истинного севера (градусы)
311015Дата: 31 октября 2015 года
Магнитное склонение (градусы)
Направление склонения: E – восточное, W – западное
AРежим: A – автономный, D – дифференциальный, E – аппроксимация, N – недостоверные данные
*7DКонтрольная сумма

 
VTG – текущее направление курса и скорость относительно Земли.

$GPVTG,,T,,M,0.204,N,0.378,K,A*29
­­­–Направление курса (градусы)
TКурс относительно истинного севера
Направление курса (градусы)
MКурс относительно магнитного севера
0.204Горизонтальная скорость
NЕдиница измерения скорости (узлов в час)
0.378Горизонтальная скорость
KЕдиница измерения скорости (километров в час)
AНеизвестный параметр
*29Контрольная сумма

 
GGA – зафиксированные данные глобальной системы позиционирования, содержит информацию о времени, координатах местоположения, высоте, статусе определения координат, количестве использованных спутников.

$GPGGA,170840.00,5509.68339,N,06125.49498,E,1,07,2.41,186.2,M,-13.5,M,,*77
170840.00Время UTC: 17ч. 08м. 40.00 сек.
5509.68339Широта: 55 градусов, 09.68339 минут
NN – северная, S – южная
06125.49498Долгота: 061 градусов, 25.49498 минут
EE – восточная, W – западная
1Статус определения координат: 0 – позиция не определена, 1 – позиция определена, 2- позиция определена с повышенной точностью (DGPS)
07Количество использованных спутников
2.41Снижение точности в горизонтальной плоскости (HDOP)
186.2Высота над уровнем моря
MЕдиница измерения высоты (метры)
-13.5Геоидальное различие — различие между земным эллипсоидом WGS-84 и уровнем моря (геоидом)
MЕдиница измерения геоидального различия (метры)
Время с момента последнего обновления DGPS (секунды), 0 – DGPS не используется
*77Контрольная сумма

 
GSA – Уровень точности определения координат и активные спутники, содержит информацию о режиме работы, спутниках, снижении точности в различных плоскостях.

$GPGSA,A,3,06,29,23,26,02,09,31,,,,,,3.48,2.41,2.51*0D
AРежим 1: М – ручной 2D или 3D, A – автоматический 2D-разрешено переключение 2D/3D
3Режим 2: 1 – позиция не определена, 2 – 2D позиция определена, высота не определена, 3 – 3D позиция и высота определена
06Идентификатор 1-го спутника использованного для определения координат
29Идентификатор 2-го спутника использованного для определения координат
…… 
­–Идентификатор 12-го спутника использованного для определения координат
3.48Снижение точности по местоположению (PDOP)
2.41Снижение точности в горизонтальной плоскости (HDOP)
2.51Снижение точности в вертикальной плоскости (VDOP)
*0DКонтрольная сумма

 
GSV – Информация о видимых спутниках, содержит число видимых спутников, их идентификаторы, высота, азимут, уровень сигнала.

$GPGSV,3,1,11,02,13,325,27,03,34,182,17,06,19,287,23,07,15,237,15*70
3Количество сообщений GSV, (от 1 до 3), зависит от количества видимых спутников
1Порядковый номер сообщения, (от 1 до 3)
11Количество видимых спутников
02Идентификатор спутника
13Высота спутника (градусы)
325Азимут спутника (градусы)
27Уровень сигнала, отношение сигнал/шум от 00 до 99 дБ, 0 – нет сигнала.
03,34,182,17То же самое для 2-го спутника
06,19,287,23То же самое для 3-го спутника
07,15,237,15То же самое для 4-го спутника
*70Контрольная сумма

 
GLL – географическая позиция – широта/долгота, содержит информацию о времени, координатах местоположения.

$GPGLL,5509.68339,N,06125.49498,E,170840.00,A,A*65
5509.68339Широта: 55 градусов, 09.68339 минут
NN – северная, S – южная
06125.49498Долгота: 061 градусов, 25.49498 минут
EE – восточная, W – западная
170840.00Время UTC: 17ч. 08м. 40.00 сек.
AСтатус достоверности: A – достоверные данные, V – недостоверные данные
*65Контрольная сумма

 
Теперь рассмотрим подключение GPS модуля к микроконтроллеру, для вывода информации я решил использовать LCD дисплей Nokia 5110, так как буду выводить значительное количество символов. Ниже приведена схема подключения:
Подключение GPS модуля к микроконтроллеру, схема
Микроконтроллер PIC16F628A и LCD дисплей питаются напряжением 3,3В, для того чтобы избежать согласования уровней между линиями ввода/вывода дисплея и микроконтроллера. Чтение сообщений с GPS приемника осуществляется встроенным в микроконтроллер модулем USART. Светодиод HL1 служит индикатором приема и мигает при получении сообщения GPRMC.

Рассмотрим код программы микроконтроллера:

Здесь приведен неполный код, не отображены подпрограммы инициализации, очистки, вывода символа на дисплей, полную версию можно скачать в конце статьи.

В подпрограмме обработки прерываний происходит прием сообщений и сохранение в регистры ОЗУ 1-го банка. После получения байта по USART, в обработчике прерываний происходит его проверка, при обнаружении символа “$”, с помощью косвенной адресации выбирается первый регистр ОЗУ 1-го банка для загрузки последующих символов. Кроме этого полученный символ проверяется на совпадение со спецсимволом <CR> (возврат каретки), таким образом, определяется конец сообщения, после чего выставляется флаг получения сообщения flag,0. Дополнительно производится отслеживание текущего адреса регистра ОЗУ, на факт переполнения памяти, в случае переполнения загрузка начинается с первого регистра 1-го банка.

В основной программе происходит опрос флага flag,0, при получении сообщения выполняется его анализ. Сначала проверяются первые четыре символа, чтобы определить идентификатор сообщения. С помощью подпрограммы srav_gps выполняется сравнение загруженных символов с символами из таблицы данных table. Если обнаружено совпадение, вызывается соответствующая подпрограмма для анализа полей сообщения.

Подпрограмма gps_gprmc анализирует сообщение RMC, выводит на первую строку дисплея значение времени и статуса достоверности, на вторую строку выводится значение широты, на третью строку значение долготы. Подпрограмма gps_gpvtg анализирует сообщение VTG, выводит значение горизонтальной скорости на 4-ю строку дисплея. Подпрограмма gps_gpgga анализирует сообщение GGA, выводит значение высоты над уровнем моря на 5-ю строку дисплея, а также количество использованных спутников на 6-ю строку дисплея в виде двух цифр и символа “/”. Подпрограмма gps_gpgsv анализирует сообщение GSV, выводит количество видимых спутников на 6-ю строку дисплея в виде символа “/” и двух цифр.

В процессе анализа полей каждый символ, с помощью подпрограммы prov_symb проверяется на совпадение с запятой “,”. Таким образом, определяется конец поля, так как длина некоторых полей может изменяться. Если внутри поля (между запятыми) не обнаружено данных, на дисплей выводится три символа тире и пробел “- – –  ”. Если отсутствует статус достоверности или количество видимых/использованных спутников, на дисплее вместо этих данных будут пустые поля.

На открытой местности процесс поиска спутников и определения координат (холодный старт) занимает по времени чуть больше минуты. Горячий старт (после непродолжительного отключения питания) занимает несколько секунд. В квартире на подоконнике поиск может занимать до 10 минут, внутри помещения модуль почти не видит спутников. Раньше всех появляется информация о времени и количестве спутников, позже появляется остальные параметры: координаты, скорость, высота, одновременно с этим меняется значение статуса, появляется символ A, сигнализируя о достоверности данных. К устройству можно подключать GPS приемники других моделей, так как все они работают по стандарту NMEA.

Этот модуль я применил в GPS GSM трекере, в ламповых часах на ИВ-11, а также в часах на газоразрядных индикаторах.

Модуль можно приобрести здесь GPS модуль u-blox NEO-6mv2.

GPS Модуль u-blox GY-NEO6MV2Макетная плата с GPS модулем

Видеоролик демонстрирующий горячий старт GPS модуля:

У этой записи 5 комментариев

  1. Как связаться с автором?

    1. На странице “Об авторе” есть мои контакты

  2. Хочу заказать в Китае модуль VK2828 и на основе вашей программы сделать так, чтобы с GPS скорость передавалась в стрелочный спидометр машины.

  3. Здравствуйте!
    Можно ли изменить прошивку микроконтроллера, чтобы вывести сигнал для коррекции часов, например, раз в час или раз в сутки?

  4. Здравствуйте!
    Уровень интерфейса данных LCD дисплея Nokia 5110 – 2.7-5В, подсветка максимум 3.3В, согласно спецификации. Поэтому согласование уровней между линиями ввода/вывода дисплея и микроконтроллера не нужно.

Имя (обязательно)Email (обязательно)Веб-сайт

Добавить комментарий