flybrain. передатчик + приемник + автопилот. powered by stm32

Drinker

Ну вот, вас уже двое единомышленников.
Хочу намекнуть, что есть фатальная засада при совмещении осд и всего остального в одном камне.

project_Ikar
Drinker:

есть фатальная засада при совмещении осд и всего остального в одном камне

ARM должен спарвиться, походу… А вот из авр-ок, надо бы было делать мультипроцессор.

Drinker
project_Ikar:

ARM должен спарвиться, походу…

Дело не в производительности.

AlexSneg
Drinker:

Хочу намекнуть, что есть фатальная засада

На данный момент засаду я вижу только одну.
Если работать с прерываниями в лоб, то частота 15,5кГц это перебор. Паразитных работ со стеком слишком много. Проц занимается только входом и выходом из процедуры. И даже если он там находится не много, все равно паразитная составляющая получается слишком дорогой. Но с другой стороны по факту сейчас я имею постоянных 8 источников прерываний:

  1. сигнал готовности данных с гиры - 400Гц
  2. Готовность акселя - 50 Гц
  3. готовность компаса - 30 Гц
  4. Опрос статуса и данных с барометра - около 25 Гц
  5. цикл опроса и сбора данных с датчиков - 1КГц
  6. Видео ССИ - 15,5кГц
  7. USB запросы - тут по разному
  8. I2C шина

И тем не менее, все работает в принципе. И отрабатывает нормально горизонт с EKF на частоте 400Гц и не пропускает циклы.
На горизонте еще маячит отрисовка OSD , опрос и парсинг GPS и сам алгоритм принятия решения о стабилизации. Но ни одна из этих задач не критична к фазовым сдвигам начала и окончания ее расчета. Все эти задачи могу отрабатывать по остаточному принципу, пока проц вне прерываний.

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

baychi
AlexSneg:

критична к фазовым сдвигам начала и окончания ее расчета

Не вдаваясь в подробности STM архитектуры ( с коей незнаком), могу предложить такое тупое решение:

  1. Зная приблизительно момент наступления очередного критического прерывания, запустить таймер на время заведомо меньшее времени наступления критического события.
  2. При обработке прерывания от таймера запретить все остальные прерывания, кроме критического. Или еще тупее - программно опрашивая флажок прерывания, ждать критического события - что точнее?
    Понятно что будем терять ресурсы на дельте времени от вспомогательного прерывания до критического, но ИМХО это не должно быть большой потерей.
rual
baychi:

могу предложить такое тупое решение:

Решение нормальное, если доработать его, и по сработке таймера отмерять окно для ССИ, тем же таймером, по окончании окна восстановить разрешения. Иначе по неприходу ССИ из-за сбоя видео и тп, система встанет.

baychi
rual:

Иначе по неприходу ССИ из-за сбоя видео и тп, система встанет.

Само собой дополнительный контроль нужен. Не допускать потенциально бесконечных циклов - это азы программирования. 😃

rual

Вопросы к Дринкеру:

  1. У тебя есть отладочная плата на СТМ, чем её программируете и шьете?
  2. Вроде как твой алгоритм построен на кватернионах? Подскажи, если не тайна, как вектора компаса и акселя приводишь к кватерниону? Код не нужно, лучше на словах.
project_Ikar
AlexSneg:

На данный момент засаду я вижу только одну.
Если работать с прерываниями в лоб, то частота 15,5кГц это перебор. Паразитных работ со стеком слишком много. Проц занимается только входом и выходом из процедуры. И даже если он там находится не много, все равно паразитная составляющая получается слишком дорогой. Но с другой стороны по факту сейчас я имею постоянных 8 источников прерываний:

  1. сигнал готовности данных с гиры - 400Гц
  2. Готовность акселя - 50 Гц
  3. готовность компаса - 30 Гц
  4. Опрос статуса и данных с барометра - около 25 Гц
  5. цикл опроса и сбора данных с датчиков - 1КГц
  6. Видео ССИ - 15,5кГц
  7. USB запросы - тут по разному
  8. I2C шина

И тем не менее, все работает в принципе. И отрабатывает нормально горизонт с EKF на частоте 400Гц и не пропускает циклы.
На горизонте еще маячит отрисовка OSD , опрос и парсинг GPS и сам алгоритм принятия решения о стабилизации. Но ни одна из этих задач не критична к фазовым сдвигам начала и окончания ее расчета. Все эти задачи могу отрабатывать по остаточному принципу, пока проц вне прерываний.

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

Самая жара наступит, когда надо будет циферки и буковки формировать для осд, а также шкалы…

Drinker
rual:
  1. У тебя есть отладочная плата на СТМ, чем её программируете и шьете?

leaf maple mini у неё ардуино ide и даже с натяжкой совместимость по коду. Так что очень удобно.
Единственная проблема - долго стартует. Пришлось долго извращаться для квадрика - не успевал пвм сигнал на регули поступать после подачи питания.

rual:
  1. Вроде как твой алгоритм построен на кватернионах? Подскажи, если не тайна, как вектора компаса и акселя приводишь к кватерниону? Код не нужно, лучше на словах.

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

аксель:
ДЛЯ КАЖДОЙ ОСИ ПО-ОЧЕРЕДИ
вычисляем ожидаемые показания акселя из текущего кватерниона (который построен на шаге предикции на основе интегрирования гир) с учетом референсного вектора (X=0 y=0 z=1) далее коррекция, словами долго описывать ибо матричные операции.
магнитометр аналогично.

если есть желание - можно пообщаться в личке

AlexSneg
project_Ikar:

Самая жара наступит, когда надо будет циферки и буковки формировать для осд, а также шкалы

Не думаю. У меня преимущество в том, что оперативки валом. Я могу один буфер 10кб выделить под экран + еще такой-же под shadow буфер. В shadow неспешно рисуем, а потом через DMA скидываем картинку в основной буфер. Еще есть вариант отрисовывать куски спрайтов в памяти CСM. У нее преимущество, она работает на частоте ядра и не требует циклов ожидания, но зато она с DMA не работает. Вообщем, я не вижу никаких реальных проблем.

project_Ikar
AlexSneg:

Не думаю. У меня преимущество в том, что оперативки валом. Я могу один буфер 10кб выделить под экран + еще такой-же под shadow буфер. В shadow неспешно рисуем, а потом через DMA скидываем картинку в основной буфер. Еще есть вариант отрисовывать куски спрайтов в памяти CСM. У нее преимущество, она работает на частоте ядра и не требует циклов ожидания, но зато она с DMA не работает. Вообщем, я не вижу никаких реальных проблем.

А как решен вопрос видеомодулятора (схемы, которая вносит изменения уровня яркости в видеосигнал для графики), если не секрет?

AlexSneg
project_Ikar:

А как решен вопрос видеомодулятора

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

Syberian

миром правит Тимофей

Drinker:

Делают-то оно конечно делают.
Но до коммерческих образцов чета не доходят.

На этом форуме заикнись про коммерцию - сразу банят. А Тимофей процветает почему-то.

SkyWorker
Syberian:

На этом форуме заикнись про коммерцию - сразу банят. А Тимофей процветает почему-то.

Платите за рекламу - и никто никого не забанят. Я так понимаю.

smalltim
Syberian:

На этом форуме заикнись про коммерцию - сразу банят. А Тимофей процветает почему-то.

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

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

serj

Олег, тебе ж никто не запрещает продавать свои изделия на стороне, а обсуждать подробности алгоритмов- здесь. Как и мне тоже, впрочем 😃

Syberian

[deleted]
Cообщения с №275 и далее надо стереть как офтоп.
Прошу прощения у топик-стартера за разведение свинарника в чужой теме 😁

smalltim

Я не делал каких-то специальных телодвижений для этого, просто слежу за своими словами и не лезу на рожон. Может быть, админы привыкли, я ж здесь с 2007 года железки программирую. А, может быть, реально просто не хотят убивать тему и убирать меня с форума - пользователи останутся без поддержки. В любом случае, админам за это спасибо.

Drinker

Тихо, тихо. Я по коммерческими образцами имел ввиду законченные работающие изделия. Которые не вдаваясь в подробности алгоритмов и без танцев с бубном можно подключать и летать.
Здесь не о торговле идет речь.
Некоторые проекты тут громко начинались, но со временем их ветки умирали.
Особенно те где много было “Я, у меня, не вижу проблем и т.п”