_Ivana
Mar 18 2014, 02:47
Здравствуйте. Для управления механической конструкцией хочу использовать ПИД-регулятор от величины угла, измеряемого энкодером. Количество щелчков на оборот - порядка нескольких тысяч, то еть для измерения угла вполне достаточно. Но в управление пропорционально входит производная угла. Если считать как разность текущего и предыдущего показаний деленную на интервал опроса датчика, то получаются весьма большие скачки, которые идут в управление и не способствуют стабильности конструкции. Если увеличить время расчета производной или использовать ряд предыдущих значений угла на расширенном интервале опроса, то получается задержка в рассчитанном значении, из чего вытекает задержка в управлении и опять же нестабильность. Подскажите пожалуйста возможные варианты решения.
Вариантов несколько:
1) Отказаться от Д составляющей.
2) Сделать фильтрованную Д составляющую. Так же называется "реализуемый ПИД" или "ПИД" с замедлением. Идея в том, что вместо передаточной функции K_d*p сделать реализуемую функцию вида (K_d*p)/(\tau*p+1) или (K_d*p)/(\tau^2*p + 2*\tau*p+1). Чем меньше \tau, тем ближе процесс к исходному. Но от баланса скачки - задержка вы никуда не денетесь.
3) Ввести какие-то более сложные варианты фильтрации, рассчитать цифровой фильтр-дифференциатор для определенных частот. Опять, конкретный выбор фильтра - вопрос баланса.
4) Отказаться от ПИД регулятора и построить какой-то линейный регулятор, у которого порядок числителя не больше, а лучше на единицу меньше, чем порядок знаменателя. Такое решение предполагает, что вы знаете или можете хотя бы примерно определить модель объекта. Настраивать подбором, как в ПИД, тут будет сложно. С другой стороны, такое решение наиболее гибкое и, на мой взгляд, наиболее предпочтительное, если качество ПИД вас не устраивает.
_Ivana
Mar 18 2014, 03:53
Спасибо, я подозревал, что это будет компромисс между скачками и задержкой, но надеялся реализовать его пограмотнее. Вариантов расчета производной, приводящих к задержкам, я придумал и промоделировал уже не один - и да, или гладкая производная, но задержка и неустойчивость управления, или меньше задержка и больше скачки. Но еще не оставляю надежды на нахождение хорошего решения, я могу варьировать опрос энкодера - не только считать щелчки к данному времени по интервалу опроса, а даже засекать само время между щелчками, повесив его на входящее прерывание.
Модель объекта у меня есть (появилась с момента моего последнего слепого тыкания в теме), я почитал про акробот, получил его диффур для моего случая - как общий, так и линеаризованный в окрестности нужного мне положения. Если это поможет - могу написать. И коэффициенты своего ПИДа я получаю подбором только двух параметров, а все предварительные расчеты (в зависимости от параметров конструкции) получаются по формулам из этой модели.
Цитата(_Ivana @ Mar 18 2014, 07:53)

, а даже засекать само время между щелчками, повесив его на входящее прерывание.
Так-то будет лучше. Но в любом случае квантовый (дискретный) сигнал не может быть "правильно" обработан.
Ведь в любой текущий момент расчета нельзя предсказать, что через ничтожно малое время произойдет или не произойдет скачок.
Можно также игнорировать малые значения производной. В любом случае производная получится с задержкой, так как используется прежнее значение.
_Ivana
Mar 18 2014, 05:05
Поскольку измеряется скорость изменения угла механической системы, есть основания предполагать, что она ограничена по максимальному значению. А насчет задержки - вопрос в ее величине. Например, у нас угол изменяется линейно но медленно, значения по энкодеру на каком-то периоде опроса будут 0,0,0,0,0,0,0,0,0,1 - последняя единица - щелчок когда превысили шаг квантования. И если считать производную по 2 последним отсчетам, деленным на период опроса - будет неверное огромное значение, если по трем и более - будет увеличиваться задержка в показаниях. Я действительно, пожалуй, еще подумаю насчет не периодического равномерного опроса, а получения именно максимально точных интервалов времени между щелчками и попытаюсь придумать, как обработать такой неравномерно дискретизированный сигнал.
SSerge
Mar 18 2014, 05:22
Цитата(_Ivana @ Mar 18 2014, 09:47)

...
Если считать как разность текущего и предыдущего показаний деленную на интервал опроса датчика, то получаются весьма большие скачки, которые идут в управление и не способствуют стабильности конструкции.
...
Хм, а если просто правильно вычислять разность?
Например, разность между 359 и 1 градус составляет вовсе не 358, как думают некоторые, а всего лишь -2 градуса.
И никаких скачков.Upd:
Что-то я сегодня невнимателен, чушь всякую несу...
_Ivana
Mar 18 2014, 05:33
SSerge, вы немного не поняли причины скачков. Допустим, у нас 1 градус накопился за минуту, истинная производная мизерная, но по энкодеру будет 59.99 секунд нули и нулевая производная, а последнюю 0.01 секунду - скачок из 0 в 1 - и производная 100 градусов в секунду.
Скорее всего, это Вы не поняли - производная должна считаться между скачками энкодера, а не за какую-то "последнюю" секунду.
P.S.
Для улучшения качества управления по производным вполне возможно, что лучше использовать т.н. "наблюдатели", если более-менее известна физ-мех. модель система.
В этом случае производные можно получать с модели с высокой частотой опроса, а состояние модели будет корректироваться эпизодически с частотой срабатывания энкодера.
Грубый пример.
Есть инерционный объекта массой m к которому прикладывается сила F, объект совершает линейное перемещение.
По энкодеру измеряем с переменным интервалом дискретизации скорость Vизм = dS/dT, ускорение Aизм = dV/dT
Вычисляем силу F(t) = m * Aизм
Вводим F(t) в модель системы и наблюдаем с желаемой частотой за параметрами модели, в частности - ускорением.
_Ivana
Mar 18 2014, 05:51
TSerg, насколько я понимаю, ваш вариант не будет работать. Допустим, у нас идут небольшие колебания около одного положения - если эти колебания "внутри" шага энкодера - он их не ловит и производная нулевая (что хорошо), а если на границе шага - то мы получаем периодические щелчки на мизерное время (когда верхушка амплитуды превышает порог), и получаем даже еще бОльшие скачки, чем при равномерном опросе показаний.
Цитата(_Ivana @ Mar 18 2014, 09:51)

и получаем даже еще бОльшие скачки, чем при равномерном опросе показаний.
Так это и есть реальность. Надо научиться с ней жить - правильно реагировать. Такова жизнь.
Цитата(_Ivana @ Mar 18 2014, 09:51)

TSerg, насколько я понимаю, ваш вариант не будет работать.
Не просто будет работать, а будет хорошо работать.
Цитата(_Ivana @ Mar 18 2014, 09:51)

Допустим, у нас идут небольшие колебания около одного положения - если эти колебания "внутри" шага энкодера - он их не ловит и производная нулевая (что хорошо), а если на границе шага - то мы получаем периодические щелчки на мизерное время (когда верхушка амплитуды превышает порог), и получаем даже еще бОльшие скачки, чем при равномерном опросе показаний.
Если параметры системы известны и ограничены, а это так для реальных физических систем, то известна латентность системы на также ограниченные по энергии внешние воздействия.
Поэтому убирайте из своей терминологии всякий "мизер" и переходите на инженерный подход к решению задач.
Цитата(TSerg @ Mar 18 2014, 11:40)

Поэтому убирайте из своей терминологии всякий "мизер" и переходите на инженерный подход к решению задач.
Совсем необязательно, что этот мизер плохой. В некоторых случаях быстрого дрожание около положения равновесия я и добиваюсь.
Спорить не буду, бывают и такие способы повышения точности или устойчивости. За примером далеко ходить не надо - подмешивание на вход АЦП небольшого шума или маятник Капицы.
Но я больше о терминологии, чем о принципах.
amaora
Mar 18 2014, 14:20
Цитата(_Ivana @ Mar 18 2014, 09:51)

Допустим, у нас идут небольшие колебания около одного положения - если эти колебания "внутри" шага энкодера - он их не ловит и производная нулевая (что хорошо), а если на границе шага - то мы получаем периодические щелчки на мизерное время (когда верхушка амплитуды превышает порог), и получаем даже еще бОльшие скачки, чем при равномерном опросе показаний.
Все "щелчки" происходят тогда, когда их предсказывает модель системы. Тогда невязка (разность предсказанного и измеренного) получается близкой к нулю, и оценка состояния корректируется лишь немного. То есть на выходе больше результат моделирования чем измерения до тех пор, пока нет большой невязки.
AndreyVN
Mar 19 2014, 05:27
Цитата(_Ivana @ Mar 18 2014, 06:47)

... Но в управление пропорционально входит производная угла....
По моему, управление по производной Вам может понадобиться, только в том случае, если потребуется притормаживать слишком уж раскрутившуюся
систему. В этом случае шелчков будет много, время между ними реальное, дисретная функция будет приближаться к непрерывной. При дрожжании вблизи равновесия управление по производной мне кажется только ухудшит и устойчивость и точность.
К стати, с каким знаком у Вас входит управление по производной?
_Ivana
Mar 19 2014, 12:30
По производной угла, измеряемого энкодером у меня ПОС, насколько я понимаю. Как и по самому углу, собственно. Но этот угол с его производной - не единственные составляющие сигнала управления. Построить модель управления без производной у меня не получается, система разбалансируется.
ЗЫ попробовал строить прямую по МНК по нескольким последним отсчетом угла при условии периодического опроса, и считать производную по этой прямой. Результат лучше, чем просто первые разности, но получается именно так, как уже писали
Цитата
Но от баланса скачки - задержка вы никуда не денетесь.
3) Ввести какие-то более сложные варианты фильтрации, рассчитать цифровой фильтр-дифференциатор для определенных частот. Опять, конкретный выбор фильтра - вопрос баланса.
МНК это получается тот же КИХ фильтр конечной длины, можно пробовать и другие дифференцирующие фильтры, но при малой длине фильтра получаем выбросы, а при большой - производная красивее, но увеличивается задержка. Причем, это не зависит выбранной частоты опроса энкодера. Я подобрал оптимальную длину фильтра (компромисс скачки-задержка), балансирование есть, но все равно хочется более красивого результата. Буду дальше думать над построением модели и расчетом производной из нее, с корректировкой модели по энкодеру.
AndreyVN
Mar 20 2014, 07:04
Цитата(_Ivana @ Mar 19 2014, 16:30)

Построить модель управления без производной у меня не получается, система разбалансируется.
Это тревожный факт. Одной пропорциональной составляющей обычно достаточно чтобы ПИД заработал со статической ошибкой регулирования. (Считаем, что фазовые условия устойчивости выполнены) Интегральная составляющая позволяет убрать статическую ошибку слежения и подобраться к границе устойчивости. По моему опыту (высоковольтные источники, нагреватель пресса-экструдера) настройки ПИД - дифференциальная составляющая это роскошь, которая позволяет увеличить скорость реакции системы регулирования при внешних возмущениях.
Я пользовался регулированием по скорости с отрицательным коэффициентом, это позволяло избежать перерегулирования при очень больших возмущениях. То есть, когда систему "понесло" слишком быстро управление по скорости давало вклад уменьшающий расстройку. Но этот коэффициент был очень мал и почти не влиял при колебаниях вблизи равновесия.
Я бы посоветовал разобраться, почему Ваша система не работает в пропорциональном режиме. (Если я правильно понял.)
amaora
Mar 20 2014, 14:15
Цитата(AndreyVN @ Mar 20 2014, 11:04)

Это тревожный факт. Одной пропорциональной составляющей обычно достаточно чтобы ПИД заработал со статической ошибкой регулирования. (Считаем, что фазовые условия устойчивости выполнены) Интегральная составляющая позволяет убрать статическую ошибку слежения и подобраться к границе устойчивости. По моему опыту (высоковольтные источники, нагреватель пресса-экструдера) настройки ПИД - дифференциальная составляющая это роскошь, которая позволяет увеличить скорость реакции системы регулирования при внешних возмущениях.
Регуляция тока и температуры это в грубом приближении системы первого порядка, производная от регулируемой величины задается в качестве воздействия. А механическая система это второй порядок, как минимум. Замкнув упраление по положению получаем колебательную систему, как например у маятника, естественная обратная связь по положению. А если маятник перевернутый на подвижном основании то его нелзя (по хорошему, не надеясь на вязкое трение и т.п.) стабилизировать статическим регулятором по углу отклонения, колебания получаеются с нарастающей амплитудой.
АНТОН КОЗЛОВ
Mar 20 2014, 22:52
Есть древняя книжка:
Фурно Г.и др. Микрокомпьютерные медицинские системы.Проектирование и применения. М. Мир 1983г.
Там есть параграф об этих проблемах и внятно описано как вычислить производную по 5,9 и 11 точкам методом наименьших квадратов. Алгоритм несложный, коэффициенты указаны.
AndreyVN
Mar 21 2014, 02:14
Цитата(amaora @ Mar 20 2014, 18:15)

...Механическая система это второй порядок, как минимум....
А если маятник перевернутый на подвижном основании то его нелзя стабилизировать статическим регулятором по углу отклонения, колебания получаеются с нарастающей амплитудой.
А Вы правы. В моем случае свободный полет системы это exp(-kt), а здесь вырисовывается sin(wt). Мои предыдущие два поста в топку.
_Ivana
Mar 21 2014, 06:50
АНТОН КОЗЛОВ: спасибо, я, если найду в сети, посмотрю эту книжку. Но я сам уже реализовал несложный алгоритм аппроксимации любого количества точек прямой линией по МНК и получение производной из этой прямой. Все хорошо,чем больше точек, тем лучше точность, но беда в том, что такая производная хорошо аппроксимирует середину интервала, и при увеличении количества точек я получаю задержку, что приводит к разбалансировке системы. Более того, я реализовал также алгоритм БИХ фильтра - расчет производной по первой разности с последующим экспоненциальным сглаживанием (добавлением предыдущего значения рассчитанной производной с определенным весом) - получается примерно то же самое, но вычислительно гораздо короче. И действительно, как уже писали выше, при любых фильтрах получается компромисс между выбросами и задержкой, который (насколько я думаю), такими методами принципиально нельзя обойти. Я нашел этот компромисс для разных параметров системы и частот опроса, если по-другому не получится, буду пробовать обойтись этими методами.
AndreyVN: у меня механическая система с двумя степенями свободы и одним управляющим воздействием, которое рассчитывается по 4 входящим параметрам (2 угла с их производными), система с дефицитом управления и наличием двух колебательных, одной устойчивой и одной неустойчивой мод в нужном мне положении равновесия.
ЗЫ я тут немного подумал, и наконец-то кое-что понял. При простейшем подходе мы имеем (настоящую, в железе) механическую систему с нужным количеством всех датчиков, опрашиваем эти датчики, умножаем их показания на заранее рассчитанные коэффициенты и подаем это в качестве управления. Я пока оставляю в стороне вопросы датчиков, их фильтрацию по Калману или альфа/бете и т.п.. считая их идеальными. Но ведь у меня есть математическая модель моей системы - собственно, ее я и использую для моделирования на компьютере. Система нелинейных диффуров, но принципиально решаемая. Значит, параллельно с поведением реальной системы я могу запустить расчет этой модели из тех же начальных условий, и модель будет предсказывать будущее состояние системы. Понятно, что через какое-то время их состояния разойдутся, но я могу рассчитывать свою модель снова с начальными условиями, взятыми из показаний реальных датчиков. Как правильно и оптимально использовать модель я до конца еще не понял, но реализовал какой-то кустарный вариант ее применения для предсказания/расчета нужной производной в своем матлабовском коде, результат на первый взгляд обнадеживает. Буду думать дальше.
Не далее, как несколькими постами выше именно о таком варианте управления с эталонной моделью ( грубые датчики, неадекватное или с погрешностями описание дин. системы и пр.) Вам намекалось.
От модели можно безболезненно "требовать" более высокой частоты дискретизации, а главное - равномерной.
P.S.
Еще один вариант управления, который почти не потребует заглубления в "высокую" математику - fuzzy-logic.
P.P.S.
Зачем Вам сдался МНК в чистом виде?
Для гладких полиномиальных вплоть до n-производной функций (для мех. систем, ограниченных возмущениями с конечной энергией - это так) давно разработан мат. аппарат синтеза КИХ-фильтров (осредняющих, дифференциирующих, прогнозирующих - в любом сочетании ).
_Ivana
Mar 21 2014, 08:03
TSerg, да, спасибо, ваши с amaora краткие намеки я и перечитываю постоянно, пытаясь понять, разобраться и промоделировать. Наверное, надо еще что-нибудь почитать на эту тему, чтобы пришло полное понимание.
А мой комментарий вашего предложения, что "это не будет работать" относился к вашему посту до его исправления, когда он не содержал предложения использовать модель, а только предложение считать производную по точному времени между щелчками энкодера. Я даже пока не моделирую этот метод, поскольку пребываю в уверенности его неработоспособности, причины моей уверенности я написал ранее, здесь не повторяю, чтобы не использовать режущую ваш слух терминологию. Но если промоделирую, отпишусь о результатах.
ЗЫ МНК в чистом виде я вывел формулы за пару минут на бумажке и вбил их в программу. Я догадываюсь, что есть давно разработанные специальные фильтры, если найду их расчет, попробую. Но у них тоже будут недостатки в виде задержки, хотя в конкретном случае они могут оказаться лучше простого МНК.
Для низких скоростей подсчет времени между импульсами - широко распространенный и рекомендуемый способ обработки сигналов энкодера.
К примеру, фильтры на 5 элементов:
Экстраполирующий (предсказатель): (16,-14,-4,11,-4)/5;
Дифференцирущий (I порядка): (-2,-1,0,1,2)/10;
_Ivana
Mar 21 2014, 08:11
RHnd, я не против, но что делать в ситуации, когда верхушка плавной синусоиды слегка пересекла очередной порог энкодера и мы получили щелчок туда и почти тут же - обратно? Дифференцировать по времени между щелчками - получим огромный (простите не инженерную терминологию) выброс, вместо нулевой производной в верхушке синусоиды.
TSerg, спасибо, я попробую ваши фильтры, сначала экстраполировать сигнал на 2 отсчета вперед, а потом посчитать производную в текущей точке по 5 отсчетам, используя полученные выше 2 экстраполированных.
Мне эта ситуация представляется несколько надуманной, да и возникать она будет нечасто. Усредняйте. Возможно, вы плохо выбрали энкодер, нужно взять что-то с большим числом отсчетов.
Вообще, оценка скорости в точке реверса, - неприятная задача.
Цитата(_Ivana @ Mar 21 2014, 12:03)

А мой комментарий вашего предложения, что "это не будет работать" относился к вашему посту до его исправления, когда он не содержал предложения использовать модель, а только предложение считать производную по точному времени между щелчками энкодера.
В нескольких постах Вам уже явно намекают, что расчет скорости по энкодеру через интервал времени между изменениями его состояния и при низких скоростях - это действенный, применяемый метод.
Как считать интервал времени - это второй и не принципиальный вопрос.
- можно от бортового времени (если оно есть) с точностью до пико-, нано-, микро-секунд;
- можно по отдельному счетчику, запускаемому по прерыванию от одной смены состояния энкодера и до другой;
- можно по GPS/ГЛОНАСС

Да, и - не поленитесь и нарисуйте кинематическую схему вашего неустойчивого изделия + где прикладывается крутящий момент, наличие вязкого и сухого трения ( без учета этих сил можно долго колдовать ).
Акробот-ы они тоже разные бывают.
_Ivana
Mar 21 2014, 08:28
Я догадывался, что если несколько человек говорят одно и то же, то наверное стоит к этому прислушаться

Время я засеку по внутреннему таймеру контроллера достаточно точно, это не проблема. Придется думать (и/или читать умные книжки) что с этим неравномерно дискретизированным сигналом делать дальше. И это не считая того, что надо попробовать ваши предложенные фильтры и их аналоги для бОльшего количества точек, разобраться с применением в расчетах модели объекта и может быть еще и нечеткая логика на горизонте.... Есть куда копать, даже 4 стороны, спасибо за подсказки.
Схема - двухзвенный маятник, в точке соединения звеньев прикладывается управляющий момент (на конце первого звена закреплен двигатель, на его валу конец второго звена), эта конструкция ставится началом первого звена на пол, второе звено короче первого и висит вниз, хочу балансировать чтобы вся конструкция стояла и не падала. Трение, противо ЭДС двигателя и т.п. не учитывал, надеюсь это не будет фатально. Массы, центры масс и моменты инерции звеньев известны, датчики - энкодер на валу двигателя, гироскоп с акселерометром на первом звене. ПИД идеальной модели можно увидеть в матлаб-анимации здесь (в предпоследнем посте):
http://electronix.ru/forum/index.php?showt...15&start=15 Сейчас я подобрал 2 коэффициента подавления неустойчивой и колебательной мод, идеальная модель за одно-два колебания стабилизируется в положении равновесия.
Или что вы имели в виду под нарисованной схемой?
Словами тоже можно рисовать

Просто я не особо следил за тем, чем именно Вы пытаетесь управлять.
Есть акробот с актуатором в точке вращения первого звена двух-звенного обращенного маятника, а второе звено, посредством САУ, ставится устойчиво вверх.
Ок.
Так у Вас, похоже упрощенная модель, поскольку второе звено устойчиво.
Достаточно двух много-пульсных энкодеров в точке вращения первого звена и в точке соединения звеньев + датчик точной механической вертикали ( да хоть бы и микропереключатель/оптрон и т.п.).
Идеалом было бы наличие аналоговых ДУС в этих точках, т.е. тахогенераторов.
_Ivana
Mar 21 2014, 09:09
Вот здесь
http://books.google.com.ua/books?id=oCsFYK...p;q&f=false автор рассматривает задачи локальной и глобальной стабилизации двухзвенного маятника в положении "оба звена вверх" в двух постановках - управлением или в точке подвеса, или в точке соединения звеньев. В случае "оба звена вверх" присутствуют две устойчивые и две неустойчивые моды, и ни одной колебательной. Автор рассчитывает управление, а в конце скромно замечает, что случай "второе звено вниз" гораздо проще, там одна неустойчивая мода и нечего его рассматривать. Я рассмотрел этот случай, там колебательная мода тоже сильно портит управление, оно получается тоже колебательным, в отличие от "оба звена вверх", а отсюда - и дребезг энкодера... Получается формально проще, а фактически, когда нет хорошего датчика скорости второго звена относительно первого - не факт.
Цитата
Достаточно двух много-пульсных энкодеров в точке вращения первого звена и в точке соединения звеньев + датчик точной механической вертикали ( да хоть бы и микропереключатель/оптрон и т.п.).
Идеалом было бы наличие аналоговых ДУС в этих точках, т.е. тахогенераторов.
Я хочу быть не привязанным к земле, у меня же нет шарнира в точке крепления первого звена - оно ставится на пол и держится на трении, на которое я надеюсь. Поэтому и датчики такие на первом звене - гироскоп и акселерометр, надеюсь получить от них хорошие угол первого звена от вертикали и его производную - буду изучать чужой опыт, благо его немало в этом случае. А межзвенный датчик я могу выбирать из более широкого диапазона, он же не привязан к внешней системе отсчета. Я думал, энкодера уже стоящего на двигателе с редуктором - 8400 щелчков на оборот должно хватить, а оказывается встретил такие сложности с расчетом его производной. Если будет совсем плохо, то буду думать какой другой датчик угловой межзвенной скорости поставить. Но пока из спортивных соображений хочу победить энкодер, то есть обойтись только им в межзвенном угле.
Цитата(_Ivana @ Mar 21 2014, 13:09)

, а отсюда - и дребезг энкодера... Получается формально проще, а фактически, когда нет хорошего датчика скорости второго звена относительно первого - не факт.
Невозможно избежать дребезга энкодера. Вы же знаете, что фазовые траектории не пересекаются...
Поэтому решение в виде - положение и скорость = нулю - изолированная точка.
Цитата(_Ivana @ Mar 21 2014, 13:09)

Я хочу быть не привязанным к земле, у меня же нет шарнира в точке крепления первого звена - оно ставится на пол и держится на трении, на которое я надеюсь.
Вот и новые вводные - скользящая точка опоры.
Я же просил - сделать точный чертеж кинематики со всеми ограничениями, нэ?
Потом, еще окажется, что это вовсе не плоский, а трехмерный случай

Что тут могу сказать - метод подбора управления способом тыка под недоопределенную физическую систему может вызвать только сочувствие.
_Ivana
Mar 21 2014, 18:11
Я постарался максимально подробно описать свою конструкцию, некоторые ограничения понятны из описания - например, максимальная угловая скорость двигателя с редуктором весьма ограничена, и ее может не хватить для нужд управления, еще буду проверять этот момент. С другой стороны, чем больше понижение на редукторе, тем больше момент и больше щелчков энкодера на оборот. Попробую найти компромисс.
Да, сначала хотел трехмерный случай, но решил сперва сделать плоский вариант

А насчет управления у Формальского все расписано, я рассчитал для своего случая, и при идеальных датчиках и двигателе все должно быть хорошо. Теперь на первый план выходят сложности с их неидеальностями и варианты как их оптимально обходить.
Извините, но если Вы не учитываете скольжение точки опоры, так и надо говорить - жестко закрепленная, она.
P.S.
Идеальные объекты.. как это заманчиво!
Увы, реальность ставит другие задачи, которые надо решать сейчас и в заданных ограничениях.
P.P.S.
Не надо кивать на Формальского или на Мартыненко.
Думать надо Вам.
Здесь небольшая (50 Mb) подборка материалов по обратному маятнику - может что-то пригодится:
http://exfile.ru/457976
_Ivana
Mar 24 2014, 14:30
Спасибо, скачал, буду пытаться разобраться. Тут на форуме уже интересовались подобным:
http://electronix.ru/forum/index.php?showtopic=94350 , некоторые рекомендации совпадают.
ЗЫ сейчас пытаюсь разобраться что такое наблюдатель и управление по модели - второе хоть как-то качественно понятно, а с первым совсем сурово - здесь
http://www.bmstu.ru/ps/~s_tkachev/ есть статья по ним, но там понятны только предлоги (а там векторные поля, коммутаторы, производные и скобки Ли, кораспределения, теоремы Гамильтона-Кэли и прочие сильные слова и термины

)
_Ivana
Mar 24 2014, 16:43
Да, в вашей подборке та серьезная статья Ткачева тоже присутствует
Спасибо, чувствую, объемом информации для усвоения я обеспечен на неопределенное время. Но делать нечего, придется разбираться и моделировать. Хотя, может и можно уже попробовать реализовать в железе управление, посчитанное по Формальскому – по двум углам и их производным, производную по энкодеру посчитать по МНК, модель в Матлабе более-менее работает. Хотя остается один тонкий момент – двигатель. У меня управление задается в виде момента силы, двигатель с сильным редуктором, может можно приблизительно считать, что момент силы прямо пропорционален напряжению, подаваемому на двигатель. Если же это сильно не так, и момент зависит еще от многих параметров (например, скорости вала), тогда надо попытаться включить в моделирование эти зависимости.
Момент вращения зависит от тока, ток от разницы напряжения и противоэдс, а также момента нагрузки, противоэдс - от скорости вращения и момента нагрузки.
Еще две постоянные времени - электромагнитная и электро-механическая. Первую, можно не учитывать, вторую - придется.
ДПТ независимого возбуждения или на магнитах.
M=k*Ф*I
E=k*Ф*w
U-E=I*R
M-Mc=J*dw/dt
В Вашем случае целесообразнее выполнить питание/управление двигателя от источника тока, при этом он приобретает свойство источника момента.
Задавая ток, получаете нужный момент.
_Ivana
Mar 25 2014, 16:03
Очередное спасибо. То есть, будет эффективнее не усложнять модель маятника моделью зависимости момента двигателя от напряжения (не переводить управление моментом в управление напряжением), а поставить резистор в разрыв, замерять напряжение на нем с помощью АЦП того же МК, и сделать еще один контур управления двигателем, который будет принимать на вход нужный момент (пропорциональный току) и с помощью своего ПИДа удерживать этот ток, управляя напряжением на двигателе с помощью ШИМ?
Или, скорее всего, уже есть готовые модули токового управления двигателем. Если стоят разумных денег и подойдут к моему двигателю, имеет смысл взять, чтобы хоть этот вопрос на первое время снять.
Цитата(_Ivana @ Mar 25 2014, 20:03)

и с помощью своего ПИДа удерживать этот ток, управляя напряжением на двигателе с помощью ШИМ?
ПИД тут совершенно не нужен. Обычный ШИМ со стабилизацией тока.
Kluwert
Mar 31 2014, 16:22
Если я правильно понял вашу задачу, то у меня было очень что-то близкое. Имелся угловой датчик положения, который оцифровывался с некоторой частотой. Поскольку частота оцифровки была в несколько раз больше чем скорость смены значений у датчика, то тоже получалась ступенчатая функция, а интересовала скорость вращения. Численное дифференцирование такой функции бессмысленно. Поэтому задача успешно решалась двумя способами. Первый - сглаживание нестационарным альфа-фильтром, при этом альфа являлась функцией от кол-ва "перескоков" датчика положения на заданном интервале времени. А второй - ещё проще, между перескоками датчика скорость полагалось постоянной и равной углу одного перескока датчика, делённого на кол-во отсчётов между ними. Недостаток второго способа в том, что крива скорости получается всё равно разрывной.
Kluwert, спасибо, я пробовал в другом варианте адаптивные фильтры - например, изменение длины окна (количества отсчетов) для МНК в зависимости не от количества перескоков, а просто от величины угла, предполагая, что при выходе в нулевой угол скорость тоже близка к нулю. Работает, но не сказать что сильно лучше, чем при постоянной длине окна, подобранной для любой частоты опроса датчика просто равной половине максимального времени запаздывания сигнала скорости, при котором система еще стабилизируется - это время подбиралось в модели с идеальной непрерывной угловой скоростью. То есть, все тот же пресловутый баланс гладкости/запаздывания. Хотя, может я что-то не так делаю, может и можно подобрать наиболее условно оптимальный фильтр для моего случая, или еще покрутить детальнее варианты учета времени между перескоками.
Все-таки хочется разобраться и попробовать построить управление с использованием модели и/или наблюдателя, благо математическая модель системы существует и относительно несложна. Это если пока отвлечься от управления двигателем, которое мне все же хочется реализовать через напряжение, введя в модель момент от противоэдс, и от наличия трения и условия ограничения скорости в межзвенном шарнире из-за редуктора большой кратности на двигателе.
Мне кажется было бы достаточно комбинирования двух способов. На высоких скоростях тот, что вы уже используете, дифференцирующий фильтр. На низких, использование времени между переключениями. Надо только как-то оптимально их совместить, для минимизации погрешности.
Можно и с задержкой работать, у меня была задача стабилизации перевернутого маятника со случайной задержкой (потеря пакетов в сети) в контуре управления. Но на деле я ни вижу в этом пользы, лучше задержку не вносить (если возможно), чем с ней бороться.
По синтезу регуляторов, может быть будет полезна вот эта ссылка
http://www.unn.ru/pages/e-library/aids/2006/36.pdf . Там в некоторых местах накручены сложности для того, чтобы линеаризовать неравенства (как и во многих статьях про LMI). Можно этого и не делать, а решать неравенства как есть, но другими методами. Каким нибудь стохастическим поиском, если регулятор настраивается один раз, то можете даже перебором. Такими методами можно синтезировать например динамический регулятор для системы с запаздыванием. Проще чем руками его стоить.
По двигателю, зная постоянную связывающую скорость с эдс и сопротивление обмоток, пренебрегая преходным процессом связанным с индуктивностью (для коллекторного двигателя при низкой частоте дискретизации управления можно так сделать) и зная скорость, можно управлять моментом задавая напряжение. Значение тока буду выражатся так, I=(U-Ew)/R, связь статическая. Но нужно предварительно оценить E и R, либо откалибровать регулятор. Выразить значение U зная все остальное не сложно. Но E и особенно R плавают с температурой, и не стоит рассчитывать на высокую точность такого метода. Уравнения ДПТ легко найти, если у меня не очень ясно получилось.