Телеметрия (часть 1)

Dikoy
dmk:

to Dikoy:
Останавливать процессор рекомендовано, но не обязательно, а при работающем процессоре переключение мультиплексора шумов не добавит. И мультиплексором вы можете играться как хотите, читайте хотя бы свою цитату из даташит (правда несколько другими словами): "The user is thus advised not to write new channel or reference selection values to ADMUX until one ADC clock cycle after ADSC is written.
По поводу постоянной времени. Внимательно читая даташит видим что общее последовательное сопротивление может быть от 1 до 100 кОм. Так что, время заряда будет от 14 нано секунд до 1.4 мкс (я думаю что при разном усилении входа(отличном от 1) и использовании дифференциальных каналов сопротивление может меняться). Но даже ваши 1.4 мкс легко влезают в 1 цикл АЦП при максимальной частоте (для АЦП AVR 15 килосэмплов в секунду или 65 мкс на преобразование).
ЗЫ. Спорить больше не буду, меня вполне устроило подтверждение Vad64. А то что Вы тут Самый Грамотный Спец доказывать не надо (даже если бы не было лениво), все и так здесь это знают. 😒

ЗЫ.ЗЫ. Пока писАл, с ответом опередили. Ну да ладно.

Блин, при чём здесь доказывать? Есть ПРАКТИКА. И эта практика говорит, что НАДО. Есть апнота, которая тоже говорит, что НАДО. И есть вы, с теорией. Я програмлю АВР уже 5 лет, начинал ещё с 89-х. Эволюцию их АЦП прочувствовал на своей шкуре, а так же АЦП других производителей, вплоть до 24 бит с нановольтными весами разрядов. Не у всех это явление описано, но у всех проявляется в той или иной мере.
Все параметры в ДШ описаны для конкретного случая, лабораторного. В некотрых ДШ над таблицами так и пишут, при каких условиях был получен параметр. Не надо огульно применять эти значение, не подумав и минуты.
Много у вас источников с сопротивлением ниже 10 к? нормальный делитель, это 50-100к. Вот тут вам атмел и скажет - мы расчитывали на 10к, а всё, что выше, проблемы ваши. Соединив два входа с Ucc и GND, по совету Vad64, мы действительно не увидим шума.
Вот выдержка из кодегенератора CV:
// Read the AD conversion result
unsigned int read_adc(unsigned char adc_input)
{
ADMUX=adc_input | (ADC_VREF_TYPE & 0xff);
// Delay needed for the stabilization of the ADC input voltage
delay_us(10);
// Start the AD conversion
ADCSRA|=0x40;
// Wait for the AD conversion to complete
while ((ADCSRA & 0x10)==0);
ADCSRA|=0x10;
return ADCW;
}

То есть как минимум 3 человека в мире (я, автор, программер CV) про проблему знают. Рекомендую задуматься.

Vad64
Dikoy:

Есть апнота, которая тоже говорит, что НАДО.

Апноту укажите, пожалуйста.

lodeworx
Vad64:

Апноту укажите, пожалуйста.

Мне тоже интересно. В моем случае, физически подключено вот так:
ADC4 не имеет отношения к дифф. каналам. Частота 125кгц, мега32…

// Delay needed for the stabilization of the ADC input voltage
delay_us(10);
А такие вещи,в программе, меня как-то пугают. А использует ли функция delay_us() таймер? Уверен нет- это макро на ассемблере, которое наверняка запрещает прерывания при входе в нее. Замечательно полезно!

lodeworx

Для общего обозрения, заморочился:
“относительный”, усредненный спектральный анализ для 1 результата после переключения на 4 канал, с гироскопом, 31 фрейм, ADC-125khz, переключение между 0 и 4 каналами 16x оверсемплинг:

для 16-го:

Шумит?! Все это понятно, про зарядку, импеданс… И что Atmel не очень- то в аналоговую часть углубляется…
С вариометром я AD7705 использовал- там в datasheet этому вопросу целая страница посвящена- стр.16!
Для общего дела, с наилучшими пожеланиями! 😃

foxfly
lodeworx:

Мне тоже интересно.
А такие вещи,в программе, меня как-то пугают.

Прямо как в старом анекдоте : пришел Пьер и все опошлил 😦
А как все хорошо начиналось : Smaalltim с год назад решил сделать устройство телеметрии.
И сделал!
Очень приличное, недорогое и работающее.
Одно это- достойно большого уважения !
Выложил информацию для всех.
И тут приходит боксер- теоретик, утверждающий, что по его (авторитетному и непререкаемомому) мнению- все это “вторичный продукт” (почитайте В.Войновича- узнаете расшифровку термина 😃 )
Батенька!
А где можно увидеть что то, сделанное Вашими ручками?
Или Вы действуете по театральному принципу: актера из меня не вышло, пойду в критики?

maloii

Народ подскажите как в WinAVR (плагин для студии) в ассэмблерной вставке указать адрес памяти (.org). Не могу таблицу знако генератора расположить по 100 кратному адресу памяти. В доки написано так 😦

Note that .org is available in gas as well, but is a fairly pointless pseudo-op in an assembler environment that uses relocatable object files, as it is the linker that determines the final position of some object in ROM or RAM.

. Решил переписать код с CodeVisionAVR на WinAVR, протестил один и тот же код компилированный в разных средах и WinAVR чутьли не в 2 раза шустрее. Вообще ассемблер в WinAVR странный, .db там нет, как я понял замена ему .byte.

smalltim

Рисую схему и печатную плату автопилота.
Пока остановился на следующем наборе входов и датчиков:

  • Вход с GPS модуля
  • 2 пары пирометров
  • 2-осевой компас

На плате предусматриваю еще, из главного:

  • 4 входа и 4 выхода РРМ
  • 16 мегабит памяти
  • USB интерфейс
  • 2 светодиода состояния
  • Разъем SPI для обновления прошивок платы телеметрии и обмена данными с платой телеметрии.

Из неглавного понадобится:

  • Сдвоенный ОУ для компаса, сдвоенный ОУ для платки пирометров.
  • Линейный стабилизатор 3.3В для питания потрохов

Ну, и мелочевка: кварц, резисторы, конденсаторы, разъемы

Плата автопилота должна уметь работать как автономно, так и в паре с платой телеметрии. Если плат работает автономно, то меню на экран выводить нечем. Все настройки - с компука, через USB.
Если плата автопилота работает в паре с платой телеметрии, то на плату телеметрии сгружается обновленная прошивка с поддержкой меню и появляется возможность
управлять настройками прямо в поле, с экранным меню.

Навигация по меню планируется с пульта:

  • вправо-влево-вверх-вниз - ручкой крен-тангаж.
  • Да-Нет-больше-меньше - ручкой РН

Настройки предполагаются следующие:

  • Установка уровней, при которых соответствующие индикаторы на экране начинают мигать: расстояние до базы, высота, напряжения батареи, и т.д.
  • Установка уровней, при которых включается автопилот: расстояние до базы, высота, напряжения батареи, и т.д.
  • Чувствительность системы стабилизации по крену/тангажу
  • Крейсерская высота на автопилоте
  • Крейсерская воздушная скорость на автопилоте
  • Максимальные допустимые углы крена-тангажа на автопилоте
  • Инверсия каналов и расходы на автопилоте

Если платы телеметрии нет, то плата автопилота должна стабилизировать высоту не по бародатчику, а по GPS, и вместо заранее заданной воздушной скорости поддерживать заранее заданный уровень газа.

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

Что еще забыл?
А, раз в секунду все параметры со всех датчиков сливаются в память платы автопилота и потом при подключении к компуку по USB могут быть слиты и просмотрены на компуке.
Если плата телеметрии отсутствует, то в память сливаются только те данные, что дают пирометры и GPS.

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

Поддержка готовых “голов” с пирометрами типа того, что продается на FMA, обязана быть. Только я для удобства и убирания необходимости калибровки на своей “голове” выведу еще и напряжение средней точки (VCC/2), от которой отмеряются выходы. Потому что она нифига не VCC/2 обычно, а “где-то рядом”.

lodeworx
foxfly:

Прямо как в старом анекдоте : пришел Пьер и все опошлил 😦
А как все хорошо начиналось : Smaalltim с год назад решил сделать устройство телеметрии.
И сделал!
Очень приличное, недорогое и работающее.
Одно это- достойно большого уважения !
Выложил информацию для всех.
И тут приходит боксер- теоретик, утверждающий, что по его (авторитетному и непререкаемомому) мнению- все это “вторичный продукт” (почитайте В.Войновича- узнаете расшифровку термина 😃 )
Батенька!
А где можно увидеть что то, сделанное Вашими ручками?
Или Вы действуете по театральному принципу: актера из меня не вышло, пойду в критики?

Как- то не в тему…

  1. Я тему ADC поднял на примере !СВОИХ! ошибок и наблюдений(вариометр, гироскоп для вертолета).
  2. Пусть Smalltim скажет, если я не хвалил OSD…и его самого!
  3. Только литературного кружка не хватает 😵
lodeworx

To:Smalltim. Вполне рабочая конфигурация- ни добавить-ни убавить.

  1. Память на карте или чип?
  2. Из-за чего принято решение на 3.3в перейти?
smalltim

Память - чип.

3.3В - из-за того, что на AT90USBKEY всё питается от 3.3В, и память максимум вроде как 3.6В. А так - непринципиально, 3.3В или 5В.

К гуру есть пока один только вопрос:
Можно ли обойтись 2-осевым магнитным датчиком, допуская погрешность по курсу в не строго стабилизированном состоянии? 3-х осевой правильнее, но для корректного проецирования вектора на север на плоскость нужно точно знать углы крена-тангажа. С пирометрами я никогда не узнаю их точно, несмотря на то, что стабилизировать самик/верт с пирометрами можно очень точно - нули я узнаю всегда 😃

Вы готовы мириться с погрешностью вычисления и отображения курса на базу до 10-15 градусов, когда углы крена и тангажа ненулевые? Точный-то курс автопилот всегда при необходимости сможет узнать, приведя крен и тангаж к нулям.

leliksan

Вы готовы мириться с погрешностью вычисления и отображения курса на базу до 10-15 градусов, когда углы крена и тангажа ненулевые? Точный-то курс автопилот всегда при необходимости сможет узнать, приведя крен и тангаж к нулям.

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

foxfly
lodeworx:

Как- то не в тему…

  1. Я тему ADC поднял на примере !СВОИХ! ошибок и наблюдений(вариометр, гироскоп для вертолета).
  2. Пусть Smalltim скажет, если я не хвалил OSD…и его самого!
  3. Только литературного кружка не хватает 😵

То, что Вы анализируете свои ошибки- весьма похвально!
Но вопрос был о другом: есть ли в Вашем творчестве успешные и работающие конструкции?
А ошибок при любом реальном действии- у кого хочешь (в т.ч. и у меня- вагон) 😦
Как раз против превращения реальной темы в пустую болтовню- я и выступаю 😃
Предвидя встречный вопрос к себе- отправляю Вам в личку ссылки на мои конструкции (дабы не быть обвиненным в саморекламе )

foxfly
leliksan:

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

С погрешностью “курса на базу” в 15%- точно на нее не попадешь. Достаточно посчитать треугольник с гипотенузой 2км 😦 Даже в поле зрения не прилетишь.
Но и биться скажем, за 0,1*- тоже смысла нет, поскольку раз в сек. приходит коррекция курса с GPS и самолет “доворачивает” в нужном направлении.
2 Smalltim: если ставить компас- то 3х координатный, ибо врет при крене 2х- страшно.
А с пирометрами- боюсь вы все бежите не туда: смысл FMA -два пирометра без усилительных каскадов (т.е. две термобатарейки DEXTER DST 60) включены встречно! А операционник нужен с нулевым дрейфом.(AD8552)
Тем самым они компенсируют температурный уход, и на выходе операционника- всегда (при равной “засветке” пирометров) сидит точно половина питания- 1,65 в.
Точность определения крена- около 3*

serj
foxfly:

С погрешностью “курса на базу” в 15%- точно на нее не попадешь. Достаточно посчитать треугольник с гипотенузой 2км 😦 Даже в поле зрения не прилетишь.
Но и биться скажем, за 0,1*- тоже смысла нет, поскольку раз в сек. приходит коррекция курса с GPS и самолет “доворачивает” в нужном направлении.

Следует учитывать метод наведения.

Например, при простейшем методе “погони” когда курс на базу расчитывается каждый раз с приходом новых данных ( а у нас координаты раз в секунду идут) при ошибке и 20 и30 градусов точно на базу он не попадет, но круги метров 300 описывать будет 😃

правда траектория будет полукругом 😃

Psw
smalltim:

Вы готовы мириться с погрешностью вычисления и отображения курса на базу до 10-15 градусов

15 градусов - это ±7 или ±15* ? Ну то есть речь про размах или про модуль ?

leliksan:

Для возвращения на базу врукопашную вполне достаточно знать примерное направление,

foxfly:

С погрешностью “курса на базу” в 15%- точно на нее не попадешь. Достаточно посчитать треугольник с гипотенузой 2км

Считать гипотенузу на мой взгляд не имеет смысла - потому как при приближении к базе (а оно будет приближаться при ± 15* ошибке) гипотенуза тоже будет уменьшаться.
Вот лично мне думается что когда в пара прыге на визуальной ориентации (и “автопилот” в голове которая нифига не калькулятор) 2-3 км удаление от базы с высотой 1000-1500 м (у моего купола равновесная вертикаль около 6 и горизонт около 17 м/сек) ошибка 15* - да её (ошибку) ваапще визуально не заметишь - поправка на ветер и болтанка купола значительно выше, да и невозможно постоянно глядеть “на базу”, определяя направление - в воздухе полно доп факторов которые тоже внимание отвлекают, соответственно “поправки” в курс вносятся не очень часто, раз в 5 сек быть могет на высоте. Перед землёй на 100 и менее метрах - естественно всё внимание переключается на “базу” 1х1 метр к примеру ну или коридор 1х50 метров - поправки в курс вносятся чаще - около 2 раз в сек. И не надо забывать что “визуальный курс на базу” (который я определяю в парапрыге) и “курс вектора реального движенияна относительно земли базу” (который определяет ГПС - две большие разницы. А большинство парапрыгеров приходит на базу без ГПС при наличии видимости - и справляются ведь и мотора не имеют ваапще и на второй круг уйти ещё никому не удавалось. Лично я свою глазомерную точность оцениваю ±15 или даже более градусов. Главное идти в направлении базы, хотя бы в квадрант базы (90* или ±45 ошибки), согласен. Увеличение ошибки приведёт только к увеличению пути полёта, но цель всё-равно достигнется. А вообще SmallTim как любитель численного эксперимента мог бы и самостоятельно проверить “условие сходимости ряда” - при какой величине ошибки модель перестанет приходить на базу. Мне кажется что это будет ошибка более ± 90 град - когда мы перестанем приближаться к базе в полёте. А “комплексировать” магнитный и ГПС курсы придётся по разному при достаточно малом и достаточно большом удалении от базы - приоритеты должны поменятся.

foxfly
Psw:

15 градусов - это ±7 или ±15* ? Ну то есть речь про размах или про модуль ?

Считать гипотенузу на мой взгляд не имеет смысла .

Я ничего “на глаз” не оценивал.
Все описанное проверялось сначала- ездой на машине, затем- плаванием на модели катера, которая дает условия, максимально приближенные к полету (кроме изменения высоты и возможности потери улетевшего аппарата) в том числе и снос от ветра.
Только после всего этого- леталось на самолете…
А умозрительные вычисления при проверке на местности столько “ляпов” дают- лучше и не пробовать 😦

leliksan

По моему, погрешность 15% и 15 градусов совсем не одно и то же.
С уважением.

smalltim

Погрешность в экстремальных случаях может быть до 90 градусов.
Но ничего, с трехосевым магнитометром и пирометрами, думаю, будет полегче.
Проблема пирометров в том, что с ними из разницы в сигналах со смотрящих вправо-влево и вперед-назад пирометров трудно высчитать точные углы крена и тангажа, ибо разница ведет себя хитро. С возрастанием угла разница возрастает, а на нулевых углах она нулевая, так что система стабилизации будет работать на ура.
В то же время разница нифига не прямо пропорциональна углу. Но посчитать углы более-менее точно всё-таки можно. Надо взять и проинтегрировать распределение чувствительности датчика в конусе его поля зрения по, скажем, ста сегментам от 0 до 100 градусов, и составить табличку в формате “разница-угол”, где разница - нормализованный (приведенный к интервалу от -1 до 1) разностный сигнал с пары пирометров, а угол - получаемый угол тангажа-крена.
Но корректно работать это всё будет только если известно, как нормализовать текущую разницу сигналов с пирометров, а для этого надо знать, какой уровень сигнала будет, если один пирометр видит только землю, а второй только небо.
Подозреваю, что и в том числе для этого продвинутые системы на пирометрах имеют третью пару пирометров, где один смотрит вниз, а второй вверх.

Dikoy
foxfly:

2 Smalltim: если ставить компас- то 3х координатный, ибо врет при крене 2х- страшно.

Подтверждаю. У меня сейчас двухосевой - планировалось обмерять его в горизонтальном (по БСО) положении. При таком раскладе работает, но зависимость крена/указуемого_курса значительная и нелинейная.

lodeworx:

А такие вещи,в программе, меня как-то пугают. А использует ли функция delay_us() таймер? Уверен нет- это макро на ассемблере, которое наверняка запрещает прерывания при входе в нее. Замечательно полезно!

А вы хотите, чтобы автоматический генератор занимал таймеры по своему усмотрению? “Замечательно полезно!”
Мы спорим о необходимости задержки между переключением канала и стартом преобразования, так? Граждане утверждают, что за нас всё решили и в любых условиях атмел сам догадается, что делать. Ибо его умные дядьки проектировали. При чём тут таймер?

smalltim:

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

Тот, что смотрит вниз, может смотреть на нагретую крышу дома, а вверх - на единственное в небе облако. И всё…
Думаю, это сделано просто для того, чтобы не утруждать юзера калибровками. Включил - оно само отстроилось. И не надо крутить самолёт в руках.
А нелинейность, видимо, вызвана углами преломления фильтра. Галий, как и турмалин, и кварц, имеет явно выраженную кристаллическую решётку и проождение лучей от угла неодинаково. + отсутствие оптической системы в пирометре. Это я в инете начитался 😁

А вообще, зачем нам углы крена? При влючённом стабилизаторе крена развернуть самолёт можно рулём направления, блинчиком. То есть автопилот будет держать крен автоматически, что позволит ему же управлять рулём направления не заботясь о завалах. Автопилот такого типа проще в разы, чем автопилот, обеспечивающий виражи. Насколько знаю, автопилоты некоторых учасников так и работают.

smalltim

>А нелинейность, видимо, вызвана углами преломления фильтра

Фильтр там - плоская пластина, углы преломления не роляют.

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

>А вообще, зачем нам углы крена? При влючённом стабилизаторе крена развернуть самолёт можно рулём направления, блинчиком. То есть автопилот будет держать крен автоматически, что позволит ему же управлять рулём направления не заботясь о завалах

А вот у меня на Изике нет элеронов, я хочу автопилот с виражами 😃

maloii

Есть возможность заказать чип для отрисовки MAX7456 www.maxim-ic.com/quick_view2.cfm/qv_pk/5516 . Стоимость 15 евро. Если есть желающие то пишите в личку, чем быстрее тем лучше завтра утром уже едут заказывать!