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

AlexSneg

Посмотрел сколько стоит PD55008 😵
А там еще обвязку, согласования и прочее. Без приборов фиг сделаешь.
Нет уж. Лучше готовый усилок.

Но транзюк конечно шикарный, что тут скажешь.
А вы катушки на плате прямо развели. Как расчет делали или есть какой-то референсный дизайн?

AlexSneg
Drinker:

У bmp085 в плане высоты показания скачут более ± метр!

Даташит утверждает , что не более четверти метра. Чай не баллистическую ракету строим. Проинтегрируем, отфильтруем найдем среднее на промежутке. Абсолютное значение нам не нужно с большой точностью. Нам относительные замеры на мелких временных отрезках нужны, чтобы выяснить тенденцию и принять решение.
До практики с железкой осталась буквально одна неделя. Если не подойдет, найдем что-то другое.

Ваши варианты из дешевых и доставаемых?

Drinker
AlexSneg:

Даташит утверждает , что

Опыт использования есть? Сообщество этот бмр085 уже вдоль и поперек обсудило. Точность никакая. Докажите обратное.

AlexSneg:

В чем мое отличие от OpenRLS например?

Я тут подумал - чет не так. А при чем тут упоминание лрс в первом посте, если о километре идет разговор? Слон например там 25 км и прочие. Непонял чет.

PAF
Drinker:

Докажите обратное.

Вот это ни к чему! Нечего тут доказывать! На доказательства времени немеряно нужно. Да еще если и цель не доказательства поиметь, а иная, скрытая, то вообще глуповато будет выглядеть оправдывающийся! Кроме этого, Вы же не свой опыт используете, а осылаете к сообществу. Такие отсылки бесконечны.

Drinker:

Слон например там 25 км и прочие. Непонял чет.

AlexSneg:

Чай не баллистическую ракету строим.

😃 Человек же пояснил…

varvar
AlexSneg:

Цитата Сообщение от varvar Посмотреть сообщение такой дальнобойности, как у этой штуки Ну делай на RFM22. Она даст пару КМ в воздухе точно. Давно уже это проверено. Эта тема, кстати как-то вяло у автора продвигается. Но для меня это не близко. Опять народ на PPM тянят

чего то до меня не дошло - о какой теме речь? Если о заготовке - то она уже почти год отлетала, ну а что тема не поддержана - что поделаешь?
Второй вариант - на замену, как раз на RFM22B и планируется - уже пару дней, как модули пришли. Прочее еще подтягивается.
А где PPM? У меня все пакетами передается, с адресацией и контрольными суммами - как в школе учили 😃

AlexSneg
Drinker:

Точность никакая. Докажите обратное.

Вот первая же работа этого самого сообщества утверждает, что, если решать уравнения для расчета высоты на основе floating point переменных то достигается точность измерений 2 дюйма.
wmrx00.sourceforge.net/Arduino/BMP085-Calcs.pdf
Исследования проводились в апреле 2011 года.

varvar:

А где PPM? У меня все пакетами передается, с адресацией и контрольными суммами - как в школе учили

Сорри, я вторую ссылку открыл, а потом только первую смотреть стал. В новой теме вы уже вроде какна процессоре TI планируете.

varvar:

Второй вариант - на замену, как раз на RFM22B и планируется

RFM22 даст вам 2-3 км в воздухе.
Делайте, посмотрим, что получится. TI меня смущает. Много раз пытался у них сэмплы выциганить. Нет, они не отказывают, только за пересылку чипов, которым цена $4 хотят $100 за доставку. Короче, тема трудно доставаемой TI элементной базы в России станет большой проблемой при повторении вашего устройства. Я еще в вашей теме почитаю, конструктивно покритикую 😃

По теме…
Плату спаял. Сегодня подключил SWD попробовал программировать 405й камень. Все ОК. Попробовал DSP библиотеку. Компиляется, запускается пошагово дебаггится, внутри кристала выполняется.
Из печального. Есть подозрение, что я запаял BMP085 неправильно спозиционировав. Пришлось пока отключить его на плате. В понедельник пойду опять фен просить и исправлять это дело.
Но все остальное вроде работает. Буду завтра гонять, проверять как все устройства на шине I2C откликаются и передают данные. Еще GPS не запаял. EB500 скорее всего буду паять того как BMP085 переверну, надеюсь она ласты не склеила, пока я не обнаружил, что она неправильно запитывается.

Ну завтра приступаю к программированию, буду проверять все ли на плате откликается из устройств и работает ли правильно. Думаю успею проверить аксель, компас, гироскоп и флешку. Если все ОК, то начну OSD рисовать на экране телевизора. Пожелаю себе удачи.

Drinker

Замордовали чувака, исчез куда-то.
Или он осознал всю глубину глубин?

AlexSneg
Drinker:

Замордовали чувака, исчез куда-то

Вы о чем? Кто исчез?

baychi:

У ST есть демонстрационная платка очень похожая на Вашу

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

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

Drinker

Всё, пропал. Видемо афтора флаймозг отаковал.

AlexSneg
Drinker:

Всё, пропал. Видемо афтора флаймозг отаковал.

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

За это время сделал USB, наладил связь c PC. Пишу классы для работы с I2C. На одной шине 5 устройств и хочется , чтобы все работали независимо и не тормозили процессор. Здесь довольно много граблей в реализации. Все выходные отлавливал глюки в своем коде. Вчера вечером вроде пощло дело наконец, но надо еще тестить. Это не быстрый процесс. Гироскоп сейчас шлет данные с частотой 400Hz (в принципе позволяет 800Hz, но необходимость такой частоты пока для меня туманна), аксель выставил на 50Hz. Сейчас удалось добиться, чтобы опрос I2C по этим двум устройствам не занимал более 0,7% процессорного времени, еще 1,5% уходит на обработку USB прерываний. остальное пока в холостую вращается. Сейчас пытаюсь барометр подключить, там свои тараканы - он не умеет, например, работать в continuous mode…

PAF
AlexSneg:

Не лень такие посты писать?

Алекс, не будьте так жестоки!😦 На улице такой дубак!😵 Бедный, полумертвый тролль… Ему же много не надо. Он отогреется и уйдет. 😃
Я вон синичек тоже жалею… Подкидываю им семечек. А подзадержусь если, так они в окошко долбят, мол ты чё жаба, в теплом доме и полстакана семечек бедным синицам не найдешь?

AlexSneg

Барометр вроде заработал. Высоту показывает правильно, значит ласты не склеил, когда я его неправильно запаял. Несколько быстрых тестов показывают, что изменение на 0,5м дает расчет по барометру в районе 40 см +/- еще 10см. Расчеты сделал полностью во float значениях. Повторные измерения через несколько минут в той же точке высоты, далеко уходят от предыдущих, где-то +/- 2м. Но если рассматривать значения в пределах нескольких секунд, то дрейф совсем не большой. Температура конечно никак не соответствует окружающей среде, оно меряет что-то там внутри у себя от балды, для того чтобы ввести коррекцию в полином расчета давления. Результаты конечно еще очень сырые и предварительные. Надо будет накапливать и усреднять, а может и фильтрануть каким-нибудь фильтром. Ну это потом, главное, что барометр работает и исправен и на коротких временных интервалах все правдоподобно, а далее математика покажет. Осталось вобщем-то компас только запустить. В ближайшее время займусь эти делом.

Вопрос к знатокам I2C.
Короче задрала проблема, когда slave закушивает шину и SDA давит в 0. Случается спонтанно. Иной раз минут через 5 после запуска, а иногда часами можно ждать и так не вылезает. Судя по логам внутрисхемного отладчика такое происходит, когда слэйв не распознал в цепочке чтения NACK флаг, либо STOP. Соответственно на следующей попытке запустить I2C транзакцию, микроконтроллер валится с ошибкой Ardbitration Lost. И далее уже ничего не помогает. Slave держит SDA в нуле и все тут, только питание пересбрасывать. Вопрос, какие предложения будут по борьбе с этим делом? Сейчас акромя сброса питания всех слэйв устройств вижу только один выход - переключить ножку SCL контроллера в режим выхода с открытым стоком и тактировать до тех пор пока слэйв не отпустит SDA. Как отпустит, слать STOP. Затем еще пару импульсов на SCL для профилактики и мониторинга SDA. Если SDA не уйдет в ноль, значит вроде как отпустило. Какие еще варианты?

baychi
AlexSneg:

задрала проблема, когда slave закушивает шину и SDA давит в 0. Случается спонтанно. Иной раз минут через 5 после запуска, а иногда часами можно ждать и так не вылезает.

С одним и тем-же слейвом вылазит или с любым? Скорость уменьшать не пробывали (если это возможно)?
Или аппаратно шаманить: подвеску менять или 100 Ом на вход проца?

AlexSneg:

вижу только один выход - переключить ножку SCL контроллера в режим выхода с открытым стоком и тактировать до тех пор пока слэйв не отпустит SDA.

Да. Или переходить к полностью программному формирования I2C. Сам всегда генерил И2Ц программно (не на STMке), поэтому подобных затыков никогда не видел.

AlexSneg
baychi:

С одним и тем-же слейвом вылазит или с любым?

Пока вроде только с гирой такая шняга. Аксель не выказывает такого поведения.

baychi:

Скорость уменьшать не пробывали (если это возможно)?

Уменьшал до 100кГц. Проявляется существенно меньше. Ждать глюка приходится часами, но он все равно как-нибудь вылезет.

Подвеску не менял. Сейчас стоит 4,7кОм. Наверно попробую увеличить до 10к. Но слабо верится, что в этом проблема.

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

Есть у меня еще мысль, что где-то в коде START лезет, еще до того как STOP отработал. Буду пытаться локализовать через глобальный запрет прерываний и критические секции. Если таковой мой косяк имеет место, то я его отловлю.

Я, кстати на Меге32 строил синтезаторы частоты на TSA5511. Там I2C. Потеря арбитража вылезала и там иногда. Но там обращение происходит только по нажатой кнопке переключения частоты, а здесь 400 раз в секунду.

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

PAF
AlexSneg:

Пока вроде только с гирой такая шняга.

Может быть конкретный экземпляр мудрит? Попробуйте исключить такие подозрения.

SGordon

Вроде встречал на форуме людей победивших глюки в I2C для STM. Но кодом не поделились 😉) Если победите - не уподобляйтесь им !

AlexSneg
SGordon:

победивших глюки в I2C для STM

Я не думаю, что это глюк STM. Это скорее всего мои тараканы. Вчера убрал все прерывания и тупо по сигналу готовности читал данные с гиры. После чтения давал гарантированную паузу в 10 млс чтобы уж точно состояние STOP было принято. Глюки вроде перестал ловить. Ждал несколько часов, но все в порядке. Так что, скорее всего это мои кривые ручки 😃

SGordon

Ну пусть не глюк будет, пусть код неустойчивый… Теперь источник помех к линииям притыкать и смотреть - не зависнет ли рекомендовалось 😃

AlexSneg
SGordon:

Ну пусть не глюк будет, пусть код неустойчивый…

Нет, это не наш стиль 😉

короче небольшой отчетец.
Падения шины I2C имеют место таки быть. Иногда может раза 2 в минуту глукнуть. А иногда час лежит в тесте и хоть ты тресни, все как часы работает. А самое поганое, что отладчиком отловить такое почти нереально. Запустишь и сидишь ждешь когда оно там разродится…

Сейчас в тестах я непрерывно опрашиваю гиру с частотой 400Hz, Аксель с частотой 50Hz, компас с частотой 15Hz, Давление с вычислением частоты примерно 25Hz, термометр пока даже не пробовал, он пока неактуален.

Выяснены интересные “квази” зависимости глюка I2C:

  1. дома этот глюк происходит существенно реже, чем на компе на работе. Здесь я грешу только на питание через USB. Однако контроллер точно не пересбрасывается, и устройства тоже не пересбрасываются, это совершенно точно. Может какая-то помеха рушит I2C. Попробую приподнять и улучшить на плате что-нибудь на эту тему. Может вообще прямо реально запитаю от независимого аккумулятора

  2. Сейчас все работает на частоте 400кГц. В STM можно регулировать Duty Cycle , это длительность high и low уровня на шине Ш2С. Можно отношение 1:2 поставить , а можно 9:16. Так вот если я ставлю 9:16 падения раз 5 чаще чем когда я ставлю 1:2. Причем я считал длительности в nsec, оно при любом раскладе в ДШ укладывается.

  3. Чаще всего жопа наступает, когда я даю повторный рестарт для чтения байтов. И судя по всему устройство пропускает сигнал рестарта. пробовал STOP затем START , тогда оно пропускает STOP. Это я вообще понимать отказываюсь.

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

Из хорошего. Я весь мозг сломал при написании алгоритма, как восстанавливать на лету зависшую I2C шину. Результат - вот уже лежит несколько часов, работает, пишет что 5 раз свалилось и восстанавливалось, но все продолжает работать. Гыыы…
Теперь я понимаю, почему

SGordon:

Вроде встречал на форуме людей победивших глюки в I2C для STM. Но кодом не поделились

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

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

И еще, меня печалит странный сдвиг нуля в показаниях магнитометра. Реально оси отдают от +20 до -600 примерно, и где-то между этими показаниями прячется ноль. Никак такого не ожидал. У гиры и акселя такого не наблюдаю. И еще раз в пару секунд с магнитометра может проскакивает значение ну нереальное просто. Например X= -15325 вдруг ни с того ни с сего. Откуда такое на шкале в 2 Гауса? У этого прибора вся шкала от -1024 до + 1024 для 2ух гаусов. Такое ощущение, что магнитная перегрузка. Но в принципе радует то, что такие вещи не чаще 1 раза в сек, и они вообщем-то легко отбрасываются.