Я не понимаю неотъемлемую часть ПИД-регулятора. Давайте предположим этот псевдокод из Википедии:
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
Интеграл устанавливается в ноль в начале. И затем в цикле интегрируется ошибка с течением времени. Когда я произвожу (положительное) изменение уставки, ошибка станет положительной, и интеграл «съест» значения с течением времени (с начала). Но что я не понимаю, так это то, что, когда ошибка стабилизируется обратно в ноль, интегральная часть все еще будет иметь некоторое значение (интегрированные ошибки во времени) и все равно будет вносить вклад в выходное значение контроллера, но это не должно происходить, потому что, если ошибка равна нулю, вывод PID также должен быть нулевым, верно?
Может кто-нибудь объяснить мне это, пожалуйста?
Представьте, что вы установили ПИД-регулятор на своей руке, чтобы вы могли держать чашку кофе прямо перед собой.
Похоже, часть кода, на которой вы застряли, состоит в том, что система должна каким-то образом измерять вес кофе, и один из способов сделать это - накапливать ошибку положения с течением времени. У большинства ПИД-контроллеров есть дополнительный термин для определения разумного ограничения размера, которым может быть интегральный элемент.
источник
Вот видео, которое дает «интуитивное» понимание петель PID. Он содержит объяснение интегрального термина, а также пропорционального и производного членов.
https://www.youtube.com/watch?v=l03SioQ9ySg
Есть продолжение видео, которое объясняет математику и показывает, как извлечь код из общей формулы.
https://www.youtube.com/watch?v=sDd4VOpOnnA
источник