Пропорциональная часть P и остаточная ошибка

Самый простой регулятор: реакция, пропорциональная ошибке.

Пропорциональная составляющая (P) выдаёт воздействие, пропорциональное текущей ошибке: $u = K_p e$. Чем дальше от цели — тем сильнее давим.

Идея пропорционального управления

Мы уже интуитивно пользовались P-регулятором в первых уроках. Его правило проще некуда: воздействие пропорционально ошибке. Уставка 60, выход 20 — ошибка 40, давим сильно. Выход подошёл к 58 — ошибка 2, давим слабо. Коэффициент $K_p$ (пропорциональный коэффициент усиления) задаёт, насколько резко регулятор реагирует. Это «рефлекс» системы: увидел отклонение — тут же толкнул в обратную сторону, с силой, пропорциональной отклонению.

u(t) = Kp * e(t),   где e(t) = setpoint - output

Влияние коэффициента Kp

Маленький $K_p$ — регулятор «вялый»: реагирует слабо, выходит на режим медленно, большая остаточная ошибка. Большой $K_p$ — «агрессивный»: быстро подходит, но склонен перелетать цель и колебаться, а за определённой гранью теряет устойчивость (мы это видели в разделе про устойчивость). Поиск хорошего $K_p$ — первый шаг настройки любого регулятора.

# P-регулятор управляет нагревом. Смотрим, как Kp влияет на итог.
def run(Kp):
    C, k, Tamb, dt = 50.0, 2.0, 20.0, 1.0
    setpoint, T = 60.0, 20.0
    for _ in range(80):
        err = setpoint - T
        u = Kp * err
        u = max(0.0, min(400.0, u))    # привод: 0..400 Вт
        T += ((u - k*(T-Tamb))/C)*dt
    return T, setpoint - T

print("Kp    итог.T   остат.ошибка")
for Kp in (1.0, 3.0, 8.0, 20.0):
    T, e = run(Kp)
    print(f"{Kp:4.1f}   {T:6.2f}   {e:8.2f}")

Вывод:

Kp    итог.T   остат.ошибка
 1.0    33.24      26.76
 3.0    43.99      16.01
 8.0    52.00       8.00
20.0    56.36       3.64

Главная беда P-регулятора: остаточная ошибка

Посмотрите на таблицу: даже при большом Kp=20 температура не доходит до 60 — остаётся ошибка 0.8 градуса. Это статическая (остаточная) ошибка, и она неизбежна для чистого P-регулятора. Причина проста и важна: чтобы держать нагреватель включённым (компенсировать потери тепла), регулятору нужно ненулевое воздействие. Но $u = K_p e$ даёт ненулевое $u$ только при ненулевой ошибке $e$. Если ошибка станет нулём, воздействие тоже обнулится, нагрев прекратится, температура упадёт. Поэтому система застывает в точке, где маленькая ошибка как раз порождает нужное воздействие.

Как работает под капотом: формула остаточной ошибки

В равновесии нагрев равен потерям: $K_p e = k (T - T_{amb})$, и одновременно $T = \text{setpoint} - e$. Решая, получаем $e = \dfrac{k (\text{setpoint} - T_{amb})}{K_p + k}$. Видно: ошибка падает с ростом $K_p$, но обращается в ноль только при $K_p \to \infty$, что невозможно (устойчивость не позволит). Проверим формулу численно.

k, setpoint, Tamb = 2.0, 60.0, 20.0
print("Kp    ошибка по формуле")
for Kp in (1.0, 3.0, 8.0, 20.0, 100.0):
    e = k*(setpoint - Tamb)/(Kp + k)
    print(f"{Kp:5.0f}   {e:8.3f}")
print("при Kp->inf ошибка -> 0, но это недостижимо")

Вывод:

Kp    ошибка по формуле
    1     26.667
    3     16.000
    8      8.000
   20      3.636
  100      0.784
при Kp->inf ошибка -> 0, но это недостижимо

Формула подтверждает: P-регулятор принципиально не может полностью устранить статическую ошибку. Это фундаментальное ограничение и главная причина, по которой в следующем уроке мы добавим интегральную составляющую.

Пропорциональная зона

В промышленных приборах P-составляющую часто задают не коэффициентом $K_p$, а зоной пропорциональности (proportional band) в процентах — это обратная величина усиления. Зона 20% означает, что привод проходит от 0 до 100% при изменении ошибки на 20% диапазона; это эквивалентно $K_p = 100/20 = 5$. Узкая зона = большое усиление = резкий регулятор; широкая зона = мягкий. Знать оба языка полезно: учебники и теория говорят на языке $K_p$, а наладчики у реальных контроллеров и панелей операторов — на языке процентов зоны. Это одна и та же физика, записанная по-разному, и путаница между ними — частый источник недоразумений при настройке промышленного оборудования.

Частые ошибки

  • Лечить остаточную ошибку ростом $K_p$. Это лишь уменьшает её, но не убирает, зато добавляет перерегулирование и риск неустойчивости.
  • Забыть про насыщение привода. При большом $K_p$ воздействие упирается в максимум привода, и реальное поведение отличается от расчётного.
  • Перепутать знак. Если $u = -K_p e$, регулятор будет усиливать отклонение — система пойдёт вразнос.

Итоги

  • P-регулятор: $u = K_p e$, воздействие пропорционально текущей ошибке.
  • Больший $K_p$ ускоряет реакцию, но увеличивает перерегулирование и приближает к неустойчивости.
  • P-регулятор всегда оставляет статическую ошибку — её устраняет интегральная составляющая.
Проверьте себя
1. Какова формула пропорциональной составляющей?
Au = Kp / e
Bu = Kp · e (воздействие пропорционально ошибке)
Cu = Kp · de/dt
Du = Kp · сумма e
2. Почему чистый P-регулятор оставляет статическую ошибку?
AИз-за шума датчика
BЧтобы держать ненулевое воздействие, нужна ненулевая ошибка (u=Kp·e)
CИз-за слишком малого Kp всегда
DИз-за насыщения привода
3. Что произойдёт при чрезмерном увеличении Kp?
AОшибка станет ровно нулём
BРеакция ускорится, но вырастет перерегулирование и появится риск неустойчивости
CПривод выключится
DСистема станет идеальной
py
Курс по теме
Пройдите курс «Python с нуля» — по шагам, с проверкой
8 уроков · ~14 ч · теория, упражнения и экзамен с бейджем
Открыть курс →