Самодельный HeliModule для Graupner HoTT

Задумал я как-то заиметь у себя на верте девайс, который транслировал бы мне на пульт напругу побаночно, ну и общую ко всему. Посмотрел готовые девайсы от граупнера, а там либо простой датчик на 4 банки, что для меня мало, либо сундук с ненужным мне функционалом, большими габаритами и массой. В общем подходящего ничего для себя не обнаружил. Что же делать? Решено было разобраться в протоколе обмена приемников HoTT с разнообразными модулями телеметрии. Разобрался, будем паять. В конечном счете ТЗ было примерно таким.

  • мониторинг побаночно напряжения на аккумуляторах 3-6s;
  • мониторинг общего напряжения на аккумуляторе;
  • звуковая сигнализация при понижении порогового напряжения на какой-либо банке;
  • мониторинг текущего тока, потребляемого от аккумулятора;
  • подсчет потраченной емкости аккумулятора;
  • мониторинг текущих оборотов основного ротора;
  • возможность довольно простым способом задавать следующие параметры:
  • коэффициент передачи трансмиссии для подсчета текущих оборотов;
  • пороговое напряжение для банки, ниже которого пульт начинает пищать;
  • смещение нуля датчика тока;
  • чувствительность датчика тока.
  • в пульте модуль должен определяться как Electric Air и все параметры должны отображаться в стандартных окнах для этого модуля.

Ну и хорошее пожелание: компактные размеры и вес устройства на столько, на сколько позволяет мой тех процесс.

В принципе, это все параметры, которые могут быть интересны вертолетчику, большего я придумать не смог. Да и хорошо, нечего загромождать девайс не нужными с точки зрения практики опциями. Поэтому я решил назвать его гордо - HeliModule)).

В результате девайс был разработан в соответствии с ТЗ.

В виду того, что я не исключаю, что кто-то захочет повторить модуль, повествование дальше местами будет в стиле инструкции.

Основой его стал контроллер Atmel AVR Mega8 в виду своей компактности, приемлемой стоимости и достаточности. Некоторые технические особенности реализации:

Масштабирование напряжения банок было решено делать на операционных усилителях. Тут можно было конечно отделаться резистивными делителями, но в этом случае на первой банке у нас точность измерения составляет 0,02в, а к шестой она падает и на шестой банке составляет порядка 0,1в. Меня этот вариант не устроил, не люблю нелинейность в таких местах, да и склонность к перфекционизму дала о себе знать. Кстати, стандартные граупнеровские датчик напряжения и Електрик Модуль, на сколько мне известно, построены на основе резистивных делителей…

Для формирования опорного напряжение для АЦП ИОНов я не использовал, использовал простой LC фильтр. Считаю, для моих целей этого вполне достаточно. Напряжение питания задается регулируемым стабилизатором LM1117-ADJ. Он привлек своей компактностью в корпусе SOT-223 и достаточными характеристиками, а также возможностью двумя резисторами задавать напряжение. Напряжением питания контроллера и АЦП выбраны 5.1 вольта. Обусловлено это тем, что при 8 битном АЦ преобразовании цена деления у нас получается 0,019 вольта, это практически 0,02 вольта, что, в свою очередь, является минимальным шагом отображения напряжения банки в пульте. Я применял в обвязке помимо конденсаторов два резистора, которые задают выходное напряжение: 680 и 220 Ом. Сами LM1117 показали некоторую нестабильность от микросхемы к микросхеме: в одной и той же обвязке первая показывала 5,1 вольта ровно, вторая 5,12. При этом во втором случае иногда стали появляться две лишние сотки в показаниях напряжения банок (один лишний попугай АЦП). Поэтому я бы рекомендовал добиться ровно 5.1 вольта. Как это сделать и нужно ли оно Вам, решите сами. Я пока оставил второй вариант

Датчик тока… тут хотел городить сам на основе ферритового кольца и датчика Холла, а затем просто пропускать в это кольцо силовой провод АКБ, но потом решил не париться и купить готовый девайс в виде датчика ACS758. Он компактнее, с ним проще работать. Единственное сквозь него не пропустишь имеющийся провод АКБ, придется паять.
В виду того, что диапазон потребляемых токов у разных людей может быть различным, можно просто купить датчик с необходимым диапазоном из серии ACS758 или аналогичных по методу формирования выходного сигнала (пропорциональное току напряжение), питанию (5 вольт), и распиновке. В дальнейшем при настройке у нас будет возможность задать смещение нуля и чувствительность датчика тока.

Датчик оборотов потребляет импульсы размахом 5вольт. У меня этот сигнал идет с ESC, думаю с магнитных датчиков тока сигнал примерно такой же. Устройство позволяет задавать коэффициент передачи от 0,01 до 99,99. Для магнитного датчика на валу ОР коэффициент будет 1, для случаев с сигналом из ESC, датчиков оборотов, которые вешаются на провода между мотором и ESС, необходимо рассчитывать коэффициент передачи, как шестерней, так и в моторе. В моторе коэффициент передаче равен половине количества магнитов ротора. У меня передатка между валом мотора и ОР составляет 9,18, в моем моторе 8 магнитов, следовательно, моя итоговая передатка получается 9,18 х (8 / 2) = 36,72. Эту цифру мы и запишем в устройство во время настройки (об этом чуть ниже). Датчик оборотов подключается через стандартный серворазъем, в котором должны быть земля и сигнальный провод. Центральный пин не используется и физически никуда не подключен.

В качестве конструкции модуля был выбран бутерброд из двух плат с двухсторонним монтажом. Такая конструкция позволяет путем не критичного увеличения толщины и массы прилично уменьшить площадь девайса. Первый прототип, который позволял только измерять напряжение побаночно, был построен на одной плате и был площадью процентов на 40 больше. Меня этот факт очень расстраивал, и я решил изменить концепцию. Сейчас мне все нравится.
На одной плате собрана схема масштабирования напряжений и расположены разъемы для связи с внешним миром, на второй с одной стороны находится контроллер и цепи организации его питания, с другой стороны находиться датчик тока. Эта сторона полностью металлизирована (за исключением очень небольшой части, где проходят выводы датчика), и заземлена. Это, я думаю, уменьшит влияние довольно приличных токов на аналоговые цепи контроллера на столько, на сколько позволяет выбранная конструкция устройства.

На текущем этапе механизм программирования контроллера осуществляется подпайкой на специальные пяточки проводков AVR ISP программатора. Тем, кто прошивал турниги, эта схема знакома. Не стал запариваться с бутлоадерами или загромождать устройство дополнительным шестипиновым разъемом, потому как прошивать модуль часто я думаю не придется (в идеале один раз вообще).

Питание модуль берет с 4-й или с 6-й ноги балансирного разъема.
К телеметрийному разъему модуль подключает обычным проводом от серв, но слегка модернизированным. Землю мы не трогаем, а центральны провод где-то между разъемами необходимо обрезать и в месте разреза подпаять к второму сигнальному проводу. В разъеме, подключаемом к приемнику, должен отсутствовать центральный провод.

Настройка. Настройка модуля осуществляется через тот же разъем, которым он подключается к приемнику. Для настройки необходим USB – RS232 конвертер, коих у моделистов в столах вагон. Я использую от ФБЛ системы Tarot ZYX-S, также думаю подойдет и тот, через который мы все подключаем наши приемники к компу для обновления ПО, там надо только разобраться, где земля, где RxD, а где TxD. Я не разбирался.
Для входа в режим программирования необходимо освободить разъем tele от каких либо подключений, а затем подать питание на модуль, подключив к балансирному разъему ваш АКБ. Условием входа в режим программирования являются отсутствие какого либо потенциала на ножках этого разъема. Затем необходимо подключить модуль к USB конвертеру тремя проводками (GND – GND, RxD – TxD, TxD – RxD) и подключить конвертер к компьютеру.
Также нужна терминальная программа. В настройках терминалки мы выставляем скорость 19 200 бод, а остальное все как всегда (без четности, 8 бит, 1 стоп бит).

Для настройки модуля применяются команды, состоящие из одной буква (v, r, o или s) и четырех цифр.

Команда, начинающаяся с буквы ‘v’ служат для установки порогового напряжения для сигнализации просадки по банкам. Цифры выравниваются по центру, потому как есть дробная часть. Например:
v0290 – устанавливает порог 2,9 вольта,
v0300 – устанавливает порог 3,0 вольта,
v0310 – устанавливает порог 3,1 вольта.

Команда, начинающаяся с буквы ‘r’ служат для установки коэффициента передачи трансмиссии для расчета оборотов ОР. Цифры выравниваются по центру, потому как есть дробная часть. Например:
r0918 – устанавливает коэффициент передачи, равный 9,18,
r3672 – устанавливает коэффициент передачи, равный 36,72,
r0100 – устанавливает коэффициент передачи, равный 1,00.

Команда, начинающаяся с буквы ‘o’ служат для установки смещения нуля датчика тока. Рассчитывается цифра следующим методом: измеряется уровень выходного сигнала датчика при отсутствии тока через него (датчик должен быть запитан). У меня цифра получилась 0,62В, для примененного датчика это норма. Далее мы находим, сколько это в попугаях АЦП: 0,62В / (5,1В / 256) = 31. Эту цифру и записываем. Цифры выравниваются по правому краю. Например:
o0031 – устанавливает смещение, равное 31 в показаниях АЦП (или 31 х 0,02 = 0,62В),
o0030 – устанавливает смещение, равное 30 в показаниях АЦП (или 30 х 0,02 = 0,60В),
o0032 – устанавливает смещение, равное 32 в показаниях АЦП (или 32 х 0,02 = 0,64В),.

Команда, начинающаяся с буквы ‘s’ служат для установки чувствительности датчика тока. Эта цифра даже больше похожа на некий коэффициент, который переводит показания АЦП в показания тока. Рассчитывается следующим способом: (цена деления АЦП / чувствительность датчика тока) х 10. В моем случае (0,02В / 0,027) х 10 = 7,407. Цифры выравниваются по центру, потому как есть дробная часть. Например:
s0740 – для чувствительности, равной 27мВ,
s1481 – для чувствительности, равной 13,5мВ,
s0033 – для чувствительности, равной 60мВ,

На любую команду устройство, если оно ее приняло и зафиксировало, должно ответить. Например:
Команда: v0310 Ответ: 3.1 ОК
Команда: r3672 Ответ: 36.72 ОК
Команда: o0031 Ответ: 31 ОК
Команда: s0740 Ответ: 7.40 ОК

Только получив ответ можно считать, что параметр зафиксирован. После сборки и прошивки эти параметры необходимо задать. Никаких дефолтных значений в прошивке нет. Не задав эти параметры, модуль может некорректно отображать данные или не работать вообще.
Процедура возможно не сильно элегантна, но я нахожу ее вполне достаточной и вполне простой.

После настройки отключение производится в произвольном порядке.

Подключение на модели к балансирному разъему осуществляется только после подключения минусового провода АКБ к регулятору оборотов. В противном случае присутствует очень большая вероятность спалить практически любой компонент электронной системы модели (правда только один, который первый полыхнет)))). Этот момент очень важен. Я словил ситуацию, когда вертолет ожил при подключении балансирного разъема к устройству. Оказалось, что АКБ был подключен плюсовым кабелем к регулю, минусовой был разорван, и вот этот вот минус пролез через землю балансирного разъема, модуля, приемника, фбл и прилез к регулю через его провод управления. У меня погорели дорожки в модуле (сразу в трех местах участки шириной как минимум 1 мм).
В общем схема такая:

  1. Закрепили устройство;
  2. Подключили телеметрийный разъем и разъем датчика оборотов;
  3. Включили передатчик;
  4. Подключили минус АКБ к регулю;
  5. Подключили балансирный разъем;
  6. Подключили плюсовой разъем.

Другой схемы не предусмотрено. В общем ровно того же требует от нас и инструкция оригинального электрика. Так что никакого упущения в технологическом плане тут нет.

На текущий момент собран рабочий прототип, все описанные выше функции проверены и показали себя рабочими. Единственный «мутный» момент – датчик тока. По хорошему его надо калибровать. Если ноль найти не проблема, то стабилизированный ток – задача та еще. После некоторых мытарств я откалибровал свой датчик с использованием зарядного устройства всего лишь на 10А (при диапазоне в 150А). Остается все-таки верить в заявленную линейность в районе 1%. В принципе, цифры смещения нуля и чувствительности практически совпали с таковыми в ДатаШите на датчик. Если кто-то возьмется откалибровать датчик по всему диапазону и обнаружит приличную нелинейность, думаю можно будет заделать и кусочно-линейную аппроксимацию. Я хотел сначала пойти по этому пути, но у меня нет возможности задавать эталонный ток таких масштабов.

Из нюансов: на текущий момент не отображаются корректно логи в HoTT Manager и DataExplorer в разделе Electric module, но в тоже время отображаются в Log View программы Fermware Upgrade Studio. Я еще раз просмотрел структуру пакета данных обмена модуля с приемником. На мой скромный взгляд, косячить там просто негде. Поэтому я валю все это дело на прошивку приемника/пульта)))

Ну вот и все, заметку накропал, файлы к статье тут. Сегодня тут печатка, схема, файл прошивки и фотки в большем разрешении, исходники чуть-чуть подправлю и выложу.
Если есть замечания, пожалуйста, пишите. Только прошу учесть, что я не большой специалист в электронике с большим опытом, а всего лишь любитель.

  • 1810
Comments
vadimip

Замечательная работа! Спасибо за столь подробные объяснения.
А для чего сигнальный цепляется на + ?

sirQWERTY

Не понял про сигнальный и +. Поподробнее пожалуйста.

vadimip

Землю мы не трогаем, а центральны провод где-то между разъемами необходимо обрезать и в месте разреза подпаять к второму сигнальному проводу

Я имел в виду провод между приемником и модулем.

sirQWERTY

Теперь понял. Это не плюс. Разъемом tele на модуле выводятся RxD, TxD и земля. Так как общение с приемником происходит по одному проводу, эти сигналы необходимо соединить. Информация передается асинхронно: сначала прием, потом передача. И именно наличие физического контакта выводов RxD и TxD при подачи питания на модуль инициирует его штатную работу, а не режим настройки.

vadimip

Теперь я понял, спасибо!

Aleksei_D

Сергей, а предложения (не сочтите за хамство) по развитию проекта принимаются

sirQWERTY

Ну какое тут хамство. Что Вы подразумеваете под развитием?

boroda_de

Очень очень замечательная работа.
Мои поздравления!

Aleksei_D

Сергей, на забугорных сайтах, модули телеметрии hott собирают на arduino (ссылки были в теме про Hott) идея заключается в том что бы в одной прошивке учесть все датчики телеметрии vario/gps/lipometr/амперметр/датчик температуры/оборотов, по аналогии с multiwii, какие датчики захотел иметь те и получил, как бы так.

vadimip

Алексей, поделитесь ссылками пожалуйста. Чтобы в одной прошивке были сразу все сенсоры собраны я нашел только один вариант, но там только GPS и батарея, и я не знаю, рабочая ли эта прошивка.

В основном народ занимается выводом сигналов с датчиков в ArduPilot, а чтоб чисто самодельный датчик - я нашел только два варианта: самодельный GPS и модуль для измерения напряжения побаночно на 4S.
Выходит, что у Сергея третий известный мне самодельный модуль для HOTT.

sirQWERTY

Спасибо, Юрий.
Алексей, для модуля, ориентированного на вертолеты, эти функции излишне и их добавление повлечет смену чипа, увеличение габаритов и массы, за что я боролся не в последнюю очередь. Это уже не развитие проекта, а новый отдельный проект. Да и я не очень понимаю, в чем отличие такого модуля от стандартного електрик аир? Что-то подточить в этом модуле я только за, а вот обещать какой-то новый модуль не возьмусь, хотя и не исключаю.
В любом случае, если у кого-то возникнет желание разработать что-то аналогичное но с другими датчиками, от себя могу пообещать всяческую поддержку. Думаю следующая запись в дневнике будет посвящена как раз протоколу обмена между приемниками и модулями телеметрии. Единственное, ждать ее возможно потребуется чуть больше недели, потому как улетаю в командировку на днях.

vadimip

Согласен, HeliModule уже не будет таковым, если туда добавить вообще все. За себя скажу, что попробую разобраться, почему HOTT Manager не читает данные напряжения (хотя силу сигнала отображает, что странно).

Если появится статья по протоколу - я буду очень рад!

ukr100
vadimip;bt120280

За себя скажу, что попробую разобраться, почему HOTT Manager не читает данные напряжения (хотя силу сигнала отображает, что странно).

Приветствую, ну как там дела по протоколу что то получается, а то сильно логи нужны 😦

СНС

Добрый день , Сергей.
Можно ли скачать файлы?

sirQWERTY

Конечно. Поправил ссылку.