Я не розумію інтегральної частини PID-контролера


12

Я не розумію невід'ємну частину PID-контролера. Припустимо цей псевдокод з Вікіпедії:

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 також повинен бути нульовим, правда?

Може хтось мені це пояснить?

Відповіді:


16

Основне призначення інтегрального терміна - усунення стійкої помилки. У звичайному випадку має місце невелика похибка стаціонарного стану, а інтеграл використовується в основному для усунення цієї помилки. Однак правда, що коли помилка потрапить до 0, інтеграл все одно буде позитивним і змусить вас переступити. Потім після перекриття інтеграл знову почне знижуватися. Це негативний вплив інтегрального члена. Таким чином, завжди є компроміс, і вам доведеться налаштувати PID-контролер, щоб переконатися, що перехід є якомога меншим і що помилка стаціонарного стану зведена до мінімуму. Ось де вживається похідний термін. Похідний термін допомагає мінімізувати перебіг в системі.


8
І гарним прикладом стійкої помилки є тертя в суглобі. Скажімо, ваш контролер PD розташовується близько до вашого цільового кута суглоба, але не може дістатися туди через тертя. Термін "Я" повільно нарощуватиметься і в кінцевому підсумку генеруватиме достатньо великий внесок для подолання тертя.
Бен

2
Інший приклад - упередженість у рульовому управлінні. Якщо виявиться, що в рульовому управлінні є невеликий ухил, або для роботів, що працюють в стилі протектора, один протектор обертається трохи повільніше, ніж інший, незважаючи на те, що контролер встановив їх на однакове значення, буде зміщений. Інтегральний термін, встановлений правильно, виправляє це.
Відень Майк

8

Уявіть, що ви встановили PID-контролер на власну руку, щоб ви могли просто потримати чашку кави прямо перед собою.

  • Пропорційний елемент контролював би силу вашої руки відносно того, що положення руки буде занадто високим або занадто низьким.
  • Похідний елемент налаштував би цю силу залежно від того, наскільки швидко ви вже рухалися, щоб не перевищувати ціль.
  • Цілісний елемент компенсував би наслідки сили тяжіння; без цього чашка би відпочивала там, де пропорційна сила дорівнює силі тяжіння.

Здається, що частина коду, на який ви застрягли, полягає в тому, що система повинна якось виміряти вагу кави, і один із способів зробити це - накопичення помилки позиції з часом. Більшість PID-контролерів мають додатковий термін для визначення розумного обмеження розміру, яким може бути інтегральний елемент.


2
+1. "якщо похибка дорівнює нулю, вихід PID також повинен бути нульовим, правда?" Як пояснює Ян, навіть коли чашка кави знаходиться в ідеальному положенні, а помилка дорівнює нулю, вихід PID повинен мати певну силу вгору, щоб утримувати цю чашку в положенні.
Девід Кері

0

Ось відео, яке дає "інтуїтивне" розуміння циклів PID. У ньому є пояснення інтегрального терміна, а також пропорційні та похідні терміни.

https://www.youtube.com/watch?v=l03SioQ9ySg

Є наступне відео, яке пояснює математику і показує, як отримати код із загальної формули.

https://www.youtube.com/watch?v=sDd4VOpOnnA

введіть тут опис зображення

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.