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 минут
N N – северная, S – южная
06125.49498 Долгота: 061 градусов, 25.49498 минут
E E – восточная, 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 минут
N N – северная, S – южная
06125.49498 Долгота: 061 градусов, 25.49498 минут
E E – восточная, 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 минут
N N – северная, S – южная
06125.49498 Долгота: 061 градусов, 25.49498 минут
E E – восточная, 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 Модуль u-blox GY-NEO6MV2Макетная плата с GPS модулем

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

Последние записи:

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

Ваш e-mail не будет опубликован. Обязательные поля помечены *