Создание собственной системы стабилизации

rual
Робби:

Ну я об этом тоже думал… когда всё наше то будет…

Тогда когда все работать будут, а не ойфоны продавать )
Хотя часть отчественной комплектухи есть, но это M3, и наших МЕМСов я не видел…
Контроллеры без сопроцессора, да и намного дороже того же СТМ32

Выпущен микроконтроллер в пластиковом корпусе LQFP144 (20х20 мм), стоимость микросхемы составляет 715,08 руб. (с НДС, с 19.01.2015).

SergDoc

На столько лап интерфейсов маловато 😦
но ежели корпус такой как на картинке… зачётно смотреться будет…
это в районе 10-12 долырей? дык лучша буржуйское… дешевше выйдет…
ой лучше бы 405-й скопировали, да в таком корпусе только 100-лапом, перешел бы )))
давай опытный образец на халяву закажем milandr.ru/index.php?mact=Products,cntnt01,details…

rual
SergDoc:

давай опытный образец на халяву закажем milandr.ru/index.php?mact=Pro...t01returnid=68

Да я не против, просто “физикам” могут не дать. Макс к ним ближе, может попробует взять.

Тут не как у СТМ, у каждой ноги только одна функция (

Sir_Alex
SergDoc:

Да кто ж нам его даст, я шучу )))

А чего нет? Если очень надо, думаю можно выцыганить.

SergDoc

не, если с таким функционалом то только, 48 лап, а такого нету 😦

Geniok
rual:

Тогда когда все работать будут, а не ойфоны продавать )
Хотя часть отчественной комплектухи есть, но это M3, и наших МЕМСов я не видел…
Контроллеры без сопроцессора, да и намного дороже того же СТМ32

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

П.с. На керамический корпус зря засматриваетесь, он с пятой приемкой в районе 5 тыс.

Geniok
djdron:

если не ошибаюсь вроде кристаллы они все равно в Китае заказывают

еще такие есть www.module.ru/catalog/micro/

Насчёт Китая не знаю, вряд-ли, они в основном на оборонку работают, но достаточно почитать errata на 91Т, там все основные ошибки описаны, многие из них довольно крупные ошибки, которые могут быть исправлены только при создании нового ядра, по признанию самих Миландровцев, поэтому данные ошибки кочуют из серии в серию.

oleg70
Geniok:

там все основные ошибки описаны, многие из них довольно крупные ошибки

Справедливости ради, надо сказать что в STM, тоже есть немало косяков, особенно касаемо связки DMA и периферии…

Geniok
SergDoc:

Евгений, что NuttX рассказывает?

Да я честно говоря даже не подключался ещё, нечем пока, переходника uart-usb нет под рукой и когда появится неизвестно… ((
По поводу внешнего компаса тоже удивился, но дальше копать не стал, почему так пишет.

oleg70:

Справедливости ради, надо сказать что в STM, тоже есть немало косяков, особенно касаемо связки DMA и периферии…

Есть такое дело, но сколько сталкивался с СТМ, ничего фатального не было, а у Миландра, первое, с чем столкнулся - это бесконечное немаскируемое прерывание при использовании ЦАП. То есть, по факту получается, что ЦАП вроде есть, но работать с ним через прерывания невозможно, так как будешь постоянно висеть в нем. И подобных косяков куча, сталкивались даже с тем, что стек портится сам по себе, то есть заход в функцию по одному адресу, а выход из функции может быть в любой точке программы. Причём, такой баг ещё и плавающий. На хабре была как-то статья, целое расследование кто-то проводил…
Если бы был выбор, обходил бы их стороной…
habrahabr.ru/post/231373/
habrahabr.ru/post/223779/
habrahabr.ru/post/228531/

SergDoc
Geniok:

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

эт мне напоминает о прерывании в прерывании в 8-и битных авр?

Geniok:

Да я честно говоря даже не подключался ещё, нечем пока, переходника uart-usb нет под рукой и когда появится неизвестно… ((
По поводу внешнего компаса тоже удивился, но дальше копать не стал, почему так пишет.

ну нету и нету, компаса внешнего, просто там скорей всего пишет типа mtd read error при старте и ещё проц перед прошивкой бутлоадера точно весь стирался?

oleg70:

особенно касаемо связки DMA и периферии…

точно? а то может мы спокойно ждём прерывания от периферии, а надо от ДМА было ждать от периферии фиг получим…

Geniok

Возник глупый вопрос по ПИД-регулятору системы стабилизации.
Примем текущее положение коптера как наклоненное на 2 градуса вправо. Заходим в ПИД-регулятору. Заданное положение 0 градусов. Ошибка 2 градуса. Вычисляем пропорциональную составляющую, как П=Кп*ошибку. Пусть у нас Кп=10, тогда П=2*10=20.
Теперь интегральный составляющая И=Ки*СуммарнаяОшибка, пусть Ки=1.2, но так как частота работы у нас большая, очень скоро наша СуммарнаяОшибка достигает огромных размеров, на фоне которой наша пропорциональную составляющая будет каплей в море. Если СуммарнуюОшибку мы ограничим, то все равно очень быстро приходим к граничному значению.
Теперь дифференциальная составляющая, Д=Кд*(текущая ошибка-прошлая ошибка) / время цикла. Опять же есть вопрос, если мы стоим на столе или время цикла настолько короткое, что текущая и прошлая ошибка равны, то Для составляющая не действует совсем, но, как только мы стали двигаться, получаем следующее, пусть разность между текущей и прошлой ошибкой будет равна 0.05 градуса, Кд=5, тогда Д=5*0.05=0.25, что в сравнении с пропорциональной и интегральный составляющей очень мало.
Опять же, классическая формула П+И+Д, даёт вместо стабилизации какой-то расколбас.
Вот и хотелось бы узнать, в чем ошибка, какие нюансы не учтены?

SergDoc:

эт мне напоминает о прерывании в прерывании в 8-и битных авр?

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

SergDoc:

и ещё проц перед прошивкой бутлоадера точно весь стирался?

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

SergDoc
Geniok:

Опять же, классическая формула П+И+Д, даёт вместо стабилизации какой-то расколбас.

Знаки уточни… недоруливание, переруливание… дифференциальная составляющая что тормозит или разгоняет?

rual
Geniok:

Опять же, классическая формула П+И+Д, даёт вместо стабилизации какой-то расколбас.
Вот и хотелось бы узнать, в чем ошибка, какие нюансы не учтены?

Никакого расколбаса если правильно выставлены коэффициенты. Если расписать все составляющие ПИД по ролям:
П: основная составляющая, регулирующее воздействие (РВ) пропорциональна ошибке. При отклонении от заданного угла ЛА “догребает” в сторону равновесия, но если возмущающее воздействие (ВВ) продолжает действовать, например в сторону сместился ЦТ, “догрести” до нулевой ошибки у П-регулятора не получится, ибо когда ошибка уменьшиться, то и РВ уменьшиться до равенства РВ=ВВ. Соответственно ошибка перестанет уменьшаться. Для того чтобы приблизить ошибку к нулю перейдем к следующему пункту))
И: РВ пропорционально накопленной суммарной ошибке. Даже если ошибка мала, то накапливаясь в интеграторе она постепенно увеличивает значение РВ, до тех пор пока ошибка не перейдет нуль и не изменит знак на обратный. Это увеличивает точность регулятора, но способствует “расколбасу” из-за задержки реакции РВ на ошибку. Для того чтоб избежать автоколебаний переходим к следующему звену.
Д: РВ пропорционален скорости (первой производной) ошибки. Позволяет “притормозить” (демпферировать) регулятор когда он “разогнался” исправлять ошибку благодаря звену И и может проскочить равновесное положение. Также звено Д позволяет быстро парировать кроткое и сильное ВВ, например порыв ветра.

oleg70
rual:

какие нюансы не учтены?

Пожалуй, лучше чем верхний пост, и не скажешь про ПИД… От себя могу только добавить, что “Д” компонента находится в определенной связке с “П” компонентой - она как бы “смягчает” влияние первой, посему надо их настраивать совместно и поэтапно (есть известная методика…) , это тоже надо учитывать…
кстати, от “И” можно в принципе вовсе отказаться…

SergDoc
oleg70:

от “И” можно в принципе вовсе отказаться…

это в идеальной системе, нужна она для наших целей…
вот дифференциальная почти линейно зависит от пропорциональной, опенпилоты в cc и cc3d её автоматом считают не вынося отдельно в настройки там только P I …
в идеальной системе (в немецких курсах) считали PD регулятор, так удавалось за доли секунды выровнять положение с заоблачными значениями пропорции и без всяких осцилляций…

okan_vitaliy

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

SergDoc

Виталий, чёт я ничё не понял ))) запутаю ещё больше - то что положительно для одной - отрицательно для другой стороны )))
А если я понял правильно, то это можно сделать не в ПИД-е, а в микшере, тупо - если один мотор +1, то противоположный -0.8 …

okan_vitaliy

Сергей, я имел ввиду, что инерция воздействия винтов на коптер при повышении оборотов и при понижении разная.
Имеется 2 набора пид коэфициентов. Когда (дельта)ошибка в положительной области значений, то используем первый набор,если в отрицательной области, то второй набор.