|
|
  |
Сервопривод - какие алгоритмы кроме ПИД используются?, результаты с ПИД не устраивают (может неправильно готовлю). |
|
|
|
Mar 14 2010, 09:59
|

Гуру
     
Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095

|
Стоит задача: оживить авиационный индикатор. Индикатор состоит из двухфазного двигателя типа ДИД, который через редуктор двигает шкалу или вращает стрелку и датчик обратной связи (потенциометр или сельсин). Двигатель запитываю пониженным напряжением (17в вместо 36в) 400Гц. Больше не могу - входное питание постоянка 24в. Двигатель вращается замечательно. Проблема с реализацией следящей системы. Редуктор обладает весьма значительной инерцией и трением покоя. Попробовал реализовать ПИД (по статье "PID without PhD"), но результат не понравился. Настроить его по Зиглеру-Николсу невозможно - при малых P двигатель не может преодолеть трение редуктора, увеличиваю - как только двигатель в состоянии стронуть редуктор начинаются колебания. Задавить колебания можно значительным увеличением D. При малых D торможение начинается слишком поздно, при больших оно начинает тормозить еще на разгоне, система получается очень вялой. При малых изменениях входного сигнала I часть отрабатывает медленно, а если ее ускорить - начинает мешать при больших перемещениях, снова начинаются колебания. Какие еще алгоритмы применяются в подобных сервосистемах? На просторах интернета встречается статья "Fundamentals of Servo Motion Control", где кроме PID управления описано некое PIV управление, но описано в общих словах. Поиск этого PIV выдает перепечатки этой самой "Fundamentals" с теми же самыми картинками и ни слова больше. Какие алгоритмы применяются в сервосистемах радиоуправляемых моделей? Там нагрзука сервомашинки заранее неизвестна, но работают они очень шустро и четко. Процессор - мега88, плавающую точку не успеет, все считаю в фиксированной. Частота опроса датчика - 50 Гц. В какую сторону копать? Ссылки с не очень заумной математикой приветствуются.
--------------------
На любой вопрос даю любой ответ"Write code that is guaranteed to work, not code that doesn’t seem to break" ( C++ FAQ)
|
|
|
|
|
Mar 14 2010, 11:00
|

Гуру
     
Группа: Banned
Сообщений: 2 754
Регистрация: 5-06-05
Из: Zurich
Пользователь №: 5 744

|
Цитата(Сергей Борщ @ Mar 14 2010, 11:59)  . Какие алгоритмы применяются в сервосистемах радиоуправляемых моделей? Там нагрзука сервомашинки заранее неизвестна, но работают они очень шустро и четко. так называемае канальное кодирование типа шим.Имеем к примеру 8 пропорциональных каналов, соответственно 8 миллисекундных(1-1.5 как у кого) импульсов и затем синхронизирующий импульс длительностью что то 10 мс, все это подается на сдвиговый регистр синхронизация- сброс по длинному импульсу, ну и на конкретном выводе присутствует конкретный канальный импульс .... на передающем конце с помощью пер. резистора меняется длительность конкретного канального импульса больше меньше среднего 1 мс и все это подается на рулевую машинку, которая сравнивает свой импульс с приходящим, путем отработки-- двигатель вращает потенциометр и уравнивает опорный с приходящим импульсами... вот тут схемка рулевой машинки, там вроде ПИ фильтр присутствует R8 R4 C2 0.15uF...вот так это работает, ИМХО с сельсинами мутота намного больше, это ориентировано на 400 Гц 3 фазы, сельсин приемник сельсин передатчик...помню кабина РЛС, 11 тонн, пошла вразнос из за разрегулировки ОС...
|
|
|
|
Guest_@Ark_*
|
Mar 14 2010, 11:04
|
Guests

|
IMHO, нужна обратная связь по скорости вращения двигателя. В первую очередь, задаем скорость вращения и стабилизируем ее с помощью ПИ-регулятора (Д - не нужно). По датчику положения включаем/выключаем двигатель в нужном направлении... Примерно так, в первом приближении.
|
|
|
|
|
Mar 14 2010, 12:02
|
Гуру
     
Группа: Модераторы
Сообщений: 8 752
Регистрация: 6-01-06
Пользователь №: 12 883

|
Цитата(Сергей Борщ @ Mar 14 2010, 12:59)  В какую сторону копать? Ссылки с не очень заумной математикой приветствуются. Я не вижу отсюда, почти ничего... Если вы уверены, что проблема именно в трении, то можно побороть эту нелинейность, добавляя момент, который это трение компенсирует (почти). Это означает, что к моменту, который вычисляется Вашим ПИДом (или чем Вы там командуете) нужно добавлять константу*(sign(вычисленная скорость)), возможно, с задержкой. Получится более линейная вещь.
|
|
|
|
Guest_@Ark_*
|
Mar 14 2010, 12:42
|
Guests

|
Цитата ... Получится более линейная вещь. По моему, требуемый момент, будет зависеть от скорости не совсем линейно. Особенно, при малых скоростях. Да и не только от скорости он зависит, но и от других вещей... Лучше уж сразу скорость стабилизировать, по обратной связи. По факту, так сказать.
|
|
|
|
|
Mar 14 2010, 13:02
|
Гуру
     
Группа: Модераторы
Сообщений: 8 752
Регистрация: 6-01-06
Пользователь №: 12 883

|
Цитата(@Ark @ Mar 14 2010, 15:42)  По моему, требуемый момент, будет зависеть от скорости не совсем линейно. Особенно, при малых скоростях. Да и не только от скорости он зависит, но и от других вещей... Лучше уж сразу скорость стабилизировать, по обратной связи. По факту, так сказать. То, что я написала относится именно с случаю т. наз. "сухого трения". Скорость при малых значениях ее обычно измеряется с большой ошибкой. "Жидкое трение", которое пропорционально скорости, - это хорошо.
|
|
|
|
Guest_@Ark_*
|
Mar 14 2010, 13:08
|
Guests

|
Цитата Скорость при малых значениях ее обычно измеряется с большой ошибкой. Это верно, конечно. Поэтому, при наличии редуктора, лучше измерять ее непосредственно на двигателе, а не по датчику положения.
|
|
|
|
|
Mar 14 2010, 18:50
|

Гуру
     
Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095

|
Цитата(proxi @ Mar 14 2010, 13:00)  двигатель вращает потенциометр и уравнивает опорный с приходящим импульсами... У меня примерно то же, только цифровым способом. Проблема в том, что к моменту уравнивания редуктор имеет скорость и за счет инерции пролетает нужное положение. Цитата(proxi @ Mar 14 2010, 13:00)  ИМХО с сельсинами мутота намного больше, это ориентировано на 400 Гц 3 фазы Не все так страшно - у меня сельсин запитывается теми же 400Гц что и обмотка возбуждения двигателя, оцифровка, вычисление арктангенса. Это работает, полградуса точность я получаю, ее достаточно. Цитата(@Ark @ Mar 14 2010, 13:04)  IMHO, нужна обратная связь по скорости вращения двигателя. В первую очередь, задаем скорость вращения и стабилизируем ее с помощью ПИ-регулятора (Д - не нужно). По датчику положения включаем/выключаем двигатель в нужном направлении... Примерно так, в первом приближении. Скорость я могу посчитать по соседним отсчетам датчика положения. А вот на каком уровне ее стабилизировать - не знаю. Я вижу две скорости - как можно быстрее и стоп. Как посчитать требуемую скорость, чтобы система остановилась в требуемом положении - не представляю. Цитата(Tanya @ Mar 14 2010, 14:02)  Я не вижу отсюда, почти ничего... Если вы уверены, что проблема именно в трении, то можно побороть эту нелинейность, добавляя момент, который это трение компенсирует (почти). Это означает, что к моменту, который вычисляется Вашим ПИДом (или чем Вы там командуете) нужно добавлять константу*(sign(вычисленная скорость)), возможно, с задержкой. Получится более линейная вещь. Трение там в момент старта. Потом начинает мешать инерция редуктора. В редукторах с большим трением во время хода как раз проблем нет: движок откючил - все остановилось. Цитата(@Ark @ Mar 14 2010, 15:08)  Это верно, конечно. Поэтому, при наличии редуктора, лучше измерять ее непосредственно на двигателе, а не по датчику положения. В некоторых индикаторах используется двигатель-генератор серии ДГ и, теоретически, я могу считать с генераторной части скорость. Но хотелось бы обойтись без этого - не во всех индикаторах есть генератор и я не совсем понимаю, в чем разница - люфты в редукторе минимальные, если вращается двигатель, то и сигнал с датчика положения меняется пропорционально. Разве что с генератора можно получить информацию о скорости с лучшим разрешением. Цитата(_Pasha @ Mar 14 2010, 17:35)  Стало быть, и период сервы такой же ? Или экстраполируете координату? Если 20мс на все - имхо это медленно. Где-то рядом в частотной области собственные частоты у всей механики в целом. Нет, координату не экстраполирую. Чаще снимать не получается - в случае с сельсином я делаю оцифровку в одной точке периода 400Гц, оцифровываю 4 канала (2 сельсина) и усредняю два значения. В случае с потенциометром делаю два измерения на период (в моменты перехода через 0, для устранения помех от двигателя), и усреднение по 4 отсчетам. Там можно скорость поднять, но тогда разница между соседними отсчетами будет совсем небольшая - стрелка перемещается через всю шкалу где-то 2 сек. на максимальной скорости. Вот я и думал, что могут быть алгоритмы, позволяющие "на лету" оценить инерцию и учитывать ее.
--------------------
На любой вопрос даю любой ответ"Write code that is guaranteed to work, not code that doesn’t seem to break" ( C++ FAQ)
|
|
|
|
|
Mar 14 2010, 21:01
|

Частый гость
 
Группа: Свой
Сообщений: 158
Регистрация: 6-08-07
Из: Moscow
Пользователь №: 29 586

|
Я для регулирования положения делал табличку зависимости скорости от расстояния до установки.  В данный момент расстояние до цели delta, а скорость v. v < vel(delta) * 0.9 => увеличиваю усилие v > vel(delta) * 1.1 => уменьшаю усилие В конечной точке включаю тормоз. Конечную систему видел один раз, в остальном всё делал удалённо. + Нагрузка у меня всё время разная и алгоритм нормально её отрабатывает. - Если значения при подходе сделать очень малыми, установка будет точной, но ждать её придётся долго. - Если очень большими - может возникнуть дёрганье вокруг точки установки.
|
|
|
|
|
Mar 14 2010, 21:24
|

Гуру
     
Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095

|
Цитата(Tanya @ Mar 14 2010, 21:13)  Что значит оценить на лету? Она не меняется.. годами... Чтобы не настраивать драйвер под каждый конкретный индикатор. Цитата(Tanya @ Mar 14 2010, 21:13)  Что-то не так у Вас. Инерция Вам, скорее, помогает, чем мешает. А что мешает... мне непонятно.... Как она мне может помогать? Я прекратил подавать напряжение на двигатель, а механизм продолжает двигаться. Значит, надо прекращать крутить двигатель заранее. Насколько заранее - зависит от скорости, которую он успел набрать и это надо как-то рассчитывать. По инерции с максимальной скорости стрелка пролетает половину шкалы, значит надо тормозить, вращая поле в двигателе в обратном направлении. Вращать надо начинать заранее. Должны же быть алгоритмы для подобных систем, задача вроде типовая. Буду, конечно, пробовать снимать характеристики разгона-торможения в процесса калибровки, но не хотелось изобретать велосипед. Цитата(man with no name @ Mar 14 2010, 23:01)  Я для регулирования положения делал табличку зависимости скорости от расстояния до установки. ... В данный момент расстояние до цели delta, а скорость v. v < vel(delta) * 0.9 => увеличиваю усилие v > vel(delta) * 1.1 => уменьшаю усилие В конечной точке включаю тормоз. Можно подробнее? На основании каких данных строилась табличка? За счет чего получается независимость от нагрузки? Отдельного тормоза у меня нет, только торможение противовращением поля в двигателе.
--------------------
На любой вопрос даю любой ответ"Write code that is guaranteed to work, not code that doesn’t seem to break" ( C++ FAQ)
|
|
|
|
Guest_@Ark_*
|
Mar 14 2010, 22:45
|
Guests

|
Цитата ... люфты в редукторе минимальные, если вращается двигатель, то и сигнал с датчика положения меняется пропорционально. Разве что с генератора можно получить информацию о скорости с лучшим разрешением. Разница именно в этом. На малых скоростях качество регулирования скорости может отличаться значительно... Отдельный регулятор по скорости, по моему мнению, необходим. При старте из неподвижного состояния, в редукторе будет преодолеваться значительный момент силы трения покоя, а после начала движения момент сопротивления резко падает. ПИ-регулятор по скорости должен быстро отрабатывать эту ситуацию, иначе "перебег" будет неизбежен при малых рассогласованиях по положению, даже при небольших используемых скоростях. Регулятор скорости, в процессе работы, будет выполнять и функцию торможения, если, конечно, двигатель (и привод) это позволяет. Текущую скорость можно устанавливать пропорционально рассогласованию по положению. Причем, нужно ограничить, как максимальное, так и минимальное допустимое значение. Можно изменять ступенчато, разбить на несколько поддиапазонов в зависимости от значения рассогласования по положению, или даже задать постоянной. Получится еще один П(ИД)-регулятор, уже по положению, c линейной или ступенчатой (м.б. релейной) характеристикой.
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|