Самодельный передатчик (часть 2)
"Поэтому вопрос к Denn (и я удаляюсь паять кодер):
Так все же, тот факт, “что ручка продолжает двигаться, а машинка уже стоит” - это нормально или “имеет место неверно сконструированный канал”?! "
Ещё раз попробую объяснить: ручка продолжает двигаться, а машинка уже стоит - это нормально при работе микшера. Это значит, что все ручки поставлены в такое положение , что модель должна лететь ( или ехать … ) с таким положением руля.
Если миксеров в канале нет, то , конечно, это не совсем правильно, хотя при желании можно оправдать и такой режим. Всё зависит от необходимости управления.
Лично меня такое положение вещей вполне устраивает, как и JR , и Hitec.
И особенно приятно использование аналоговой крутилки для настройки этих положений!
Ещё раз попробую объяснить:
Спасибо за попытку!
К сожалению, по причине моего ничтожного опыта обращения с микшерами, я опять ничего не понял 😊…
А может, у меня с Вами логика не совпадает?
К примеру, такой логический ход мои мозги не переваривают:
ручка продолжает двигаться… Это значит, что все ручки поставлены
Как может двигаться то, что уже поставлено (остановлено, то есть) 😃?
Предлагаю прекратить дискуссию, тем более, что вот такой аргумент
Лично меня такое положение вещей вполне устраивает…
для меня абсолютно бесспорен! Ибо каждый имеет право на личные предпочтения!❗
А вот в том, что такое положение вещей устраивает
как и JR , и Hitec.
у меня есть определенные сомнения, но они требуют проверки, поэтому возражать пока не буду… Пойду читать инструкции ☕… Хайтек у меня есть, ДжиЭр есть у товарища…
Разбрался кажись.
void LCD_clear (void)
{
unsigned char x, y;
for (y=1; y<7; y++)
for (x=0; x<84; x++) buff[y][x]=0;
void LCD_refresh (void) // Обновление дисплея (отображение буффера)
{
unsigned char i,j;
LCD_DC=0 ;
spi(64);
LCD_DC=1;
for(i=1; i<7; i++)
{
LCD_DC=0 ;
spi(64+i);
spi(128);
LCD_DC=1;
for (j=0; j<84; j++) spi(buff[i][j]);
}
}
void LCD_pixel (unsigned char x, unsigned char y, unsigned char color)
{ // Рисуем пиксель. Все остальные процедуры работают через нее
unsigned char i, bt;
//x=83-x;
//y=47-y;
y=y+8;
i=y>>3;
bt=1<<(y & 0x7);
if(color) buff[i][x]|=bt;
else buff[i][x]&=(~bt);
}
По мотивам msv1.8 3310 upsidedown
Можно, я чуть выскажу свое видение микширования и ЕРА? 😃
Для микширования можно применять два метода.
1 - как сделано у Фокуса. Просто складываем каналы умноженные на их весовые (процентные) коеффициенты.
2 - с пересчетом весовых коеффициентов. Для этого сначала расчитываем новые коеф (К2) пропорционально установленным пользователем, но так, чтобы их сумма давала 100% (или ЕРА). Т.е. если пользователь установил смешивание 3 каналов с коеф. 50, 40 и 30, то расчетные К2 будут 50/(50+40+30)*100=42, 40/(50+40+30)*100=33 и 30/(50+40+30)*100=25. В этом расчете 100 - это ЕРА. Такой расчет гарантирует, что при максимальных отклонениях стиков всех микшируемых каналов не даст машинке выйти за ЕРА. И если мы изменим ЕРА, то соотношение влияния стиков на результат не изменится. Даже если пользователь установит для всех трех каналов 100% микширования, то каждый из каналов получит только по 33% и равную долю влияния на результат. Не будет ситуации, что стик еще движется, а машинка уже уперлась. И функция двойных расходов в таком случае решается как изменение ЕРА в зависимости от какого-либо переключателя или даже крутилки.
Сорри за многабукафф 😃
2 - с пересчетом весовых коеффициентов
Вот этот алгоритм и описан в посте #2698. Неужели настолько неузнаваемо? 😊
А вот идея менять расходы движением EPA мне кажется не хорошей. Потому, что в одном месте приходится оперировать весовыми коэффициентами каналов (процентами), а в другом - градусами или миллиметрами.
Гораздо более юзефульно, КМК, определять общий коэффициент канала “одинарные/двойные” из установленных значений расходов и использовать этот коэффициент. На примере sslobodyan’а:
Двойные расходы = 100, одинарные = 60. Считаем коэффициент 60/100 = 0,6.
Веса установлены 50, 40 и 30 (сумма=120); веса, приведенные к 100% составят 0.42, 0.33 и 0,25 соответственно (в сумме = 1).
Полное (100%) отклонение главного стика канала даст:
- на двойных расходах 100*0,42=42%
- на одинарных расходах 100*0,42*0,6=25%
Полное (100%) отклонение стика второго канала даст: - на двойных расходах 100*0,33=33%
- на одинарных расходах 100*0,42*0,6=20%
Полное (100%) отклонение стика третьего канала даст: - на двойных расходах 100*0,25=25%
- на одинарных расходах 100*0,25*0,6=15%
Сумма полного отклонения трех стиков: - на двойных расходах 42%+33%+25%=100% (А)
- на одинарных расходах 25%+20+15%=60%. Как просили. (Б)
И при этом не надо никуда EPA перестраивать. EPA как параметр геометрии самолета или… Не знаю как лучше сказать… “На первый вылет - расходы поменьше”. Смысл не в расходах поменьше, а в уменьшении предельно допустимых углов отклонений рулей. Вот это - в чистом виде работа для EPA. КМК.
Проценты (А) и (Б), которые мы получили - это проценты от длительности канального импульса, установленного через EPA. Осталось добавить (вычесть) триммирование - и все, можно грузить длительность в таймер.
Триммирование, КМК, просится в процентах от установленного EPA, ибо тоже имеет прямое отношение к геометрии самолета. Получим простое смещение нуля рулевой машинки (на графике из поста #2696 вертикальная ось, от которой откладываются + и - рулевой машинки двигается триммированием влево-вправо).
И при этом не надо никуда EPA перестраивать. EPA как параметр геометрии самолета или… Не знаю как лучше сказать… “На первый вылет - расходы поменьше”. Смысл не в расходах поменьше, а в уменьшении предельно допустимых углов отклонений рулей. Вот это - в чистом виде работа для EPA. КМК.
Ой встряну немножко.
Сразу оговорюсь, что ничего серьезней этого кодера я не видел.
Мне интересно, почему люди у которых есть аппа с возможностью изменения EPA, не могут поставить эксперимент? И выставить-таки все точки над ё. Хотя, может просто времени не хватает 😒
С выше приведенной цитатой не совсем согласен. Ибо даже в очень бюджетных аппах есть переключатель именно расходов. И я не думаю, что нужно на первых полетах рулить этими расходами посредством EPA. Микроскопом гвозди забивать. Хотя, может, я чего-то в высказывании недопонял.
Почитав несколько инструкций от разных футаб (в них говорится, что используется EPA именно для ограничения движения машинки по конкретному каналу. И как пример дается организация предотвращения перемещения манинки в одном из направлений…), хочу задать такой вопрос:
А если мы EPA поставим в 0 - то машинка отклоняться не будет. А стик на аппе мы двигаем. Я не думаю, что тут идеология нарушилась. И что так быть не должно? Машинка все-таки должна рулиться? Стоять как вкопаная она должна?
Ну КМК все в кодере работает вполне корректно в отношении EPA.
Ребят, Расходы - имхо это логика. Конечные точки - имхо это физика. Вот и все.
Т.е в качестве конечных точек задается предельное положение качалки сервы, при котором серва не упрется в свой ограничитель или не начнет ломать рулем направления руль высоты. А расходы - это уже как вам летать комфортнее.
Посмотрите на ту же футабу к примеру. Там сейчас есть аналогичная, но более продвинутая функция “виртуальное кольцо”. Функция позволяет настроить “конечные точки” серв автомата перекоса таким образом, чтобы тарелка перекоса при угловых положениях стика по одной оси и по двум осям наклонялась от вертикали на один и тот же угол, который максимален для данной тарелки перекоса физически.
Чего спорить то? ЕРА должно ограничивать движение сервы, даже если стик не уперся. Контролировать, чтобы использовался весь ход стика - должен ЮЗЕР при помощи расходов/коэфициентов микширования. По сути - ЕПА это ограничение длительности канального импулься дла конкретной физической реализаци модели.
Посмотрите на ту же футабу к примеру.
Хорошее предложение!
Давайте посмотрим, как Вы настраиваете “виртуальное кольцо”
…таким образом, чтобы тарелка перекоса при угловых (?) положениях стика… наклонялась от вертикали на один и тот же угол, который максимален для данной тарелки перекоса физически.
Если я правильно понял термин “угловое положение” стика, как “стик уперся в угол”, то мне понятна логика такой настройки… Без вопросов!
А вот следующая Ваша фраза уже вызвала у меня недоумение
ЕРА должно ограничивать движение сервы, даже если стик не уперся.
Вы действительно можете проделать такой “фокус” на своей футабе?
Контролировать, чтобы использовался весь ход стика - должен ЮЗЕР при помощи расходов/коэфициентов микширования.
Согласен, если фразу закончить: “устанавливая их (расходы) такими, чтобы при крайних положениях стика обеспечивалось комфортное управление и отсутсвие механического ограничения хода машинки”.
А если мы EPA поставим в 0 - то машинка отклоняться не будет.
Будет! Но чтобы это заметить, потребуется микроскоп 😉!
Ну КМК все в кодере работает вполне корректно в отношении EPA.
Не имею морального права в этом сомневаться - нет пока у меня это кодера 😦…
Но “с какого перепугу” были написаны посты 2655 и 2656 ?!
Перечитайте!
Мне интересно, почему люди у которых есть аппа с возможностью изменения EPA, не могут поставить эксперимент? И выставить-таки все точки над ё
Да могут… ставили!
Только кто сказал, что за инженерами футабы или хайтека должно оставаться последнее слово 😉?!
Вы действительно можете проделать такой “фокус” на своей футабе?
Я уверен, что сможет! Хотя сам (на своей футабе) это не проверял и не исследовал.
У “футабы” логика такая. Для них +120% триммера и +140% EPA - это нормально.
А вот 140% чего? Глубоко убежден, что именно стика. Если поставить расход на стике в 140% (такое там тоже возможно! Но не обязательно…), то отклоненный до упора (100% механики) стик как раз и приедет в 140% EPA.
Я же говорю - принципы построения алгоритма могут быть разными. На разной логике.
Эта логика не плохая и не хорошая. Она РАЗНАЯ.
Кому-то ближе и удобнее одна, кому-то другая.
И я не думаю, что нужно на первых полетах рулить этими расходами посредством EPA. Микроскопом гвозди забивать. Хотя, может, я чего-то в высказывании недопонял.
Скорее именно недопонял.
Я знаю три метода “уменьшения расходов для первых полетов” (да и не для первых тоже):
- Уменьшить расход;
- Переставить EPA;
- Поставить крепкую экспоненту в минус (-60…-70).
Каждый по своему удобен. Использовать надо то, что удобно и наиболее подходит.
Я против того, чтобы использовать EPA вместо того, чтобы переназначить расходы. Мне вот это очень не понравилось:
И функция двойных расходов в таком случае решается как изменение ЕРА в зависимости от какого-либо переключателя или даже крутилки.
Я против того, чтобы использовать EPA как штатный инструмент для оперирования расходами.
А эксперимент - можно. Я же предлагал. Но я не просто так попросил программу эксперимента. Я не вижу смысла крутить неизвестно что неизвестно зачем; крутить надо ради чего-то.
Ну покрутим, увидим как делает Футаба. Оно имеет смысл, только если кто-то еще возьмется проделать аналогичный эксперимент с Хитеком, или Санвой, или еще с кем. Чтобы сравнить и выбрать базу для нашего кодера.
А иначе… Да , “Футабы” вот так. Да и хрен с ней! А у нас вот эдак, совершенно по-другому, но всем нравится.
P.S. А в алгоритме, который я прописал в посте #2707, надобно сделать улучшение: считать, что двойной расход главного канала тоже может быть менее 100%. Тогда и для двойных расходов, и для одинарных надо считать коэффициент N/100 ; если расход = 100%, то коэффициент равен 1. И если расход меньше 100%, то при полностью упертом стике (и всех вмикшированных стиков тоже!) качалка не доедет до EPA. И это - правильно!
А вот идея менять расходы движением EPA мне кажется не хорошей.
Я несколько плохо выразился 😃 Имел ввиду именно так как Вы и поправили. Множить на ЕРА*Кдвойного расхода. Так и делал у себя в кодере.
Я уверен, что сможет! Хотя сам (на своей футабе) это не проверял и не исследовал.
Ну так, проверте 😉! Как активный участник обсуждения “проблемы”…
Я на своей проверял, но у меня такая футаба, что футабе за нее должно быть стыдно 😊… (4EX) Она так не сможет!
Эклипс тоже так не может…
А может, у меня интеллекта не хватает заставить их так поступить 😦? Хотя… может, и хватило бы, если бы я понимал, зачем такое может потребоваться в управлении моделями? Но пока я такого понимания не достиг… Увы! И по-прежнему пребываю в убеждении (или заблуждении ?), что “машинка не должна останавливаться пока стик не уперся!”
Я уверен, что сможет! Хотя сам (на своей футабе) это не проверял и не исследовал.
Ну так, проверте 😉! Как активный участник обсуждения “проблемы”…
Я на своей проверял, но у меня такая футаба, что футабе за нее должно быть стыдно 😊… (4EX) Она так не сможет!
Эклипс тоже так не может…
А может, у меня интеллекта не хватает заставить их так поступить 😦? Хотя… может, и хватило бы, если бы я понимал, зачем такое может потребоваться в управлении моделями? Но пока я такого понимания не достиг… Увы! И по-прежнему пребываю в убеждении (или заблуждении ?), что “машинка не должна останавливаться пока стик не уперся!”
…при полностью упертом стике (и всех вмикшированных стиков тоже!) качалка не доедет до EPA. И это - правильно!
Пока писал свой пост, Вы добавили…
Если вставить в Вашу фразу уточнение “… не доедет до EPA, но и не остановится, пока все стики не упрутся.” - то я соглашусь, что "И это - правильно!" 😁…
2serg111
Разбрался кажись.
Что-то не то… Ваши изменения -только неправильная адресация буфера, причем с выходом за его границы… Чревато…
2serg111 Что-то не то… Ваши изменения -только неправильная адресация буфера, причем с выходом за его границы… Чревато…
Та не. Там все правильно. У этого дисплея совсем другой буфер. По-более - 102x67 пикселей.
2serg111 И еще, если не устраивает контраст этого “паленого” дисплея, то поиграйтесь напряжением питания дисплея (даже просто резисторным делителем) ну и не забудьте поменять в инициализации значение VOP - контраст улучшится раза в 2-3
void LCD_init(void) // ИНИЦИАЛИЗАЦИЯ ДИСПЛЕЯ
{
LCD_DC =0;
LCD_RESET=0;
delay_ms(1);
LCD_RESET=1;
delay_ms(1);
LCD_DC=0;
spi(0x21); // включить питание, расшир. команды
spi(0xE4); // A large VOP for China displays
spi(0x45); // China LCD Correction (Y offset +5)
spi(0x06); // Temp. coefficient
spi(0x13); // bias=3
spi(0x20); // обычный набор инструкций
spi(0x0c); // Normal Mode
delay_us(500);
LCD_clear();
LCD_refresh();
Я на своей проверял, но у меня такая футаба, что футабе за нее должно быть стыдно 😊… (4EX) Она так не сможет!
да лааадно прибедняться-то! Расходов у нее нет, а EPA точно также, 0…+140 в каждую сторону.
Я попробую, конечно. Только не уверен что сегодня. Подготовиться надоть. Машинку закрепить, шкалу, стрелочку…
Кому чего интересно проверить/уточнить - пишите!
Если вставить в Вашу фразу уточнение “… не доедет до EPA, но и не остановится, пока все стики не упрутся.” - то я соглашусь, что "И это - правильно!" 😁…
Ы! 😁 А я изначально хотел возле этой добавки “2 Pav_13:” написать…
При таком (модифицированном) алгоритме фишка в том, что по отношению “расход главного канала”/100 считается ОБЩИЙ коэффициент. Допустим, расход = 80%; тогда общий коэффициент = 0,8. Дальше расход главного канала становится весом. Сумма весов относится к 100%. По весам считаются коэффициенты участия каналов. Да, все три (в наших примерах - три…) на полном отклонении дадут 100%, но эти 100% будут умножены на ОБЩИЙ коэффициент. И когда все три стика лягут на упоры, качалка дойдет только до 80% от EPA.
Не нравится, что всего 80? А зачем тогда ставили расход на 80%? Ставьте расход 100% - получите отклонение качалки 100% EPA.
Проверка, как в начальной школе: нету микширования. Никакого. Вообще. Расход 80%. До какого отклонения должна дойти качалка при полном отклонении стика? Тот, кто считает, что до 100% EPA, моментально получает двойку… Логично?..
Пример для осмысления: Условия точно как в “проверке”, но вы добавили 1% микширования от стика второго канала. Отклонили до упора первый стик. Потом до упора второй стик. До скольких процентов отклонилась качалка?
Подсказка: неужели до EPA? До 100% EPA? Как же это 1% от второго канала превратился в эквивалент 20% от первого?
Решение:
Расход главного канала = 80%
Микширование от второго кнаала = 1%
Общий коэффициент 80/100=0,8;
Сумма весов = 80+1
Весовой коэффициент главного канала =(80*100)/(80+1) = 98.76
Весовой коэффициент второго канала =(1*100)/(80+1) = 1.24.
Полное отклонение стика главного канала отклонят качалку на 98,76*0,8=79,008% от величины EPA,
Полное отклонение стика второго канала добавит 1,24*0,8=0,992% от величины EPA.
В сумме полное отклонение обоих стиков вызовет отклонение качалки 80% от величины EPA.
…А сколько хотел получить тот, кто установил расход 80%?
Та не. Там все правильно.
Не могу согласится… В циклах не используется 0-вая строка буфера, зато залезаем за последнюю. Если размер буфера не скорректирован, то недалеко до беды… Единственное изменение во всех этих изменения по логике работы с индикатором- это команда адресации. Попробуйте в функции LCD_refresh поменять spi(64+i); на spi(65+i);,а все остальное вернуть.
//—
Прямо буря! (в стакане? 😃 ) Позиция Pav_13 уже давно понятна. А вот в объяснениях EagleB3 уже потерял нить… Периодически упомянается “главный канал”… Ну не понимаю какой канал главный для правого(левого) элевона… Дмитрий, прошу написать конкретно, какие изменения по вашим соображениям следует внести в логику обработки. Или это абсолютно другая концепция?
//—
Для меня более-менее все ясно, изложил выше. Один вопрос остался - как правильнее обрабатывать триммеры, субтриммеры? Или просто сдвигать всю фукцию (как сейчас) или менять только центр и менять наклон для сохранения конечных точек?
Я не готов сказать, какие изменения надо внести.
Я вообще (пока?..) не уверен, что они нужны.
Но зашла речь об алгоритмах - и появился (надеюсь…) реальный шанс найти концепцию, а в рамках этой концепции - алгоритм, который понравится всем (и за одно будет всем понятен. Даже тем, кто не умеет разбираться в исходниках).
“Главный канал” - тот, управление машинкой которого мы рассматриваем.
Боюсь запутать и скажу так: если при добавлении газа нос затягивает вниз, то стик РВ надо взять на себя. Берем канал РВ и микшируем в него сигнал от канала газа. Я в этом случае канал РВ считаю главным, а канал газ - микшируемым (“вмикшируемым”; криво, зато, КМК, не запутаешься).
Для левого элерона главный канал (традиционно? Только на Футабе?) первый. Для правого элерона при раздельных машинках - главный канал шестой. В шестой канал вмикшируется первый канал, с обратным знаком (если левый вверх, то правый - вниз).
Для левого элевона главный канал первый. В него микшируется второй канал (РВ).
Для правого элевона - главный канал шестой. В него микшируется два канала - первый канал и второй канал.
Но случай и элевонов, и раздельного управления элеронами - маненько специальный!
Общий коэффициент канала по описанному алгоритму считается через расход стика канала (сам физический смысл расхода - проекция стика на интервал, заданный EPA). А на 6-м канале стика нет! Общий коэффициент для 6-го канала (правый элерон/элевон) должен быть равен общему коэффициенту 1-го канала (левый элерон/элевон), а при подсчете весов расход…
А вот тут надо еще подумать!.. Либо расход 6-го принимается за 0, либо расход 1-го игнорируется. Либо еще более сложно…
В той же “Футабе” V-Tail и элевоны - два отдельных, специальных, заготовленных на заводе режима микширования…
Триммер, КМК, это должен быть аналог перестановки качалки РМ на нужное количество зубов. Поэтому наиболее простой (и правильный) вариант - двигать точку 1,5mS (“0” РМ).
Про субтриммеры ничего не знаю. 😊 Что такое “субтриммер”?
В той же “Футабе” V-Tail и элевоны - два отдельных, специальных, заготовленных на заводе режима микширования…
О! Наконец-то есть некий общий знаменатель.
Хотите меньше ручной работы, и чтоб за вас все само настраивалось? - вэлкам - мастера/предустановки брендов помогут как нельзя лучше.
Хотите гибкость? - нет ничего лучше кодера от msv. Ручками, ручками таки нужно. И добиться можно всего и так чтоб правильно было. И, действительно
Я не готов сказать, какие изменения надо внести.
Я вообще (пока?..) не уверен, что они нужны.
На данном этапе изменений не нужно. Это, если делать вуаль в виде тех самых предустановок - тогда и нужно думать. А так, вся прелесть - гибкость
Не могу согласится… В циклах не используется 0-вая строка буфера, зато залезаем за последнюю. Если размер буфера не скорректирован, то недалеко до беды… Единственное изменение во всех этих изменения по логике работы с индикатором- это команда адресации. Попробуйте в функции LCD_refresh поменять spi(64+i); на spi(65+i);,а все остальное вернуть.
Чувствовал что что-то нето. Поменял spi(64+i) на spi(65+i), все остальное вернул. Работает 😃
Обнаружил что у дисплея иногда сносит крышу, если во время работы коснуться общего пробода схемы , осцил прицепить или отверткой (держась за металлическую часть). Немного помогло земление железки экрана. По питанию повесил керамику 2,2мк прям на ноги дисплея, лучше не стало. Камень не сбоит, проверено.
Здравствуйте всем!
Очень заинтересовался этой темой, хочу повторить девайс.
По мере сбора информации, выяснения наличия в местном магазине комплектующих, возник такой вопрос:
- какой микроконтроллер подойдет для кодера из перечисленных:
mega128-16AU (TQFP64)
mega128L-8AI (TQFP64)
mega128L-8AU (TQFP64)
Любая.