Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: И снова про ПИД-регулятор...
Форум разработчиков электроники ELECTRONIX.ru > Цифровая обработка сигналов - ЦОС (DSP) > Алгоритмы ЦОС (DSP)
okela
Возникли несколько вопросов про цифровой ПИД-регулятор...

Два разных источника по-разному описывают конечные формулы для расчета выходного воздействия по методу приращений:
http://atm.h1.ru/index.html
http://www.rlda.ru/PID_Control_Tutor.htm
Ход рассуждений в обоих случаях вроде бы один и тот же, но в итоговой формуле : U(n)= U(n-1)+dU(n)

, где dU(n) = Kp*[Q0*e(n)+Q1*e(n-1)+Q2*e(n-2)] коэффициенты Q0 и Q1 сильно отличаются.

Собственные выкладки дали результат совпадающий с результатом первого источника. Его и было взято за основу.

Используем алгоритм приращений для ПИ-регулятора по следующей формуле:
U(n)= U(n-1)+ Kp*(e(n)-e(n-1)+T*e(n)/Ti)
и дополнительно результат выхода U(n) ограничен снизу нулём и сверху значением максимума (255).
Так вот при отключении интегральной части (большое значение Ti) и установке достаточно большого усиления Kp теоретически регулятор должен вырождаться в позиционный,т.е. при значениях ошибки е > 0 имеем на выходе 255 и в остальных случаях - 0.
Но.... Всё было бы именно так если бы не было ограничений выхода. Так как выход ограничен и в качестве аргумента выходной функции используется изменение ошибки...то получается что, допустим при текущем состоянии позиционного регулятора в максимуме, небольшой дрейф регулируемого параметра вверх(несколько едениц) вызовет кратковременный провал результирующего сигнала.
Этого эффекта не будет наблюдаться при использовании прямой зависимости : U(n)= Kp*e(n), где аргументом является сама ошибка.

Также вызвал ряд вопросов метод автонастройки ПИДа по процессу двухпозиционного регулирования, который описано в следующем источнике:
http://members.vicard.net/sensor/main1_10.htm
Здесь как-то не сходится задачка с ответом.. Если предположим , что в системе с диапазоном изменения параметра = 180 у.е. , устанавливаются колебания с размахом, например 5 у.е. , то по формуле имеем Кр = 0.45/А (А-размах).. Приводя к процентам, получаем что
Кр = 0.09*100 = 9[%/у.е.].
Теоретически значение значение Кр должно быть близко к расчитанному из соотношения Y=Kр·(U-X) для П-регулятора, где
Y -выходная величина сигнала регулятора и входная Е = U-X (невязка). Отношение максимального Y к максимальному Е дает результат
в тех же процентах - 100/180 = 0.555[%/у.е.] . Далеко не близкие результаты получились..
Где я ошибаюсь ????
LordN
Цитата
dU(n) = Kp*[Q0*e(n)+Q1*e(n-1)+Q2*e(n-2)]

эту формулу не следует использовать для получения П-регулятора.
"разверните" её и увидите, что в такой записи П-регулятор превратится в ПИ- с некоторой "неуправляемой" постоянной времени.
меж нами говоря, я бы вообще не советовал использовать такую запись для численного воплощения регулятора, т.к. в ней очень быстро накапливается вычислительная ошибка (шум). да и ведет себя такой регулятор "неправильно".
прямая запись ведет себя более "корректно", допускает всякие фокусы с отдельными составляющими - например можно слегка фильтрануть дифф-часть, прежде чем загнать её в регулятор, да и сам дифференциал можно брать по разному.
интеграл тоже - его можно тупо брать методом прямоугольников, а можно легко перейти к трапеции или к какому другому методу...

в общем, типа резюме, работа регулятора по приращению мне очень не понравилась в работе на реальных объектах.
okela
Цитата(LordN @ Mar 6 2006, 18:51) *
Цитата
dU(n) = Kp*[Q0*e(n)+Q1*e(n-1)+Q2*e(n-2)]

эту формулу не следует использовать для получения П-регулятора.
"разверните" её и увидите, что в такой записи П-регулятор превратится в ПИ- с некоторой "неуправляемой" постоянной времени.
меж нами говоря, я бы вообще не советовал использовать такую запись для численного воплощения регулятора, т.к. в ней очень быстро накапливается вычислительная ошибка (шум). да и ведет себя такой регулятор "неправильно".
прямая запись ведет себя более "корректно", допускает всякие фокусы с отдельными составляющими - например можно слегка фильтрануть дифф-часть, прежде чем загнать её в регулятор, да и сам дифференциал можно брать по разному.
интеграл тоже - его можно тупо брать методом прямоугольников, а можно легко перейти к трапеции или к какому другому методу...

в общем, типа резюме, работа регулятора по приращению мне очень не понравилась в работе на реальных объектах.


Метод этот вроде бы широко рекомендуется для реализации цифрового варианта ПИД . Один из его плюсов - отсутсвие насышения интеграла.. А "неправильная" работа такого регулятора что связана именно с накопленным выч.шумом ? Хотя мне думалось что вычислительная ошибка не сильно скажется
при 8-битном выходном сигнале.
LordN
да, действительно в таком варианте нет необходимости вычислять интеграл отдельно, т.к. сама запись и есть, по сути, интеграл со всеми своими недостатками.
кроме того, я обращал внимание на тот факт, что ПИД-регулятор в такой записи ведет себя если не совершенно, то значительно иначе чем при прямой записи.
насчет выч.шума - так же по наблюдению - чем меньше разрядность, тем он выше и тем быстрее накапливается ошибка. и чем выше частота дискретизации, тем быстрее, т.к. шум будет зависить только от частоты суммирования.
и мой скромный опыт в этом деле говорит, что чем выше разрядность чисел - тем "лучше"(более "предсказуемо" и "правильно") ведет себя ПИД.
если исходная вх/вых разрядность мала, то, буде есть такая возможность, имеет смысл искусственным образом её увеличить, хотя бы простым экспоненциальным фильтром.
subver
Цитата
Метод этот вроде бы широко рекомендуется для реализации цифрового варианта ПИД . Один из его плюсов - отсутсвие насышения интеграла.. А "неправильная" работа такого регулятора что связана именно с накопленным выч.шумом ? Хотя мне думалось что вычислительная ошибка не сильно скажется
при 8-битном выходном сигнале.


А про отсутствие насыщения интеграла можно подробнее?

При реализации такого метода после ограничения выходного сигнала регулятор вел себя некорректно. При реализации "в лоб" (отдельно П и И ветви) - все отлично.
LordN
Цитата
А про отсутствие насыщения интеграла можно подробнее?

ну, приращение и есть по сути интеграл сам в себе. в такой записи интегральная составляющая присутсвует неявно, потому и нет насыщения.
при реализации "в лоб" нужно отдельно накапливать интегральную составляющую, ограничивать её сверху и снизу и на полный сигнал тоже надо накладывать ограничение сверху/снизу.
NickNich
По поводу насыщения в выходном сигнале ПИ-регулятора.

Что мешает завести обратную связь по предыдущему значению не с выхода ПИД-регулятора (который у Вас ограничен), а с выхода сумматора, на котором выполняется интегрирование? А выход пусть себе ограничивается как ему угодно...
LordN
?)
Цитата
Что мешает завести обратную связь по предыдущему значению не с выхода ПИД-регулятора
а о какой ОС речь? об ограничении? если да, то так и делается, сумма ограничивается непосредственно при вычислении...
Цитата
А выход пусть себе ограничивается как ему угодно...

это не всегда годится. (а может я просто не понял о чем речь)
NickNich
2 LordN

В корневом сообщении написано, что ограничивается только выход ПИ-регулятора. О промежуточных ограничениях и насыщениях речи не идёт. Т.е. у автора реализован следующий способ получения выхода (обратная связь в интегратор заводится с выхода регулятора):

Uout(k) = SAT(Uout(k-1) + Kp*(...)).

Предлагается делать так (обратная связь в интегратор заводится с выхода сумматора):

U1(k) = U1(k-1) + Kp*(...)
Uout(k) = SAT(U1(k))
LordN
SAT(...) - это сумма по k?
NickNich
SAT = SATURATION, насыщение или ограничение результата
okela
Цитата(NickNich @ Mar 7 2006, 11:43) *
2 LordN

В корневом сообщении написано, что ограничивается только выход ПИ-регулятора. О промежуточных ограничениях и насыщениях речи не идёт. Т.е. у автора реализован следующий способ получения выхода (обратная связь в интегратор заводится с выхода регулятора):

Uout(k) = SAT(Uout(k-1) + Kp*(...)).

Предлагается делать так (обратная связь в интегратор заводится с выхода сумматора):

U1(k) = U1(k-1) + Kp*(...)
Uout(k) = SAT(U1(k))


Да , действительно использована первая запись... Может быть и имеет смысл попробовать второй вариант.
А по поводу автонастройки коэффициетна усиления у кого-нить есть какие-то рекомендации ?
LordN
Цитата(NickNich @ Mar 7 2006, 13:51) *
SAT = SATURATION, насыщение или ограничение результата
ага, теперь понятно.
т.е. имеет ввиду такая запись:
Код
SAT(х, Min, Max)
{
           temp = x;

           if(x > Max) temp = Max else
           if(x < Min) temp = Min;
           return temp;
}
?
если да, то нет, так:
Цитата
U1(k) = U1(k-1) + Kp*(...)
Uout(k) = SAT(U1(k))
делать нельзя, т.к. ограничивать нужно именно само U1(k), т.е.
U1(k) = SAT(U1(k-1) + Kp*(...))
только так, иначе U1(k) может легко "уйти" далеко за пределы и перестанет реагировать на ошибку e(k)
okela
Цитата(LordN @ Mar 7 2006, 16:17) *
Цитата(NickNich @ Mar 7 2006, 13:51) *
SAT = SATURATION, насыщение или ограничение результата
ага, теперь понятно.
т.е. имеет ввиду такая запись:
Код
SAT(х, Min, Max)
{
           temp = x;

           if(x > Max) temp = Max else
           if(x < Min) temp = Min;
           return temp;
}
?
если да, то нет, так:
Цитата
U1(k) = U1(k-1) + Kp*(...)
Uout(k) = SAT(U1(k))
делать нельзя, т.к. ограничивать нужно именно само U1(k), т.е.
U1(k) = SAT(U1(k-1) + Kp*(...))
только так, иначе U1(k) может легко "уйти" далеко за пределы и перестанет реагировать на ошибку e(k)


Согласен, при достаточно большом коэффициенте усиления регулятор может быстро "улететь" в никуда, особенно если разрядность вычисляемых значений невысока...
LordN
Цитата
А по поводу автонастройки коэффициетна усиления у кого-нить есть какие-то рекомендации ?

практических - у меня нету sad.gif
на сайте owen.ru что-то про это было, они для своих регуляторов полуавтоматическую настройку пользуют.
на уровне слухов - вроде успешно используют нечеткие алгоритмы для автопоиска параметров ПИДа...
вот, пожалуй, и все, что по этой теме знаю..
subver
Цитата(LordN @ Mar 7 2006, 23:20) *
Цитата
А по поводу автонастройки коэффициетна усиления у кого-нить есть какие-то рекомендации ?

практических - у меня нету sad.gif
на сайте owen.ru что-то про это было, они для своих регуляторов полуавтоматическую настройку пользуют.
на уровне слухов - вроде успешно используют нечеткие алгоритмы для автопоиска параметров ПИДа...
вот, пожалуй, и все, что по этой теме знаю..


Есть еще такое предложение: если примерно известна модель системы, можно измерить ее реакцию на известный сигнал, и по этой реакции уже рассчитать коэффициенты ПИД-а. Т.е. здесь фактически не нужны алгоритмы поиска и т.п.
LordN
Цитата
Есть еще такое предложение: если примерно известна модель системы, можно измерить ее реакцию на известный сигнал, и по этой реакции уже рассчитать коэффициенты ПИД-а. Т.е. здесь фактически не нужны алгоритмы поиска и т.п.

угу, можно, но боле-мене приемлемый для анализа результат можно получить только для "малошумящих" систем типа "печка" (все происходит достаточно медленно и ровно, предсказуемо), а для систем типа "спичка на ветру" (все меняется очень быстро, болтается из стороны в сторону, непредсказуемо) - практически невозможно.
Stanislav
Цитата(okela @ Mar 7 2006, 15:11) *
...А по поводу автонастройки коэффициетна усиления у кого-нить есть какие-то рекомендации ?
Фильтры Калмана посмотрите...
okela
Цитата(Stanislav @ Mar 10 2006, 23:51) *
Цитата(okela @ Mar 7 2006, 15:11) *
...А по поводу автонастройки коэффициетна усиления у кого-нить есть какие-то рекомендации ?
Фильтры Калмана посмотрите...


А попроще чего-нибудь...?
Можно, конечно, снимать переходную характеристику реакции на скачок входного воздействия и рассчитывать по ней. Также можно постепенно увеличивая Кр определить критический Кр и вычислить по нему... Но это всё как бы уже не автонастройка.
subver
Цитата(okela @ Mar 14 2006, 14:32) *
Цитата(Stanislav @ Mar 10 2006, 23:51) *

Цитата(okela @ Mar 7 2006, 15:11) *
...А по поводу автонастройки коэффициетна усиления у кого-нить есть какие-то рекомендации ?
Фильтры Калмана посмотрите...


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


А чего вы ПИДрегулировать хотите? Может от этого стоит отталкиватся? Возможно там будет эффективнее не ПИД, а ПДД или ПИИ регулятор?
okela
2 Subver

Да, собственно, температуру железяки (нагреватель для сварки ПХВ) регулировать надо..
LordN
Цитата
Да, собственно, температуру железяки (нагреватель для сварки ПХВ) регулировать надо..

и нах тут ПИД? извините smile.gif...
термостата с гистерезисом разве не хватит?
okela
Цитата(LordN @ Mar 14 2006, 17:44) *
Цитата
Да, собственно, температуру железяки (нагреватель для сварки ПХВ) регулировать надо..

и нах тут ПИД? извините smile.gif...
термостата с гистерезисом разве не хватит?


Дело в том что незвестно какая достаточна точность поддержания температуры... поэтому решил взять
ПИД за основу.
LordN
Цитата
Дело в том что незвестно какая достаточна точность поддержания температуры...

ну, надо попытаться просчитать или хотя бы оценить это.
вам потребуется:
-температура плавления ПВХ
-удельная теплота плавления
-температура при которой ПВХ начнет гореть или его свойства станут недопустимыми для сварки.
-масса железяки-паяльника
-масса расплавляемого ПВХ
-время за которое надо провести плавку ПВХ

у меня в хозяйстве есть паяльник для сварки пропиленовых труб - утюг-утюгом, термостат тупейший, как в китайском утюге....
Stanislav
Цитата(okela @ Mar 14 2006, 11:32) *
А попроще чего-нибудь...?
Можно, конечно, снимать переходную характеристику реакции на скачок входного воздействия и рассчитывать по ней. Также можно постепенно увеличивая Кр определить критический Кр и вычислить по нему... Но это всё как бы уже не автонастройка.
Простите, фильтры Калмана - немного не из той оперы. Навеяно постом #17...
Автонастройку регулятора сделать можно, в виде адаптивного фильтра. Однако, заниматься этим не советую - сложно, нестабильно, гимор, короче. Для правильного выбора к-тов усиления необходимо задаться параметрами модели. Проще всего, как Вы и сказали, записать отклик системы на скачок. Далее следует вооружиться Матлабом. Берем тулбокс "System Identification", по отклику вычисляем параметры модели, предварительно задавшись её порядком (обычно 1-й, максимум 2-й). Более правильный, но и сложный подход заключается в решении уравнения теплопроводности для данной конфигурации нагревателя.
Теперь, когда есть модель системы, переходим к "Control System Design" тулбоксу, там есть чудные GUI (напр, SISO Design GUI), заносим полученные параметры модели и ПИД регулятора. Играясь параметрами регулятора, получаем желаемый вид переходной характеристики системы с ОС.
Не пугайтесь, если эти процедуры выглядят несколько сложно: разобраться в соответствующих инструментариях Матлаба очень полезно, когда-нибудь все равно пригодится.
vvs157
Цитата(Stanislav @ Mar 15 2006, 00:33) *
... Берем тулбокс "System Identification",
... переходим к "Control System Design" тулбоксу


А где эти дивные тулбоксы водятся?
Stanislav
Цитата(vvs157 @ Mar 15 2006, 01:31) *
Цитата(Stanislav @ Mar 15 2006, 00:33) *

... Берем тулбокс "System Identification",
... переходим к "Control System Design" тулбоксу
А где эти дивные тулбоксы водятся?
У меня в Матлабе 7.1 "System Identification" тулбокс находится в самом конце списка (сперва More... нажать нужно). "Control System" - в начале. Слово "Design" лишнее - было, по-моему, в более ранних версиях Матлаба, написал по памяти.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.