Создание собственной системы стабилизации
у YS-X4 тоже внешний АЦП и у AutoQuad и Мультипилота есть два ИМУ различных на аналоговых датчиках, на всем известных IDG и ISZ и на дорогиж гирах и у всех внешний АЦП…
Еще говорят у МПУ есть режим трансляции компаса из собственной и2ц во внутренние регистры - был бы отличный вариант совсем без и2ц.
Есть в исходниках multiwii, можно подсмотреть, правда там и сам MPU работает через I2C…
Ковыряюсь в AeroQuad32 никак не могу понять, AeroQuad - ардуино, но 32 не могу разобраться, поддерживаемые платы f1 f4 DiscoveryF4 и FF - та которую Таймкоп в назе32 первой версии превратил, код довольно аккуратный, но блин под что? попробовать в само собранную среду на eclipse запихнуть ?
все данные ПДП разложит в ОЗУ
Кстати… (сейчас подошел к датчикам) стоит ли мне связываться с ПДП ? По моему должно быстрее работать, т.к. отвлекать проц. совсем не придется (но опыта НЕТ и поэтому сомневаюсь… грабли, какие ?).
Т.е. прерывание от гиро " толкает" ПДП ? или SPI ?
Как выстроить алгоритм по Вашему?
Ковыряюсь в AeroQuad32 никак не могу понять, AeroQuad - ардуино
Она кросплатформенная правда это кросплатформенность на дно их тянет
Она кросплатформенная
ага, надо ардуино 1 и выше, maple ide в пролёте, а потом спрашивает - а где ваши STM?, а где бутлоадер в проце? а есть там только на ф103, ну и т.д. буду ковырять дальше…
Либы там маполвские переписанные под F407. Все идет в дистре исходников. Компилер CodeSourcery ARM EABI (2011.09-69) новый криво компилирует, бутлоадер, да смотря чем заливать прошивки собираешься, могу скинуть оригинальный бутлоадер. Да кстати все что не 407 и не ардуино 100% поддержки нет.
надо всё-таки под eclipse (ide с поддержкой мапловских библиотек) перетянуть - будет счастье…
Гробага будет скорей всего, надо эклипс настроить на CodeSourcery компилер
Т.е. прерывание от гиро " толкает" ПДП ? или SPI ? Как выстроить алгоритм по Вашему?
Уменя так: готовность ДУС-вн.прерывание-запуск ПДП-прерывание окнчания ПДП-расчет ДУС
правда это кросплатформенность на дно их тянет
Ну эт смотря как писать, ну и не скрешивать бульдога с носорогом (АВР и АРМ). У меня, допустим, достаточно 2 файла заменить для перехода между СТМами, и 3й файл если менять датчики.
Подскажите, кто знает наверняка, в Atmega128 есть таймер с функцией захвата? Я смотрел в pdf, там есть много функций и есть что-то подобное на захват. Но оно ли это?
и есть что-то подобное на захват
Захват у таймеров 1 и 3 , вход называется “input capture”
Ну эт смотря как писать, ну и не скрешивать бульдога с носорогом
Да как не пиши, а все равно написать код который будет работать и на АВР и на АРМ требует большего времени чем просто на что-то одно да и за универсальность всегда приходится платить или функционалом или производительностью.
короче да не получилось, ну что ж буду сам собирать проект… когдато ж надо начинать учится 😃
а по поводу с чего всё начиналось: один человек мне пообещал опупенный алгоритм, а как только я начал делать что-то, утёк в кусты, вот и мучаюсь 😃
У меня тоже единомышленники сливались как только дело доходило до серьезного проектирования 😃 В итоге ушло времени в разы больше чем планировал и приходится разбираться в том, во что лезть совершенно не предполагал
Захват у таймеров 1 и 3 , вход называется “input capture”
спасибо. т.е. их два. а для считываня шимов с каналов достаточно только одного таймера? его просто по событиям переключать, сначало из 0 в 1 , потом из 1 в 0?
а для считываня шимов с каналов достаточно только одного таймера? его просто по событиям переключать, сначало из 0 в 1 , потом из 1 в 0?
Я уже писал вам, одного ICP(Input Capture Pin) хватит для обработки PPM(CPPM) сигнала. Для этого достаточно ловить только Rising Edge (из 0 в 1). Если вам надо каждый канал по отдельности обрабатывать, то разумеется вам надо столько ICP пинов, сколько у вас каналов и в этом случае надо его переключать из 0 в 1 и 1 в 0.
спасибо. т.е. их два.
Если Вы хотите сделать “систему стабилизации для моделей” то аппаратных ресурсов чтения ШИМ Вам не хватит (на таймерах AVR по захвату),
я Вам выше постом изложил приблизительный алгоритм чтения по прерыванию на “ноге” где счетчик используется в обычном режиме измерения длительности, его надо по положительному фронту импульса запустить и по отрицательному фронту остановить…
Уменя так: готовность ДУС-вн.прерывание-запуск ПДП-прерывание окнчания ПДП-расчет ДУС …
В Вашем проекте нашел функции по ДЕинициализации петли ДУСа, каково их применение ?
И еще, я так понял, что для чтения акселя и магнетометра ПДП не применяется (?).
Если вам надо каждый канал по отдельности обрабатывать, то разумеется вам надо столько ICP пинов, сколько у вас каналов и в этом случае надо его переключать из 0 в 1 и 1 в 0.
вот на примере приемника Futaba 7C, по идее выход - РРМ сигнал, но опрашивать же нужно каждый канал в отдельности?
Именно поэтому в первых контроллерах так любили приемники Спектрум - у них весь PPM идет по одному проводу, что-то типа такого.
api.ning.com/…/RC_Receiver_Timing_Diagram1.jpg
Для Футабы есть приемники FsSky, которые можно переключить в режим PPM sum.
Всем добрый вечер.
камень stm32f407.
Возник такой вопрос, переписал захват ШИМ так, чтобы использовать только 1 канал таймера, вместо двух, как советует даташит.
Вроде бы все хорошо, данные захватываются верно, но примерно раз 1 сек. идет сбой. как я понимаю, происходит это в тот момент, когда происходит переполнение счетчика таймера. Его обрабатываю следующим образом:
// newData - значение счетчика в момент спада
// oldData - значение счетчика в момент фронта
if(newData > oldData)
{
// считаем разницу тиков между подъемом и спадом
capture = newData - oldData;
}
else
{
// считаем разницу тиков между подъмом и спадом с учетом что между этими 2-мя событиями было переполнение счетчика таймера
capture = (UINT16_MAX - oldData) + newData;
}
Такое условие не помогает. Кто как обрабатывает данную ситуацию ?