Создание собственной системы стабилизации
Не 33, а 333Гц
Да, все верно, с телефона писал, пропустил цифру.
я посчитал, с какой скоростью я дергаю стики на 3D самоле, получилось примерно полный размах стика, (от 1мс до 2 мс) проходит где-то за 0,2с. т.е. получается я дергаю стиком с частотой 5Гц в пике. т.е. если опрашивать приемник реже 5 раз в секунду, то можно просто не успеть за стиком. Кароче, сейчас у меня сделано именно опрос приемника с частотой 5Гц, каждые 0.2с, и это очень, очень плохо. машинка вообще не успевает отработать все движения стика.
я думаю надо с максимальной, с частотой самого приемника шим мерить и выдавать наружу. Кто как думает? у кого как сделано?
Вы на самолет воздействуете напрямую, или через систему стабилизации ?
Вы на самолет воздействуете напрямую, или через систему стабилизации ?
напрямую. а какая разница? плата стабилизации это как бы проходная плата, которая при необходимости может самостоятельно вносить коррективы на рули управления. а когда такой необходимости нет, она должна полностью повторять сигнал с приемника, в том числе и скорость его изменения
RUNTIMELIB = $(LIB_MAPLE_HOME)/build/libmaple.a не создаётся библиотека - где копать?
опля, в libmaple ешё один проект который и создаёт то, что надо - он компилится, дальше опять танцы с бубном…
Для Geniok и Alexsis1109: Коллеги, я что-то пропустил ) АВР я рассматривать не буду, ибо там нужно действительно делать много приседаний для сохранения нормального темпа работы всей системы.
Если берём СТМ32, то о чём собсно речь?
Считаю свою систему:
Частоты
ДУС - 380Гц
Аксель и магнитометр - 50Гц ,
ППМ (разделённый по каналам, т.е. 4 канальный захват ШИМ) примерно 60 Гц,
всё остальное имеет приорететы ниже и выполняется по освобождению.
Итак: для 103го СТМа (без аппаратной плавучки):
- Петля ДУС, выполняется: чтение ДУС, обновление текущего положения в пространстве, вычисление ошибки положения относительно заданного
период ДУС 1/380 = 2.6 мсек, максмальное время обсчёта ~0.3 мсек: заполнение машвремени цикле ~11%. - Петля акселя, выполняется: чтение акселя, обновление ошибки для коррекции текущего положения по ДУСу, интегрирование линейной скорости по акселю, запуск чтения магнитометра.
период акселя 1/50 = 20 мсек, макс.время обсчёта ~0.35 мсек, заполнение машвремени в цикле ~2%. - Петля ППМ, выполняется изменение настройки таймера на отлов фронта\спада, вычисление длины импульса ППМ, вычисление задающего кватерниона. Период 1/60 = 17мсек, макс время обсчёта 0.12 мсек, заполнение ~1.4%.
В наихудшем случае, если все эти события произойдут одновременно и будут обработаны сверху вниз в порядке приоритета, то получим 0.3+0.35+0.12 = 0.77 мсек или ~30% от минимального цикла системы (периода ДУС)!
И при этом заведомо понятно, что в следующем периоде ДУС других событий не будет (кроме собственно обработки ДУС). А для Ф3 на той же частоте время выполнения делим примерно на 10. Дык стоит париться всё это высчитывая?
Главное не тупить в пустых циклах в ожидании событий, у СТМа всё для этого есть.
И ещё один момент, проценты показвают загрузку до потолка, но потолок это не 100% ❗, а 200 😈 Вот почему, то что мы не уложились в мин цикл системы (100%) это конечно плохо (сбивает регулярость системы), но вобщем ничего фатального, главное чтоб обработчик собственно ДУСа успел отработать, а недоработавший обработчик с низким приоритетом(например акселя) он прирвёт и ещё раз обновит данные о положении, после чего аксель досчитается и отдаст проц обработчику ППМ. Но это всё будет работать если такие ситуации в системе достаточно редки (например если приемник дал помеху с более высокой частотой), т.к. недообработанным прерываниям необходимо досчитаться в течении следующих периодов, до наступления собствеенного прерывающего события.
АВР я рассматривать не буду
я как раз сейчас делаю на атмеге все это
ДУС - 380Гц
прошу прощения за тупость. расшифруйте ДУС?
- Петля ДУС, выполняется: чтение ДУС, обновление текущего положения в пространстве, вычисление ошибки положения относительно заданного
судя по этому алгоритму, и я использую такой же, чтение ППМ и акселя с гиро должно выполняться в одном цикле. чтение одного без другого (имею ввиду с разной частотой) не имеет смысла
напрямую. а какая разница? плата стабилизации это как бы проходная плата, которая при необходимости может самостоятельно вносить коррективы на рули управления. а когда такой необходимости нет, она должна полностью повторять сигнал с приемника, в том числе и скорость его изменения
В том то и дело что нет…
Сигнал всегда проходит через систему стабилизации. Потому настройка ПИДов будет влиять на то, насколько резок будет отклик на управление.
Понятно, что при прямом воздействии на органы управления, чем чаще читаем показания приемника - тем быстрее отклик.
прошу прощения за тупость. расшифруйте ДУС?
Датчик угловых скоростей. Гироскоп по-нашему.
Для Geniok и Alexsis1109: Коллеги, я что-то пропустил ) АВР я рассматривать не буду, ибо там нужно действительно делать много приседаний для сохранения нормального темпа работы всей системы.
Если берём СТМ32, то о чём собсно речь?
Да мы скорее просто ведем неспешную беседу! 😃
Тут нет цели что-то друг другу доказать, просто у меня есть мнение, что считывать положение стиков с частотой больше 10Гц смысла не имеет. Хотя конечно данное утверждение на практике еще не проверено.
SirAlex меня поправит, если что, но по-моему в пирате положение стиков читается не каждый цикл.
прошу прощения за тупость. расшифруйте ДУС?
ДУС- датчик угловых скоростей. Гироскоп это вроде как прибор указывающий абсолютное отклонение от установленного положения.
чтение одного без другого (имею ввиду с разной частотой) не имеет смысла
Отчегож? Вы ведь систему стабилизации строите, и на неё не только Р/У воздействует, но и текущие параметры полёта ЛА. Задавать полжение Вы можете достаточно нерасторопно, но система должна компенсировать все отклонения от заданого гораздо быстрей. Иначе она вовсе не нужна, коли Ваши руки быстрее реагируют на все возмущения. Для примера запустите коптер на одном лишь приёмнике, без мозгов и вертолётных гироскопов.
что считывать положение стиков с частотой больше 10Гц смысла не имеет. Хотя конечно данное утверждение на практике еще не проверено.
это все на практике нужно проверять, но 5Гц точно никак. мне кажется логичным чтобы плата контроллера не тормазила работу машинки как бы быстро я не дергал стик. думаю после 5Гц я переду сразу на 25Гц
Йоо-хооу собрал!!! 😃
в общих чертах: немного поизголялся над makefile, далее в папке libmaple - есть ещё один проект под одноимённым названием - надо собрать /build/libmaple.a, потом отыскать в закромах мапловской ide файлик ld.exe и положить в свои патчи (директорию с компилятором), далее залезть сюда github.com/bubulindo/libmaple_F4/tree/…/ld забрать две библиотеки libcs3_stm32_high_density.a и libcs4_stm32_high_density.a ну или скомпилировать их так же как и с libmaple лежат AeroQuad\Libmaple\libmaple\support\ld\libcs3_stm32_src\ и AeroQuad\Libmaple\libmaple\support\ld\libcs4_stm32_src\ нифига себе квестик😵
ну и ладно теперь у меня живёт AeroQad32 под Eclipse 😃
SirAlex меня поправит, если что, но по-моему в пирате положение стиков читается не каждый цикл.
100Hz, правда я в последней версии снизил до 50Hz - но это просто попытка найти проблему в PPM декодере.
это все на практике нужно проверять, но 5Гц точно никак. мне кажется логичным чтобы плата контроллера не тормазила работу машинки как бы быстро я не дергал стик. думаю после 5Гц я переду сразу на 25Гц
Это практически невозможно. Плата в любом случае будет затормаживать реакцию, более или менее. Если говорить конечно про устойчивый полет, а не попытки поймать стиками равновестное положение. Тут хоть 100Гц поставь! Или отключать большинство датчиков и рулить ручками…
Кому интересно, нашел демо проектик для STM32F3Discovery под CoIDE (CooCox). Попробовал, собралось! Мой первый билд под stm32 😃
Правда заливал через STM32 ST-LINK Utility, т.к. похоже flash driver-а нет соот-го для STM32F30x под CooCox (Error: Flash driver function execute timeout)
Что нужно чтобы собрать проект:
- качаем/устанавливаем CooCox CoIDE V1.7.0 www.coocox.org/Index.html
- качаем/устанавливаем gcc под ARM launchpad.net/gcc-arm-embedded/+download
- берем Demo Project for CoIDE www.coocox.org/forum/topic.php?id=2219
- компилим, находим *.hex или *.bin и заливаем через STM32 ST-LINK Utility
радуемся! 😃
С почином 😃 После STM на AVR смотреть неохота 😃
Но весь прикол st-link - в совершенно прозрачном процессе отладки, поставил точку останова и она сработала, а через hex, это все совсем не то 😃
Купите stm32F4Discovery, цена вопроса-то смешная, судя по ссылке около 15$ (у нас тут подороже конечно).
Плюс эта плата встроенный ST-LINK имеет который можно использовать для отладки других плат (пробовал, работает), отдельно он 30$ стоит, тут получается вообще даром.
радуемся!
а что оно делает?
т.к. прошивка AeroQad довольно маленькая, занимает 83к флеши, то наверно первую плату я соберу под него (всё что нужно имеется), да и всё можно задействовать - посмотреть как работает, в общем просто протестировать плату, ну а если всё хорошо, то можно будет и vgt6 проц заказывать, и тогда получится довольно универсальное устройство, с поддержкой практически всех проектов под F4 😃 надо только IDE своё переделать, а то сейчас поддерживает только maple, ну и по идее должно работать с ардуино (компиляторы встроил библиотеки не проблема), но проверять у меня не на чем…
Так, я помоему чему-то полезному научился 😃 , перетащил проект мелкоплаты так же под Eclipse - всё работает 😃
После STM на AVR смотреть неохота
да ладно! 😃 Если низкоуровневых вещей не касаться, то и там и там С++ по сути. Флопсов да, конечно побольше в стм-ке. Настроил вот матрицу поворота акселя по трем осям в глоб. систему координат gps. Думал AVR-ка удавится от 6-ти sin/cos-в и кучки float перемножений. Фига! 😃 С библиотечными sin/cos всего 900-1100мкс, с апроксимационными 700-800мкс, а с табличными так вообще 500-600мкс. Так что жить AVR-ке еще долго 😉, на том же вие к примеру, т.к. atmega2560 имеет 256кб флеша на борту, а прошива вийная со всеми феньками сейчас тянет всего на 40кб…
Но весь прикол st-link - в совершенно прозрачном процессе отладки, поставил точку останова и она сработала, а через hex, это все совсем не то
Купите stm32F4Discovery, цена вопроса-то смешная, судя по ссылке около 15$ (у нас тут подороже конечно).
по ценам, если с доставкой и налогами, то примерно в 2 раза дороже выходит… а купил уже пару мес. назад, сперва F4, потом F3 (т.к. сенсоры на борту сразу для поиграться), где только время на все взять? 😃
серьезно, вопрос всем, где вы берете время? есть возможность прямо на работе ковыряться? (хехе… сейчас загадим Сергею темку! 😈)
Плюс эта плата встроенный ST-LINK имеет который можно использовать для отладки других плат (пробовал, работает), отдельно он 30$ стоит, тут получается вообще даром.
что на STM32F4DISCOVERY что на STM32F3DISCOVERY, и там и там ST-LINK на борту…
а что оно делает?
Ну главная фишка - это сам проект для F3 под Coocox, т.к. в списке чипов при создании проекта нет F30x…
а так это офиц. STM32F3DISCOVERY демка. После загрузки моргает светодиодами по кругу. Далее жмем User батон/кнопу запускается демка ДУС. Еще раз раз жмем, запускается демка магнетометра… вроде так…
Показать картинки (1) Йоо-хооу собрал!!!
Так под какой проц то собрал?
да ладно! 😃 Если низкоуровневых вещей не касаться, то и там и там С++ по сути. Флопсов да, конечно побольше в стм-ке.
Да я не про флопсы даже, просто у stm как-то все удобнее. Памяти больше, флеша больше, отладка и заливка одним кликом, IDE удобная, все гораздо приятнее получается.
На AVR всякие мелкие вещи делать прикольно, DIP-корпус рулит 😃
серьезно, вопрос всем, где вы берете время? есть возможность прямо на работе ковыряться?
Вечером, 1-2 часа перед сном можно на всякие развлечения потратить… 😃
Правда глобальных целей не ставлю, изучаю STM чисто для себя.
Так под какой проц то собрал?
под F4, пока родное от AeroQad который F4
под F4, пока родное от AeroQad который F4
Странно что тогда такой квест получился
хехе… сейчас загадим Сергею темку!
Я думал это ты не спишь 😃 , у меня получается т.к. я с ноутом выгнан на кухню, то в обед, ну и вечером после 8-ми поковыряться, ну а просто потрещать можно и на работе 😃
Странно что тогда такой квест получился
наверно как-то можно библиотеки скомпилить автоматически, но я ещё толком не разобрался как делать makefile…
проекту нужны скомпилированые библиотеки libcs3_stm32_high_density.a, libcs4_stm32_high_density.a и Libmaple.a которых в проекте не было… ну это и к лучшему ибо libmaple.a мне точно под свою плату переделывать…