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

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 евро. Если есть желающие то пишите в личку, чем быстрее тем лучше завтра утром уже едут заказывать!

smalltim

Гуру, а как лучше организовать опрос магнитометров?

Сет-ресет-меряем?
Или сет-меряем-ресет-меряем и Vout=(Vset-Vreset)/2 ?

С какой частотой достаточно будет делать сет-ресет? 1 Гц? 0.1Гц? Один раз после включения?

foxfly
smalltim:

а как лучше организовать опрос магнитометров?

Ну, там все не так просто: www.nxp.com/acrobat_download/applicationnotes/AN00022_COMPASS.pdf

lodeworx
smalltim:

Гуру, а как лучше организовать опрос магнитометров?

Сет-ресет-меряем?
Или сет-меряем-ресет-меряем и Vout=(Vset-Vreset)/2 ?

С какой частотой достаточно будет делать сет-ресет? 1 Гц? 0.1Гц? Один раз после включения?

Ну эта формула для установочного вычисления offset- значения (OS), повниматочней 😉
сет-меряемVset, 2usec passed, ресет, меряем Vreset
OS=(Vset-Vreset)/2
Vout=Vreset-OS, меряем Vreset,Vout=Vreset-OS, меряем Vreset,Vout=Vreset-OS…
Период обновления OS в минутах. Как вариант один раз после включения. Не столь важно- всегда можно сделать чаще.
Но раз в секунду и меньше точно не нада. Успехов!

lodeworx
smalltim:

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

Так и есть. Реальный компас “бычий глаз” в виражах такое исполняет, да и в горизонте от вибрации и толчков может на 360 провернуться… Поэтому в полете используется ГПК(гирополукомпас)- выставляется на земле. Или ГМК- то- же, но с коррекцией от магнитного(XYZamr +angular rate sensor+инклинометр для начальной установки). В больших виражи считаются заранее, при составлении плана полета. При наличии на борту эвм, задача упрощается: горизонт-имеем курс (истинный и магнитный), скорость отн. земли. Имея УВС(указатель возд. скорости) считаем угол ветра и скорость ветра. Делаем небольшой доворот на ЗК (заданный курс) с фиксированным креном, режимом и высотой в течении одной секунды,например->в горизонт->получаем новый курс, а так- же угловую скорость разворота при заданном режиме. Полагаю, дальше все просто и понятно- задаем новое время виража(при параметрах, равных предыдущему) для выхода на ЗК. Никаких синусоид и полукругов. Это из штурманской подготовки…

Dikoy
smalltim:

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

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

Ну, вы, батенька, слишком много кушать 😃 ИМХО сначала просто бы горизонт удержать…

Про фильтр - я непного не о том. fizika.asvu.ru/page.php?id=100
Возьмем две прямоугольные пластинки из турмалина, вырезанные так, что одна из сторон прямоугольника совпадает с направлением оптической оси кристалла, и наложим их так, чтобы их оси совпадали по направлению. Пропустим через сложенную пару пластинок узкий пучок света от фонаря. Начнем поворачивать одну из пластинок вокруг пучка, оставляя другую неподвижной. Мы обнаружим, что след пучка ослабевает, и когда пластинка повернется на 90% он совсем исчезнет. При дальнейшем повороте пластинки проходящий пучок вновь начнет усиливаться и дойдет до прежней интенсивности, когда пластинка повернется на 180°.
Впрочем, одна пластинка такой эффект не даст, то есть нелинейность засветки врдли является следствием прохождения кристаллической решётки.

smalltim:

Гуру, а как лучше организовать опрос магнитометров?

Сет-ресет-меряем?
Или сет-меряем-ресет-меряем и Vout=(Vset-Vreset)/2 ?

С какой частотой достаточно будет делать сет-ресет? 1 Гц? 0.1Гц? Один раз после включения?

Отправил исходник.
Правильно “Или сет-меряем-ресет-меряем и Vout=(Vset-Vreset)/2”, причём на один канал, причём постоянно.

Опрашивать можно как угодно часто, главное чтобы магнитометр не перегрелся - токи SET/reset там нехилые… У меня стоит 4 раза в секунду. Когда автопилот пеглючило, было около 100 раз в секунду. Жужжал как шмель, но выжил 😃
Вообще, он забавно тикает при разряде.

Можно конечно SET/RESET делать раз в секунду, а мерить чаще, но ничего кроме некой экономии электричества не получим…

foxfly:

Ну, там все не так просто: www.nxp.com/acrobat_download/applicationnotes/AN00022_COMPASS.pdf

Это KMZ, я от них отказался - магнит срывало 😃
А у Тимофея HMC, насколько я знаю…