|
Самодельный GPS приёмник для NAZA
Статьи публикуются по мере поступления. Для упорядоченного тематического
поиска воспользуйтесь блоком "Карта сайта"
Да-да, всё именно так. В статье я опишу изготовление самодельного GPS приёмника к контроллерам серии NAZA, на основе комбо для контроллера АРМ. Хотя ничего не мешает изготовить девайс и из отдельных комплектующих.
Рис.1
Итак. Что понадобится?
1) APM GPS+compass combo. Другими словами GPS приёмник с компасом. Такие используются в связке с APM, с MultiWii. Он очень хорошо ловит и держит спутники.
2) Arduino Pro Mini. Желательно, с дополнительными отверсиями с торца - земля и питание. Удобнее подключать разъём.
3) Преобразователь уровней I2C 5v-3.3v В принципе, на худой конец, можно обойтись и без него - но это делать крайне не рекомендуется. Преобразователь можно купить готовый, можно собрать на двух полевых транзисторах (или на 4 биполярных). Я собрал самодельный и запихал его в корпус приёмника (см. ниже)
4) Для удобства подключения можно присобачить разъём к GPS комбу. Обычно комбы идут с разъёмами Микро JST 1.25.
5) FTDI или какой-нибудь подобный адаптер USB-UART, для прошивки ардуины и настройки GPS модуля.
6) Руки от плеч и соображающая башка крайне необходимы, без них ничего не выйдет.
Это НЕ пошаговое руководство, где я покажу, как провода залуживать и куда какой проводок тыкать! Минимальные знания электроники и основы работы с компьютером необходимы. Если у вас с этим не очень - купите готовый модуль от DJI и не занимайтесь экспериментами.
Ну, со страшилками закончил, перехожу к вкусняшкам.
Первое - конструкция работает! В частности, сегодня она прошла тестовый облёт, где показала себя вполне работоспособной.
Второе - цена. Комбо стоит около 20 долларов, ардуина ещё 3, конвертер - 1. Итого 24 доллара, вместо оригинальных 100.
Начинаем изготовление.
Рис.2 Модуль GPS со встроенным I2C конвертером.
Начать стоит с настройки модуля U-blox, установленного в комбе. Настройка такая - скорость 57600, частота 5 Гц, протокол - только UBX, включены пакеты - NAV-SOL, NAV-DOP, NAV-POSLLH, NAV-VELNED, NAV-TIMEUTC. Всё остальное выключено. При этой настройке не будут отображаться сигналы со спутников (NAV-SVINFO) - это нормально, они не нужны. Но для тестов можно включить, главное выключить не забыть. Далее. Определяемся с ориентацией компаса, установленного в комбе. Нормальная ориентация - точкой вперёд по ходу движения, торцом вперед (не под 45 градусов). Перевёрнут (стоит на обратной стороне платы, там же, где все остальные детали, кроме антенны). В частности, на картинке выше - "нормальная" ориентация компаса, "вперёд" - это влево. Если ориентация не такая - придётся править код.
Соединяем все детали между собой.
Рис.3 Принципиальная схема.
Схема делалась для зарубежного сайта, поэтому все подписи - на английском. Если что непонятно - задавайте вопросы. Если не хочется возиться с впиливанием конвертера в корпус приёмника - можно купить готовый модуль, типа как по ссылкам во введении. Там на плате уже установлен стабилизатор на 3 вольта, питать плату можно только от 5 вольт. Удобно, без гемора. Это по схеме выше будет "вариант 2" - но без подачи питания 3.3V с комбы (где его может и не быть в проводе). Я не искал лёгких путей, плюс, платы конвертера у меня не было (не доехала). Поэтому я сделал конвертер самостоятельно:
Рис.4 Плата конвертера
Плата сделана из кусочка текстолита, дорожки сделаны путём прорезки ножом по жирным белым линиям. Все резисторы - 10К, 0805. Транзисторы - BSS138 или TN2501, корпус SOT-23. Не самые общеупотребимые транзисторы, но найти можно. В принципе, как я понимаю, подойдут любые с низким напряжением насыщения (1,5-2V). Схема приведена выше, на общей схеме, на врезке ("Mosfet-based I2C level converter"). Подключена плата в разрыв проводов SDA и SCL, с учётом напряжения (Н-сторона - это 5-вольтовый I2C, L-сторона - соответственно, 3-вольтовый). Так как провода 3.3 вольта на разъёме не было - пришлось припаяться прямо к плате (см.рис.2).
В итоге - получилось так:
Рис.5 Готовый конвертер
Чтобы приёмник можно было подключать и отключать (например, для настройки) - к ардуине я припаял разъём (см.рис.1). В принципе, можно обойтись и без этого, но так удобнее. Чтобы ничего не замкнуть на плате ардуины, на плату был наклеен кусочек каптона, а к нему уже, в свою очередь, суперклеем приклеен разъём.
С железом закончили, приступаем к софту.
Для компиляции прошивки конвертера (ардуины) нужны будут следующие компоненты:
1) Собственно Arduino IDE
2) Библиотека AltSoftSerial
3) Библиотека I2CDevLib, из которой нужны будут только модули HMC5883L и I2CDev.
Все эти библиотеки есть в приложении, необходимо их скопировать в каталог C:\Program Files (x86)\Arduino\libraries
Далее. Для проверки можно залить тестовые скетчи. Для проверки софтового последовательного порта, к которому прицеплен ГПС-приёмник, заливается скетч-пример из библиотеки AltSoftSerial, а для проверки компаса - пример из вложения. Рабочая прошивка компилируется и заливается в ардуину штатным образом. Никаких настроек в прошивке нет. После прошивки алгоритм работы примерно такой: когда ардуина получает пакет от U-blox-а, она мигает светодиодиком на плате и выплёвывает пакет с данными GPS в формате назы в "железный" последовательный порт. Плюс, каждые 30 мС ардуина опрашивает компас и посылает его данные. Ну и каждые 2 секунды посылается версия модуля. Визуально работоспособность модуля проявляется в мигающем с частотой около 2.5 герц светодиоде. При подключении ардуины к последовательному порту на скорости 115200 бод - должны валиться пакеты, начинающиеся с "55 АА", и дальше 10 - ГПС, 20 - компас, 30 - версия.
Свои мысли
Лично моё мнение - адаптер надо делать на процессоре с двумя аппаратными UART-ами. Типа ATMega16, хотя бы. Но дело осложняется, что поддержки таких камней нет в Arduino IDE, за исключением Mega128/256, которые очевидно избыточны, и в огромных корпусах. Если бы кто-нибудь подсказал, как организовать поддержку ATMega16 в ардуине, с аппаратными уартами - был бы благодарен. Интернет как-то не очень в этом плане определёнен. STM32 не предлагать - обвязка тупая, и я его не знаю.
Исходники
Всё, необходимое для повторения адаптера - схемы,
плата, прошивки - в архиве в приложении.
(NazaEncoder.zip)
Обновил Arduino IDE и обнаружил неприятную вещь - прошивка перестала компилироваться, ругаясь на неизвестный тип "prog_uchar". Поддержку этого типа выпилили из ардуины, заменив название на "const unsigned char". Соответственно, если вы собираете прошивку в ардуине старше 1.0.5 - замените первое на второе, и всё будет OK.
Автор Егор Серов, Ярославль