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

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

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

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

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

Ответ 1

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

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

Если процесс находится в устойчивом состоянии, то error-previous_error равен нулю, а производный термин ничего не дает.

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

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

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

Ответ 2

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

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

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

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

Ответ 3

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

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

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

Ответ 4

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

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

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

Ответ 5

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

Ответ 6

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

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

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

Интеграция - это дифференциация при объединении отрицательной обратной связи (вокруг)

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

P term: это желаемый OUTPUT, деленный на желаемый INPUT или отношение сигнала, подаваемого суммирующим соединением, OUTPUT, деленное на сигнал подал суммирующий переход через INPUT.

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

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