Высказывания и цитаты:

Самое опасное в войне - это недооценить противника и успокоиться на том, что мы сильнее.
В.И. Ленин

  • 01Фев

    GPS, Глонасс, Beidou и другие системы глобального позиционирования облегчают ориентирование на местности, позволяют дистанционно управлять объектом с достаточно высокой точностью.

    О наиболее популярной  — американской GPS настоятельно рекомендую прочитать http://geoconnect.com.au/gps-signals-l1-l2-l5/ . Здесь сказано о технологии позиционирования, диапазонах частот L1, L2, L5, дифференциальном режиме работы, о размере посылок и псевдослучайных последовательностях, о помехах.  Чем длиннее эта последовательность тем выше точность, и если gps приемник способен принимать сигналы в двух диапазонах, например, L1 и L2, то влияние помех ниже и выше точность. Для военных систем применяется более сложное кодирование псевдослучайной последовательности. Мы же возьмем недорогой gps приемник GPS6MV2, который работает в диапазоне L1  и обеспечивает точность до 2 метров. Его заказываем на aliexpress, а также заказываем отличный эргономичный дисплей JLX128G4G (любой модификации), микроконтроллер STM32F103VCT6 в 100 лаповом корпусе, который легко паять на макетной плате (смотреть фото ниже) паяльником E60WT (с набором жал включительно) под микроскопом (Digital Microscope 800x) водяным флюсом ЛТИ-120 SOLINS (100мл пластиковая бутылка за 100р в магазине города), ST-LINK программатор.  Все заказываем с алиэкспресса, выходит очень недорого. Если этого инструмента нет, то не начинать вообще — паять микросхемы с шагом между центрами лап 0,5 мм не получится обычным медным паяльником и канифолью!!! Кстати, я нашел лучшее средство для отмывки канифоли с плат — это автомобильный бензин АИ-92. Никакой спирт и растворитель, которыми я пользовался ранее так быстро не смывали с платы канифоль.

    Вот информация, которую мы выводим на дисплей в этом проекте: время по Гринвичу (часы минуты секунды), широта и долгота со знаками, скорость в узлах и курс в градусах. Скорость можно пересчитать из узлов (миля в час) в километры в час через BCD-HEX-BCD функцию, но мне это было не надо. Просто умножьте значение на 1,852 и получится километры в час. Подключение дисплея, его протокол обмена, исходный код я взял из datasheet jlxlcd.cn.zip.

    Вот принципиальная схема

    Обязательно подключаем все вывода питания микроконтроллера, иначе будет сбоить или не запустится вообще. Связь между этими лапками внутри микроконтроллера только для уравнивания потенциала. Сам микроконтроллер программируем из под среды разработки Keil 5, но так получилось, что у моих STM32F103VCT6 стояла галочка Protection Enable и пришлось скачать программу STM32 ST-LINK Utility (заходим в Target->Option Bytes и меняем Read Out Protection на Disabled). Кварцевый резонатор на схеме можно не подключать, он не используется (задействован внутренний HSI). Исходный код прилагается, в нем же файл CubeMX, который сгенерировал начальный код данного проекта gps_103.zip.

    Модуль GPS выдает по проводу TX данные с интервалом одну секунду. Данные представлены в ASCII формате. Возьмем из всех пакетов передаваемой информации (GPRMC, GPVTG, GPGGA, GPGSA, GPGSV, GPGLL) GPRMC.

    $GPRMC,hhmmss.ss,A,aaaa.aaaa,N,bbbb.bbbb,E,c.c,d.d,DDMMYY,z1,z2,e*ff

    • GPRMC — GPS Recommended Minimum Navigation Information sentence C — рекомендуемый минимум навигационной информации, строка типа С.
    • hhmmss.ss — время по всемирному координированному времени UTC, когда была произведена фиксация положения.
    • A — флаг достоверности информации. Если V, то информации верить нельзя.
    • aaaa.aaaaa — величина широты. Первые две цифры — градусы, вторые две — целое значение количества угловых минут, после точки — дробная часть количества угловых минут (переменной длины).
    • N — северная широта. Если S, то южная.
    • bbbb.bbbbb — величина долготы. Первые две цифры — градусы, вторые две — целое значение количества угловых минут, после точки — дробная часть количества угловых минут (переменной длины).
    • E — восточная долгота. Если W, то западная.
    • c.c — горизонтальная скорость в узлах (умножить на 1,852 для получения скорости в километрах в час), целая и дробная части имеют переменную длину.
    • d.d — направление скорости (путевой угол, курс) в градусах, целая и дробная части имеют переменную длину.
    • DDMMYY — текущая дата.
    • z1 — отсутствующая у нас величина направления магнитного склонения.
    • z2 — также отсутствующее у нас направление магнитного склонения.
    • e — индикатор режима.
    • ff — контрольная сумма

    Светодиод HL1 мигает с частотой 1 Гц только для красоты. Чтобы использовать русские буквы на дисплее посмотрите на этом сайте статью http://controller.sunwithus.ru/russkie-bukvyi-na-displee-hy-mini-stm32-development-board/

    В прерывании USART1 происходит прием необходимого пакета данных, все вычислительные операции выполняются в основной программе. Данные долготы, например, E13155.90326 обозначают, что мы находимся на широте 131 градус, 55целых 90326 статысячных минуты. Дробную часть умножаем на 60 получаем секунды. А какое расстояние в одном градусе по долготе можно рассчитать только зная широту, потому что меридианы к северному полюсу сходятся и в одном градусе расстояние уменьшается. Для этого надо 111 км * cos(ФИ). А расстояние в одном градусе широты почти неизменно — эти самые 111 км или в одной секунде около 30 метров по широте. В одном градусе 60 минут и 3600 секунд. В одной минуте одна морская миля 1.852 км. Данные координат с сайта google maps и надальнийвосток.рф в таком же формате, какой выдает данный gps модуль. Datasheet на модули gps а также схема моего проекта в формате spl7 module.zip.

    Надеюсь, что статья кому-нибудь пригодится :), на основе него можно сделать что-нибудь более полезное. Спасибо!

     

     

     

Ваш ответ

Внимание: Модератор оставляет за собой право редактировать или удалять комментарии.

Подтвердите, что Вы не бот — выберите человечка с поднятой рукой: