Классические объекты: нагрев, бак, масса-пружина, двигатель

Разбираем модели четырёх классических объектов и симулируем их на Python.

Большинство учебных и промышленных объектов сводятся к нескольким каноническим моделям: первого порядка (нагрев, бак) и второго порядка (масса-пружина-демпфер, двигатель).

Объекты первого и второго порядка

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

Масса-пружина-демпфер: канонический второй порядок

Это «дрозофила» теории управления — на ней показывают почти всё. Груз массой m на пружине жёсткостью с демпфером (трением) 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% — часто это и есть желаемый компромисс.

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

  • Путать порядок и сложность. Модель второго порядка не «сложнее в два раза» — она качественно богаче: умеет колебаться, чего первый порядок не может.
  • Симулировать второй порядок одним уравнением. Нужно разложить на состояние (позиция, скорость) и интегрировать оба — иначе колебания не получатся.
  • Игнорировать единицы. Перемешать радианы и градусы, метры и сантиметры — классический источник «странного» поведения модели.

Итоги

  • Порядок модели = размер состояния = число накопителей; первый порядок насыщается, второй умеет колебаться.
  • Масса-пружина-демпфер — канонический объект второго порядка; демпфер определяет затухание колебаний.
  • Двигатель моделируется как первый порядок по скорости — мостик к робототехнике.
Проверьте себя
1. Что определяет порядок модели объекта?
AЧисло датчиков
BЧисло независимых накопителей энергии/вещества (размер состояния)
CКоличество коэффициентов регулятора
DСкорость объекта
2. Почему масса-пружина-демпфер может колебаться, а нагрев — нет?
AУ неё больше масса
BЭто объект второго порядка с двумя накопителями (движение и пружина)
CУ неё нет трения
DНагрев тоже колеблется
3. За что отвечает демпфер b в модели массы-пружины?
AЗа жёсткость пружины
BЗа затухание колебаний: больше b — быстрее успокаивается
CЗа устоявшуюся позицию
DЗа частоту колебаний