Что такое рассогласование или ошибка управления

Публикую первую главу лекций по теории автоматического управления, после которых ваша жизнь уже никогда не будет прежней.

Лекции по курсу «Управление Техническими Системами», читает Козлов Олег Степанович на кафедре «Ядерные реакторы и энергетические установки», факультета «Энергомашиностроения» МГТУ им. Н.Э. Баумана. За что ему огромная благодарность.

Данные лекции только готовятся к публикации в виде книги, а поскольку здесь есть специалисты по ТАУ, студенты и просто интересующиеся предметом, то любая критика привествуется.

1. Основные понятия теории управления техническими системами

1.1. Цели, принципы управления, виды систем управления, основные определения, примеры

Развитие и совершенствование промышленного производства (энергетики, транспорта, машиностроения, космической техники и т.д.) требует непрерывного увеличения производительности машин и агрегатов, повышения качества продукции, снижения себестоимости и, особенно в атомной энергетике, резкого повышения безопасности (ядерной, радиационной и т.д.) эксплуатации АЭС и ядерных установок.

Реализация поставленных целей невозможна без внедрения современных систем управления, включая как автоматизированные (с участием человека-оператора), так и автоматические (без участия человека-оператора) системы управления (СУ).

Определение: Управление – это такая организация того или иного технологического процесса, которая обеспечивает достижение поставленной цели.

Теория управления является разделом современной науки и техники. Она базируется (основывается) как на фундаментальных (общенаучных) дисциплинах (например, математика, физика, химия и т.д.), так и на прикладных дисциплинах (электроника, микропроцессорная техника, программирование и т.д.).

Любой процесс управления (автоматического) состоит из следующих основных этапов (элементов):

  • получение информации о задаче управления;
  • получение информации о результате управления;
  • анализ получаемой информации;
  • выполнение решения (воздействие на объект управления).

Для реализации Процесса Управления система управления (СУ) должна иметь:

  • источники информации о задаче управления;
  • источники информации о результатах управления (различные датчики, измерительные устройства, детекторы и т.д.);
  • устройства для анализа получаемой информации и выработки решения;
  • исполнительные устройства, воздействующие на Объект Управления, содержащие: регулятор, двигатели, усилительно-преобразующие устройства и т.д.

Определение: Если система управления (СУ) содержит все перечисленные выше части, то она является замкнутой.

Определение: Управление техническим объектом с использованием информации о результатах управления называется принципом обратной связи.

Схематично такая система управления может быть представлена в виде:


Рис. 1.1.1 — Структура системы управления (СУ)

Если система управления (СУ) имеет структурную схему, вид которой соответствует рис. 1.1.1, и функционирует (работает) без участия человека (оператора), то она называется системой автоматического управления (САУ).

Если СУ функционирует с участием человека (оператора), то она называется автоматизированной СУ.

Если Управление обеспечивает заданный закон изменения объекта во времени независимо от результатов управления, то такое управление совершается по разомкнутому циклу, а само управление называется программным управлением.

К системам, работающим по разомкнутому циклу, относятся промышленные автоматы (конвейерные линии, роторные линии и т.д.), станки с числовым программным управлением (ЧПУ): см. пример на рис. 1.1.2.

Рис.1.1.2 — Пример программного управления

Задающее устройство может быть, например, и “копиром”.

Поскольку в данном примере нет датчиков (измерителей), контролирующих изготавливаемую деталь, то если, например, резец был установлен неправильно или сломался, то поставленная цель (изготовление детали) не может быть достигнута (реализована). Обычно в системах подобного типа необходим выходной контроль, который будет только фиксировать отклонение размеров и формы детали от желаемой.

Автоматические системы управления подразделяются на 3 типа:

  • системы автоматического управления (САУ);
  • системы автоматического регулирования (САР);
  • следящие системы (СС).

САР и СС являются подмножествами САУ ==> ${САР} subset{САУ}; {СС} subset {САУ}$.

Определение: Автоматическая система управления, обеспечивающая постоянство какой-либо физической величины (группы величин) в объекте управления называется системой автоматического регулирования (САР).

Системы автоматического регулирования (САР) — наиболее распространенный тип систем автоматического управления.

Первый в мире автоматический регулятор (18-е столетие) – регулятор Уатта. Данная схема (см. рис. 1.1.3) реализована Уаттом в Англии для поддержания постоянной скорости вращения колеса паровой машины и, соответственно, для поддержания постоянства скорости вращения (движения) шкива (ремня) трансмиссии.

В данной схеме чувствительными элементами (измерительными датчиками) являются “грузы” (сферы). «Грузы» (сферы) также “заставляют” перемещаться коромысло и затем задвижку. Поэтому данную систему можно отнести к системе прямого регулирования, а регулятор — к регулятору прямого действия, так как он одновременно выполняет функции и “измерителя” и “регулятора”.

В регуляторах прямого действия дополнительного источника энергии для перемещения регулирующего органа не требуется.

Рис. 1.1.3 — Схема автоматического регулятора Уатта

В системах непрямого регулирования необходимо присутствие (наличие) усилителя (например, мощности), дополнительного исполнительного механизма, содержащего, например, электродвигатель, серводвигатель, гидропривод и т.д.

Примером САУ (системы автоматического управления), в полном смысле этого определения, может служить система управления, обеспечивающая вывод ракеты на орбиту, где управляемой величиной может быть, например, угол между осью ракеты и нормалью к Земле ==> см. рис. 1.1.4.а и рис. 1.1.4.б

1.2. Структура систем управления: простые и многомерные системы

В теории управления техническими системами часто бывает удобно систему разделить на набор звеньев, соединенных в сетевые структуры. В простейшем случае система содержит одно звено, на вход которого подается входной воздействие (вход), на входе получается отклик системы (выход).

В теории Управления Техническими Системам используют 2 основных способа представления звеньев систем управления:

— в переменных “вход-выход”;

— в переменных состояния (более подробно см. разделы 6…7).

Представление в переменных “вход-выход” обычно используется для описания относительно простых систем, имеющих один “вход” (одно управляющее воздействие) и один “выход” (одна регулируемая величина, см. рисунок 1.2.1).

Рис. 1.2.1 – Схематическое представление простой системы управления

Обычно такое описание используется для технически несложных САУ (систем автоматического управления).

В последнее время широкое распространение имеет представление в переменных состояния, особенно для технически сложных систем, в том числе и для многомерных САУ. На рис. 1.2.2 приведено схематичное представление многомерной системы автоматического управления, где u1(t)…um(t) — управляющие воздействия (вектор управления), y1(t)…yp(t) — регулируемые параметры САУ (вектор выхода).

Рис. 1.2.2 — Схематическое представление многомерной системы управленияя

Рассмотрим более детально структуру САУ, представленную в переменных “вход-выход” и имеющую один вход (входное или задающее, или управляющее воздействие) и один выход (выходное воздействие или управляемая (или регулируемая) переменная).

Предположим, что структурная схема такой САУ состоит из некоторого числа элементов (звеньев). Группируя звенья по функциональному принципу (что звенья делают), структурную схему САУ можно привести к следующему типовому виду:


Рис. 1.2.3 — Структурная схема системы автоматического управления

Символом ε(t) или переменной ε(t) обозначается рассогласование (ошибка) на выходе сравнивающего устройства, которое может “работать” в режиме как простых сравнительных арифметических операций (чаще всего вычитание, реже сложение), так и более сложных сравнительных операций (процедур).

Так как y1(t) = y(t)*k1, где k1 — коэффициент усиления, то ==>
ε(t) = x(t) — y1(t) = x(t) — k1*y(t)

Задача системы управления состоит в том (если она устойчива), чтобы “работать” на уничтожение рассогласования (ошибки) ε(t), т.е. ==> ε(t) → 0.

Следует отметить, что на систему управления действуют как внешние воздействия (управляющее, возмущающее, помехи), так и внутренние помехи. Помеха отличается от воздействия стохастичностью (случайностью) своего существования, тогда как воздействие почти всегда детерминировано.

Для обозначения управляющего (задающего воздействие) будем использовать либо x(t), либо u(t).

1.3. Основные законы управления

Если вернуться к последнему рисунку (структурная схема САУ на рис. 1.2.3), то необходимо “расшифровать” роль, которую играет усилительно-преобразующее устройство (какие функции оно выполняет).

Если усилительно-преобразующее устройство (УПУ) выполняет только усиление (или ослабление) сигнала рассогласования ε(t), а именно: $varepsilon_1(t)=alpha cdot varepsilon(t)$, где $ alpha $– коэффициент пропорциональности (в частном случае $ alpha $ = Const), то такой режим управления замкнутой САУ называется режимом пропорционального управления (П-управление).

Если УПУ выполняет формирование выходного сигнала ε1(t), пропорционального ошибке ε(t) и интегралу от ε(t), т.е. $int_{0}^{t} varepsilon(t) dt $, то такой режим управления называется пропорционально-интегрирующим (ПИ-управление). ==> $varepsilon_1(t)=alpha cdot varepsilon(t) + b cdot int_{0}^{t} varepsilon(t) dt$, где b – коэффициент пропорциональности (в частном случае b = Const).

Обычно ПИ-управление используется для повышения точности управления (регулирования).

Если УПУ формирует выходной сигнал ε1(t), пропорциональный ошибке ε(t) и ее производной, то такой режим называется пропорционально-дифференцирующим (ПД-управление): ==> $varepsilon_1(t)=alpha cdot varepsilon(t) + c cdot frac{d varepsilon(t) }{dt} $

Обычно использование ПД-управления повышает быстродействие САУ

Если УПУ формирует выходной сигнал ε1(t), пропорциональный ошибке ε(t), ее производной, и интегралу от ошибки ==> $varepsilon_1(t)=alpha cdot varepsilon(t) + b cdot int_{0}^{t} varepsilon(t) + c cdot frac{d varepsilon(t) }{dt} $, то такой режим называетсято такой режим управления называется пропорционально-интегрально-дифференцирующим режимом управления (ПИД-управление).

ПИД-управление позволяет зачастую обеспечить “хорошую” точность управления при “хорошем” быстродействии

1.4. Классификация систем автоматического управления

1.4.1. Классификация по виду математического описания

По виду математического описания (уравнений динамики и статики) системы автоматического управления (САУ) подразделяются на линейные и нелинейные системы (САУ или САР).

Каждый “подкласс” (линейных и нелинейных) подразделяется на еще ряд “подклассов”. Например, линейные САУ (САР) имеют различия по виду математического описания.
Поскольку в этом семестре будут рассматриваться динамические свойства только линейных систем автоматического управления (регулирования), то ниже приведем классификацию по виду математического описания для линейных САУ (САР):

1) Линейные системы автоматического управления, описываемые в переменных «вход-выход» обыкновенными дифференциальными уравнениями (ОДУ) с постоянными коэффициентами:

$a_n cdot y^{(n)} (t)+ a_{n-1} cdot y^{(n-1)}(t)+ ...+a_1 cdot y'(t) + a_0 cdot y(t) =$

$=b_m cdot x^{(m)}(t) +b_{m-1} cdot x^{(m-1)}(t)+ ...+b_1cdot x'(t) + b_0 cdot x(t); (1.4.1)$

где x(t) – входное воздействие; y(t) – выходное воздействие (регулируемая величина).

Если использовать операторную («компактную») форму записи линейного ОДУ, то уравнение (1.4.1) можно представить в следующем виде:

$L(p)cdot y(t)=N(p)cdot x(t), (1.4.2)$

где, p = d/dt — оператор дифференцирования; L(p), N(p) — соответствующие линейные дифференциальные операторы, которые равны:

$L(p) = a_n cdot p^n + a_{n-1} cdot p^{n-1}+...+a_1 cdot p+ a_0; a_i (1.4.2.a)$

$N(p) = b_n cdot p^n + b_{n-1} cdot p^{n-1}+...+b_1 cdot p+ b_0; b_i (1.4.2.б)$

2) Линейные системы автоматического управления, описываемые линейными обыкновенными дифференциальными уравнениями (ОДУ) с переменными (во времени) коэффициентами:

$a_n(t) cdot y^{(n)} (t)+ a_{n-1}(t) cdot y^{(n-1)}(t)+ ...+a_1(t) cdot y'(t) + a_0(t) cdot y(t) =$

$=b_m(t) cdot x^{(m)}(t) +b_{m-1}(t) cdot x^{(m-1)}(t)+ ...+b_1(t)cdot x'(t) + b_0(t) cdot x(t); (1.4.3)$

В общем случае такие системы можно отнести и к классу нелинейных САУ (САР).

3) Линейные системы автоматического управления, описываемые линейными разностными уравнениями:

$y((k+1)cdot Delta t) = f(y(k cdot Delta t)), y((k-1)cdot Delta t)...$

$...x((k+1) cdot Delta t), x(k cdot Delta t), x((k-1) cdot Delta t)...), (1.4.4)$

где f(…) – линейная функция аргументов; k = 1, 2, 3… — целые числа; Δt – интервал квантования (интервал дискретизации).

Уравнение (1.4.4) можно представить в «компактной» форме записи:

$y^{[k+1]} = f(y^{[k]},y^{[k-1]},y^{[k-2]},...x^{[k+1]},x^{[k]},x^{[k-1]},x^{[k-2]}...). (1.4.5)$

Обычно такое описание линейных САУ (САР) используется в цифровых системах управления (с использованием ЭВМ).

4) Линейные системы автоматического управления с запаздыванием:

$L(p)cdot y(t)=N(p)cdot x(t-tau), (1.4.6)$

где L(p), N(p) — линейные дифференциальные операторы; τ — время запаздывания или постоянная запаздывания.

Если операторы L(p) и N(p) вырождаются (L(p) = 1; N(p) = 1), то уравнение (1.4.6) соответствует математическому описанию динамики звена идеального запаздывания:

$y(t) = x(t-tau );$

а графическая иллюстрация его свойств привдена на рис. 1.4.1

Рис. 1.4.1 — Графики входа и выхода звена идеального запаздывания

5) Линейные системы автоматического управления, описываемые линейными дифференциальными уравнения в частных производных. Нередко такие САУ называют распределенными системами управления. ==> «Абстрактный» пример такого описания:

$frac{partial y(x,t)}{partial t} + a cdot frac{partial y(x,t)}{partial x} + b cdot frac{partial^2y(x,t)}{partial x^2} = Q(x,t) - P(x,t); (1.4.7)$

Система уравнений (1.4.7) описывает динамику линейно распределенной САУ, т.е. регулируемая величина зависит не только от времени, но и от одной пространственной координаты.
Если система управления представляет собой «пространственный» объект, то ==>

$frac{partial y(t,vec{r})}{partial y}+ a cdot frac {partial y(t,vec{r})}{partial vec{r}} +b cdot frac {partial^2 y(t,vec{r})}{partial vec{r}^2} = Q(t,vec{r}) -P(t,vec{r}), (1.4.8)$

где $y(t,vec{r})$ зависит от времени и пространственных координат, определяемых радиусом-вектором $vec{r}$

6) САУ, описываемые системами ОДУ, или системами разностных уравнений, или системами уравнений в частных производных ==> и так далее…

Аналогичную классификацию можно предложить и для нелинейных САУ (САР)…

Для линейных систем выполеняются следующие требования:

  • линейность статической характеристики САУ;
  • линейность уравнения динамики, т.е. переменные в уравнение динамики входят только в линейной комбинации.

Статической характеристикой называется зависимость выхода от величины входного воздействия в установившемся режиме (когда все переходные процессы затухли).

Для систем, описываемых линейными обыкновенными дифференциальными уравнениями с постоянными коэффициентами статическая характеристика получается из уравнения динамики (1.4.1) приравниванием нулю всех нестационарных членов ==>

$begin {eqnarray} L(p)y(t) to a_0 cdot y(0) \ N(p) x(t) to b_0 cdot x(0) end {eqnarray} } Rightarrow a_0 cdot y(0) = b_0 cdot x(0) Rightarrow y = k cdot х, (k = frac{b_0}{a_0});$

На рис.1.4.2 представлены примеры линейной и нелинейных статических характеристик систем автоматического управления (регулирования).

Рис. 1.4.2 — Примеры статических линейных и нелинейных характеристик

Нелинейность членов, содержащих производные по времени в уравнениях динамики, может возникнуть при использовании нелинейных математических операций (*, /, $uparrow ^n$, $sqrt[n]{}$, sin, ln и т.д.). Например, рассматривая уравнение динамики некоторой «абстрактной» САУ

$a cdot y''(t)+b cdot y'(t) cdot y(t) +c cdot[y'(t)]^2 + d cdot y(t) = k cdot x(t),$

отметим, что в этом уравнении при линейной статической характеристики $(y = frac{k}{d} cdot x)$ второе и третье слагаемые (динамические члены) в левой части уравнения — нелинейные, поэтому САУ, описываемая подобным уравнением, является нелинейной в динамическом плане.

1.4.2. Классификация по характеру передаваемых сигналов

По характеру передаваемых сигналов системы автоматического управления (или регулирования) подразделяются:

  • непрерывные системы (системы непрерывного действия);
  • релейные системы (системы релейного действия);
  • системы дискретного действия (импульсные и цифровые).

Системой непрерывного действия называется такая САУ, в каждом из звеньев которой непрерывному изменению входного сигнала во времени соответствует непрерывное изменение выходного сигнала, при этом закон изменения выходного сигнала может быть произвольным. Чтобы САУ была непрерывной, необходимо, чтобы статические характеристики всех звеньев были непрерывными.

Рис. 1.4.3 — Пример непрерывной системы

Системой релейного действия называется САУ, в которой хотя бы в одном звене при непрерывном изменении входной величины выходная величина в некоторые моменты процесса управления меняется “скачком” в зависимости от величины входного сигнала. Статическая характеристика такого звена имеет точки разрыва или излома с разрывом.

Рис. 1.4.4 — Примеры релейных статических характеристик

Системой дискретного действия называется система, в которой хотя бы в одном звене при непрерывном изменении входной величины выходная величина имеет вид отдельных импульсов, появляющиеся через некоторый промежуток времени.

Звено, преобразующее непрерывный сигнал в дискретный сигнал, называется импульсным. Подобный вид передаваемых сигналов имеет место в САУ с ЭВМ или контроллером.

Наиболее часто реализуются следующие методы (алгоритмы) преобразования непрерывного входного сигнала в импульсный выходной сигнал:

  • амплитудно-импульсная модуляция (АИМ);
  • широтно-импульсная модуляция (ШИМ).

На рис. 1.4.5 представлена графическая иллюстрация алгоритма амплитудно-импульсной модуляции (АИМ). В верхней части рис. представлена временная зависимость x(t) — сигнала на входе в импульсное звено. Выходной сигнал импульсного блока (звена) y(t) – последовательность прямоугольных импульсов, появляющихся с постоянным периодом квантования Δt (см. нижнюю часть рис.). Длительность импульсов – одинакова и равна Δ. Амплитуда импульса на выходе блока пропорциональна соответствующей величине непрерывного сигнала x(t) на входе данного блока.

Рис. 1.4.5 — Реализация амплитудно-импульсной модуляции

Данный метод импульсной модуляции был весьма распространен в электронно-измерительной аппаратуре систем управления и защиты (СУЗ) ядерных энергетических установок (ЯЭУ) в 70-х…80-х годах прошлого столетия.

На рис. 1.4.6 представлена графическая иллюстрация алгоритма широтно-импульсной модуляции (ШИМ). В верхней части рис. 1.14 представлена временная зависимость x(t) – сигнала на входе в импульсное звено. Выходной сигнал импульсного блока (звена) y(t) – последовательность прямоугольных импульсов, появляющихся с постоянным периодом квантования Δt (см. нижнюю часть рис. 1.14). Амплитуда всех импульсов – одинакова. Длительность импульса Δt на выходе блока пропорциональна соответствующей величине непрерывного сигнала x(t) на входе импульсного блока.

Рис. 1.4.6 — Реализация широтно-импульсной модуляции

Данный метод импульсной модуляции в настоящее время является наиболее распространенным в электронно-измерительной аппаратуре систем управления и защиты (СУЗ) ядерных энергетических установок (ЯЭУ) и САУ других технических систем.

Завершая данный подраздел, необходимо заметить, что если характерные постоянные времени в других звеньях САУ (САР) существенно больше Δt (на порядки), то импульсная система может считаться непрерывной системой автоматического управления (при использовании как АИМ, так и ШИМ).

1.4.3. Классификация по характеру управления

По характеру процессов управления системы автоматического управления подразделяются на следующие типы:

  • детерминированные САУ, в которых входному сигналу однозначно может быть поставлен в соответствие выходной сигнал (и наоборот);
  • стохастические САУ (статистические, вероятностные), в которых на данный входной сигнал САУ “отвечает” случайным (стохастическим) выходным сигналом.

Выходной стохастический сигнал характеризуется:

  • законом распределения;
  • математическим ожиданием (средним значением);
  • дисперсией (среднеквадратичным отклонением).

Стохастичность характера процесса управления обычно наблюдается в

существенно нелинейных САР

как с точки зрения статической характеристики, так и с точки зрения (даже в большей степени) нелинейности динамических членов в уравнениях динамики.

Рис. 1.4.7 — Распределение выходной величины стохастической САУ

Кроме приведенных основных видов классификации систем управления, существуют и другие классификации. Например, классификация может проводиться по методу управления и основываться на взаимодействии с внешней средой и возможности адаптации САУ к изменению параметров окружающей среды. Системы делятся на два больших класса:

1) Обыкновенные (несамонастраивающиеся) СУ без адаптации; эти системы относятся к разряду простых, не изменяющих свою структуру в процессе управления. Они наиболее разработаны и широко применяются. Обыкновенные СУ подразделяются на три подкласса: разомкнутые, замкнутые и комбинированные системы управления.

2) Самонастраивающиеся (адаптивные) СУ. В этих системах при изменении внешних условий или характеристик объекта регулирования происходит автоматическое (заранее не заданное) изменение параметров управляющего устройства за счет изменения коэффициентов СУ, структуры СУ или даже введения новых элементов.

Другой пример классификации: по иерархическому признаку (одноуровневые, двухуровневые, многоуровневые).

Продолжение здесь:

2. Математическое описание систем автоматического управления 2.1 — 2.3, 2.4 — 2.8, 2.9 — 2.13.
3. ЧАСТОТНЫЕ ХАРАКТЕРИСТИКИ ЗВЕНЬЕВ И СИСТЕМ АВТОМАТИЧЕСКОГО УПРАВЛЕНИЯ (РЕГУЛИРОВАНИЯ).
3.1. Амплитудно-фазовая частотная характеристика: годограф, АФЧХ, ЛАХ, ФЧХ.
3.2. Типовые звенья систем автоматического управления (регулирования). Классификация типовых звеньев. Простейшие типовые звенья.
3.3. Апериодическое звено 1–го порядка (инерционное звено). На примере входной камеры ядерного реактора.
3.4. Апериодическое звено 2-го порядка.
3.5. Колебательное звено.
3.6. Инерционно-дифференцирующее звено.
3.7. Форсирующее звено.
3.8. Инерционно-интегрирующее (звено интегрирующее звено с замедлением).
3.9 Изодромное звено (изодром).
3.10 Минимально-фазовые и не минимально-фазовые звенья.
3.11 Математическая модель кинетики нейтронов в «точечном» реакторе «нулевой» мощности.
4. Структурные преобразования систем автоматического регулирования.
5. Передаточные функции и уравнения динамики замкнутых систем автоматического регулирования (САР).
6. Устойчивость систем автоматического регулирования. 6.1 Понятие об устойчивости САР. Теорема Ляпунова. 6.2 Необходимые условия устойчивости линейных и линеаризованных САР. 6.3 Алгебраический критерий устойчивости Гурвица.
6.4 Частотный критерий устойчивости Михайлова.
6.5 Частотный критерий устойчивости Найквиста.

Только зарегистрированные пользователи могут участвовать в опросе. Войдите, пожалуйста.

Продолжить публикацию лекций по УТС?

Проголосовали 287 пользователей.

Воздержался 21 пользователь.

Лекция 1

1. Основные
понятия теории автоматических систем

Теория
управления – наука, которая изучает
процессы управления, законы управления,
основы проектирования систем
автоматического управления
(САУ).

САУ, это такие
систем, которые работают в автоматическом
режиме без участия человека в контуре
управления.
В отличие от автоматизированных
систем управления (асу),
где предусмотрено участие человека в
контуре управления.

Основное
назначение
современной теории
автоматического управления (ТАУ) – это
определение алгоритма оптимального
(субоптимальной) достижения более
важной обобщенной конечной цели на
каждом этапе функционирования системы
.
Такой целью является запуск или
выход на новый режим работы машины,
агрегата, станции с минимальными
затратами
; достижение заданной
навигационной точки за определенное
время с заданным курсом при минимальном
расходе топлива с соблюдением всех
ограничений, связанных с безопасностью,
расходом топлива, вычислительной
производительностью и т.п.

Решение такой
глобальной проблемы в реальном масштабе
времени является чрезвычайно сложной
задачей.

Все САУ делятся
на разомкнутые и замкнутые системы
управления
(СУ).

Обобщенная
функциональная схема разомкнутой СУ
представлена на рис.1.1.


Рис. 1.1.1 — Структура системы управления (СУ)

Если система управления (СУ) имеет структурную схему, вид которой соответствует рис. 1.1.1, и функционирует (работает) без участия человека (оператора), то она называется системой автоматического управления (САУ).

Если СУ функционирует с участием человека (оператора), то она называется автоматизированной СУ.

Если Управление обеспечивает заданный закон изменения объекта во времени независимо от результатов управления, то такое управление совершается по разомкнутому циклу, а само управление называется программным управлением.

К системам, работающим по разомкнутому циклу, относятся промышленные автоматы (конвейерные линии, роторные линии и т.д.), станки с числовым программным управлением (ЧПУ): см. пример на рис. 1.1.2.

Рис.1.1.2 — Пример программного управления

Задающее устройство может быть, например, и “копиром”.

Поскольку в данном примере нет датчиков (измерителей), контролирующих изготавливаемую деталь, то если, например, резец был установлен неправильно или сломался, то поставленная цель (изготовление детали) не может быть достигнута (реализована). Обычно в системах подобного типа необходим выходной контроль, который будет только фиксировать отклонение размеров и формы детали от желаемой.

Автоматические системы управления подразделяются на 3 типа:

  • системы автоматического управления (САУ);
  • системы автоматического регулирования (САР);
  • следящие системы (СС).

САР и СС являются подмножествами САУ ==> ${САР} subset{САУ}; {СС} subset {САУ}$.

Определение: Автоматическая система управления, обеспечивающая постоянство какой-либо физической величины (группы величин) в объекте управления называется системой автоматического регулирования (САР).

Системы автоматического регулирования (САР) — наиболее распространенный тип систем автоматического управления.

Первый в мире автоматический регулятор (18-е столетие) – регулятор Уатта. Данная схема (см. рис. 1.1.3) реализована Уаттом в Англии для поддержания постоянной скорости вращения колеса паровой машины и, соответственно, для поддержания постоянства скорости вращения (движения) шкива (ремня) трансмиссии.

В данной схеме чувствительными элементами (измерительными датчиками) являются “грузы” (сферы). «Грузы» (сферы) также “заставляют” перемещаться коромысло и затем задвижку. Поэтому данную систему можно отнести к системе прямого регулирования, а регулятор — к регулятору прямого действия, так как он одновременно выполняет функции и “измерителя” и “регулятора”.

В регуляторах прямого действия дополнительного источника энергии для перемещения регулирующего органа не требуется.

Рис. 1.1.3 — Схема автоматического регулятора Уатта

В системах непрямого регулирования необходимо присутствие (наличие) усилителя (например, мощности), дополнительного исполнительного механизма, содержащего, например, электродвигатель, серводвигатель, гидропривод и т.д.

Примером САУ (системы автоматического управления), в полном смысле этого определения, может служить система управления, обеспечивающая вывод ракеты на орбиту, где управляемой величиной может быть, например, угол между осью ракеты и нормалью к Земле ==> см. рис. 1.1.4.а и рис. 1.1.4.б

1.2. Структура систем управления: простые и многомерные системы

В теории управления техническими системами часто бывает удобно систему разделить на набор звеньев, соединенных в сетевые структуры. В простейшем случае система содержит одно звено, на вход которого подается входной воздействие (вход), на входе получается отклик системы (выход).

В теории Управления Техническими Системам используют 2 основных способа представления звеньев систем управления:

— в переменных “вход-выход”;

— в переменных состояния (более подробно см. разделы 6…7).

Представление в переменных “вход-выход” обычно используется для описания относительно простых систем, имеющих один “вход” (одно управляющее воздействие) и один “выход” (одна регулируемая величина, см. рисунок 1.2.1).

Рис. 1.2.1 – Схематическое представление простой системы управления

Обычно такое описание используется для технически несложных САУ (систем автоматического управления).

В последнее время широкое распространение имеет представление в переменных состояния, особенно для технически сложных систем, в том числе и для многомерных САУ. На рис. 1.2.2 приведено схематичное представление многомерной системы автоматического управления, где u1(t)…um(t) — управляющие воздействия (вектор управления), y1(t)…yp(t) — регулируемые параметры САУ (вектор выхода).

Рис. 1.2.2 — Схематическое представление многомерной системы управленияя

Рассмотрим более детально структуру САУ, представленную в переменных “вход-выход” и имеющую один вход (входное или задающее, или управляющее воздействие) и один выход (выходное воздействие или управляемая (или регулируемая) переменная).

Предположим, что структурная схема такой САУ состоит из некоторого числа элементов (звеньев). Группируя звенья по функциональному принципу (что звенья делают), структурную схему САУ можно привести к следующему типовому виду:


Рис. 1.2.3 — Структурная схема системы автоматического управления

Символом ε(t) или переменной ε(t) обозначается рассогласование (ошибка) на выходе сравнивающего устройства, которое может “работать” в режиме как простых сравнительных арифметических операций (чаще всего вычитание, реже сложение), так и более сложных сравнительных операций (процедур).

Так как y1(t) = y(t)*k1, где k1 — коэффициент усиления, то ==>
ε(t) = x(t) — y1(t) = x(t) — k1*y(t)

Задача системы управления состоит в том (если она устойчива), чтобы “работать” на уничтожение рассогласования (ошибки) ε(t), т.е. ==> ε(t) → 0.

Следует отметить, что на систему управления действуют как внешние воздействия (управляющее, возмущающее, помехи), так и внутренние помехи. Помеха отличается от воздействия стохастичностью (случайностью) своего существования, тогда как воздействие почти всегда детерминировано.

Для обозначения управляющего (задающего воздействие) будем использовать либо x(t), либо u(t).

1.3. Основные законы управления

Если вернуться к последнему рисунку (структурная схема САУ на рис. 1.2.3), то необходимо “расшифровать” роль, которую играет усилительно-преобразующее устройство (какие функции оно выполняет).

Если усилительно-преобразующее устройство (УПУ) выполняет только усиление (или ослабление) сигнала рассогласования ε(t), а именно: $varepsilon_1(t)=alpha cdot varepsilon(t)$, где $ alpha $– коэффициент пропорциональности (в частном случае $ alpha $ = Const), то такой режим управления замкнутой САУ называется режимом пропорционального управления (П-управление).

Если УПУ выполняет формирование выходного сигнала ε1(t), пропорционального ошибке ε(t) и интегралу от ε(t), т.е. $int_{0}^{t} varepsilon(t) dt $, то такой режим управления называется пропорционально-интегрирующим (ПИ-управление). ==> $varepsilon_1(t)=alpha cdot varepsilon(t) + b cdot int_{0}^{t} varepsilon(t) dt$, где b – коэффициент пропорциональности (в частном случае b = Const).

Обычно ПИ-управление используется для повышения точности управления (регулирования).

Если УПУ формирует выходной сигнал ε1(t), пропорциональный ошибке ε(t) и ее производной, то такой режим называется пропорционально-дифференцирующим (ПД-управление): ==> $varepsilon_1(t)=alpha cdot varepsilon(t) + c cdot frac{d varepsilon(t) }{dt} $

Обычно использование ПД-управления повышает быстродействие САУ

Если УПУ формирует выходной сигнал ε1(t), пропорциональный ошибке ε(t), ее производной, и интегралу от ошибки ==> $varepsilon_1(t)=alpha cdot varepsilon(t) + b cdot int_{0}^{t} varepsilon(t) + c cdot frac{d varepsilon(t) }{dt} $, то такой режим называетсято такой режим управления называется пропорционально-интегрально-дифференцирующим режимом управления (ПИД-управление).

ПИД-управление позволяет зачастую обеспечить “хорошую” точность управления при “хорошем” быстродействии

1.4. Классификация систем автоматического управления

1.4.1. Классификация по виду математического описания

По виду математического описания (уравнений динамики и статики) системы автоматического управления (САУ) подразделяются на линейные и нелинейные системы (САУ или САР).

Каждый “подкласс” (линейных и нелинейных) подразделяется на еще ряд “подклассов”. Например, линейные САУ (САР) имеют различия по виду математического описания.
Поскольку в этом семестре будут рассматриваться динамические свойства только линейных систем автоматического управления (регулирования), то ниже приведем классификацию по виду математического описания для линейных САУ (САР):

1) Линейные системы автоматического управления, описываемые в переменных «вход-выход» обыкновенными дифференциальными уравнениями (ОДУ) с постоянными коэффициентами:

$a_n cdot y^{(n)} (t)+ a_{n-1} cdot y^{(n-1)}(t)+ ...+a_1 cdot y'(t) + a_0 cdot y(t) =$

$=b_m cdot x^{(m)}(t) +b_{m-1} cdot x^{(m-1)}(t)+ ...+b_1cdot x'(t) + b_0 cdot x(t); (1.4.1)$

где x(t) – входное воздействие; y(t) – выходное воздействие (регулируемая величина).

Если использовать операторную («компактную») форму записи линейного ОДУ, то уравнение (1.4.1) можно представить в следующем виде:

$L(p)cdot y(t)=N(p)cdot x(t), (1.4.2)$

где, p = d/dt — оператор дифференцирования; L(p), N(p) — соответствующие линейные дифференциальные операторы, которые равны:

$L(p) = a_n cdot p^n + a_{n-1} cdot p^{n-1}+...+a_1 cdot p+ a_0; a_i (1.4.2.a)$

$N(p) = b_n cdot p^n + b_{n-1} cdot p^{n-1}+...+b_1 cdot p+ b_0; b_i (1.4.2.б)$

2) Линейные системы автоматического управления, описываемые линейными обыкновенными дифференциальными уравнениями (ОДУ) с переменными (во времени) коэффициентами:

$a_n(t) cdot y^{(n)} (t)+ a_{n-1}(t) cdot y^{(n-1)}(t)+ ...+a_1(t) cdot y'(t) + a_0(t) cdot y(t) =$

$=b_m(t) cdot x^{(m)}(t) +b_{m-1}(t) cdot x^{(m-1)}(t)+ ...+b_1(t)cdot x'(t) + b_0(t) cdot x(t); (1.4.3)$

В общем случае такие системы можно отнести и к классу нелинейных САУ (САР).

3) Линейные системы автоматического управления, описываемые линейными разностными уравнениями:

$y((k+1)cdot Delta t) = f(y(k cdot Delta t)), y((k-1)cdot Delta t)...$

$...x((k+1) cdot Delta t), x(k cdot Delta t), x((k-1) cdot Delta t)...), (1.4.4)$

где f(…) – линейная функция аргументов; k = 1, 2, 3… — целые числа; Δt – интервал квантования (интервал дискретизации).

Уравнение (1.4.4) можно представить в «компактной» форме записи:

$y^{[k+1]} = f(y^{[k]},y^{[k-1]},y^{[k-2]},...x^{[k+1]},x^{[k]},x^{[k-1]},x^{[k-2]}...). (1.4.5)$

Обычно такое описание линейных САУ (САР) используется в цифровых системах управления (с использованием ЭВМ).

4) Линейные системы автоматического управления с запаздыванием:

$L(p)cdot y(t)=N(p)cdot x(t-tau), (1.4.6)$

где L(p), N(p) — линейные дифференциальные операторы; τ — время запаздывания или постоянная запаздывания.

Если операторы L(p) и N(p) вырождаются (L(p) = 1; N(p) = 1), то уравнение (1.4.6) соответствует математическому описанию динамики звена идеального запаздывания:

$y(t) = x(t-tau );$

а графическая иллюстрация его свойств привдена на рис. 1.4.1

Рис. 1.4.1 — Графики входа и выхода звена идеального запаздывания

5) Линейные системы автоматического управления, описываемые линейными дифференциальными уравнения в частных производных. Нередко такие САУ называют распределенными системами управления. ==> «Абстрактный» пример такого описания:

$frac{partial y(x,t)}{partial t} + a cdot frac{partial y(x,t)}{partial x} + b cdot frac{partial^2y(x,t)}{partial x^2} = Q(x,t) - P(x,t); (1.4.7)$

Система уравнений (1.4.7) описывает динамику линейно распределенной САУ, т.е. регулируемая величина зависит не только от времени, но и от одной пространственной координаты.
Если система управления представляет собой «пространственный» объект, то ==>

$frac{partial y(t,vec{r})}{partial y}+ a cdot frac {partial y(t,vec{r})}{partial vec{r}} +b cdot frac {partial^2 y(t,vec{r})}{partial vec{r}^2} = Q(t,vec{r}) -P(t,vec{r}), (1.4.8)$

где $y(t,vec{r})$ зависит от времени и пространственных координат, определяемых радиусом-вектором $vec{r}$

6) САУ, описываемые системами ОДУ, или системами разностных уравнений, или системами уравнений в частных производных ==> и так далее…

Аналогичную классификацию можно предложить и для нелинейных САУ (САР)…

Для линейных систем выполеняются следующие требования:

  • линейность статической характеристики САУ;
  • линейность уравнения динамики, т.е. переменные в уравнение динамики входят только в линейной комбинации.

Статической характеристикой называется зависимость выхода от величины входного воздействия в установившемся режиме (когда все переходные процессы затухли).

Для систем, описываемых линейными обыкновенными дифференциальными уравнениями с постоянными коэффициентами статическая характеристика получается из уравнения динамики (1.4.1) приравниванием нулю всех нестационарных членов ==>

$begin {eqnarray} L(p)y(t) to a_0 cdot y(0) \ N(p) x(t) to b_0 cdot x(0) end {eqnarray} } Rightarrow a_0 cdot y(0) = b_0 cdot x(0) Rightarrow y = k cdot х, (k = frac{b_0}{a_0});$

На рис.1.4.2 представлены примеры линейной и нелинейных статических характеристик систем автоматического управления (регулирования).

Рис. 1.4.2 — Примеры статических линейных и нелинейных характеристик

Нелинейность членов, содержащих производные по времени в уравнениях динамики, может возникнуть при использовании нелинейных математических операций (*, /, $uparrow ^n$, $sqrt[n]{}$, sin, ln и т.д.). Например, рассматривая уравнение динамики некоторой «абстрактной» САУ

$a cdot y''(t)+b cdot y'(t) cdot y(t) +c cdot[y'(t)]^2 + d cdot y(t) = k cdot x(t),$

отметим, что в этом уравнении при линейной статической характеристики $(y = frac{k}{d} cdot x)$ второе и третье слагаемые (динамические члены) в левой части уравнения — нелинейные, поэтому САУ, описываемая подобным уравнением, является нелинейной в динамическом плане.

1.4.2. Классификация по характеру передаваемых сигналов

По характеру передаваемых сигналов системы автоматического управления (или регулирования) подразделяются:

  • непрерывные системы (системы непрерывного действия);
  • релейные системы (системы релейного действия);
  • системы дискретного действия (импульсные и цифровые).

Системой непрерывного действия называется такая САУ, в каждом из звеньев которой непрерывному изменению входного сигнала во времени соответствует непрерывное изменение выходного сигнала, при этом закон изменения выходного сигнала может быть произвольным. Чтобы САУ была непрерывной, необходимо, чтобы статические характеристики всех звеньев были непрерывными.

Рис. 1.4.3 — Пример непрерывной системы

Системой релейного действия называется САУ, в которой хотя бы в одном звене при непрерывном изменении входной величины выходная величина в некоторые моменты процесса управления меняется “скачком” в зависимости от величины входного сигнала. Статическая характеристика такого звена имеет точки разрыва или излома с разрывом.

Рис. 1.4.4 — Примеры релейных статических характеристик

Системой дискретного действия называется система, в которой хотя бы в одном звене при непрерывном изменении входной величины выходная величина имеет вид отдельных импульсов, появляющиеся через некоторый промежуток времени.

Звено, преобразующее непрерывный сигнал в дискретный сигнал, называется импульсным. Подобный вид передаваемых сигналов имеет место в САУ с ЭВМ или контроллером.

Наиболее часто реализуются следующие методы (алгоритмы) преобразования непрерывного входного сигнала в импульсный выходной сигнал:

  • амплитудно-импульсная модуляция (АИМ);
  • широтно-импульсная модуляция (ШИМ).

На рис. 1.4.5 представлена графическая иллюстрация алгоритма амплитудно-импульсной модуляции (АИМ). В верхней части рис. представлена временная зависимость x(t) — сигнала на входе в импульсное звено. Выходной сигнал импульсного блока (звена) y(t) – последовательность прямоугольных импульсов, появляющихся с постоянным периодом квантования Δt (см. нижнюю часть рис.). Длительность импульсов – одинакова и равна Δ. Амплитуда импульса на выходе блока пропорциональна соответствующей величине непрерывного сигнала x(t) на входе данного блока.

Рис. 1.4.5 — Реализация амплитудно-импульсной модуляции

Данный метод импульсной модуляции был весьма распространен в электронно-измерительной аппаратуре систем управления и защиты (СУЗ) ядерных энергетических установок (ЯЭУ) в 70-х…80-х годах прошлого столетия.

На рис. 1.4.6 представлена графическая иллюстрация алгоритма широтно-импульсной модуляции (ШИМ). В верхней части рис. 1.14 представлена временная зависимость x(t) – сигнала на входе в импульсное звено. Выходной сигнал импульсного блока (звена) y(t) – последовательность прямоугольных импульсов, появляющихся с постоянным периодом квантования Δt (см. нижнюю часть рис. 1.14). Амплитуда всех импульсов – одинакова. Длительность импульса Δt на выходе блока пропорциональна соответствующей величине непрерывного сигнала x(t) на входе импульсного блока.

Рис. 1.4.6 — Реализация широтно-импульсной модуляции

Данный метод импульсной модуляции в настоящее время является наиболее распространенным в электронно-измерительной аппаратуре систем управления и защиты (СУЗ) ядерных энергетических установок (ЯЭУ) и САУ других технических систем.

Завершая данный подраздел, необходимо заметить, что если характерные постоянные времени в других звеньях САУ (САР) существенно больше Δt (на порядки), то импульсная система может считаться непрерывной системой автоматического управления (при использовании как АИМ, так и ШИМ).

1.4.3. Классификация по характеру управления

По характеру процессов управления системы автоматического управления подразделяются на следующие типы:

  • детерминированные САУ, в которых входному сигналу однозначно может быть поставлен в соответствие выходной сигнал (и наоборот);
  • стохастические САУ (статистические, вероятностные), в которых на данный входной сигнал САУ “отвечает” случайным (стохастическим) выходным сигналом.

Выходной стохастический сигнал характеризуется:

  • законом распределения;
  • математическим ожиданием (средним значением);
  • дисперсией (среднеквадратичным отклонением).

Стохастичность характера процесса управления обычно наблюдается в

существенно нелинейных САР

как с точки зрения статической характеристики, так и с точки зрения (даже в большей степени) нелинейности динамических членов в уравнениях динамики.

Рис. 1.4.7 — Распределение выходной величины стохастической САУ

Кроме приведенных основных видов классификации систем управления, существуют и другие классификации. Например, классификация может проводиться по методу управления и основываться на взаимодействии с внешней средой и возможности адаптации САУ к изменению параметров окружающей среды. Системы делятся на два больших класса:

1) Обыкновенные (несамонастраивающиеся) СУ без адаптации; эти системы относятся к разряду простых, не изменяющих свою структуру в процессе управления. Они наиболее разработаны и широко применяются. Обыкновенные СУ подразделяются на три подкласса: разомкнутые, замкнутые и комбинированные системы управления.

2) Самонастраивающиеся (адаптивные) СУ. В этих системах при изменении внешних условий или характеристик объекта регулирования происходит автоматическое (заранее не заданное) изменение параметров управляющего устройства за счет изменения коэффициентов СУ, структуры СУ или даже введения новых элементов.

Другой пример классификации: по иерархическому признаку (одноуровневые, двухуровневые, многоуровневые).

Продолжение здесь:

2. Математическое описание систем автоматического управления 2.1 — 2.3, 2.4 — 2.8, 2.9 — 2.13.
3. ЧАСТОТНЫЕ ХАРАКТЕРИСТИКИ ЗВЕНЬЕВ И СИСТЕМ АВТОМАТИЧЕСКОГО УПРАВЛЕНИЯ (РЕГУЛИРОВАНИЯ).
3.1. Амплитудно-фазовая частотная характеристика: годограф, АФЧХ, ЛАХ, ФЧХ.
3.2. Типовые звенья систем автоматического управления (регулирования). Классификация типовых звеньев. Простейшие типовые звенья.
3.3. Апериодическое звено 1–го порядка (инерционное звено). На примере входной камеры ядерного реактора.
3.4. Апериодическое звено 2-го порядка.
3.5. Колебательное звено.
3.6. Инерционно-дифференцирующее звено.
3.7. Форсирующее звено.
3.8. Инерционно-интегрирующее (звено интегрирующее звено с замедлением).
3.9 Изодромное звено (изодром).
3.10 Минимально-фазовые и не минимально-фазовые звенья.
3.11 Математическая модель кинетики нейтронов в «точечном» реакторе «нулевой» мощности.
4. Структурные преобразования систем автоматического регулирования.
5. Передаточные функции и уравнения динамики замкнутых систем автоматического регулирования (САР).
6. Устойчивость систем автоматического регулирования. 6.1 Понятие об устойчивости САР. Теорема Ляпунова. 6.2 Необходимые условия устойчивости линейных и линеаризованных САР. 6.3 Алгебраический критерий устойчивости Гурвица.
6.4 Частотный критерий устойчивости Михайлова.
6.5 Частотный критерий устойчивости Найквиста.

Только зарегистрированные пользователи могут участвовать в опросе. Войдите, пожалуйста.

Продолжить публикацию лекций по УТС?

Проголосовали 287 пользователей.

Воздержался 21 пользователь.

Лекция 1

1. Основные
понятия теории автоматических систем

Теория
управления – наука, которая изучает
процессы управления, законы управления,
основы проектирования систем
автоматического управления
(САУ).

САУ, это такие
систем, которые работают в автоматическом
режиме без участия человека в контуре
управления.
В отличие от автоматизированных
систем управления (асу),
где предусмотрено участие человека в
контуре управления.

Основное
назначение
современной теории
автоматического управления (ТАУ) – это
определение алгоритма оптимального
(субоптимальной) достижения более
важной обобщенной конечной цели на
каждом этапе функционирования системы
.
Такой целью является запуск или
выход на новый режим работы машины,
агрегата, станции с минимальными
затратами
; достижение заданной
навигационной точки за определенное
время с заданным курсом при минимальном
расходе топлива с соблюдением всех
ограничений, связанных с безопасностью,
расходом топлива, вычислительной
производительностью и т.п.

Решение такой
глобальной проблемы в реальном масштабе
времени является чрезвычайно сложной
задачей.

Все САУ делятся
на разомкнутые и замкнутые системы
управления
(СУ).

Обобщенная
функциональная схема разомкнутой СУ
представлена на рис.1.1.

Рис.1.1.
Обобщенная функциональная схема
разомкнутой СУ

Источником
воздействия на объект управления
(ОУ) является человек или какое либо
автоматическое устройство. Например,
фотоэлемент в системе охраны. По этому
принципу работают многие известные СУ,
в том числе система управления самолетом,
где ОУ является двигатель, а источником
воздействия – пилот.

Обобщенная
функциональная схема замкнутой СУ
представлена на рис.1.2.

Рис.1.2.
Обобщенная функциональная схема
замкнутой СУ

В схеме используются
следующие обозначения:


задающее воздействие;

ошибка системы;

управляющее воздействие;

возмущающее воздействие;

– выход системы управления, регулируемая
величина
или управляемая величина.

Замкнутая САУ
– это система управления с обратной
связью.

Обратная связь
(ОС) в замкнутой САУ «передает» результаты
измерения выходной величины

на вход системы управления.

Входами СУ являются
задающее воздействие

и возмущающее воздействие
.
Только входное воздействие

это полезный сигнал, а возмущающее
воздействие

является, как правело неконтролируемой
помехой, действие которой надо подавить.

Задача
САУ
состоит в том, чтобы
возможно точнее воспроизводить на
выходе

сигнал задания

и возможно точнее подавлять влияние
возмущающего воздействия
,
а также других внешних неконтролируемых
помех.

Для выполнения
поставленной задачи управляемая величина


сравнивается через измерительное
устройство с задающим воздействием
.
В результате сравнения получается
ошибка системы

.

Рассогласование,
или ошибка

служит источником воздействия на систему
управления, т.е. СУ работает на «уничтожение»
или сведение к минимуму

величины рассогласования.

Задающее воздействие


в общем случае может меняться произвольно,
программным образом или быть постоянным.

1. Самый простой и
широко используемый случай, когда
задающее воздействие

постоянно
.
Это системы автоматического регулирования
(САР). САР призваны поддерживать
регулируемую величину на постоянном
уровне, например, частоту вращения
двигателя исполнительного механизма
;
температуру нагрева термостата
;
напряжение на клеммах генератора

и т.п. Такие САР еще называются системами
стабилизации. Например, система
стабилизации курса самолета, система
стабилизации углового положения
гироплатформы и т.п.

  1. Задающее воздействие


    может быть заранее заданным во времени
    законом управления или так называемым
    программным управлением. В этом
    случае выходная величина

    должна следовать заданному закону
    изменения во времени
    . Например,
    программа, задающая угол наклона
    продольной оси ракетоносителя

    при запуске спутника, начиная от
    вертикального положения на старте до
    горизонтального положения на круговую
    орбиту. Графически такое движение
    представлено на рис.1.3.

Рис.1.3.
Графическое представление программного
движения ракетоносителя

В этом случае
программное движение представляется
следующим образом:

  1. К САУ, работающим
    по замкнутому контуру, относятся также
    следящие системы (СС). На рис.1.4.
    представлена обобщенная функциональная
    схема СС.

Рис.1.4.
Обобщенная функциональная схема СС

В рассматриваемой
следящей системе

– угол поворота выходного вала
двигателя постоянного тока (ДПТ), который
должен следовать

– углу повороту входного вала с
наименьшей ошибкой
,
причем

=.

Управляющим
воздействием в этом случае является
.

По принципу СС
работают системы наведения, телеуправления,
самонаведения и пр.

Важно отметить,
что в замкнутых САУ, как правило,
не бывает спокойного состояния
равновесия.
Всё время имеются какие-либо внешние
возмущения, которые и порождают
рассогласование, а это, в свою очередь,
заставляет систему работать.

Из всего изложенного
следует, что важнейшим элементом анализа
и проектирования (синтеза) САУ является
исследование динамических процессов,
отображающих поведение всех звеньев
САУ (в том числе и ЭВМ в контуре управления),
описываемых дифференциальными
уравнениями.

В замкнутых САУ
все физические величины связаны между
собой и являются различного рода
воздействиями одного звена на другое.
Поэтому приходится уравнения динамики
всех звеньев системы решать совместно.
То есть иметь дело с системой
дифференциальных уравнений высокого
порядка. Это в свою очередь существенно
усложняет задачу анализа и синтеза
САУ, задачу исследования устойчивости
и качества
процессов управления.
именно решением
этих задач занимается теория
автоматического управления
(ТАУ).

Исторически
первыми регуляторами с замкнутым циклом
были: регулятор уровня теплоносителя
в котле паровой машины И.И. Ползунова
(1765год); регулятор скорости вращения
вала паровой машины Д. Уатта (1784 год).

Первые исследования
динамики замкнутых САУ, исследование
устойчивости и качества процессов
регулирования принадлежат И.А.
Вышнеградскому (1876 год).

В общем случае
САУ может иметь не одно входное
воздействие, а множество входных
воздействий. Это так называемые
многосвязные СУ. Обобщенная функциональная
схема многосвязной СУ приведена на
рис.1.5.

Рис.1.5. Обобщенная
функциональная схема многосвязной СУ

Многосвязная САУ
состоит из каналов передачи потоков
информации, осуществляет обработку
информации и выработку управляющих
воздействий, то есть законов управления.

Кроме исключительно
технических систем автоматического
управления аналогичные принципы
управления заложены и в биологические
системы, химические, экономические и
т.д.

Все САУ можно
разделить на следующие основные классы
по различным признакам.

1

. По основным видам
уравнений динамики процессов управления:

1.1. линейные системы

1.1.1. системы с
постоянными параметрами;

1.1.2.системы с
переменными параметрами;

1.1.3. системы с
распределенными параметрами;

1.1.4. системы с
запаздыванием.

1.2. нелинейные
системы

1.2.1. системы с
постоянными параметрами;

1.2.2.системы с
переменными параметрами;

1.2.3. системы с
распределенными параметрами;

1.2.4. системы с
запаздыванием.

2. По характеру
передачи сигналов:

2.1. непрерывные
системы (аналоговые);

2.2. дискретные
системы;

2.3. релейные
системы.

3. По характеру
процессов управления:

3.1. детерминированные
системы;

3.2. стохастические
системы.

4. По характеру
функционирования:

4.1. обычные;

4.2. адаптивные;

4.3. оптимальные.

Задачами линейной
теории автоматического управления
являются:

  1. изучение
    динамических свойств и характеристик
    различных типов звеньев любой физической
    природы;

  2. формирование
    функциональных и структурных схем
    САУ;

  3. построение
    динамических характеристик САУ;

  4. определение
    ошибок и показателей точности замкнутых
    САУ;

  5. исследование
    устойчивости замкнутых САУ и оценка
    показателей качества процесса
    управления;

  6. определение
    чувствительности систем к изменению
    параметров и пр.;

  7. синтез законов
    управления;

  8. анализ и синтез
    многомерных и комбинированных САУ.

Всё вышеизложенное
является базой для анализа
функционирования существующих САУ.
А также для инженерных расчетов и
проектирования новых систем. Эти
же методы применимы для анализа и
синтеза всевозможных динамических
контуров в любых технических системах,
и не только, а также в биотехнических,
экономических, социальных и прочих.

4

Соседние файлы в папке ТАУ лекции

  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • #

Вместо введения

Системы автоматического управления (САУ) предназначены для автоматического изменения одного или нескольких параметров объекта управления с целью установления требуемого режима его работы. САУ обеспечивает поддержание постоянства заданных значений регулируемых параметров или их изменение по заданному закону либо оптимизирует определенные критерии качества управления. Например, к таким системам относятся:

  • системы стабилизации,
  • системы программного управления,
  • следящие системы

Это достаточно широкий класс систем, которые можно найти где угодно. Но какое это отношение имеет к Unity3D и вероятно к играм в частности? В принципе прямое: в любой игре так или иначе использующей симуляцию как элемент геймплея реализуются САУ, к таким играм относятся, например, Kerbal Space Programm, Digital Combat Simulator (бывший Lock On), Strike Suit Zero и т.д. (кто знает еще примеры — пишите в комментариях). В принципе любая игра, моделирующая реальные физические процессы, в том числе и просто кинематику с динамикой движения, может реализовывать те или иные САУ — этот подход проще, естественнее, а у разработчика уже есть есть набор готовых инструментов, предоставленных всякими Вышнеградскими, Ляпуновыми, Калманами, Чебышевами и прочими Коломогоровами, поэтому можно обойтись без изобретения велосипеда, т.к. его уже изобрели, да так, что получилась отдельная наука: Теория автоматического управления. Главное тут не переусердствовать. Одна тут только проблема: рассказывают про ТАУ не везде, не всем, зачастую мало и не очень понятно.

Немножко теории

Классическая система автоматического управления представленная на следующем рисунке:

image

Ключевым элементом любой САУ является регулятор представляющий из себя устройство, которое следит за состоянием объекта управления и обеспечивает требуемый закон управления. Процесс управления включает в себя: вычисление ошибки управления или сигнала рассогласования e(t) как разницы между желаемой уставкой (set point или SP) и текущей величиной процесса (process value или PV), после чего регулятор вырабатывает управляющие сигналы (manipulated value или MV).

Одной из разновидностью регуляторов является пропорционально-интегрально-дифференцирующий (ПИД) регулятор, который формирует управляющий сигнал, являющийся суммой трёх слагаемых: пропорционального, интегрального и дифференциального.

image

Где, $e(t)$ ошибка рассогласования, а также, $ P = K_p cdot e(t)$ — пропорциональная, $ I = K_i cdot int_0^t e(tau)dtau$ — интегральная, $D = K_d cdot frac{de(t)}{dt}$ — дифференциальная составляющие (термы) закона управления, который в итоговом виде описывается следующими формулами

$ e(t) = SP(t) - PV(t), $

$ MV(t) = underbrace{K_p cdot e(t)}_{P} + underbrace{K_i cdot int_0^t e(tau)dtau}_{I} + underbrace{K_d cdot frac{de(t)}{dt}}_{D}, $

Пропорциональная составляющая P — отвечает за т.н. пропорциональное управление, смысл которого в том, что выходной сигнал регулятора, противодействует отклонению регулируемой величины (ошибки рассогласования или еще это называют невязкой) от заданного значения. Чем больше ошибка рассогласования, тем больше командное отклонение регулятора. Это самый простой и очевидный закон управления. Недостаток пропорционального закона управления заключается в том, что регулятор никогда не стабилизируется в заданном значении, а увеличение коэффициента пропорциональности всегда приводит к автоколебаниям. Именно поэтому в довесок к пропорциональному закону управления приходиться использовать интегральный и дифференциальный.

Интегральная составляющая I накапливает (интегрирует) ошибку регулирования, что позволяет ПИД-регулятору устранять статическую ошибку (установившуюся ошибку, остаточное рассогласование). Или другими словами: интегральное звено всегда вносит некоторое смещение и если система подвержена некоторыми постоянным ошибкам, то оно их компенсирует (за счет своего смещения). А вот если же этих ошибок нет или они пренебрежительно малы, то эффект будет обратным — интегральная составляющая сама будет вносить ошибку смещения. Именно по этой причине её не используют, например, в задачах сверхточного позиционирования. Ключевым недостатком интегрального закона управления является эффект насыщения интегратора (Integrator windup).

Дифференциальная составляющая D пропорциональна темпу изменения отклонения регулируемой величины и предназначена для противодействия отклонениям от целевого значения, которые прогнозируются в будущем. Примечательно то, что дифференциальная компонента устраняет затухающие колебания. Дифференциальное регулирование особенно эффективно для процессов, которые имеют большие запаздывания. Недостатком дифференциального закона управления является его неустойчивость к воздействую шумов (Differentiation noise).

Таким образом, в зависимости от ситуации могут применятся П-, ПД-, ПИ- и ПИД-регуляторы, но основным законом управления в основном является пропорциональный (хотя в некоторых специфических задачах и могут использоваться исключительно только звенья дифференциаторов и интеграторов).

Казалось бы, вопрос реализации ПИД-регуляторов уже давно избит и здесь на Хабре есть парочка неплохих статей на эту тему в том числе и на Unity3D, также есть неплохая статья PID Without a PhD (перевод) и цикл статей в журнале «Современные технологии автоматизации» в двух частях: первая и вторая. Также к вашим услугам статья на Википедии (наиболее полную читайте в английском варианте). А на форумах коммьюнити Unity3D нет-нет, да и всплывет PID controller как и на gamedev.stackexchange

При вопрос по реализации ПИД-регуляторов несколько глубже чем и кажется. Настолько, что юных самоделкиных, решивших, реализовать такую схему регулирования ждет немало открытий чудных, а тема актуальная. Так что надеюсь сей опус, кому-нибудь да пригодиться, поэтому приступим.

Попытка номер раз

В качестве примера попытаемся реализовать схему регулирования на примере управления поворотом в простенькой космической 2D-аркаде, по шагам, начиная с самого начала (не забыли, что это туториал?).

Почему не 3D? Потому что реализация не измениться, за исключением того, что придется воротить ПИД-регулятор для контроля тангажа, рысканья и крена. Хотя вопрос корректного применения ПИД-регулирования вместе с кватернионами действительно интересный, возможно в будущем его и освящу, но даже в NASA предпочитают углы Эйлера вместо кватернионов, так что обойдемся простенькой моделью на двухмерной плоскости.

Для начала создадим сам объект игровой объект космического корабля, который будет состоять из собственно самого объекта корабля на верхнем уровне иерархии, прикрепим к нему дочерний объект Engine (чисто спецэффектов ради). Вот как это выглядит у меня:

image

А на сам объект космического корабля накидаем в инспекторе всяческих компонент. Забегая вперед, приведу скрин того, как он будет выглядеть в конце:

image
Но это потом, а пока в нем еще нет никаких скриптов, только стандартный джентльменский набор: Sprite Render, RigidBody2D, Polygon Collider, Audio Source (зачем?).

Собственно физика у нас сейчас самое главное и управление будет осуществляться исключительно через неё, в противном случае, применение ПИД-регулятора потеряло бы смысл. Масса нашего космического корабля оставим также в 1 кг, а все коэффициенты трения и гравитации равны нулю — в космосе же.

Т.к. помимо самого космического корабля есть куча других, менее умных космических объектов, то сначала опишем родительский класс BaseBody, который в себе будет содержать ссылки на на наши компоненты, методы инициализации и уничтожения, а также ряд дополнительных полей и методов, например для реализации небесной механики:

BaseBody.cs

using UnityEngine;
using System.Collections;
using System.Collections.Generic;

namespace Assets.Scripts.SpaceShooter.Bodies
{
    [RequireComponent(typeof(SpriteRenderer))]
    [RequireComponent(typeof(AudioSource))]
    [RequireComponent(typeof(Rigidbody2D))]
    [RequireComponent(typeof(Collider2D))]

    public class BaseBody : MonoBehaviour
    {
        readonly float _deafultTimeDelay = 0.05f;

[HideInInspector]
        public static List<BaseBody> _bodies = new List<BaseBody>();

        #region RigidBody

        [HideInInspector]
        public Rigidbody2D _rb2d;

        [HideInInspector]
        public Collider2D[] _c2d;

        #endregion

        #region References

        [HideInInspector]
        public Transform _myTransform;

        [HideInInspector]
        public GameObject _myObject;

        /// <summary>
        /// Объект, который появляется при уничтожении
        /// </summary>
        public GameObject _explodePrefab;

        #endregion

        #region  Audio

        public AudioSource _audioSource;

        /// <summary>
        /// Звуки, которые проигрываются при получении повреждения
        /// </summary>
        public AudioClip[] _hitSounds;

        /// <summary>
        /// Звуки, которые проигрываются при появлении объекта
        /// </summary>
        public AudioClip[] _awakeSounds;

        /// <summary>
        /// Звуки, которые воспроизводятся перед смертью
        /// </summary>
        public AudioClip[] _deadSounds;

        #endregion

        #region External Force Variables
        /// <summary>
        /// Внешние силы воздйствующие на объект
        /// </summary>
        [HideInInspector]
        public Vector2 _ExternalForces = new Vector2();

        /// <summary>
        /// Текущий вектор скорости
        /// </summary>
        [HideInInspector]
        public Vector2 _V = new Vector2();

        /// <summary>
        /// Текущий вектор силы гравитации
        /// </summary>
        [HideInInspector]
        public Vector2 _G = new Vector2();
        #endregion

        public virtual void Awake()
        {
            Init();
        }

        public virtual void Start()
        {

        }

        public virtual void Init()
        {
            _myTransform = this.transform;
            _myObject = gameObject;

            _rb2d = GetComponent<Rigidbody2D>();
            _c2d = GetComponentsInChildren<Collider2D>();
            _audioSource = GetComponent<AudioSource>();

            PlayRandomSound(_awakeSounds);

            BaseBody bb = GetComponent<BaseBody>();
            _bodies.Add(bb);
        }

        /// <summary>
        /// Уничтожение персонажа
        /// </summary>
        public virtual void Destroy()
        {
            _bodies.Remove(this);
            for (int i = 0; i < _c2d.Length; i++)
            {
                _c2d[i].enabled = false;
            }
            float _t = PlayRandomSound(_deadSounds);
            StartCoroutine(WaitAndDestroy(_t));
        }

        /// <summary>
        /// Ждем некоторое время перед уничтожением
        /// </summary>
        /// <param name="waitTime">Время ожидания</param>
        /// <returns></returns>
        public IEnumerator WaitAndDestroy(float waitTime)
        {
            yield return new WaitForSeconds(waitTime);

            if (_explodePrefab)
            {
                Instantiate(_explodePrefab, transform.position, Quaternion.identity);
            }

            Destroy(gameObject, _deafultTimeDelay);
        }

        /// <summary>
        /// Проигрывание случайного звука
        /// </summary>
        /// <param name="audioClip">Массив звуков</param>
        /// <returns>Длительность проигрываемого звука</returns>
        public float PlayRandomSound(AudioClip[] audioClip)
        {
            float _t = 0;
            if (audioClip.Length > 0)
            {
                int _i = UnityEngine.Random.Range(0, audioClip.Length - 1);
                AudioClip _audioClip = audioClip[_i];
                _t = _audioClip.length;
                _audioSource.PlayOneShot(_audioClip);
            }
            return _t;
        }

        /// <summary>
        /// Получение урона
        /// </summary>
        /// <param name="damage">Уровень урона</param>
        public virtual void Damage(float damage)
        {
            PlayRandomSound(_hitSounds);
        }

    }
}

Вроде описали все что надо, даже больше чем нужно (в рамках этой статьи). Теперь отнаследуем от него класс корабля Ship, который должен уметь двигаться и поворачивать:

SpaceShip.cs

using UnityEngine;
using System.Collections;
using System.Collections.Generic;

namespace Assets.Scripts.SpaceShooter.Bodies
{
    public class Ship : BaseBody
    {
        public Vector2 _movement = new Vector2();
        public Vector2 _target = new Vector2();
        public float _rotation = 0f;

        public void FixedUpdate()
        {
            float torque = ControlRotate(_rotation);
            Vector2 force = ControlForce(_movement);

            _rb2d.AddTorque(torque);
            _rb2d.AddRelativeForce(force);
        }

        public float ControlRotate(Vector2 rotate)
        {
            float result = 0f;

            return result;
        }

        public Vector2 ControlForce(Vector2 movement)
        {
            Vector2 result = new Vector2();

            return result;

        }
    }
}

Пока в нем нет ничего интересно, на текущий момент это просто класс-заглушка.

Также опишем базовый(абстрактный) класс для всех контроллеров ввода BaseInputController:

BaseInputController.cs

using UnityEngine;
using Assets.Scripts.SpaceShooter.Bodies;

namespace Assets.Scripts.SpaceShooter.InputController
{
    public enum eSpriteRotation
    {
        Rigth = 0,
        Up = -90,
        Left = -180,
        Down = -270
    }

    public abstract class BaseInputController : MonoBehaviour
    {
        public GameObject _agentObject;
        public Ship _agentBody; // Ссылка на компонент логики корабля
        public eSpriteRotation _spriteOrientation = eSpriteRotation.Up; //Это связано с нестандартной 
                                                                           // ориентации спрайта "вверх" вместо "вправо"

        public abstract void ControlRotate(float dt);
        public abstract void ControlForce(float dt);

        public virtual void Start()
        {
            _agentObject = gameObject;
            _agentBody = gameObject.GetComponent<Ship>();
        }

        public virtual void FixedUpdate()
        {
            float dt = Time.fixedDeltaTime;
            ControlRotate(dt);
            ControlForce(dt);
        }

        public virtual void Update()
        {
            //TO DO
        }
    }
}

И наконец, класс контроллера игрока PlayerFigtherInput:

PlayerInput.cs

using UnityEngine;
using Assets.Scripts.SpaceShooter.Bodies;

namespace Assets.Scripts.SpaceShooter.InputController
{
    public class PlayerFigtherInput : BaseInputController
    {
        public override void ControlRotate(float dt)
        {
            // Определяем позицию мыши относительно игрока
            Vector3 worldPos = Input.mousePosition;
            worldPos = Camera.main.ScreenToWorldPoint(worldPos);

            // Сохраняем координаты указателя мыши
            float dx = -this.transform.position.x + worldPos.x;
            float dy = -this.transform.position.y + worldPos.y;

            //Передаем направление
            Vector2 target = new Vector2(dx, dy);
            _agentBody._target = target;

            //Вычисляем поворот в соответствии с нажатием клавиш
            float targetAngle = Mathf.Atan2(dy, dx) * Mathf.Rad2Deg;
            _agentBody._targetAngle = targetAngle + (float)_spriteOrientation;
        }

        public override void ControlForce(float dt)
        {
            //Передаем movement
            _agentBody._movement = Input.GetAxis("Vertical") * Vector2.up 
                + Input.GetAxis("Horizontal") * Vector2.right;
        }
    }
}

Вроде бы закончили, теперь наконец можно перейти к тому, ради чего все это затевалось, т.е. ПИД-регуляторам (не забыли надеюсь?). Его реализация кажется простой до безобразия:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Assets.Scripts.Regulator
{
    [System.Serializable] // Этот атрибут необходим для того что бы поля регулятора 
                                   // отображались в инспекторе и сериализовывались
    public class SimplePID
    {
        public float Kp, Ki, Kd;

        private float lastError;
        private float P, I, D;

        public SimplePID()
        {
            Kp = 1f;
            Ki = 0;
            Kd = 0.2f;
        }

        public SimplePID(float pFactor, float iFactor, float dFactor)
        {
            this.Kp = pFactor;
            this.Ki = iFactor;
            this.Kd = dFactor;
        }

        public float Update(float error, float dt)
        {
            P = error;
            I += error * dt;
            D = (error - lastError) / dt;
            lastError = error;

            float CO = P * Kp + I * Ki + D * Kd;

            return CO;
        }
    }
}

Значения коэффициентов по умолчанию возьмем с потолка: это будет тривиальный единичный коэффициент пропорционального закона управления Kp = 1, небольшое значение коэффициента для дифференциального закона управления Kd = 0.2, который должен устранить ожидаемые колебания и нулевое значение для Ki, которое выбрано потому, что в нашей программной модели нет никаких статичных ошибок (но вы всегда можете их внести, а потом героически побороться с помощью интегратора).

Теперь вернемся к нашему классу SpaceShip и попробуем заюзать наше творение в качестве регулятора поворота космического корабля в методе ControlRotate:

 public float ControlRotate(Vector2 rotate)
 {
      float MV = 0f;
      float dt = Time.fixedDeltaTime;

      //Вычисляем ошибку
      float angleError = Mathf.DeltaAngle(_myTransform.eulerAngles.z, targetAngle);

      //Получаем корректирующее ускорение
      MV = _angleController.Update(angleError, dt);

      return MV;
 }

ПИД-регулятор будет осуществлять точное угловое позиционировая космического корабля только за счет крутящего момента. Все честно, физика и САУ, почти как в реальной жизни.

И без этих ваших Quaternion.Lerp

 if (!_rb2d.freezeRotation)
     rb2d.freezeRotation = true;

 float deltaAngle = Mathf.DeltaAngle(_myTransform.eulerAngles.z, targetAngle);
 float T = dt *  Mathf.Abs( _rotationSpeed / deltaAngle);

 // Трансформируем угол в вектор
Quaternion rot = Quaternion.Lerp(
                _myTransform.rotation,
                Quaternion.Euler(new Vector3(0, 0, targetAngle)),
                T);

 // Изменяем поворот объекта
 _myTransform.rotation = rot;

Получившейся исходный код Ship.cs под спойлером

using UnityEngine;
using Assets.Scripts.Regulator;

namespace Assets.Scripts.SpaceShooter.Bodies
{
    public class Ship : BaseBody
    {
        public GameObject _flame;

        public Vector2 _movement = new Vector2();
        public Vector2 _target = new Vector2();

        public float _targetAngle = 0f;
        public float _angle = 0f;

        [Header("PID")]
        public SimplePID _angleController = new SimplePID();

        public void FixedUpdate()
        {
            float torque = ControlRotate(_targetAngle);
            Vector2 force = ControlForce(_movement);

            _rb2d.AddTorque(torque);
            _rb2d.AddRelativeForce(force);
        }

        public float ControlRotate(float rotate)
        {
            float MV = 0f;
            float dt = Time.fixedDeltaTime;

            _angle = _myTransform.eulerAngles.z;

            //Вычисляем ошибку
            float angleError = Mathf.DeltaAngle(_angle, rotate);

            //Получаем корректирующее ускорение
            MV = _angleController.Update(angleError, dt);

            return MV;
        }

        public Vector2 ControlForce(Vector2 movement)
        {
            Vector2 MV = new Vector2();

            //Кусок кода спецэффекта работающего двигателя ради
            if (movement != Vector2.zero)
            {
                if (_flame != null)
                {
                    _flame.SetActive(true);
                }
            }
            else
            {
                if (_flame != null)
                {
                    _flame.SetActive(false);
                }
            }

            MV = movement;
            return MV;
        }
    }
}

Все? Расходимся по домам?

WTF! Что происходит? Почему корабль поворачивается как-то странно? И почему он так резко отскакивает от других объектов? Неужели этот глупый ПИД-регулятор не работает?

Без паники! Давайте попробуем разобраться что происходит.

В момент получения нового значения SP, происходит резкий (ступенчатый) скачок рассогласования ошибки, которая, как мы помним, вычисляется вот так: $e(t) = SP(t) - PV(t), $ соответственно происходит резкий скачок производной ошибки $frac{de(t)}{dt}$, которую мы вычисляем в этой строчке кода:

D = (error - lastError) / dt;

Можно, конечно, попробовать другие схемы дифференцирования, например, трехточечную, или пятиточечную, или… но все равно это не поможет. Ну вот не любят производные резких скачков — в таких точках функция не является дифференцируемой. Однако поэкспериментировать с разными схемами дифференцирования и интегрирования стоит, но потом и не в этой статье.

Думаю что настал момент построить графики переходного процесса: ступенчатое воздействие от S(t) = 0 в SP(t) = 90 градусов для тела массой в 1 кг, длинной плеча силы в 1 метр и шагом сетки дифференцирования 0.02 с — прям как в нашем примере на Unity3D (на самом деле не совсем, при построении этих графиков не учитывалось, что момент инерции зависит от геометрии твердого тела, поэтому переходный процесс будет немножко другой, но все же достаточно похожий для демонстрации). Все величены на грифике приведены в абсолютных значениях:
image
Хм, что здесь происходит? Куда улетел отклик ПИД-регулятора?

Поздравляю, мы только что столкнулись с таким явлением как «удар» (kick). Очевидно, что в момент времени, когда процесс еще PV = 0, а уставка уже SP = 90, то при численном дифференцировании получим значение производной порядка 4500, которое умножится на Kd=0.2 и сложится с пропорциональным теромом, так что на выходе мы получим значение углового ускорения 990, а это уже форменное надругательство над физической моделью Unity3D (угловые скорости будут достигать 18000 град/с… я думаю это предельное значение угловой скорости для RigidBody2D).

  • Может стоит подобрать коэффициенты ручками, так чтобы скачок был не таким сильным?
  • Нет! Самое лучше чего мы таким образом сможем добиться — небольшая амплитуда скачка производной, однако сам скачок как был так и останется, при этом можно докрутиться до полной неэффективности дифференциальной составляющей.

Впрочем можете поэкспериментировать.

Попытка номер два. Сатурация

Логично, что привод (в нашем случае виртуальные маневровые двигатели SpaceShip), не может отрабатывать сколько угодно большие значения которые может выдать наш безумный регулятор. Так что первое что мы сделаем — сатурируем выход регулятора:

public float ControlRotate(Vector2 rotate, float thrust)
{
    float CO = 0f;
    float MV = 0f;
    float dt = Time.fixedDeltaTime;

    //Вычисляем ошибку
    float angleError = Mathf.DeltaAngle(_myTransform.eulerAngles.z, targetAngle);

    //Получаем корректирующее ускорение
    CO = _angleController.Update(angleError, dt);

    //Сатурируем
    MV = CO;
    if (MV > thrust) MV = thrust;
    if (MV< -thrust) MV = -thrust;

    return MV;
}

А очередной раз переписанный класс Ship полностью выглядит так

namespace Assets.Scripts.SpaceShooter.Bodies
{
    public class Ship : BaseBody
    {
        public GameObject _flame;

        public Vector2 _movement = new Vector2();
        public Vector2 _target = new Vector2();

        public float _targetAngle = 0f;
        public float _angle = 0f;

        public float _thrust = 1f;

        [Header("PID")]
        public SimplePID _angleController = new SimplePID(0.1f,0f,0.05f);

        public void FixedUpdate()
        {
            _torque = ControlRotate(_targetAngle, _thrust);
            _force = ControlForce(_movement);

            _rb2d.AddTorque(_torque);
            _rb2d.AddRelativeForce(_force);
        }

        public float ControlRotate(float targetAngle, float thrust)
        {
            float CO = 0f;
            float MV = 0f;
            float dt = Time.fixedDeltaTime;

            //Вычисляем ошибку
            float angleError = Mathf.DeltaAngle(_myTransform.eulerAngles.z, targetAngle);

            //Получаем корректирующее ускорение
            CO = _angleController.Update(angleError, dt);

            //Сатурируем
            MV = CO;
            if (MV > thrust) MV = thrust;
            if (MV< -thrust) MV = -thrust;

            return MV;
        }

        public Vector2 ControlForce(Vector2 movement)
        {
            Vector2 MV = new Vector2();

            if (movement != Vector2.zero)
            {
                if (_flame != null)
                {
                    _flame.SetActive(true);
                }
            }
            else
            {
                if (_flame != null)
                {
                    _flame.SetActive(false);
                }
            }

            MV = movement * _thrust;

            return MV;
        }

        public void Update()
        {

        }        
    }
}

Итоговая схема нашего САУ тогда станет уже вот такой
image

При этом уже становится понятно, что выход контроллера CO(t) немного не одно и тоже, что управляемая величина процесса MV(t).

Собственно с этого места можно уже добавлять новую игровую сущность — привод, через которую и будет осуществляться управление процессом, логика работы которой может быть более сложной, чем просто Mathf.Clamp(), например, можно ввести дискретизацию значений (дабы не перегружать игровую физику величинами идущими шестыми после запятой), мертвую зону (опять таки не имеет смысл перегружать физику сверхмалыми реакциями), ввести задержку в упраление и нелинейность (например, сигмоиду) привода, после чего посмотреть, что из этого получится.

Запустив игру, мы обнаружим, что космический корабль стал наконец управляемым:

Если построить графики, то можно увидеть, что реакция контроллера стала уже вот такой:
image
Здесь уже используются нормированные величены, углы поделены на значение SP, а выход контроллера отнормирован относительно максимального значения на котором уже происходит сатурация.

Теперь на графике видно наличие ошибки перерегулирования (overshooting) и затухающие колебания. Уменьшая Kp и увеличивая Kd можно добиться уменьшения колебаний, но зато увеличится время реакции контроллера (скорость поворота корабля). И наоборот, увеличивая Kp и уменьшая Kd — можно добиться увеличения скорости реакции контроллера, но появятся паразитные колебания, которые при определенных (критических) значениях, перестанут быть затухающими.

Ниже приведена известна таблица влияния увеличения параметров ПИД-регулятора (как уменьшить шрифт, а то таблица безе переносов не лезет?):

А общий алгоритм ручной настройки ПИД-регулятора следующий:

  1. Подбираем пропорциональный коэффициенты при отключенных дифференциальных и интегральных звеньях до тех пор пока не начнутся автоколебания.
  2. Постепенно увеличивая дифференциальную составляющую избавляемся от автоколебаний
  3. Если наблюдается остаточная ошибка регулирования (смещение), то устраняем её за счет интегральной составляющей.

Каких-то общих значений параметров ПИД-регулятора нет: конкретные значения зависят исключительно от параметров процесса (его передаточной характеристики): ПИД-регулятор отлично работающий с одним объектом управления окажется неработоспособным с другим. Более того, коэффициенты при пропорциональной, интегральной и дифференциальной составляющих еще и взаимозависимы.

В общем не будем о грустном, дальше нас ждет самое интересное…

Попытка номер три. Еще раз производные

Приделав костыль в виде ограничения значений выхода контроллера мы так и не решили самую главную проблему нашего регулятора — дифференциальная составляющая плохо себя чувствует при ступенчатом изменении ошибки на входе регуляторе. На самом деле есть множество других костылей, например, в момент скачкообразного изменения SP «отключать» дифференциальную составляющую или же поставить фильтры нижних частот между SP(t) и операцией $SP(t)-PV(t)$ за счет которого будет происходить плавное нарастание ошибки, а можно совсем развернуться и впендюрить самый настоящий фильтр Калмана для сглаживания входных данных. В общем костылей много, и добавить наблюдателя конечно хотелось бы, но не в этот раз.

Поэтому снова вернемся к производной ошибки рассогласования и внимательно на неё посмотрим:

$ frac{de(t)}{dt} = frac{d(SP(t)-PV(t))}{dt} = frac{dSP(t)}{dt} - frac{dPV(t)}{dt}, $

Ничего не заметили? Если хорошенько присмотреться, то можно обнаружить, что вообще-то SP(t), не меняется во времени (за исключением моментов ступенчатого изменения, когда регулятор получает новую команду), т.е. её производная равна нулю:

$ frac{dSP(t)}{dt} = 0, $

тогда

$ frac{de(t)}{dt} = - frac{dPV(t)}{dt}, $

Иными словами, вместо производной ошибки, которая дифференцируема не везде мы можем использовать производную от процесса, который в мире классической механики как правило непрерывен и дифференцируем везде, а схема нашей САУ уже приобретет следующий вид:
image

$ e(t) = SP(t) - PV(t), $

$ CO(t) = underbrace{K_p cdot e(t)}_{P} + underbrace{K_i cdot int_0^t e(tau)dtau}_{I} - underbrace{K_d cdot frac{dPV(t)}{dt}}_{D}, $

Модифицируем код регулятора:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Assets.Scripts.Regulator
{
    [System.Serializable]
    public class SimplePID
    {
        public float Kp, Ki, Kd;
        private float P, I, D;

        private float lastPV = 0f;   

        public SimplePID()
        {
            Kp = 1f;
            Ki = 0f;
            Kd = 0.2f;
        }

        public SimplePID(float pFactor, float iFactor, float dFactor)
        {
            this.Kp = pFactor;
            this.Ki = iFactor;
            this.Kd = dFactor;
        }

        public float Update(float error, float PV, float dt)
        {
            P = error;
            I += error * dt;
            D = -(PV - lastPV) / dt;

            lastPV = PV;

            float CO = Kp * P + Ki * I + Kd * D;

            return CO;
        }
    }
}

И немного изменим метод ControlRotate:

public float ControlRotate(Vector2 rotate, float thrust)
{
     float CO = 0f;
     float MV = 0f;
     float dt = Time.fixedDeltaTime;

     //Вычисляем ошибку
     float angleError = Mathf.DeltaAngle(_myTransform.eulerAngles.z, targetAngle);

     //Получаем корректирующее ускорение
     CO = _angleController.Update(angleError, _myTransform.eulerAngles.z, dt);

     //Сатурируем
     MV = CO;
     if (CO > thrust) MV = thrust;
     if (CO < -thrust) MV = -thrust;

     return MV;
}

И-и-и-и… если запустить игру, то обнаружиться, что на самом деле ничего ничего не изменилось с последней попытки, что и требовалось доказать. Однако, если убрать сатурацию, то график реакции регулятора будет выглядеть вот так:
image
Скачок CO(t) по прежнему присутствует, однако он уже не такой большой как был в самом начале, а самое главное — он стал предсказуемым, т.к. обеспечивается исключительно пропорциональной составляющей, и ограничен максимально возможной ошибкой рассогласования и пропорциональным коэффициентом ПИД-регулятора (а это уже намекает на то, что Kp имеет смысл выбрать все же меньше единицы, например, 1/90f), но не зависит от шага сетки дифференцирования (т.е. dt). В общем, я настоятельно рекомендую использовать именно производную процесса, а не ошибки.

Думаю теперь никого не удивит, но таким же макаром можно заменить $K_p cdot e(t)$ на $-K_p cdot PV(t)$, однако останавливаться на этом мы не будем, можете сами поэкспериментировать и рассказать в комментариях, что из этого получилось (самому интересно)

Попытка номер четыре. Альтернативные реализации ПИД-регулятор

Помимо описанного выше идеального представления ПИД-регулятора, на практике часто применяется стандартная форма, без коэффициентов Ki и Kd, вместо которых используются временные постоянные.

Такой подход связан с тем, что ряд методик настройки ПИД-регулятора основан на частотных характеристиках ПИД-регулятора и процесса. Собственно вся ТАУ и крутится вокруг частотных характеристик процессов, поэтому для желающих углубиться, и, внезапно, столкнувшихся с альтернативной номенклатурой, приведу пример т.н. стандартной формы ПИД-регулятора:

$ e(t) = SP(t) - PV(t), $

$ CO(t) =CO_{bias} + K_p cdot Bigl(e(t) + frac{1}{T_i} cdot int_0^t e(tau)dtau - T_d cdot frac{dPV(t)}{dt} Bigl), $

где, $T_d= frac{K_d}{K_p}$ — постоянная дифференцирования, влияющая на прогнозирование состояния системы регулятором,
$T_i = frac{K_p}{K_i}$ — постоянная интегрирования, влияющая на интервал усреднения ошибки интегральным звеном.

Основные принципы настройки ПИД-регулятора в стандартной форме аналогичны идеализированному ПИД-регулятору:

  • увеличение пропорционального коэффициента увеличивает быстродействие и снижает запас устойчивости;
  • с уменьшением интегральной составляющей ошибка регулирования с течением времени уменьшается быстрее;
  • уменьшение постоянной интегрирования уменьшает запас устойчивости;
  • увеличение дифференциальной составляющей увеличивает запас устойчивости и быстродействие

Исходный код стандартной формы, вы можете найти под спойлером

namespace Assets.Scripts.Regulator
{
    [System.Serializable]    
    public class StandartPID
    {
        public float Kp, Ti, Td;
        public float error, CO;
        public float P, I, D;

        private float lastPV = 0f;

        public StandartPID()
        {
            Kp = 0.1f;
            Ti = 10000f;
            Td = 0.5f;
            bias = 0f;
        }

        public StandartPID(float Kp, float Ti, float Td)
        {
            this.Kp = Kp;
            this.Ti = Ti;
            this.Td = Td;
        }

        public float Update(float error, float PV, float dt)
        {
            this.error = error;
            P = error;
            I += (1 / Ti) * error * dt;
            D = -Td * (PV - lastPV) / dt;

            CO = Kp * (P + I + D);
            lastPV = PV;

            return CO;
        }
    }
}

В качестве значений по умолчанию, выбраны Kp = 0.01, Ti = 10000, Td = 0.5 — при таких значениях корабль поворачивается достаточно быстро и обладает некоторым запасом устойчивости.

Помимо такой формы ПИД-регулятора, часто используется т.н. реккурентная форма:

$ CO(t_k)=CO(t_{k-1})+K_pleft[left(1+dfrac{Delta t}{T_i}+dfrac{T_d}{Delta t}right)e(t_k)+left(-1-dfrac{2T_d}{Delta t}right)e(t_{k-1})+dfrac{T_d}{Delta t}e(t_{k-2})right] $

Не будем на ней останавливаться, т.к. она актуальна прежде всего для хардверных программистов, работающих с FPGA и микроконтроллерами, где такая реализация значительно удобнее и эффективнее. В нашем же случае — давайте что-нибудь сваям на Unity3D — это просто еще одна реализация ПИД-контроллера, которая ни чем не лучше других и даже менее понятная, так что еще раз дружно порадуемся как хорошо программировать в уютненьком C#, а не в жутком и страшном VHDL, например.

Вместо заключения. Куда бы еще присобачить ПИД-регулятор

Теперь попробуем немного усложнить управление корабля используя двухконтурное управление: один ПИД-регулятор, уже знакомый нам _angleController, отвечает по прежнему за угловое позиционирование, а вот второй — новый, _angularVelocityController — контролирует скорость поворота:

public float ControlRotate(float targetAngle, float thrust)
{
    float CO = 0f;
    float MV = 0f;
    float dt = Time.fixedDeltaTime;

    _angle = _myTransform.eulerAngles.z;

    //Контроллер угла поворота
    float angleError = Mathf.DeltaAngle(_angle, targetAngle);
    float torqueCorrectionForAngle = 
    _angleController.Update(angleError, _angle, dt);

    //Контроллер стабилизации скорости
    float angularVelocityError = -_rb2d.angularVelocity;
    float torqueCorrectionForAngularVelocity = 
        _angularVelocityController.Update(angularVelocityError, -angularVelocityError, dt);

    //Суммарный выход контроллера
    CO = torqueCorrectionForAngle + torqueCorrectionForAngularVelocity;

    //Дискретизируем с шагом 100            
    CO = Mathf.Round(100f * CO) / 100f;

    //Сатурируем
    MV = CO;
    if (CO > thrust) MV = thrust;
    if (CO < -thrust) MV = -thrust;

    return MV;
}

Назначение второго регулятора — гашение избыточных угловых скоростей, за счет изменения крутящего момента — это сродни наличию углового трения, которое мы отключили еще при создании игрового объекта. Такая схема управления [возможно] позволит получить более стабильное поведение корабля, и даже обойтись только пропорциональными коэффициентами управления — второй регулятор будет гасить все колебания, выполняя функцию, аналогичную дифференциальной составляющей первого регулятора.

Помимо этого, добавим новый класс ввода игрока — PlayerInputCorvette, в котором повороты буду осуществляться уже за счет нажатия клавиш «вправо-влево», а целеуказание с помощью мыши мы оставим для чего-нибудь более полезного, например, для управления турелью. Заодно у нас теперь появился такой параметр как _turnRate — отвечающий за скорость/отзывчивость поворота (не понятно только куда его поместить лучше в InputCOntroller или все же Ship).

public class PlayerCorvetteInput : BaseInputController
{
     public float _turnSpeed = 90f;

     public override void ControlRotate()
     {
         // Находим указатель мыши
         Vector3 worldPos = Input.mousePosition;
         worldPos = Camera.main.ScreenToWorldPoint(worldPos);

         // Сохраняем относительные координаты указателя мыши
         float dx = -this.transform.position.x + worldPos.x;
         float dy = -this.transform.position.y + worldPos.y;

         //Передаем направление указателя мыши
         Vector2 target = new Vector2(dx, dy);
         _agentBody._target = target;

         //Вычисляем поворот в соответствии с нажатием клавиш
         _agentBody._rotation -= Input.GetAxis("Horizontal") * _turnSpeed * Time.deltaTime;
    }

    public override void ControlForce()
    {            
         //Передаем movement
         _agentBody._movement = Input.GetAxis("Vertical") * Vector2.up;
    }
}

Также для наглядности накидаем на коленках скрипт для отображения отладочной информации

namespace Assets.Scripts.SpaceShooter.UI
{
    [RequireComponent(typeof(Ship))]
    [RequireComponent(typeof(BaseInputController))]
    public class Debugger : MonoBehaviour
    {
        Ship _ship;
        BaseInputController _controller;
        List<SimplePID> _pids = new List<SimplePID>();
        List<string> _names = new List<string>();

        Vector2 _orientation = new Vector2();

        // Use this for initialization
        void Start()
        {
            _ship = GetComponent<Ship>();
            _controller = GetComponent<BaseInputController>();

            _pids.Add(_ship._angleController);
            _names.Add("Angle controller");

            _pids.Add(_ship._angularVelocityController);
            _names.Add("Angular velocity controller");

        }

        // Update is called once per frame
        void Update()
        {
            DrawDebug();
        }

        Vector3 GetDiretion(eSpriteRotation spriteRotation)
        {
            switch (_controller._spriteOrientation)
            {
                case eSpriteRotation.Rigth:
                    return transform.right;
                case eSpriteRotation.Up:
                    return transform.up;
                case eSpriteRotation.Left:
                    return -transform.right;
                case eSpriteRotation.Down:
                    return -transform.up;
            }
            return Vector3.zero;
        }

        void DrawDebug()
        {
            //Направление поворота
            Vector3 vectorToTarget = transform.position 
                + 5f * new Vector3(-Mathf.Sin(_ship._targetAngle * Mathf.Deg2Rad), 
                    Mathf.Cos(_ship._targetAngle * Mathf.Deg2Rad), 0f);

            // Текущее направление
            Vector3 heading = transform.position + 4f * GetDiretion(_controller._spriteOrientation);

            //Угловое ускорение
            Vector3 torque = heading - transform.right * _ship._Torque;

            Debug.DrawLine(transform.position, vectorToTarget, Color.white);
            Debug.DrawLine(transform.position, heading, Color.green);
            Debug.DrawLine(heading, torque, Color.red);
        }

        void OnGUI()
        {
            float x0 = 10;
            float y0 = 100;

            float dx = 200;
            float dy = 40;

            float SliderKpMax = 1;
            float SliderKpMin = 0;
            float SliderKiMax = .5f;
            float SliderKiMin = -.5f;
            float SliderKdMax = .5f;
            float SliderKdMin = 0;

            int i = 0;
            foreach (SimplePID pid in _pids)
            {
                y0 += 2 * dy;

                GUI.Box(new Rect(25 + x0, 5 + y0, dx, dy), "");

                pid.Kp = GUI.HorizontalSlider(new Rect(25 + x0, 5 + y0, 200, 10), 
                    pid.Kp, 
                    SliderKpMin, 
                    SliderKpMax);
                pid.Ki = GUI.HorizontalSlider(new Rect(25 + x0, 20 + y0, 200, 10), 
                    pid.Ki, 
                    SliderKiMin, 
                    SliderKiMax);
                pid.Kd = GUI.HorizontalSlider(new Rect(25 + x0, 35 + y0, 200, 10), 
                    pid.Kd, 
                    SliderKdMin, 
                    SliderKdMax);

                GUIStyle style1 = new GUIStyle();
                style1.alignment = TextAnchor.MiddleRight;
                style1.fontStyle = FontStyle.Bold;
                style1.normal.textColor = Color.yellow;
                style1.fontSize = 9;

                GUI.Label(new Rect(0 + x0, 5 + y0, 20, 10), "Kp", style1);
                GUI.Label(new Rect(0 + x0, 20 + y0, 20, 10), "Ki", style1);
                GUI.Label(new Rect(0 + x0, 35 + y0, 20, 10), "Kd", style1);

                GUIStyle style2 = new GUIStyle();
                style2.alignment = TextAnchor.MiddleLeft;
                style2.fontStyle = FontStyle.Bold;
                style2.normal.textColor = Color.yellow;
                style2.fontSize = 9;

                GUI.TextField(new Rect(235 + x0, 5 + y0, 60, 10), pid.Kp.ToString(), style2);
                GUI.TextField(new Rect(235 + x0, 20 + y0, 60, 10), pid.Ki.ToString(), style2);
                GUI.TextField(new Rect(235 + x0, 35 + y0, 60, 10), pid.Kd.ToString(), style2);

                GUI.Label(new Rect(0 + x0, -8 + y0, 200, 10), _names[i++], style2);
            }
        }
    }
}

Класс Ship также претерпел необратимые мутации и теперь должен выглядеть вот так:

namespace Assets.Scripts.SpaceShooter.Bodies
{
    public class Ship : BaseBody
    {
        public GameObject _flame;

        public Vector2 _movement = new Vector2();
        public Vector2 _target = new Vector2();

        public float _targetAngle = 0f;
        public float _angle = 0f;

        public float _thrust = 1f;

        [Header("PID")]
        public SimplePID _angleController = new SimplePID(0.1f,0f,0.05f);
        public SimplePID _angularVelocityController = new SimplePID(0f,0f,0f);

        private float _torque = 0f;
        public float _Torque
        {
            get
            {
                return _torque;
            }
        }

        private Vector2 _force = new Vector2();
        public Vector2 _Force
        {
            get
            {
                return _force;
            }
        }

        public void FixedUpdate()
        {
            _torque = ControlRotate(_targetAngle, _thrust);
            _force = ControlForce(_movement, _thrust);

            _rb2d.AddTorque(_torque);
            _rb2d.AddRelativeForce(_force);
        }

        public float ControlRotate(float targetAngle, float thrust)
        {
            float CO = 0f;
            float MV = 0f;
            float dt = Time.fixedDeltaTime;

            _angle = _myTransform.eulerAngles.z;

            //Контроллер угла поворота
            float angleError = Mathf.DeltaAngle(_angle, targetAngle);
            float torqueCorrectionForAngle = 
                _angleController.Update(angleError, _angle, dt);

            //Контроллер стабилизации скорости
            float angularVelocityError = -_rb2d.angularVelocity;
            float torqueCorrectionForAngularVelocity = 
                _angularVelocityController.Update(angularVelocityError, -angularVelocityError, dt);

            //Суммарный выход контроллера
            CO = torqueCorrectionForAngle + torqueCorrectionForAngularVelocity;

            //Дискретизируем с шагом 100            
            CO = Mathf.Round(100f * CO) / 100f;

            //Сатурируем
            MV = CO;
            if (CO > thrust) MV = thrust;
            if (CO < -thrust) MV = -thrust;

            return MV;
        }

        public Vector2 ControlForce(Vector2 movement, float thrust)
        {
            Vector2 MV = new Vector2();

            if (movement != Vector2.zero)
            {
                if (_flame != null)
                {
                    _flame.SetActive(true);
                }
            }
            else
            {
                if (_flame != null)
                {
                    _flame.SetActive(false);
                }
            }

            MV = movement * thrust;

            return MV;
        }

        public void Update()
        {

        }        
    }
}

А вот, собственно заключительное видео того, что должно получиться:

К сожалению получилось охватить не все, что хотелось бы, в частности почти не затронут вопрос настройки ПИД-регулятора и практически не освящена интегральная составляющая — фактически приведен пример только для ПД-регулятора. Собственно изначально планировалось несколько больше примеров (круиз-контроль, вращение турели и компенсация вращательного момента), но статья итак уже разбухла, да и вообще:
image

Немного ссылок

  1. Годная статья на английской вики
  2. PID tutorial
  3. ПИД-регуляторы: вопросы реализации. Часть 1
  4. ПИД-регуляторы: вопросы реализации. Часть 2
  5. PID Without a PhD
  6. PID Without a PhD. Перевод
  7. Derivative Action and PID Control
  8. Control System Lab: PID
  9. ПИД-регулятор своими руками
  10. Корректная реализация разностной схемы ПИД регулятора
  11. Программируем квадрокоптер на Arduino (часть 1)
  12. Виртуальный квадрокоптер на Unity + OpenCV (Часть 1)
  13. Поляков К.Ю. Теория автоматического управления для чайников
  14. PID control system analysis, design, and technology
  15. Aidan O’Dwyer. Handbook of PI and PID Controller Tuning Rules (3rd ed.)
  16. PID process control, a “Cruise Control” example
  17. https://www.mathworks.com/discovery/pid-control.html
  18. http://scilab.ninja/study-modules/scilab-control-engineering-basics/module-4-pid-control/
  19. https://sourceforge.net/p/octave/control/ci/default/tree/inst/optiPID.m

Еще немного ссылок на другие примеры
http://luminaryapps.com/blog/use-a-pid-loop-to-control-unity-game-objects/
http://www.habrador.com/tutorials/pid-controller/3-stabilize-quadcopter/
https://www.gamedev.net/articles/programming/math-and-physics/pid-control-of-physics-bodies-r3885/
https://ksp-kos.github.io/KOS/tutorials/pidloops.html

НАЛАДКА ПРИБОРОВ И СИСТЕМ АВТОМАТИЗАЦИИ

Рассогласование

Обратной связью функциональной схемы автоматической систе­мы регулирования называется связь, направленная от выхода к входу рассматриваемого участка цепи.

Объект

+АН

‘»і

у— *

Регулятор

Заданием

Рис. 7. Упрощенная структурная схе­ма замкнутой системы автоматического регулирования (/ — точка суммирова­ния)

Рассмотрим принцип действия обратной связи на примере регу­лятора И. И. Ползунова (см. рис. 3). Предположим, что возмущением служит изменение подачи водыДСв (рис. 7), гдеД обозначает измене­ние (приращение) расхода, т. е. величину возмущения. Увеличение расхода обозначим «+», т. е. положительное возмущение, а уменьше­ние обозначим «—». При увеличении расхода воды через регулирую­щий клапан 4 (см. рис. 3) на величину і ДС? В (рис. 7) уровень воды увеличится на величину +Д//. Чтобы вернуть уровень в исходное положение, регулятор должен уменьшить расход воды через клапан на величину —ДСв, тогда в точке суммирования 1 на входе в объект будет сигнал, равный О, т. е. (+Д(5В) + (—ДСВ) — 0. Это означает,

что приращение (изменение рас­хода) равно нулю, т. е. расход вернулся к первоначальному значению. В рассматриваемом примере регулятор инвертирует (меняет на противоположный) знак и тем самым осуществляет отрицательную обратную связь Если регулятор не будет ин­вертировать знак, то в нашем

случае при увеличении уровня на величину 4 ДЯ регулятор изменит расход воды на величи­ну +ДСВ и сигнал на входе в объект станет равен Н-2дОв, а это приведет к еще большему увеличению уровня до величины — 2д Н и т. д. до тех пор, пока или котел не переполнится водой, или клапан

полностью не закроется. Такая обратная связь и такой контур на­зываются положительными.

При всех внешних и внутренних возмущениях регулируемый параметр возвращается регулятором к первоначальному значению. Исключение составляет возмущение по заданию регулируемой вели­чины (рис. 8)

Для упрощения анализа работы системы будем рассматривать только величину изменения параметров (их приращения), т. е. будем считать, что исходные значения величины задания, расхода и уровня

Рассогласование

Рис. 8. Действие обратной, связи при возмущении со стороны задания: а — обобщенная структурная схема ACP, б — пример регулятора; 1 — точка суммирования — сигналов задания и регулируемого параметра

раины нулю. Установим задание, равное величине +Д#а. Этот сигнал, попадая на вход регулятора, приведет его в действие, т. е. величина на выходе регулятора —Дхр будет расти, а это приведет к появлению сигнала —Ду на выходе объекта. Обаэги сигнала суммируются в точ­ке 1 с разными знаками. Пока сумма (+Ду3) + (—А у) не станет близка нулю, регулятор будет изменять Дл’р и АУ — И только когда (+-Дг/а) + (—А у) ж 0, т. е. когда на входе в регулятор не будет сиг­нала или он будет очень мал, регулятор перестанет отрабатывать возмущение по заданию. Это произойдет тогда, когда у по абсолютной величине станет равным абсолютной величине задания (Ау) — (Ау3).

Следовательно, при изменении задания Ауъ будет автоматически устанавливаться новая величина регулируемого параметра у.

Разница между заданным и действительным значениями регули­руемой величины называется рассогласованием или ошибкой: УР = Уг — У-

Все то время, пока существует рассогласование (Д*/р=^0), пара­метры системы изменяются, т. е. система находится в движении. В этом случае для каждого параметра системы, включая и рассогла­сование, можно построить график его изменения во времени. Пове­дение системы в интервале времени., когда у$ф 0, и характер факто­ров, влияющих на это поведение, называются динамическими свойст­вами замкнутой системы, а график изменения параметров системы и ее элементов (регулятора, объекта и т. д.) во времени называется дина­мической характеристикой.

  • Основные типы АСР
  • Регуляторы непрямого действия
  • Рекомендации по выбору бизнеса
  • Строительное оборудование МСД
  • Тепловые насосы

НАЛАДКА ПРИБОРОВ И СИСТЕМ АВТОМАТИЗАЦИИ

Автоматизированные Системы Управления: Технологии, Применение и Решения

Автоматизированные системы управления (ASU) являются важным инструментом для управления процессами в бизнесе. Они помогают организациям улучшать эффективность, повышать производительность, уменьшать расходы и снижать риски. Автоматизированные системы управления включают в себя …

Торговое электронное оборудование для автоматизации магазина

В коммерческой деятельности электронное оборудование для торговли имеет огромное значение. Необходимость в нем обусловлена требованиями времени и потребностями современного человека в автоматизации объекта торговли.

Стенды для балансировки коленчатых валов

Данное оборудование в настоящее время не изготавливается! Разрабатываемый стационарный, автоматизированный стенд балансировки коленчатых валов ДВС, предназначен для устранения дисбалансов коленчатых валов автомобильных двигателей и различных изделий-роторов собственной массой не более …

Рассмотрим что означает понятие и значение слова рассогласование (информация предоставлена intellect.icu).

-я, средний род Спец.

Нарушение в согласованной деятельности, работе чего- лицо

Рассогласование функциональной системы организма. Рассогласование приборов. Рассогласование системы управления.

рассогласование

Цифровое произношение

Используя технологию и алгоритмы для преобразования «Рассогласование» в числовой формат с целью облегчения их поиска,
классификации или сопоставления для достижения цифрового произношения алгоритмами soundex-Р224, для metaphone-«расaгласaвани» и для double-metaphone RSKL.

См. также


Балансирующий робот. ПИД-регулятор.

… , первое из. которых пропорционально разности входного сигнала и сигнала обратной связи (сигнал .рассогласования ), второе — интеграл сигнала рассогласования , третье — производная сигнала рассогласования Если какие-то … (Робототехника)


Движение вдоль стены робота

… u Значение называетсязаданным значением (или уставкой , в технике ), а разность . e = ( − x) — невязкой (или ошибкой [регулирования ], в технике ), рассогласованием .или отклонением величины от заданной , где , , — коэффициенты усиления пропорциональной , интегральной и дифференциальной . составляющих регулятора … (Робототехника)


МУЛЬТИФОКАЛЬНЫЕ ВЫЗВАННЫЕ ПОТЕНЦИАЛЫ, СВЯЗАННЫЕ С СОБЫТИЕМ, В РАННЕЙ ДИАГНОСТИКЕ КОГНИТИВНОЙ ДЕЗИНТЕГРАЦИИ

… больных Примеры вопросов и ответов Какой компонент вызванных потенциалов отражает семантическое рассогласование Отрицательный компонент N 400 семантического вызванного потенциала отражает семантическое рассогласование . мс … … компонент N 400 семантического вызванного потенциала отражает семантическое рассогласование . мс — «волна рассогласования »;, амплитуда которой отражает смысловое несоответствие понятий , — например ., визуальное предъявление фразы … (Психофизиология)


1.4 Локальные задачи управления и контроля

… (t) = y*(t)-y (t),. характеризующий текущее значение отклонения выходной переменной от задающего воздействия называется . рассогласованием , ошибкой , или отклонением При этом значение 0 = = y* — y — начальное рассогласование системы Тогда задачи стабилизации … … стабилизации и слежения иначе могут быть сформулированы как. задачи поддержания нулевого значения рассогласования , т е Задача терминального управления заключается в «перемещении » объекта управления в заданную . (обычно удаленную … (Математические основы теории автоматического управления)


Датчикам электромашинного типа относятся: сельсины, магнесины, редуктосины, вращающиеся трансформаторы, индуктосины, цифраторы

… автоматизации ВТ используют не только как датчики , но. и как элементы сравнения , измеряющие угол рассогласования Для этого СКВТ соединяют по схеме , показанной на рис Выходное напряжение пропорционально … (Датчики и сенсоры, Технические измерения и измерительные приборы )

… чувств , и.той ситуацией , которую ожидал , прогнозировал (предвидел ) организм Чем больше рассогласование (несоответствие ) между фактически возникшим сигналом и тем., что прогнозировалось , тем большее количество информации несет этот сигнал … … информации несет этот сигнал , тем.более патогенным он может оказаться Реакция испуга возникает при рассогласовании между фактической ситуацией и прогнозируемой .; реакции страха — в результате сличения прогнозируемой ситуации с той … (Психиатрия)



Понравилась статья? Поделить с друзьями:
  • Что такое распаковщик freearc вернул код ошибки
  • Что такое раскаяние почему важно уметь признавать свои ошибки
  • Что такое раскаяние почему важно признавать свои ошибки паустовский
  • Что такое размножение растений с биологическими ошибками
  • Что такое работа над ошибками в школе