OSD на ATmega1281

mandigit
msv:

Может все же кто придумает эргономичное решение, как сделать на пульте с одним трехпозиционным переключателем и двумя двухпозиционных:

  1. Переключение режимов АП (ручной, стабилизация, АП). (Очевидно трехпозиционником).
  2. Установка нуля пирогоризонта.
  3. Установка нуля выходных каналов после триммировании модели.

A - трехпозиционный переключатель, B,C - двухпозиционные
A=0,B=0,C=0 - нет активности (далее обозначаем 000)

000->010 (ручной)->011(нуль пирогоризонт)
________________->110->111(нуль триммер)
000->100->110 (стабилизация)
000->200->210 (АП)

Aleksey_Gorelikov
msv:

Проблема в том, что для получения n независимых каналов интервалы канала ppm уменьшаются со скоростью 2^n (те. очень быстро…). А малые интервалы требуют тщательной калибровки декодера и увеличивают вероятность ложного срабатывания.

Ну и симбиоз твоего старого и мною предложенного варианта. Сделай на передатчике сколько угодно переключателей, хоть каждый на отдельный режим. А передавай и разбирай - последовательность изменений ппм от максимума- до минимума (посути, что у тебя сейчас и делается). Пусть передатчик сам эти последовательности генерит, а не ты тумблером туда-сюда наяриваешь.
При этом интервалы канала весьма широкие и можно их однозначно трактовать кодеру, ты не путаешься сколько раз тумблер переключал…

8 days later
msv

Может кому будет любопытно, как первый полет с земли выглядел… (пленку наконец проявили… 😃 то бишь диск финализировали…)

Иван
msv:

Да, триммировать АП хотелось бы иметь возможность именно в полете. Какой микшер сделать с двух дискретных переключалок на один канал, что бы осталась однозначность: 1я переключалка-три режима полета (ручной, стабилизатор, АП), 2-я - триммирование? Что-то вроде рядом мысля, но никак не досоображу…
//–
Про связку ДУС/пироголова. Что то дошло, что такая рекурсивная стабилизация, которую предлагал в предыдущем сообщении, да еще с потерей постоянной составляющей от пироголовы, вероятно потребует нехилого мат.обеспечения для оценки сходимости и устойчивости системы…

Есть предложение, порядок такой - летим, подрехтовали рули, щёлкнули комбинацию, борт запонил текущие значения как нулевые и от них пляшет, вариант?😒

msv

Ну собственно так все и есть… Вопрос был какую бы комбинацию щелкнуть… 😃
Пока не стал особо мудрить- смикшировал трехпозиционный переключатель (режимы АП) 80% с двухпозиционным (команда) 20% на один канал. Получилось шесть равноудаленных вариантов. А логика при декодировании сделал такую: если в режиме стабилизации щелкнуть доп. переключалкой- установка нуля горизонта (делается один раз перед полетом на земле), если в режиме ручного управления- записываются разница текущих значений каналов от калиброванных как триммеры. Еще можно что-то делать в режиме автопилота, пока резерв…

msv

Решил блох маленько половить… Всем хорош датчик горизонта, но… уже давно заметил, что если при включенном видеопередатчике поднести руку к шлейфу от датчика к плате телеметрии (0,+5, два выхода с датчика) (или просто даже подвинуть шлейф на сантиметрик)- горизонт заметно уплывает. Думал что это наводки на входе телеметрии от шлейфа (хотя там конечно емкость стоит). Но оказалось, что это с самого датчика так дрейфует сигнал на выходе. Колечко перед датчиком на шлейфе не помогло… Есть подозрение, что именно на входе операционника датчика какое-нибудь прямое детектирование происходит. Перерисовал схему датчика:

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

Dikoy
msv:

Конечно с коэффициетом усиления 1000, можно всяких чудес ожидать

Вот по этому я и перешёл на цифру… Шлейф от сенсоров 30 см, из которых 10 в башне толкающего винта вперемешку с силовыми проводами, и хоть бы хрен.
А если отношение цепи ОС ОУ уменьшить раз так в 10? Поставить 100 ом и 100к.
Если у ОУ на входе полевики, а не биполярники, а всё на то указывает, то снижением сопротивления помехи можно сбить ниже порога шума АЦП.
Кондёр тут мало поможет, ИМХО. Вход и так имеет затворную ёмкость, которая и набирает потенциал от свободной энергии. Добавление ёмкости только ухудшит ИМХО. А детектор там могут образовывать защитные диоды по входу +.
Ещё, в порядке бреда, зашунтировать датчики керамикой. Дабы коротнуть переменку.

msv

Вот по этому я и перешёл на цифру…

У Вас бюджет не ограничен… 😃
Ну с помехами от силовых проводов еще более-менее получается бороться… А вот с 0.5W 1гГц… Уже жаловался, что так и не победил наводки на термодатчик несмотря на глухое экранирование…

А детектор там могут образовывать защитные диоды…
…Дабы коротнуть переменку.

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

Вход и так имеет затворную ёмкость

Тут, дальше в лес… Вдруг обнаружил, что при включении передатчика начинают подзуживать все сервы. Даже в FailSave, когда телеметрия гонит абсолютно неизменные значения! Если бы сходил с ума тайминг меги, это было бы видно на картинке OSD, но там все чисто… Значит опять наводка на шлейф и на вход сервы… Колечки не помогают, вообще мне показалось, что на гГц ферриты не эффективны. Если подносить руку, сервы маленько гуляют, а одна совсем при определенных положениях сходит с ума… Самое забавное (и весьма радует), что передатчик абсолютно не влияет на чутье приемника и GPS…
В общем принял героическое решение полностью менять компоновку и разместить передатчик максимально далеко от всей остальной электроники на конце консоли крыла. Шлейф к нему перед самим передатчиком скрутить в катушку без всякого феррита. Очень большое желание разместить антенну тоже в крыле, дабы не вносить аэродинамическую асимметрию. Может кто знает, как там с диэлектрической проницаемостью у потолочки и скотча?
ЗЫ Не сгорел бы мотор, так бы и летал себе спокойненько не обращая внимания на блох… А тут от скуки, всякой фигней приходится заниматься… 😃

Dikoy
msv:

У Вас бюджет не ограничен…

???
search.digikey.com/scripts/DkSearch/dksus.dll?Deta…
от 100 по 8 баксов, это 12 головок всего. В минус ОУ, кучка пассива, кое что из которого должно иметь хотя бы 1% допуск, плата уже односторонняя. Примерно тож на тож.
Посмотрите на второй автопилот от FMA - они тоже цифру поставили и судя по всему эти search.digikey.com/scripts/DkSearch/dksus.dll?Cat=…

msv:

поэтому была робкая надежда конденсатором прямо на ножке операционника ее прибить

А шунтирование сенсоров кондёром помогло?
Я бы поставил 0,1 и что-то около 470пФ в параллель.

Перепаять цепочку на ОУ не пробовали? Хотя бы ради эксперимента.

msv:

Я и надеялся, что наводки идут на термодатчики,

ИМХО проблема не в наводке, и 1 ГГц прекрасно душится ёмкостью входа ОУ, а проблема в свободной энергии. Той, которой раньше питались детекторные приёмники с детекторами из угля 😃 Она создаёт потенциал на входе. Т.к. природа у неё переменная, то задушить можно капацитором. Только ёмкость надо подобрать, в GPS приёмниках обычно ставят параллельно 33 пФ и 470 пФ, там 1,5 ГГц. Вместе с ёмкостью входа режет наводку на раз.

msv:

Колечки не помогают, вообще мне показалось, что на гГц ферриты не эффективны.

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

msv:

Вдруг обнаружил, что при включении передатчика начинают подзуживать все сервы.

А вот тут достатиочно зарубить добротность антенны (провода) включив последовательно с сигналом резистор. Я до 47к вставлял, серва сигнал принимает. Но достатчно 470-510 ом. Разумеется лучше у самой сервы.
Более радикальный метод - 510 впослед и 100к к земле. У самой сервы. Чтобы рассосать потенциал более чем достаточно.
Наконец, если серва управляется АВРкой, можно прям на плате телемерии поставить резюк 510ом (или больше, определить экспериментально пороговое значение) к земле . Чтобы снизить выходное сопротивление.
Но даже тут причина не в частоте передатчика, а в его мощьности. Свободная энергия поднимает порог КМОП входа сервы.
В общем, победимо, надо просто попробовать разные варианты.

msv

Не стал взрывать себе моск в попытках связать термодинамику (свободная энергия вроде-бы оттуда?) с электромагнитной наводками… Убедился что уже на расстоянии 30см передатчика от всего остального оборудования все барабашки пропадают и буду в крыло передатчик монтировать. Фильтр-пробку, как и хотел, сделал простой катушкой, работает хорошо.

Dikoy

Не, это то, что остаётся после детектирования радиосигнала. Ток, который возникает в антенне. Чтобы наловить достаточно энергии для запитки наушников антенна должна быть несколько десятков метров в длину, но т.к. у вас передатчик рядом, то длины проводов хватает.
Вот, по теме:
electroscheme.org/498-radiopriemnik-s-pitaniem-ot-…
freeenergyengines.ru/svobodnaya-energiya-v-sovreme…

1 month later
msv

Вспомнил, что этой ветке последнее видео так невесело закончилось. Можно подумать, что не этом проект и закончился… Ан- нет! Давно уже летаю, правда далеко и высоко пока не рискую… Вот крайний полет:

До этого регулятор автопилота был только с “П”-ветвью. Выводил на базу довольно точно, но как-то раздражало, что все время недоворачивает на цель. Добавил “И”-ветвь и появилась вполне предсказуемая раскачка. Инерция самолета, запаздывание GPS-данных, время интеграции И-ветви… Что-то не соображу как все это увязать, и демпфировать раскачку.

msv

Люди, а кто как борется с дрожанием камеры? Камера у меня поворачивается только по вертикали прямым приводом от сервы. Во первых у сервы небольшой люфт, и от вибрации двигов камеру потряхивает. Во вторых серва сама в некоторых положениях зудит. Причем если механически пытаться демпфировать для уменьшения дрожания от первого пункта, то растет проявление второго…
Или это лечится только какой-нибудь дорогучей цифровой сервой?

13 days later
a_freeman

msv

Расскажите, плз, как у Вас устроен видеовывод - в частности те самые “золотые” три инструкции 😃 и сопряжение ассемблера с Си

Кста, схему можно немного удешавить/упростить - видеозахват замечательно работает со встроенным в Мегу компаратором.

msv

Код вывода строки сделан “в лоб” и не отличается особым изяществом:

;
;gNumLine++
    MOV  R26,gNumLineL
    MOV  R27,gNumLineH
    ADIW R26,1
    MOV  gNumLineL,R26
    MOV  gNumLineH,R27
;if(gNumLine>=TOPLINE_SCR && gNumLine<TOPLINE_SCR+VSIZE_SCR)
    CPI  R26,LOW(TOPLINE_SCR)
    LDI  R16,HIGH(TOPLINE_SCR)
    CPC  R27,R16
	BRLT _end1
    CPI  R26,LOW(TOPLINE_SCR+VSIZE_SCR)
    LDI  R16,HIGH(TOPLINE_SCR+VSIZE_SCR)
    CPC  R27,R16
	BRLT _con1
    BRNE _end1
    LDI  R16,1
    MOV  f_work,R16
_end1:
	RJMP _USART_RX
; pause
_con1:
    LDI  R16,WAIT_START_OUT
_pause:
	DEC	 R16
	BRNE _pause
; out string
  	MOV	 R27,gScrBuffPointH
	MOV	 R26,gScrBuffPointL
    LDI  R16,BYTES_FROM_STRING
    LD   R18,X+
_out_ch:
    MOV  R17,R18
    OUT  V_PORT,R17	;1
	NOP
	NOP
	LSR	 R17
    OUT  V_PORT,R17	;2
	NOP
	NOP
	LSR	 R17
    OUT  V_PORT,R17	;3
	NOP
	NOP
	LSR	 R17
    OUT  V_PORT,R17	;4
	NOP
	NOP
	LSR	 R17
    OUT  V_PORT,R17	;5
	NOP
	NOP
	LSR	 R17
    OUT  V_PORT,R17	;6
    LD   R18,X+
	LSR	 R17
    OUT  V_PORT,R17	;7
	LSR	 R17
	DEC  R16
	NOP
    OUT  V_PORT,R17	;8
    brne _out_ch
    LDI  R17,0
    NOP
    OUT  V_PORT,R17	;8
    SBIW R26, 1
    MOV	 gScrBuffPointL,R26
    MOV	 gScrBuffPointH,R27
a_freeman

Пасиб.

Если здесь:
LDI R16,BYTES_FROM_STRING
LD R18,X+
убрать плюс, то в конце можно будет убрать всю инструкцию:
SBIW R26, 1
Мелочь, а приятно )

Пишу в IAR, и всю голову поломал - как красиво передать ассемблерной части адрес на видеобуфер.
Как у вас это получилось - так и не понял. Или gScrBuffPoint задан вручную? (как и размещение видеобуфера в опертивке)

msv

…как красиво передать ассемблерной части адрес на видеобуфер

Не уверен, что это красиво, но у меня так:

register unsigned char* gScrBuffPoint @5;
#asm (".def gScrBuffPointL=R5")
#asm (".def gScrBuffPointH=R6")

Инициализация в прерывании от КСИ:

interrupt [INT0] void ext_int0_isr(void)
{ // КСИ
gNumLine=0;
gScrBuffPoint=gScrBuff;
}
21 days later
a_freeman

Что-то и топикстартер молчит и окружающие не интересуюццо…

Появилась мысля как увеличить точность измерения тока - ставим в меге источником опорного внутренние 2.56 вольта - и при нулевом токе (через датчик) считываем значение порядка 950.
И работаем на отрицательной ветви токового датчика - т.е. при растущем токе значение с АЦП будет падать до нуля.
Даст повышение точности в два раза.

/*
еще немного мыслей просто из записной книжки:
Ток и напряжение лучше мерить тинькой в режиме ADC noise reduction, с полной обвязкой АЦП и как можно ближе к датчику - результат будет чище и лучше.
Работаем на пониженной частоте АЦП.
Имеет смысл вставить RC фильтр от помех между датчиком и мегой
Датчик чувствителен в магнитному полю - ставим рядом катушку, включаем, измеряем ток, отключаем, измеряем ток, усредняем два измерения - это неопробовано, неизвестно что из этого получится, неоправданно…
*/

msv

Да, народ не слишком активен… Может по результатам сезона выложу hex (от НАСA похоже не дождусь предложения на приобретение проекта 😃). Может активность увеличится… Хотя финальной печатки нет (то что у меня, уже можно считать макеткой+кучка платок апгрейда, слишком много поменялось, от начальной идеи), поэтому на повальный интерес по повторению не рассчитываю…
Сейчас играюсь с управляющими алгоритмами автопилота. Правда пока чем мудренее алгоритм, тем обычно хуже все в реале, хотя в модели на ПК, все отрабатывается идеально. Видать слишком “хороша” модель, но сделать ее более правдоподобной, задачка посложнее чем саму управляющую программу… 😃
Добавил режим, похожий на настоящий АП- если в режиме стабилизации щелкнуть доп. тумблер- АП начинает удерживать текущий курс и высоту (такого вроде бы нет у “конкурентов”). При выключении этого режима, устанавливаются нули сенсоров горизонта (для этого, автокалибровки, чес. говоря этот режим и задумывался).
Еще не испытал…

a_freeman:

внутренние 2.56 вольта - и при нулевом токе (через датчик) считываем значение порядка 950.
И работаем на отрицательной ветви токового датчика

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

a_freeman:

Имеет смысл вставить RC фильтр от помех между датчиком и мегой

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