Классические объекты: нагрев, бак, масса-пружина, двигатель
Разбираем модели четырёх классических объектов и симулируем их на Python.
Большинство учебных и промышленных объектов сводятся к нескольким каноническим моделям: первого порядка (нагрев, бак) и второго порядка (масса-пружина-демпфер, двигатель).
Объекты первого и второго порядка
Порядок модели — это число независимых «накопителей» энергии или вещества в системе, то есть размер её состояния. Нагрев — первого порядка: один накопитель (тепло). Масса на пружине — второго: два накопителя (кинетическая энергия движения и потенциальная энергия пружины), поэтому состояние — это пара «позиция и скорость». Порядок определяет, как богато может вести себя система: первый порядок только плавно насыщается, второй — уже может колебаться и перерегулировать.
Масса-пружина-демпфер: канонический второй порядок
Это «дрозофила» теории управления — на ней показывают почти всё. Груз массой m на пружине жёсткостью kс с демпфером (трением) b, к нему приложена сила F. Второй закон Ньютона: m·x'' = F - b·x' - kс·x. Здесь x — смещение, x' — скорость, x'' — ускорение. Чтобы симулировать, разложим на два уравнения первого порядка через состояние «позиция, скорость».
# Масса-пружина-демпфер: отклик на постоянную силу (ступень)
m, b, kc = 1.0, 0.5, 4.0
F, dt = 4.0, 0.05
x, v = 0.0, 0.0 # состояние: позиция и скорость
target = F / kc # устоявшаяся позиция = 1.0
print(" t позиция '#'-график (перерегулирование заметно)")
for step in range(0, 121):
a = (F - b*v - kc*x) / m # ускорение из закона Ньютона
v += a * dt # интегрируем скорость
x += v * dt # интегрируем позицию
if step % 10 == 0:
bar = max(0, min(40, int(x / (target*1.7) * 40)))
print(f"{step*dt:4.1f} {x:6.2f} {'#'*bar}")
print(f"устоявшаяся позиция = {target:.2f}")Вывод:
t позиция '#'-график (перерегулирование заметно) 0.0 0.01 0.5 0.55 ############ 1.0 1.33 ############################### 1.5 1.67 ####################################### 2.0 1.38 ################################ 2.5 0.84 ################### 3.0 0.55 ############# 3.5 0.70 ################ 4.0 1.06 ######################## 4.5 1.29 ############################## 5.0 1.23 ############################# 5.5 1.00 ####################### 6.0 0.82 ################### устоявшаяся позиция = 1.00
Система сильно перелетела цель (пик ~1.67 при уставке 1.0), качнулась обратно почти до 0.55 и лишь постепенно успокаивается около 1.0. Это колебательный переходный процесс — характерная подпись слабо демпфированного объекта второго порядка. Демпфер b отвечает за затухание: при b=0 груз колебался бы вечно, при большом b подошёл бы к цели плавно, без перелёта.
Двигатель постоянного тока
Ещё один важнейший объект — электродвигатель. Его упрощённая модель связывает угловую скорость w с приложенным напряжением: J·dw/dt = K·u - b·w, где J — момент инерции ротора, K — коэффициент момента, b — трение, u — управляющее напряжение. Это снова первый порядок по скорости. Именно такими моторами крутятся колёса робота и пропеллеры дрона, поэтому модель двигателя — мостик к курсам ROS и робототехники.
# Разгон двигателя до установившейся скорости при ступенчатом напряжении
J, K, b = 0.01, 0.5, 0.1
u, dt = 12.0, 0.02
w = 0.0
print(" t скорость w")
for step in range(0, 51):
if step % 8 == 0:
print(f"{step*dt:4.2f} {w:8.3f}")
dw = (K*u - b*w) / J
w += dw * dt
print("устоявшаяся w =", round(K*u/b, 2), "рад/с")Вывод:
t скорость w 0.00 0.000 0.16 49.934 0.32 58.311 0.48 59.717 0.64 59.952 0.80 59.992 0.96 59.999 устоявшаяся w = 60.0 рад/с
Коэффициент демпфирования
Для объекта второго порядка вводят безразмерный коэффициент демпфирования (zeta), который одним числом описывает характер отклика. При zeta меньше 1 система недодемпфирована: колеблется с перерегулированием (наш случай). При zeta равном 1 — критически задемпфирована: подходит к цели максимально быстро без перелёта. При zeta больше 1 — передемпфирована: ползёт к цели медленно, как два сложенных объекта первого порядка. Это словарь, которым инженеры мгновенно описывают поведение: «у нас zeta около 0.7» сразу говорит коллеге, что система быстрая, с лёгким перерегулированием около 5% — часто это и есть желаемый компромисс.
Частые ошибки
- Путать порядок и сложность. Модель второго порядка не «сложнее в два раза» — она качественно богаче: умеет колебаться, чего первый порядок не может.
- Симулировать второй порядок одним уравнением. Нужно разложить на состояние (позиция, скорость) и интегрировать оба — иначе колебания не получатся.
- Игнорировать единицы. Перемешать радианы и градусы, метры и сантиметры — классический источник «странного» поведения модели.
Итоги
- Порядок модели = размер состояния = число накопителей; первый порядок насыщается, второй умеет колебаться.
- Масса-пружина-демпфер — канонический объект второго порядка; демпфер определяет затухание колебаний.
- Двигатель моделируется как первый порядок по скорости — мостик к робототехнике.