Альтернативная прошивка к FlySky/Turnigy/I-Max/Eurle от Thus

bobt

Хочу выделить в отдельную ветку все материалы по альтернативной прошивке от Thus. На данном форуме кратко эта прошивка уже была освещена в теме “Переход на 2.4GHz Turnigy 9ch” от boroda_de. О модификации передатчика и программаторе останавливаться подробно нет смысла, все это отлично описано в соседней ветке про альтернативную прошивку от MSV : rcopen.com/forum/f8/topic182549

Помните, что переделки передатчика и его перепрошивку вы делаете на свой страх и риск и естественно при этом теряете гарантию производителя !

Прошивка Th9x, которой будет посвящена данная ветка, разработа двумя моделистами из Германии: Томас Хюстерер ( Thomas Husterer ака Thus ) и Йозеф Глатхар.
Основная ссылка на данный проект: code.google.com/p/th9x/
Очень много сообщений о данной прошивке есть в теме на RCLine :
www.rclineforum.de/forum/thread.php?threadid=23904…

Я связался с Томасом и он разрешил мне сделать перевод на русский его руководства. Когда перевод будет готов полностью, Томас обещал добавить его к основным документам проекта, пока буду выкладывать главы тут по мере готовности. Очень прошу делать мне конструктивные замечания по неточности перевода или ошибкам русского языка. Особенно это не должно составить труда Юрию, ака boroda_de. Я прочитал обе версии документа от Томаса, английскую и так сказать оригинальную немецкую, и хочу заметить, что немецкая версия более подробная и точная, поэтому перевод делаю с нее, плюс немецкая версия всегда более свежая чем английская.

Базовая концепция:

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

Технические характеристики:
-16 слотов памяти для моделей
-двух ступенчатые микширование позволяет сформировать выходной сигнал из любых комбинаций входных каналов
-регулируемые задержки сигнала для каждого микшера со своими значениями для каждого направления, вверх или вниз
-4 кривых передачи с 5 или 9 точками ( pitch curves )
динамическое управление памятью
-возможности реверсирования каналов и настраиваемые пределы расходов
-возможность установки экспоненциальной функции и двойных расходов для каждого аналогового входного сигнала ( 4 рукоятки управления и 3 потенциометра )
-настраиваемый минимум напряжения питания батареи
-поддержка подсветки дисплея (требуется схемотехническое изменение пульта, см. приложение данного руководства )
-режим тренер с возможностью выбора характеристик канала
-калибровка ручек управления
-таймер с тремя режимами: абсолютное значение, время работы мотора или время таймера пропорционально ручке газа
-выключаемые предупреждения и сигналы нажатия кнопок

Прошика открытая и написана на Cи++, хотя реально на чистом C. Для тех кто хочет самостоятельно вносить изменения в код достаточно установить под Windows AVR Studio 4 и WinAvr и создать проект, куда занести файлы из фолдера SRC, мне удалось скомпиллировать прошивку с первого раза. Владельцам Линукс все make файлы заготовлены автором.

bobt

Для общего ознакомления приведу экраны прошивки:

bobt

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

3.3.6 Микшеры 5/7

Картинка 1

Не лишним наверное будет снова напомнить в данном разделе, что является входными аналоговыми сигналами: 4 рукоятки управления и 3 потенциометра. Этот экран является наиболее важным из всех настроек. Тут вы можете комбинировать различные входные сигналы ( от рукояток управления и потенциометров ) или константы в один из выходных каналов (СH1-CH8). Дополнительно имеются четыре вспомогательных канала, которые используются как временные значения X1-X4. Эти значения рассчитываются первыми и могут быть добавлены как входные сигналы.
Каждый микшер должен содержать входной сигнал и вес и опционально может содержать переключатель, кривую и значения задержек. Переключатели доступны в нормальном и инверсном режиме.
Доступно 8 видов кривых: – , >0 , <0 , |x| , cv1, cv2, cv3, cv4
– : y=x : значения y равны значениям x
>0 : y=x | x>0, иначе y=0 : значения y равны x только при положительных значениях
<0 : y=x | x<0, иначе y=0 : значения y равны x только при отрицательных значениях
|x| : y=|x| : значения y равны абсолютному значению x

Картинка 2

cv1…cv4 Можно выбрать одну из 4 кривых заданных пользователем.
cv1,cv2 строятся по 5 точкам y при x=-100, -50, 0, 50, 100
cv3,cv4 строятся по 5 точкам y при x=-100, -75, -50, -25, 0, 25, 50, 75, 100

3.3.7 Редактирование микшеров


Картинка 3

В этом экране вы можете детально настроить один из микшеров.
SRC: Выбор входного канала RUD, THR, ELE, AIL, P1, P2, P3, X1, X2, X3, X4, MAX FUL.
с MAX вы можете добавить значение константы 0 или +100%, с FUL вы можете добавить значение константы -100% или +100%
PRC: вес от -125% до +125%
CURVE: один из восьми типов кривых.
SWTCH: переключатель. В зависимости от входного значения SRC, переключатель может воздействовать двумя различными способами.
Если SRC равно MAX или FUL, то переключатель выбирает одно из двух фиксированных значений как входное значение и линия микшера рассчитывается с полным набором параметров.
Если SRC не равно MAX или FUL, то переключатель включает или выключает линию микшера. Если переключатель выключает линию микшера, то ни один из заданных параметров не оказывает никакого эффекта.
SPEED: Эти два значения определяют скорость с которой нарастают или понижаются входные значения передаваемые в выходной канал.
RM: Это поле используется для полного удаления микшера.

bobt

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

4.2 Последовательность тестов при включении питания

При включении питания передатчика выполняется целый ряд очень важных тестов…
Вначале загружаются и проверяются EEPROM данные. В случае ошибки выводится предупреждение на экран. EEPROM форматируется целиком.
Если первая проверка завершена, то проверяется достаточно ли свободной памяти для загрузки как минимум еще одной модели. Если тест не прошел, то выдается предупреждение.
Следующая проверка положения ручки газа, находится ли ручка в исходном положении. Если тест не прошел, то выдается предупреждение.
Затем проверяются положения всех переключателей. Если как минимум один из выключателей находится в позиции отличной от «выключен», то выводится специальный экран диагностики, где показаны положения всех переключателей.

Картинка 1

Любой из экранов предупреждений может быть покинут по нажатию кнопки Выход (Exit).

Информация для тех, кто все же решил спаять программатор самостоятельно, но пользуется к примеру лаптопом без параллельного порта и нужен только USB вариант прогрмматора.


Оригинальная ссылка:
www.mikrocontroller.net/articles/AVR-ISP-Stick

Полный файл описания в PDF формате:
mikrocontroller.net/…/Datei:AVR-ISP-Stick.pdf

bobt

4.2.2. Экспоненты

Экспоненциальные функции преобразуют линейные входные значения в выходные с нелинейной характеристикой. Для пилота это означает, что чувствительность ручек управления зависит от рабочей позиции ручки.
Для аппроксимации экспоненциальных функций используется следующий полином:

y = f(x) = x^3 *k + x * (k-1) при 0 < k < 1
y = f(x) = x^k при 1<=k<=3

Картинка 1

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

#define RESX 512ul
#define RESK 100ul
uint16_t expou(uint16_t x, uint16_t k)
{
// k*x*x*x + (1-k)*x
return ( (unsigned long)x * x * x / 0x10000 * k /
(RESX*RESX/0x10000)

  • (RESK-k) * x + RESK / 2 ) / RESK;
    }

При расчете экспоненты, в исходном коде на Си использовано только одна операции деления с натуральными 32 битыми числами, что позволяет существенно поднять быстродействие.

boroda_de
bobt:

Особенно это не должно составить труда Юрию, ака boroda_de

Где-бы ещё время взять.
Отлично получается, Владимир. 😃
Примечание: на некоторых ранних передатчиках калибровка не срабатывала. Поправлено начиная с версии r-76

bobt

4.5 Подсветка ЖКИ экрана

На rcline форуме есть предложения как сделать подсветку ЖКИ дисплея. Реализацию можно посмотреть к примеру здесь:
www.rclineforum.de/forum/thread.php?threadid=23904…
При помощи небольшого количества дополнительных конструктивных элементов можно этой подсветкой научится управлять программно, а именно включать и выключать. Как управляющий выход используется свободный порт PB7. В нашем случае, достаточно одного полярного транзистора для того чтобы порт PB7 соединить с инвертором EL-пленки.
Внимание! В зависимости от типа инвертора он должен запитываться от 5В или же другим напряжением. Тем не менее, схема подключения полярного транзистора остается такой же. На фото показано место соединения полярного транзистора с PB7 (желтый провод, синие стрелки).

Картинка 1 и 2

P.S. Хоть Томас и написал, что можно брать инверторы для электро люминисцентной пленки и не на 5В, но я встречал только еще инветоры на 12В, но думаю что 12В запитать в передатчике будет более проблематично.

UserM
bobt:

Реализацию можно посмотреть к примеру здесь:

Сложновато там без регистрации что либо посмотреть.

bobt
UserM:

Сложновато там без регистрации что либо посмотреть.

Выкладываю фото тут.

ipolo

интиресная прошивка, как правильно откалибровать стики ?
на моём TGY9 С1-С4 после дроби 0000 😦

bobt

3.4.7 Калибровка ручек управления

Картинка 1

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

Картинка 2

bobt

3.4.6 Диагностика аналоговых входных сигналов и калибровка измерения напряжения батареи.

Картинка 1

Данный экран отображает значения всех аналоговых входных сигналов: от ручек управления и потенциометров с точностью 10 бит. Значения от рукояток управления показываются в процентах.
Число номер восемь (A8) показывает напряжение батареи и тут же вы можете его откалибровать.

Картинка 2

bobt

3.3.1 Выбор модели 1/7

Картинка 1

Информация о слотах состоит из 3 колонок, первая отображает номер слота, вторая название модели и последняя количество байт занимаемое моделью в памяти. Выбор одного из 16 слотов памяти осуществляется перемещением курсора вниз или вверх. Выбор может быть осуществлен циклически, то есть от слота номер 1 нажатием кнопки ВВЕРХ можно переместиться на слот номер 16 и наоборот. Текущий выбранный слот отмечается миганием номера слота. Выбор слота для редактирования осуществляется нажатием кнопки ВПРАВО. Если вы хотите скопировать или переместить любой из слотов, то нажмите кнопку МЕНЮ коротко, при этом название модели начнет мигать. Если вы нажмете кнопку МЕНЮ повторно в этом положении, то выбранная модель будет сдублирована в следующий свободный слот памяти. Если из данного положения вы нажмете кнопку ВНИЗ или ВВЕРХ, то вы переместите выбранный слот на одну позицию в соответственном направлении.
Заметим, что общая свободная память для сохранения параметров модели отображается в первой линии экрана. Если это значение будет ниже чем 200 байт, тогда вы должны удалить некоторые модели для освобождения памяти иначе не возможно гарантированное сохранение параметров модели.

Картинка 2

bobt

3.3.2 Базовые установки модели 2/7

Картинка 1

В поле ‘Name’ вы можете изменить название модели. Для этого переместите курсор вправо в позицию символа и затем изменяйте его значение.
В поле ‘Proto’ вы можете выбрать один из нескольких протоколов передатчика. В нормальном случае вы выбираете PPM.
В поле ‘Timer’ вы можете пред установить стартовое число и режим работы таймера. Это значение затем будет уменьшаться в зависимости от выбранного режима таймера: OFF/ABS/THR/THR%.
OFF: нет уменьшения, таймер отключен.
ABS: всегда идет отсчет назад.
THR: отсчет идет только в том случае если ручка управления газом находится не в нейтральной позиции.
THR%: подобно режиму THR, но скорость отсчета пропорциональна позиции ручки управления газом. Отсчет тем быстрее, чем больше отклонена ручка газа и наоборот.
Если курсор находится в позиции RM, то слот памяти выбранной модели может быть удален полностью нажатием кнопки МЕНЮ.

Картинка 2

P.S. У меня установлена 76 прошивка и режим работы ручек управления в данном экране не отображается и экран соотвествует показанному в сообщении 2 ! Последняя версия прошивки 105.

bobt

Решил проверить как работает функция задержки в микшере. Так как модель с ретраками отсутствует, то демонсрирую работу на руле направления.
Параметры микшера показаны на фото 1. Хочу отметить, что чем выше значения параметра SPEED (скорость), то тем медленее отрабатывает серво машинка.
С моей точки зрения наверное логичнее было бы назвать этот параметр DELAY. Напишу Томасу.
Работа в коротком ролике на ютубе.

Оператор я, с девайсом оперирует моя жена 😄

sslobodyan
bobt:

4.2.2. Экспоненты
y = f(x) = x^3 *k + x * (k-1) при 0 < k < 1

А в программе y = f(x) = x^3 *k + x * (1-к)

bobt
sslobodyan:

А в программе y = f(x) = x^3 *k + x * (1-к)

В menus.cpp я вижу такой код ( с симмолов // начинаются коменты ):

uint16_t expou(uint16_t x, uint16_t k)
{
// k*x*x*x + (1-k)*x
return ((unsigned long)x*x*x/0x10000*k/(RESXul*RESXul/0x10000) + (RESKul-k)*x+RESKul/2)/RESKul;
}
// expo-funktion:
// ---------------
// kmplot
// f(x,k)=exp(ln(x)*k/10) ;P[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20]
// f(x,k)=x*x*x*k/10 + x*(1-k/10) ;P[0,1,2,3,4,5,6,7,8,9,10]
// f(x,k)=x*x*k/10 + x*(1-k/10) ;P[0,1,2,3,4,5,6,7,8,9,10]
// f(x,k)=1+(x-1)*(x-1)*(x-1)*k/10 + (x-1)*(1-k/10) ;P[0,1,2,3,4,5,6,7,8,9,10]

bobt

Хочу отметить, что чем выше значения параметра SPEED (скорость), то тем медленее отрабатывает серво машинка. С моей точки зрения наверное логичнее было бы назвать этот параметр DELAY. Напишу Томасу.

Томас быстро ответил В новой версии термин SPEED для задержки заменен на FADE, что наверное более логично, чем DELAY.

bobt
boroda_de:

Кстати, новая версия уже вышла 😋

В новой версии (116):

* Исправлены проблемы : 7,13,19,21,22,24 ( номера согласно раздела ISSUES code.google.com/p/th9x/issues/list )
* fsck with repair ( встроена функция проверки разметки EEPROM с возможностью исправления ошибок. )
* convert eeprom-format for some older revisions r46<= oldrev <r84 Изменился формат сохранения параметров моделей и все записи между 46 и 84 версиями будут сконвертированны, но я бы на всякий случай записал все микшеры на бумажку 😃
* DR with expo and weight Двойные расходы с экспонентами и весами. Что поменялось я не понял, потому что это было и в 76 версии. Только что веса для двойных расходов стали по умолчанию 100%
* Limits with offset -63% to +63% Пределы со смещениями от -63% до +63%
* increased mixers from 20 to 25 Увеличено количество микшеров до 25

  • в версии 118 заменен параметр SPEED на FADE и изменен расчет замедления.
boroda_de
bobt:

я бы на всякий случай записал все микшеры на бумажку

просто сливаю eeprom вместе с флэшем, чтоб потом всегда можно было перезалить 😃

bobt

Параметр FADE ( колонка один ). Начиная с версии 118.

increased speed from 5/10ms to 18/10ms=1800/sec = 0.6s full sweep

Логарифмическая шкала:
1: rate=1800 i/s full= 0.6s 0.0
2: rate=1300 i/s full= 0.8s 1.4
3: rate= 900 i/s full= 1.1s 1.4
4: rate= 600 i/s full= 1.7s 1.5
5: rate= 400 i/s full= 2.6s 1.5
6: rate= 300 i/s full= 3.4s 1.3
7: rate= 200 i/s full= 5.1s 1.5
8: rate= 150 i/s full= 6.8s 1.3
9: rate= 100 i/s full= 10.2s 1.5
10: rate= 66 i/s full= 15.4s 1.5
11: rate= 50 i/s full= 20.5s 1.3
12: rate= 33 i/s full= 30.7s 1.5
13: rate= 25 i/s full= 41.0s 1.3
14: rate= 16 i/s full= 61.4s 1.5
15: rate= 11 i/s full= 92.2s 1.5

Stepan_M

Залил прошивку на пробу - версия r116, калибровка нормально прошла, миксеры пока не крутил.

Сразу пожелание если можете написать разработчику - звук аларма таймера сделать громче - он так тихо тикает что если рядом в поле будет работать двс - слышно вообще не будет.