реклама на сайте
подробности

 
 
6 страниц V   1 2 3 > »   
Reply to this topicStart new topic
> Сервопривод - какие алгоритмы кроме ПИД используются?, результаты с ПИД не устраивают (может неправильно готовлю).
Сергей Борщ
сообщение Mar 14 2010, 09:59
Сообщение #1


Гуру
******

Группа: Модераторы
Сообщений: 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)
Go to the top of the page
 
+Quote Post
proxi
сообщение Mar 14 2010, 11:00
Сообщение #2


Гуру
******

Группа: 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 тонн, пошла вразнос из за разрегулировки ОС...
Go to the top of the page
 
+Quote Post
Guest_@Ark_*
сообщение Mar 14 2010, 11:04
Сообщение #3





Guests






IMHO, нужна обратная связь по скорости вращения двигателя. В первую очередь, задаем скорость вращения и стабилизируем ее с помощью ПИ-регулятора (Д - не нужно). По датчику положения включаем/выключаем двигатель в нужном направлении... Примерно так, в первом приближении.
Go to the top of the page
 
+Quote Post
Tanya
сообщение Mar 14 2010, 12:02
Сообщение #4


Гуру
******

Группа: Модераторы
Сообщений: 8 752
Регистрация: 6-01-06
Пользователь №: 12 883



Цитата(Сергей Борщ @ Mar 14 2010, 12:59) *
В какую сторону копать? Ссылки с не очень заумной математикой приветствуются.

Я не вижу отсюда, почти ничего... Если вы уверены, что проблема именно в трении, то можно побороть эту нелинейность, добавляя момент, который это трение компенсирует (почти). Это означает, что к моменту, который вычисляется Вашим ПИДом (или чем Вы там командуете) нужно добавлять константу*(sign(вычисленная скорость)), возможно, с задержкой. Получится более линейная вещь.
Go to the top of the page
 
+Quote Post
Guest_@Ark_*
сообщение Mar 14 2010, 12:42
Сообщение #5





Guests






Цитата
... Получится более линейная вещь.

По моему, требуемый момент, будет зависеть от скорости не совсем линейно. Особенно, при малых скоростях. Да и не только от скорости он зависит, но и от других вещей... Лучше уж сразу скорость стабилизировать, по обратной связи. По факту, так сказать.
Go to the top of the page
 
+Quote Post
Tanya
сообщение Mar 14 2010, 13:02
Сообщение #6


Гуру
******

Группа: Модераторы
Сообщений: 8 752
Регистрация: 6-01-06
Пользователь №: 12 883



Цитата(@Ark @ Mar 14 2010, 15:42) *
По моему, требуемый момент, будет зависеть от скорости не совсем линейно. Особенно, при малых скоростях. Да и не только от скорости он зависит, но и от других вещей... Лучше уж сразу скорость стабилизировать, по обратной связи. По факту, так сказать.

То, что я написала относится именно с случаю т. наз. "сухого трения". Скорость при малых значениях ее обычно измеряется с большой ошибкой. "Жидкое трение", которое пропорционально скорости, - это хорошо.
Go to the top of the page
 
+Quote Post
Guest_@Ark_*
сообщение Mar 14 2010, 13:08
Сообщение #7





Guests






Цитата
Скорость при малых значениях ее обычно измеряется с большой ошибкой.

Это верно, конечно. Поэтому, при наличии редуктора, лучше измерять ее непосредственно на двигателе, а не по датчику положения.
Go to the top of the page
 
+Quote Post
_Pasha
сообщение Mar 14 2010, 15:35
Сообщение #8


;
******

Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509



Цитата(Сергей Борщ @ Mar 14 2010, 13:59) *
Частота опроса датчика - 50 Гц.

Стало быть, и период сервы такой же ? Или экстраполируете координату? Если 20мс на все - имхо это медленно. Где-то рядом в частотной области собственные частоты у всей механики в целом.
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Mar 14 2010, 18:50
Сообщение #9


Гуру
******

Группа: Модераторы
Сообщений: 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)
Go to the top of the page
 
+Quote Post
Tanya
сообщение Mar 14 2010, 19:13
Сообщение #10


Гуру
******

Группа: Модераторы
Сообщений: 8 752
Регистрация: 6-01-06
Пользователь №: 12 883



Цитата(Сергей Борщ @ Mar 14 2010, 21:50) *
Вот я и думал, что могут быть алгоритмы, позволяющие "на лету" оценить инерцию и учитывать ее.

Что значит оценить на лету? Она не меняется.. годами...
Что-то не так у Вас. Инерция Вам, скорее, помогает, чем мешает. А что мешает... мне непонятно....
Go to the top of the page
 
+Quote Post
man with no name
сообщение Mar 14 2010, 21:01
Сообщение #11


Частый гость
**

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



Я для регулирования положения делал табличку зависимости скорости от расстояния до установки.

В данный момент расстояние до цели delta, а скорость v.
v < vel(delta) * 0.9 => увеличиваю усилие
v > vel(delta) * 1.1 => уменьшаю усилие
В конечной точке включаю тормоз.
Конечную систему видел один раз, в остальном всё делал удалённо.

+ Нагрузка у меня всё время разная и алгоритм нормально её отрабатывает.

- Если значения при подходе сделать очень малыми, установка будет точной, но ждать её придётся долго.
- Если очень большими - может возникнуть дёрганье вокруг точки установки.
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Mar 14 2010, 21:24
Сообщение #12


Гуру
******

Группа: Модераторы
Сообщений: 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)
Go to the top of the page
 
+Quote Post
proxi
сообщение Mar 14 2010, 21:42
Сообщение #13


Гуру
******

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



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

ну раз так, то сельсин конечно предпочтителен в силу своей точности, это у же профессионально а сервомашинки для моделей это так поделки, там тоже перерегулирование и колебательный процесс, на контроллере это можно реализовать изящнее с помощью разных алгоритмов...
Go to the top of the page
 
+Quote Post
Guest_@Ark_*
сообщение Mar 14 2010, 22:45
Сообщение #14





Guests






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

Разница именно в этом. На малых скоростях качество регулирования скорости может отличаться значительно...
Отдельный регулятор по скорости, по моему мнению, необходим. При старте из неподвижного состояния, в редукторе будет преодолеваться значительный момент силы трения покоя, а после начала движения момент сопротивления резко падает. ПИ-регулятор по скорости должен быстро отрабатывать эту ситуацию, иначе "перебег" будет неизбежен при малых рассогласованиях по положению, даже при небольших используемых скоростях. Регулятор скорости, в процессе работы, будет выполнять и функцию торможения, если, конечно, двигатель (и привод) это позволяет.
Текущую скорость можно устанавливать пропорционально рассогласованию по положению. Причем, нужно ограничить, как максимальное, так и минимальное допустимое значение. Можно изменять ступенчато, разбить на несколько поддиапазонов в зависимости от значения рассогласования по положению, или даже задать постоянной. Получится еще один П(ИД)-регулятор, уже по положению, c линейной или ступенчатой (м.б. релейной) характеристикой.
Go to the top of the page
 
+Quote Post
_Pasha
сообщение Mar 15 2010, 07:47
Сообщение #15


;
******

Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509



Типомысль:
Экстраполяция промежуточных отсчетов координаты при условии равенства нулю всех производных, которые выше первой. Т.е получаем постоянную скорость между отсчетами и линейную экстраполяцию координаты. Для реализации надо добавить второй контур ПИД-регулирования, по скорости. Тогда частоту сервы можно подымать.
Go to the top of the page
 
+Quote Post

6 страниц V   1 2 3 > » 
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 18th June 2025 - 18:00
Рейтинг@Mail.ru


Страница сгенерированна за 0.01411 секунд с 7
ELECTRONIX ©2004-2016