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

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 раза в сек, и они вообщем-то легко отбрасываются.

vic2rus
AlexSneg:

Например X= -15325 вдруг ни с того ни с сего. Откуда такое на шкале в 2 Гауса? У этого прибора вся шкала от -1024 до + 1024 для 2ух гаусов.

боюсь вмешиваться, не такой я и программист, но - 15325(10) это 1100010000100011(2), очень симметрично. и если разделить ее по центру (не скажу пополам) то в получится 100011(2) что равно 35(10). а какие другие значения обычно бывают?

AlexSneg:

принципе радует то, что такие вещи не чаще 1 раза в сек

не вижу повода радоваться в принципе, пока не ясна причина и как далеко она может иметь свое действие

AlexSneg
vic2rus:

а какие другие значения обычно бывают?

разные, главное, что они переваливают за мин-макс диапазон, и явно не достоверны в этот момент.

vic2rus:

пока не ясна причина и как далеко она может иметь свое действие

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

AlexSneg

Есть радостное известие. Глюк I2C побежден. проблема была не в софте, а в харде. Питание через диод шотки не канает. На нем падает 0,3 В. А если еще USB отдает не 5В, а 4,7В, то вообще наступает трындец. Короче диод убрал, питане стабильное 3,3В на всех устройствах. Уже 6 часов работает сегодня без перерыва с замкнутым диодом, ни разу I2C не глюкнула. Все работает как часы.

вот такие пироги. 😉 но припарку программную для восстановления I2C на лету все равно в код добавлю на всякий случай.

P.S. Из Китая едет передатчик с видеокамерой NTSC. Буду теперь OSD готовить. Кстати у народа в основном какие камеры? PAL или NTSC ???

baychi
AlexSneg:

Питание через диод шотки не канает. На нем падает 0,3 В. А если еще USB отдает не 5В, а 4,7В, то вообще наступает трындец.

Странно. Сам проц и перферия все равно 3.3 В кушает. Хорошая LDO-шка должна от 4 В работать. Может все-же на электролитах слишком съэкономили?

AlexSneg:

Кстати у народа в основном какие камеры? PAL или NTSC ???

PAL всречается намного чаще. Но все правильные OSD автоматически поддерживают оба стандарта.

AlexSneg
baychi:

Может все-же на электролитах слишком съэкономили?

На LDO падает 0,9.
Нет. дело не в электролитах. Достаточно замкнуть диод на моей схеме. 3В недостаточно, нужно 3,3В. Тогда зависоны исчезают. В результате теперь я имею проблему как сохранить универсальное питание, чтобы и от USB и от борта работало. Либо питание до диода поднимать на 0.3, но таких готовых стабилизаторов нет, либо… х.з. Короче, предложения есть так чтобы тотально печатку не переделывать? Была мысль вместо диода воткунуть резюк ом на 5 чтобы выровнять потенциал питания, если одновременно и борт включен и USB воткнуто. Но чего-то мне это кажется кривовато.

baychi:

Но все правильные OSD автоматически поддерживают оба стандарта

Блин, ну у меня PAL только с фотика есть. Или придется старый VHS видик реанимировать для тестов, не знаю жив ли зараза.