Методические указания к лр-2
Пропорциональная составляющая вырабатывает выходной сигнал, противодействующий отклонению регулируемой величины от заданного значения, наблюдаемого в данный момент времени. Он тем больше, чем больше это отклонение. Если входной сигнал равен заданному значению, то выходной равен нулю.
Однако при использовании только пропорционального регулятора значение регулируемой величины никогда не стабилизируется на заданном значении. Существует так называемая статическая ошибка, которая равна такому отклонению регулируемой величины, которое обеспечивает выходной сигнал, стабилизирующий выходную величину именно на этом значении. Например, в регуляторе температуры выходной сигнал (мощность нагревателя) постепенно уменьшается при приближении температуры к заданной, и система стабилизируется при мощности, равной тепловым потерям. Температура не может достичь заданного значения, так как в этом случае мощность нагревателя станет равна нулю, и он начнёт остывать.
Чем больше коэффициент пропорциональности между входным и выходным сигналом (коэффициент усиления), тем меньше статическая ошибка, однако при слишком большом коэффициенте усиления при наличии задержек (запаздывания) в системе могут начаться автоколебания, а при дальнейшем увеличении коэффициента система может потерять устойчивость.
Интегрирующая составляющая пропорциональна интегралу по времени от отклонения регулируемой величины. Её используют для устранения статической ошибки. Она позволяет регулятору со временем учесть статическую ошибку.
Если система не испытывает внешних возмущений, то через некоторое время регулируемая величина стабилизируется на заданном значении, сигнал пропорциональной составляющей будет равен нулю, а выходной сигнал будет полностью обеспечиваться интегрирующей составляющей. Тем не менее, интегрирующая составляющая также может приводить к автоколебаниям при неправильном выборе её коэффициента.
Дифференцирующая составляющая пропорциональна темпу изменения отклонения регулируемой величины и предназначена для противодействия отклонениям от целевого значения, которые прогнозируются в будущем. Отклонения могут быть вызваны внешними возмущениями или запаздыванием воздействия регулятора на систему.
Формула ПИД-регулятора
Временная область:
u(t) = Kp * e(t) + Ki * ∫e(t)dt + Kd * de(t)/dt
В операторной форме (передаточная функция):
W_PID(s) = Kp + Ki/s + Kd * s
где:
· u(t) — управляющий сигнал
· e(t) = r(t) - y(t) — ошибка (разница между заданием и выходом)
· Kp — коэффициент пропорциональной части
· Ki — коэффициент интегральной части
· Kd — коэффициент дифференциальной части
П (Пропорциональная) составляющая: Kp * e(t)
#Реализация на python
# Пример только П-регулятора
import numpy as np
import matplotlib.pyplot as plt
t = np.linspace(0, 10, 100)
error = 1.0 # постоянная ошибка
# Только П-составляющая
Kp = 2.0
u_P = Kp * error # всегда = 2.0
print(f"П-составляющая при ошибке {error}: u_P = {Kp} * {error} = {u_P}")
Достоинства:
· Мгновенная реакция на ошибку
· Простота
Недостатки:
· Остаётся статическая ошибка в установившемся режиме
· Не устраняет влияние постоянных возмущений
И (Интегрирующая) составляющая: Ki * ∫e(t)dt
# python
# Интеграл накапливает ошибку со временем
dt = 0.1
Ki = 0.5
integral = 0.0
u_I_history = []
for i in range(len(t)):
integral += error * dt # накапливаем ошибку
u_I = Ki * integral
u_I_history.append(u_I)
# График интегральной составляющей
plt.figure(figsize=(8, 4))
plt.plot(t, u_I_history, 'g-', linewidth=2)
plt.xlabel('Время')
plt.ylabel('Интегральная составляющая')
plt.title('Интеграл НАКАПЛИВАЕТ ошибку со временем')
plt.grid(True)
plt.show()
Достоинства:
· Устраняет статическую ошибку полностью
· Компенсирует постоянные возмущения
Недостатки:
· Медленная реакция (нужно время для накопления)
· Может вызывать перерегулирование и колебания
Д (Диффиринцирующая) составляющая: Kd * de(t)/dt
#python
# Производная - скорость изменения ошибки
error_values = np.ones(100) * 1.0
# Добавим изменение ошибки
error_values[50:] = 0.5 # в момент t=5 ошибка скачком уменьшилась
Kd = 1.0
u_D_history = []
for i in range(1, len(t)):
# Производная = (текущая ошибка - предыдущая)/dt
derivative = (error_values[i] - error_values[i-1]) / dt
u_D = Kd * derivative
u_D_history.append(u_D)
# В момент скачка ошибки производная даёт #большой отрицательный импульс!
print(f"В момент скачка ошибки производная = {u_D_history[49]:.1f}")
Достоинства:
· Предсказывает будущее поведение
· Сглаживает переходный процесс
· Снижает вероятность перерегулирования
Недостатки
· Усиливает шумы измерения
· Сложность настройки
5. Визуальное сравнение всех трёх составляющих
#python
import control as ct
import numpy as np
import matplotlib.pyplot as plt
# Создадим тестовую систему
sys_obj = ct.tf([1], [1, 1, 1]) # колебательный объект
# Настроим три регулятора для сравнения
Kp, Ki, Kd = 1.0, 0.5, 0.3
# 1. Только П-регулятор
reg_P = ct.tf([Kp], [1])
sys_P = ct.feedback(reg_P * sys_obj, 1)
# 2. ПИ-регулятор
reg_PI = ct.tf([Kp, Ki], [1, 0]) # Kp + Ki/s = (Kp*s + Ki)/s
sys_PI = ct.feedback(reg_PI * sys_obj, 1)
# 3. ПИД-регулятор
# W_PID = Kp + Ki/s + Kd*s = (Kd*s^2 + Kp*s + Ki)/s
reg_PID = ct.tf([Kd, Kp, Ki], [1, 0])
sys_PID = ct.feedback(reg_PID * sys_obj, 1)
# Моделируем
t = np.linspace(0, 20, 1000)
t1, y1 = ct.step_response(sys_P, t)
t2, y2 = ct.step_response(sys_PI, t)
t3, y3 = ct.step_response(sys_PID, t)
# График сравнения
plt.figure(figsize=(12, 6))
plt.plot(t1, y1, 'r-', linewidth=2, label='Только П (Kp=1)')
plt.plot(t2, y2, 'b-', linewidth=2, label='ПИ (Kp=1, Ki=0.5)')
plt.plot(t3, y3, 'g-', linewidth=2, label='ПИД (Kp=1, Ki=0.5, Kd=0.3)')
plt.axhline(y=1, color='k', linestyle='--', label='Цель = 1')
plt.xlabel('Время, с')
plt.ylabel('Выход')
plt.title('Сравнение П, ПИ и ПИД регуляторов')
plt.grid(True, alpha=0.3)
plt.legend()
plt.show()
Результат:
1. Красная (П): Не достигает 1 (статическая ошибка!)
2. Синяя (ПИ): Достигает 1, но с колебаниями
3. Зелёная (ПИД): Быстрее всех, с минимальными колебаниями
Настройки ПИД-регулятора
# Примеры настроек для разных объектов
PID_presets = {
'Медленный объект (печь)': {
'Kp': 1.0,
'Ki': 0.1, # маленький Ki - медленное интегрирование
'Kd': 5.0 # большой Kd - сглаживание медленных процессов
},
'Быстрый объект (двигатель)': {
'Kp': 5.0,
'Ki': 2.0, # средний Ki
'Kd': 0.1 # маленький Kd - шумы измерения мешают
},
'Колебательный объект': {
'Kp': 2.0,
'Ki': 1.0,
'Kd': 0.5 # средний Kd для гашения колебаний
}
}
for obj_type, params in PID_presets.items():
print(f"{obj_type}: Kp={params['Kp']}, Ki={params['Ki']}, Kd={params['Kd']}")
Задание к лабораторной работе
Цель работы: Изучение влияния коэффициентов ПИД-регулятора на качество управления, сравнение с П- и ПИ-регуляторами.
Часть 1.1: Исследование влияния интегральной составляющей (Ki)
Объект: Интегрирующее звено с инерционностью
W_obj(s) = 2 / (s * (3s + 1))
Задание:
1. Исследовать систему только с П-регулятором (Kp=2, Ki=0, Kd=0). Определить статическую ошибку.
2. Добавить интегральную составляющую: Ki=0.3. Исследовать, как изменились:
· Статическая ошибка
· Время переходного процесса
· Характер переходного процесса
3. Увеличить Ki до 1.0. Проанализировать, что произошло с системой (появились ли колебания?).
4. Подобрать оптимальное значение Ki (компромисс между скоростью устранения ошибки и вероятностью возникновения колебаний).
5. Сравнить три случая на одном графике. Сделать вывод о роли интегральной составляющей.
Часть 1.2.: Исследование влияния дифференциальной составляющей (Kd)
Объект: Колебательное звено
W_obj(s) = 4 / (s² + 0.6s + 4)
Задание:
1. Использовать ПИ-регулятор с параметрами: Kp=1.5, Ki=0.8, Kd=0. Зафиксировать показатели качества.
2. Добавить дифференциальную составляющую: Kd=0.5. Исследовать изменения:
· Величина перерегулирования
· Время переходного процесса
· Количество колебаний до успокоения
3. Увеличить Kd до 2.0. Проанализировать:
· Как изменилось демпфирование колебаний?
· Не появилась ли слишком медленная реакция?
4. Исследовать случай Kd=5.0. Объяснить, почему слишком большой Kd может ухудшить качество управления.
5. Подобрать оптимальное значение Kd. Сделать вывод о роли дифференциальной составляющей.
Часть 2. Сравнение П-, ПИ- и ПИД-регуляторов
Объект: Система третьего порядка
W_obj(s) = 5 / ((s+1)(0.5s+1)(0.2s+1))
Задание:
1. Настроить П-регулятор (Kp=1, Ki=0, Kd=0). Рассчитать статическую ошибку.
2. Настроить ПИ-регулятор (Kp=1.2, Ki=0.4, Kd=0). Сравнить с П-регулятором:
· Устранилась ли статическая ошибка?
· Как изменилось время переходного процесса?
3. Настроить ПИД-регулятор (Kp=1.5, Ki=0.5, Kd=0.3). Сравнить с ПИ-регулятором:
· Уменьшилось ли перерегулирование?
· Улучшилось ли быстродействие?
4. Построить на одном графике переходные процессы для всех трёх регуляторов.
5. Сделать сравнительный анализ, указав преимущества и недостатки каждого типа регулятора.