8 канальный кодеры

bodyn

Приветствую Всех - и с наступающим Годом
Предлагается два варианта кодера для RC пультов
Все 8 каналов - пропорциональные
Возможно применение в моделях где необходимо большое количество функций( авто- судомодели)
так сказать копийных
Кодер на 16F676 - опробован в работе ( переделал свой 5 канальный Футаба)
Предусмотрена инверсия выходного сигнала
Напряжение управления - 0-1в\ 2-3в\ 0-5в
В предлагаемой прошивке установленно 2-3в
Схема на 16F877 - тоже проверена , но в конструкции не реализованно( напряжение 0-5 в)
Используя 4switch на 12F675 ( выложена на RCdesign) - можно создавать пульт к примеру 4 проп + 16 дискретных
либо 6 проп + 8 дискр( 1 проп = 4 дискр)
Пользуйтесь!

16F676.rar16F877.rar

ubd

Напряжение управления - 0-1в\ 2-3в\ 0-5в

Калибровку бы ещё туда. Т.к. не у всех джойстиков крайние положения соответствуют 2 - 3 В. Плюс минус -0,3 - 0,5 В. Соответсвенно из-за этого разброса, канальный импульс не будет от 1-2 мс, а будут расхождения. В некоторых случаях это важно.

И потом, первые четыре канала могут быть на джойстиках, а остальные просто потанциометры выносные на корпусе. Я так понял, что диапазон напряжения настраивается только на все каналы. А как быть если у меня на первых четырёх каналах, которые на джойстиках нужно 2-3в, а для остальных каналов которые просто на выносных потанциометрах, нужно 0-5в, так как у них полный ход ручки, от края до края.

Как быть в этом случае?

bodyn

У меня Футаба - крайнее положения ручек + триммеры получается даже больше чем 1в ( 0,8-1,2мс) а Футаба отличается узкой регулировкой (0,8мс вместо 1)
Так что думаю на других аппаратах пройдет нормально
По поводу разные напруги на разных каналах - проблематично
Но при желании можно сделать аппаратно - так я и поступил
Задача была сделать много каналов - и она есть
Можно конечно повторить и кодер с сайта - но там всего 5 проп + много наворотов которые зачастую редко используются( как для меня) + дисплей на который нет времени смотреть в режиме управления
И потом в предлагаемом нет претензии на суперность - просто не видел нигде разработки на МНОГО каналов - а мне было надо

Aleksey_Gorelikov
bodyn:

Можно конечно повторить и кодер с сайта - но там всего 5 проп + много наворотов

Кол-во пропорциональных каналов там ограничивается количеством входов ацп, а их восемь. Надо лишь чуть-чуть код поправить, и то, почти не думая, по аналогии;)

Хотя свое - оно приятней …

8 days later
radioham

мысль интересная - сделать калибровку каждого канала в отдельности
к примеру на 16F877 - там обьема памяти должно хватить
и на счет не думая - подскажите как ! ( аналогия только с пивом 😃
А я уж в железе попробую

ubd

к примеру на 16F877 - там обьема памяти должно хватить
и на счет не думая - подскажите как !

Не думая, это если язык знать. Так что изучайте ассемблер и делайте не думая… А в железе, готовое, каждый попробовать сможет…

Aleksey_Gorelikov
radioham:

и на счет не думая - подскажите как ! ( аналогия только с пивом 😃

Кусок из мач.с того проекта:

read_adc(Ailerons);
AD[0]=ADCW-ADmid[0];
read_adc(Throttle);
AD[2]=ADCW-ADmid[2];
read_adc(Rudder);
AD[3]=ADCW-ADmid[3];
read_adc(Elevator);
AD[1]=ADCW-ADmid[1];
read_adc(Rpop_contr);
AD[4]=ADCW-ADmid[4];

read_adc(Prop_contr_2); - добавили не думая, по аналогии с
AD[5]=ADCW-ADmid[4]; - с предъидущей строкой

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

read_adc(Batt); - если надо именно 8 проп. крутилок - то батарейку мерять останется нечем… что касается нее тогда - удалить.
U_bat=ADCW;
U_bat=U_bat*2;

if(!SW1)input[4]=-750; (*) - вот тут дискретные каналы. типа:если выключен
else input[4]=750; св1, то инпут(4) в минимальное положение, в противном случае - в максимальное. Выбираем канал, который из дискрета переводим в пропорциональный, и для этого канала удаляем такую строчку.
я выбрал для примера инпут(6) и удалил то, что касалось его.

for (i=0; i<4; i++)
{
if (AD[i]>0) input[i]=AD[i]*Kmax[i]/10;
else input[i]=AD[i]*Kmin[i]/10;
}

input[8]=input[contr[8].from[FLY_MODE]];
input[9]=input[contr[9].from[FLY_MODE]];

if (AD[5]>0) input[6]=AD[5]*Kmax[4]/10; - ну и тут вставили по аналогии, с
else input[6]=AD[5]*Kmin[4]/10; - тем что было ниже…
Т.е. переменную инпут() мы меняем не как было выше (*) - в зависимости от переключателя - дискретно в -750 или в +750, а пропорционально от напряжения, считанного при помощи ацп с “крутилки”. Кмин и Кмах - угловые коэфициенты пропорциональности, расчитываются при калибровке, их можно взять такие же как и в канале проп_конрол, если конструктив одинаков, что я и сделал в примере.

if (AD[4]>0) input[7]=AD[4]*Kmax[4]/10;
else input[7]=AD[4]*Kmin[4]/10;

Ну вот, вроде и получилось, не думая практически, как и обещал. Только копи-паст, и вроде бы все. Компилим, видим огибки - увеличиваем размерность массива ад(), ну может еще где в цыклах “до скольки шагать”… вроде бы тривиально.

blade
Aleksey_Gorelikov:

Кусок из мач.с того проекта:

Ну вот, вроде и получилось, не думая практически, как и обещал.

Насчёт “не думая”- это идея богатая 😃
А если всё таки подумать: сигнал с этого кодера- куда приходит?
Правильно, на декодер!
А ему, проклятому- нужна определённая длительность пачки да ещё, как не прискорбно- определённая пауза (для сброса в “0” )
Так вот, если одно из условий не будет соблюдено- декодер ничего не поймёт 😦
И если посчитать времена: 8 импульсов по 2,1 мСек (мах), семь пауз- по 0,3мСек= 16,8+2,1=18,9мСек
При ширине пачки (желательной) 20 мСек, синхропауза- где?
Или я чего то не понимаю?

ubd

Ширина пачки может должна быть 25 мс. Можно и больше, скажем 27мс. Так что хватает.

blade
ubd:

Ширина пачки может должна быть 25 мс. Можно и больше, скажем 27мс. Так что хватает.

Дело в том, что в обычных (с декодером на CD 4015) приёмниках цепь формирования импульса сброса настроена на 20 мС.
И в принципе, сделать в РРМ 8 команд с расчётом на любой приёмник- нельзя. Максимум что получается (для надёжной работы декодера)-7 команд.
Просто длины пачки не хватает для импульса сброса.
Так что, 27 мС можно сделать, но декодер придётся подстраивать под данное время 😦
Теорию вопроса можно почитать , набрав в Яндексе “школа дядьки глайдера”

Aleksey_Gorelikov
blade:

Насчёт “не думая”- это идея богатая 😃
А если всё таки подумать: сигнал с этого кодера- куда приходит?

Очевидно тудаже, куда и с тех двух кодеров, которые топикстартер выложил выше. И то, что он выложил - мотивировал тем, что ему надо именно 8, а в том, что есть “от фокуса”- всего 5. Причем он проявил интерес, как почти не думая можно поменять дискретные каналы на пропорциональные. Заметьте, функционал кодера не менялся, кодер от фокуса подразумевает 8 каналов, и не вижу разницы, чем заполняется регистр таймера - константами в зависимости от положения переключателя или переменной, зависимой от напряжения на входе АЦП.

Правильно, на декодер!
А ему, проклятому- нужна определённая длительность пачки да ещё, как не прискорбно- определённая пауза (для сброса в “0” )

Ну сохраните длительность синхропаузы то, чтоб конденцатор в цепи сброса 4017 зарядиться успел! Длительность пачки классическому ппм декодеру на 4017 вобще не важна! Важно условие, чтоб в паузе между канальными импульсами конденцатор в цепи сброса не успевал заряжаться до напряжения логической “1”. От того, сколько каналов в пачке - 3 или 8 - счетчику абсолютно пофигу, хоть разрядность увеличивайте и 16, 24,32 и тд делайте! Паузу только увеличьте, чтоб его сбрасывать, и радуйтесь!

И вобще, тут восьмиканальные кодеры обсуждают, а не проблемы сброса счетчика 4017!

radioham

Все правильно !
Я указанные кодеры пробовал на двух приемниках - E Fly и Euro - на обоих никакой подстройки не требовалось только вывел из регистра еще два канала ( было на 6 )
Все 8 четко определяются
Кстати есть кодер и на 10 каналов на 16Ф88 - и к удивлению тоже работает

ubd

Так что, 27 мС можно сделать, но декодер придётся подстраивать под данное время 😦

Ничего подстраивать не нужно. Проверенно.

Теорию вопроса можно почитать , набрав в Яндексе “школа дядьки глайдера”

Знаю я твоего дядьку Глайдера. Пробовал повторять его схемы. Работают, но криво. На проце получается намного стабильнее.
Если честно его схемы уже давно морально устарели…