Я не понимаю Неотъемлемая часть ПИД-регулятора

Я не понимаю неотъемлемую часть ПИД-регулятора. Предположим, этот псевдокод из Википедии:

previous_error = 0
integral = 0 
start:
  error = setpoint - measured_value
  integral = integral + error*dt
  derivative = (error - previous_error)/dt
  output = Kp*error + Ki*integral + Kd*derivative
  previous_error = error
  wait(dt)
  goto start

Интеграл изначально равен нулю. А затем в цикле он интегрирует ошибку с течением времени. Когда я делаю (положительное) изменение измеренного значения или заданного значения, ошибка становится положительной, а интеграл «съедает» значения с течением времени (с самого начала). Но чего я не понимаю, так это того, что когда ошибка стабилизируется до нуля, интегральная часть по-прежнему будет иметь некоторое значение (интегральные ошибки с течением времени) и все равно будет вносить вклад в выходное значение контроллера, но не должна.

Может кто-нибудь объяснить мне это, пожалуйста?


person user561838    schedule 24.11.2012    source источник
comment
для всех, кто заинтересован, я реализовал этот точный алгоритм для управления скоростью цикла. stackoverflow.com/questions/38377820/   -  person Jim    schedule 15.07.2016


Ответы (6)


Подумайте о выходе в устойчивом состоянии... Вы хотите, чтобы измеренное_значение было заданным значением, ошибка была равна нулю, а выход был любым, что требуется, чтобы удерживать процесс устойчивым на измеренном значении. (В некоторых случаях может быть равен нулю, но выходной сигнал не всегда должен быть равен нулю — например: вам нужен нагреватель, настроенный на отметку 6,5, чтобы поддерживать в комнате температуру 72F.)

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

Если процесс находится в устойчивом состоянии, то ошибка-предыдущая_ошибка равна нулю, а член производной ничего не дает.

Если выход является соответствующей настройкой, которая удерживает процесс в устойчивом состоянии, то интегральный член должен быть единственным членом, обеспечивающим выходное значение. Он накопил надлежащую память ошибок, измеренных в единицах измерения, умноженных на время наблюдения, которые могут быть преобразованы в выходные единицы с помощью члена Ki, который выражается в единицах выходных единиц/(ошибка * время измерения).

В качестве примера термостата, если выход находится в 0-11 единицах на ручке электрического обогревателя в комнате, и вы измеряете градусы F в комнате по сравнению с заданным значением 72F каждую 1 минуту, тогда интеграл суммируется градусыFtooCold*минуты, которые вы записали, а термин Ки преобразует сумму наблюдаемых ошибок в единицы измерения на циферблате.

Это совершенно нормально, и ожидается, что интеграл будет отличен от нуля в устойчивом состоянии.

person Dave X    schedule 09.06.2014

В зависимости от системы, которой вы хотите управлять, и качества датчика всегда будут возникать помехи между контроллером и системой/установкой. Интегральная часть контроллера не обнуляется, когда возникает такая помеха, а вместо этого противодействует ей! Это связано с тем, что интеграл будет изменяться до тех пор, пока выход системы не станет равным эталонному (т. е. значение интеграла противоположно возмущению).

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

Кроме того, точность/шум датчика могут накладывать ограничение на точность значения интеграла, которое может колебаться вокруг нуля.

person Joost    schedule 24.11.2012

Давайте посмотрим на это так: мало того, что ошибка сама стабилизируется до нуля. Требуется, чтобы интеграл стремился к нулю, что означает, что среднее значение измеренного значения во времени соответствует заданному значению.

Плохим примером может быть попытка достичь значения 100% от нуля с некоторыми Ki, Kp, Kd.

x = 0,60,80,90,98,99,100,100,100.

Каково значение х? Среднее значение составляет 80,777. Даже близко не 100.

person Aki Suihkonen    schedule 24.11.2012
comment
Я все еще не понимаю. Можете ли вы объяснить это больше, пожалуйста? - person user561838; 24.11.2012
comment
Но интеграл станет равным нулю только в том случае, если измеренное значение превысит заданное значение (поскольку нам нужна отрицательная погрешность). В вашем примере, если (Ki равно 1, а dt также равно 1), когда измеренное значение будет равно 100 (= заданное значение), выход контроллера будет по-прежнему не равен нулю (я думаю, что он будет колебаться). Но если ПИ(D)-регулятор хорошо настроен, выброса нет. я до сих пор не понимаю :( - person user561838; 24.11.2012
comment
Я вынужден не согласиться. Перерегулирование является свойством I. P/D, с другой стороны, имеет свойство не достигать пункта назначения. Кроме того, интеграция обычно щадящая: I(n+1) = I(n)*альфа + (1-альфа)*ошибка медленно забывает предыдущие ошибки, уделяя больше внимания настоящему моменту. - person Aki Suihkonen; 24.11.2012

Член I необходим для установившейся ошибки. Посмотрите на пример графика в Википедии.

http://en.wikipedia.org/wiki/File:Change_with_Ki.png

Вы можете увидеть изменения на графике от изменения прироста I члена. Очевидно, что Ki = 2 слишком велико из-за интегрального завершения, что и вызывает этот резкий выброс. Ki = 0,5 выглядит нормально, но если вы хотите как можно скорее достичь стабильного значения, вам нужно еще немного увеличить Ki. Посмотрите на Ki = 1, он немного зашкаливает, но все же достигает стабильности быстрее, чем Ki = 0,5. Таким образом, вы должны решить, стоит ли такой компромисс того.

person thecooltodd    schedule 30.01.2013

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

person Nils Ove    schedule 18.08.2014

При всем уважении, у вас есть причина подвергнуть сомнению определение PID, потому что оно увековечивает ошибку в PID-регулировании по отношению к термину Intergral. Ошибку можно проиллюстрировать следующим образом: 1) Даже при нулевой ошибке интегральный член вызовет выходное действие. 2) Интерграл основан на предыдущих ошибках, которые больше не актуальны. Пропорциональное управление может привести к ошибке 0, если контроллер сравнивает вход с выходом и через отрицательную обратную связь и сводит ошибку к нулю.

Правильный член PID: Член D: Добавьте изменения (дифференциация) к установившемуся входу, которые будут объединены в суммирующем соединении.

I член: Добавьте изменения (дифференциация) к отрицательной (отрицательной обратной связи) установившегося ВЫХОДА, чтобы объединить их в суммирующем соединении.

Интеграция — это дифференциация, когда она сочетается с отрицательной обратной связью (вокруг)

Выход подключается к суммирующему Узлу с очень высокой игрой и отрицательной полярностью (инвертирующий).

Член P: желаемый ВЫХОД, деленный на желаемый ВХОД, ИЛИ отношение сигнала, подаваемого на суммирующий узел, к ВЫХОДУ, деленное на сигнал, подаваемый на суммирующий узел, на ВХОД.

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

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

person owlpic    schedule 24.12.2016