Историческая справка. Историческая справка Тау лекции

Историческая справка. Историческая справка Тау лекции


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

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

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


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


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



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



Но это потом, а пока в нем еще нет никаких скриптов, только стандартный джентльменский набор: 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 { public class BaseBody: MonoBehaviour { readonly float _deafultTimeDelay = 0.05f; public static List _bodies = new List(); #region RigidBody public Rigidbody2D _rb2d; public Collider2D _c2d; #endregion #region References public Transform _myTransform; public GameObject _myObject; ///

/// Объект, который появляется при уничтожении /// public GameObject _explodePrefab; #endregion #region Audio public AudioSource _audioSource; /// /// Звуки, которые проигрываются при получении повреждения /// public AudioClip _hitSounds; /// /// Звуки, которые проигрываются при появлении объекта /// public AudioClip _awakeSounds; /// /// Звуки, которые воспроизводятся перед смертью /// public AudioClip _deadSounds; #endregion #region External Force Variables /// /// Внешние силы воздйствующие на объект /// public Vector2 _ExternalForces = new Vector2(); /// /// Текущий вектор скорости /// public Vector2 _V = new Vector2(); /// /// Текущий вектор силы гравитации /// 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(); _c2d = GetComponentsInChildren(); _audioSource = GetComponent(); PlayRandomSound(_awakeSounds); BaseBody bb = GetComponent(); _bodies.Add(bb); } /// /// Уничтожение персонажа /// 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)); } /// /// Ждем некоторое время перед уничтожением /// /// Время ожидания /// public IEnumerator WaitAndDestroy(float waitTime) { yield return new WaitForSeconds(waitTime); if (_explodePrefab) { Instantiate(_explodePrefab, transform.position, Quaternion.identity); } Destroy(gameObject, _deafultTimeDelay); } /// /// Проигрывание случайного звука /// /// Массив звуков /// Длительность проигрываемого звука 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; } /// /// Получение урона /// /// Уровень урона 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(); } 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 { // Этот атрибут необходим для того что бы поля регулятора // отображались в инспекторе и сериализовывались 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; 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, происходит резкий (ступенчатый) скачок рассогласования ошибки, которая, как мы помним, вычисляется вот так: соответственно происходит резкий скачок производной ошибки , которую мы вычисляем в этой строчке кода:


D = (error - lastError) / dt;

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


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


Хм, что здесь происходит? Куда улетел отклик ПИД-регулятора?


Поздравляю, мы только что столкнулись с таким явлением как "удар" (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; 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() { } } }


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


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


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


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



Если построить графики, то можно увидеть, что реакция контроллера стала уже вот такой:


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

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



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


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

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


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

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


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



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





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




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


using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Assets.Scripts.Regulator { 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; return MV; }

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


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


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

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

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


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




где, - постоянная дифференцирования, влияющая на прогнозирование состояния системы регулятором,
- постоянная интегрирования, влияющая на интервал усреднения ошибки интегральным звеном.


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

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

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

namespace Assets.Scripts.Regulator { 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 - при таких значениях корабль поворачивается достаточно быстро и обладает некоторым запасом устойчивости.


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



Не будем на ней останавливаться, т.к. она актуальна прежде всего для хардверных программистов, работающих с 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 { public class Debugger: MonoBehaviour { Ship _ship; BaseInputController _controller; List _pids = new List(); List _names = new List(); Vector2 _orientation = new Vector2(); // Use this for initialization void Start() { _ship = GetComponent(); _controller = GetComponent(); _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, 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; 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() { } } }

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

История

Впервые сведения об автоматах появились в начале нашей эры в работах Герона Александрийского «Пневматика» и «Механика», где описаны автоматы, созданные самим Героном и его учителем Ктесибием: пневмоавтомат для открытия дверей храма, водяной орган, автомат для продажи святой воды и др. Идеи Герона значительно опередили свой век и не нашли применения в его эпоху.

Устойчивость линейных систем

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

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

Операторная форма записи линеаризированного уравнения.

y(t) = y уст (t)+y п = y вын (t)+y св

y уст (y вын ) - частное решение линеаризированного уравнения.

y п (y св ) - общее решение линеаризированного уравнения как однородного дифференциального уравнения, то есть

САУ устойчива, если переходные процессы у n (t), вызываемые любыми возмущениями, будут затухающими с течением времени, то есть при

Решая дифференциальное уравнение в общем случае, получим комплексные корни p i , p i+1 = ±α i ± jβ i

Каждой паре комплексно-сопряженных корней соответствует следующая составляющая уравнения переходного процесса:

Из полученных результатов видно, что:

Критерии устойчивости

Критерий Рауса

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

Коэффициенты Строки столбец 1 столбец 2 столбец 3
1
2
3
4

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

Критерий Гурвица

Определитель Гурвица

Теорема : Для устойчивости замкнутой САУ необходимо и достаточно, чтобы определитель Гурвица и все его миноры были положительны при

Критерий Михайлова

Заменим , где ω - угловая частота колебаний, соответствующих чисто мнимому корню данного характеристического полинома.

Критерий : для устойчивости линейной системы n-го порядка необходимо и достаточно, чтобы кривая Михайлова, построенная в координатах , проходила последовательно через n квадрантов.

Рассмотрим зависимость между кривой Михайлова и знаками его корней (α>0 и β>0)

1) Корень характеристического уравнения - отрицательное вещественное число

2) Корень характеристического уравнения - положительное вещественное число

Соответствующий данному корню сомножитель

3) Корень характеристического уравнения - комплексная пара чисел с отрицательной вещественной частью

Соответствующий данному корню сомножитель

4) Корень характеристического уравнения - комплексная пара чисел с положительной вещественной частью

Соответствующий данному корню сомножитель

Критерий Найквиста

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

Пусть разомкнутая система представлена в виде полинома

тогда сделаем подстановку и получим:

Для более удобного построения годографа при n>2 приведём уравнение (*) к «стандартному» виду:

При таком представлении модуль A(ω) = | W(jω)| равен отношению модулей числителя и знаменателя, а аргумент (фаза) ψ(ω) - разности их аргументов. В свою очередь, модуль произведения комплексных чисел равен произведению модулей, а аргумент - сумме аргументов.

Модули и аргументы, соответствующие сомножителям передаточной функции

Сомножитель
k k 0
p ω

После чего построим годограф для вспомогательной функции , для чего будем изменять

При , а при (так как n

Для определения результирующего угла поворота найдём разность аргументов числителя и знаменателя

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


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

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

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

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

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

С точки зрения структурной организации широкое распространение получили САУ с последовательной и параллельной коррекцией.


САУ с последовательной коррекцией


САУ с последовательной и параллельной коррекцией

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

Имеется также комбинированные САУ, которая способна на многое. Но в данном курсе лекций она рассматриваться не будет.

В первой лекции, вы узнаете что такое предмет и дисциплины (ТАУ) и краткая историческая справка
Классификация САУ (систем автоматического управления)

Передаточная функция
Частотные характеристики.
Временные функции и характеристики
Структурные схемы и их преобразование
Типовые звенья и их характеристики
Минимально- и неминимально-фазовые звенья
Частотные характеристики разомкнутых систем
Соединения некоторых типовых звеньев

Понятие устойчивости линейных непрерывных САУ
Критерий устойчивости Гурвица
Критерий устойчивости Михайлова
Критерий устойчивости Найквиста
Понятие запаса устойчивости

Показатели качества
Критерии качества переходного процесса
Последовательная коррекция динамических свойств
Параллельная коррекция

Попов Е.П. Теория линейных систем автоматического регулирования и управления. - М. Наука, 1989. - 304 с.
Теория автоматического управления. Ч.1. Теория линейных систем автоматического управления/ Н.А. Бабаков и др.; Под ред. А.А. Воронова. - М.: Высшая школа, 1986. - 367 с.
Бабаков Н.А. и др. Теория автоматического управления. Ч.1/Под ред. А.А. Воронова. - М.: Высшая школа, 1977. - 303 с.
Юревич Е.И. Теория автоматического управления. - М.: Энергия, 1975. - 416 с.
Бесекерский В.А. и др. Сборник задач по теории автоматического регулирования и управления. - М.: Наука, 1978. - 512 с.
Теория автоматического управления. Ротач В.Я - Рассмотрены положения теории автоматического управления с позиций ее применения целью построения систем управления технологическими процессами.
конспект лекция студента ботаника

МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РОССИЙСКОЙ ФЕДЕРАЦИИ

Федеральное государственное автономное образовательное учреждение высшего профессионального образования

«Санкт-Петербургский государственный университет аэрокосмического приборостроения»

_________________________________________________________________

М. В. Бураков

Теория автоматического управления.

Учебное пособие

Санкт-Петербург

Рецензенты:

Кандидат технических наук Д. О. Якимовский (Федеральное государственное предприятие «НИИ командных приборов»). Кандидат технических наук доцент А. А. Мартынов

(Санкт-Петербургский государственный университет аэрокосмического приборостроения)

Утверждено Редакционно-издательским советом университета

в качестве учебного пособия

Бураков М.В.

Д79 Теория автоматического управления: учеб. пособие. Часть 1/ М. В. Бураков;– СПб.: ГУАП, 2013. -258 с.: ил.

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

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

Учебное пособие предназначено для подготовки бакалавров и магистров по направлению 220400 «Управление в технических системах», а также студентов других специальностей, изучающих дисциплины «Теория автоматического управления» и «Основы теории управления».

1. БАЗОВЫЕ ПОНЯТИЯ И ОПРЕДЕЛЕНИЯ

1.1. Краткая история развития ТАУ

1.2. Основные понятия ТАУ

1.3. Способы описания объектов управления

1.4. Линеаризация

1.4. Критерии качества управления

1.5. Регуляторы по отклонению

Вопросы для самопроверки

2. ПЕРЕДАТОЧНЫЕ ФУНКЦИИ

2.1. Преобразование Лапласа

2.2. Понятие передаточной функции

2.3. Типовые динамические звенья

2.4. Временные характеристики

2.5. Передаточная функция системы с обратной

2.6. Частные передаточные функции

2.7. Точность в установившихся режимах

2.8. Преобразование структурных схем

2.9. Сигнальные графы и формула Мейсона

2.10. Инвариантные системы

Вопросы для самопроверки

3. КОРНЕВЫЕ ОЦЕНКИ УСТОЙЧИВОСТИ И КА-

3.1. Необходимое и достаточное условие устойчи-

3.2. Алгебраический критерий устойчивости

3.3. Структурно неустойчивые системы

3.4. Корневые показатели качества переходного

процесса

3.5. Выбор параметров регулятора

3.6. Корневой годограф

Вопросы для самопроверки

4. ЧАСТОТНЫЕ МЕТОДЫ АНАЛИЗА И СИНТЕЗА

4.1. Преобразование Фурье

4.2. Логарифмические частотные характеристики

4.3. Частотные характеристики разомкнутой систе-

4.4. Частотные критерии устойчивости

4.4.1. Критерий устойчивости Михайлова

4.4.2. Критерий устойчивости Найквиста

4.4.3. Критерий Найквиста для систем с запазды-

4.5. Частотные критерии качества

4.5.1. Запасы устойчивости

4.5.2. Точность при гармоническом воздействии

4.6. Синтез корректирующих устройств

4.6.1. Оценка качества следящей системы по виду

ЛАЧХ разомкнутой системы

4.6.2. Коррекция с помощью дифференцирующего

устройства

4.6.3. Коррекция с помощью интегро-

дифференцирующей цепи

4.6.4. Синтез корректирующего звена общего вида

4.7. Аналоговые корректирующие звенья

4.7.1. Пассивные корректирующие звенья

4.7.2. Активные корректирующие звенья

Вопросы для самопроверки

5. ЦИФРОВЫЕ СИСТЕМЫ УПРАВЛЕНИЯ

5.1. Аналого-цифровое и цифро-аналоговое преоб-

разование

5.2. Реализация ЦАП и АЦП

5.3. Z - преобразование

5.4. Теорема о сдвиге

5.5. Синтез цифровых систем из непрерывных

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

5.7. Идентификация динамического объекта

5.7.1. Задача идентификации

5.7.2. Детерминированный идентификатор

5.7.3. Построение МНК-модели по кривой разгона

Вопросы для самопроверки

6. АДАПТИВНЫЕ СИСТЕМЫ УПРАВЛЕНИЯ

6.1. Классификация адаптивных систем

6.2. Экстремальные системы управления

6.3. Адаптивное управление с эталонной моделью

Вопросы для самопроверки

ЗАКЛЮЧЕНИЕ

Библиографический список

− БАЗОВЫЕ ПОНЯТИЯ И ОПРЕДЕЛЕНИЯ

o Краткая история развития теории автоматиче-

ского управления

Можно определить теорию автоматического управления как науку о методах определения законов управления какими-либо объектами, допускающих реализацию с помощью технических средств.

Первые автоматические устройства были разработаны человеком еще в глубокой древности, об этом позволяют судить дошедшие до нас письменные свидетельства. В работах древнегреческих и древнеримских ученых даны описания различных автоматических устройств: годометр – автоматическое устройство для измерения расстояния на основе пересчета количества оборотов колеса повозки; автоматы для открывания дверей и продажи воды в храмах; автоматические театры с кулачковыми механизмами; устройство для метания стрел с автоматической их подачей. На рубеже нашей эры арабы снабдили поплавковым регулятором уровня водяные часы (рис. 1.1).

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

Можно выделить несколько факторов, вызвавших необходимость разработки систем управления в XVII – XVIII:

1. развитие часового дела, вызванного потребностями бурно развивающегося мореплавания;

2. развитие мукомольной промышленности и необходимость регулирования работы водяных мельниц;

3. изобретение паровой машины.

Рис. 1.1. Конструкция водяных часов

Хотя известно, что еще в средние века применялись центробежные уравнители скорости в водяных мукомольных мельницах, первой системой управления с обратной связью считается регулятор температуры голландца Корнелиуса Дреббеля (1600 г.). В 1675 г. X. Гюйгенс встроил в часы маятниковый регулятор хода. Дени Папен в 1681 г. изобрел первый регулятор давления для паровых котлов.

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

ваем» (рис. 1.2).

Рис.1.2. Паровая машина с регулятором

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

Эти первые регуляторы являлись системами прямого регулирования, т. е. для приведения в действие регулирующих органов не требовались дополнительные источники энергии – чувствительный элемент непосредственно перемещал регулирующий орган (современные системы управления являются системами непрямого регулирования, так как практически всегда сигнал ошибки недостаточен по мощности для управления регулирующим органом).

Рис. 1.3. Центробежный регулятор Уатта.

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

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

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

Первая работа по теории регулирования появилась в 1823 г., и написана она профессором Петербургского университета Чижовым.

В 1854 г. К. И.Константинов предложил использовать разработанный им «электромагнитный регулятор скорости вращения» вместо конического маятника в паровых машинах. В нем вместо центробежного механизма используется электромагнит, регулирующий впуск пара в машину. Предложенный Константиновым регулятор обладал большей чувствительностью, чем конический маятник.

В 1866 г. А. И. Шпаковский разработал регулятор для парового котла, который отапливался с помощью форсунок. Подача топлива через форсунки была пропорциональна изменению давления пара в котле. Если давление падало, расход топлива через форсунки увеличивался, что приводило к увеличению температуры и, как следствие, к увеличению давления.

В 1856 г. в Москве во время коронации Александра III было установлено шесть мощных электродуговых ламп с автоматическим регулятором Шпаковского. Это был первый практически осуществленный опыт изготовления установки и длительной эксплуатации серии электромеханических регуляторов.

С 1869–1883 гг. В. Н. Чиколев разработал ряд электромеханических регуляторов, в том числе дифференциальный регулятор для дуговых ламп, который сыграл важную роль в истории техники регулирования.

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

Большой вклад в развитие ТАУ внес русский математик и инженер И. А. Вышнеградский. В работе «Об общей теории регуляторов», опубликованной в 1876 г. он рассмотрел паровую машину и центробежный регулятор как единую динамическую систему. Вышнеградский сделал наиболее практически важные выводы по устойчивому движению систем. Он впервые ввел понятие линеаризации дифференциальных уравнений, таким образом, значительно упростив математический аппарат исследова-

ТЕОРИЯ АВТОМАТИЧЕСКОГО УПРАВЛЕНИЯ

Конспект лекций

ВВЕДЕНИЕ

Вы узнаете:

· Что такое теория автоматического управления (ТАУ).

· Что является объектом, предметом и целью изучения ТАУ.

· Каков основной метод исследования в ТАУ.

· Каково место ТАУ среди других наук.

· Какова история ТАУ.

· Почему актуально изучение ТАУ.

· Каковы современные тенденции в автоматизации производства.

Что такое теория автоматического управления?

Понятие ТАУ аккумулирует входящие в ее название термины:

· теория – совокупность знаний, позволяющих при определенных условиях получать достоверный результат

· управление – воздействие, оказываемое на объект, для достижения определенной цели;

· автоматическое управление – управление без вмешательства человека с помощью технических средств.

Поэтому

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

Что является объектом, предметом и целью изучения ТАУ?

Объект изучения ТАУ – автоматическая система управления (АСУ).

Предмет изучения ТАУ – процессы, протекающие в АСУ.

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

Основной метод исследования в ТАУ.

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

Место ТАУ среди других наук.

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

История ТАУ.

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

Приблизительно до середины 20-го столетия теория регуляторов паровых машин и котлов развивалась как раздел прикладной механики. Параллельно разрабатывались методы анализа и расчета автоматических устройств в электротехнике. Формирование ТАУ в самостоятельную научную и учебную дисциплину произошло в период с 1940 по 1950 годы. В это время были изданы первые монографии и учебники, в которых автоматические устройства различной физической природы рассматривались едиными методами.

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

Почему актуально изучение ТАУ?

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

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

Современные тенденции в автоматизации производства.

Современными тенденциями в автоматизации производства являются:

- широкое применение ЭВМ для управления;

- создание машин и оборудования со встроенными микропроцессорными средствами измерения, контроля и регулирования;

- переход на децентрализованные (распределенные) структуры управления с микроЭВМ;

- внедрение человеко-машинных систем;

- использование высоконадежных технических средств;

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

1. ОБЩИЕ ПРИНЦИПЫ ПОСТРОЕНИЯ АСУ

Вы познакомитесь:

· С основными понятиями и определениями.

· Со структурой АСУ.

· С классификацией АСУ.

1.1. Основные понятия и определения

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

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

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

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

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

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

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

Устройство управления (УУ) – устройство, осуществляющее в соответствии с алгоритмом управления воздействие на объект управления.

Примерами устройств управления являются автоматический регулятор возбуждения (АРВ) и автоматический регулятор частоты вращения (АРЧВ) синхронного генератора.

Автоматическая система управления (АСУ) – совокупность взаимодействующих между собой объекта управления и устройства управления.

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


На рис. 1.1. приведена обобщенная структурная схема АСУ.

Рис. 1.1. Обобщенная структурная схема АСУ

x(t ) – управляемая величина – физическая величина, характеризующая состояние объекта.

Часто объект управления имеет несколько управляемых величин x 1 (t), x 2 (t)… x n (t), тогда говорят об n -мерном векторе состояния объекта x(t) с перечисленными выше компонентами. Объект управления в этом случае называют многомерным.

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

z о (t), z д (t) – соответственно основное (действующее на объект управления) и дополнительное (действующее на устройство управления) возмущающие воздействия.

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

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

Рис. 1.3. Функциональная схема АСУ

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

При этом,

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

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

Различают следующие виды алгоритмических звеньев:

· статическое;

· динамическое;

· арифметическое;

· логическое.

Статическое звено – звено, преобразующее входной сигнал в выходной мгновенно (без инерции).

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

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

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

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

Арифметическое звено – звено, осуществляющее одну из арифметических операций: суммирование, вычитание, умножение, деление.

Наиболее часто встречающееся в автоматике арифметическое звено – звено, выполняющее алгебраическое суммирование сигналов, называют сумматором.

Логическое звено – звено, выполняющее какую-либо логическую операцию: логическое умножение («И»), логическое сложение («ИЛИ»), логическое отрицание («НЕ») и т.д.

Входной и выходной сигналы логического звена являются обычно дискретными и рассматриваются как логические переменные.

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



Рис 1.4. Условные изображения элементарных алгоритмических звеньев:

а – статическое; б – динамическое; в – арифметическое; г – логическое

Конструктивная структура (схема) – структура (схема), отражающая конкретное схемное, конструктивное и прочее исполнение АСУ.

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

1.3. Классификация АСУ

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

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

В зависимости от характера изменения задающего воздействия во времени АСУ разделяют на три класса:

· стабилизирующие;

· программные;

· следящие.

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

x(t) » x з = const. (1.3)

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

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

Программная АСУ – система, алгоритм функционирования которой содержит предписание изменять управляемую величину в соответствии с заранее заданной функцией времени:

x(t) » x з (t) = f п (t). (1.4)


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

Рис. 1.5. Закон изменения задания активной мощности

Следящая АСУ –система, алгоритм функционирования которой содержит предписание изменять управляемую величину в соответствии с заранее неизвестной функцией времени :

x(t) » x з (t) = f с (t). (1.5)

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

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

x(t) » x з (t), (1.6)

называется регулированием.

Управляющее устройство, осуществляющее регулирование, называется регулятором , а сама система – системой регулирования .

В зависимости от конфигурации цепи воздействий различают три вида АСУ:

· с разомкнутой цепью воздействий (разомкнутая система);

· с замкнутой цепью воздействий (замкнутая система);

· с комбинированной цепью воздействий (комбинированная система).

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

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

· осуществляющие управление в соответствии с изменением только задающего воздействия (рис. 1.6, а);

· осуществляющие управление в соответствии с изменением и задающего и возмущающего воздействий (рис. 1.6, б).

Рис. 2.1. Виды сигналов

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

Наибольшее применение в ТАУ находят следующие типовые воздействия:

· ступенчатое;

· импульсное;

· гармоническое;

· линейное.

Ступенчатое воздействие – воздействие, которое мгновенно возрастает от нуля до некоторого значения и далее остается постоянным (рис. 2.2, а).

Рис. 2.2. Виды типовых воздействий

По характеру изменения выходной величины во времени различают следующие режимы элемента АСУ:

· статический;

· динамический.

Статический режим – состояние элемента АСУ, при котором выходная величина не изменяется во времени, т. е. y(t) = const.

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

Динамический режим – состояние элемента АСУ, при котором входная величина непрерывно изменяется во времени, т. е. y(t) = var.

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

Динамические режимы в свою очередь разделяются на:

· неустановившийся (переходный);

· установившийся (квазиустановившийся).

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

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

В установившемся режиме элемент совершает вынужденное движение. Очевидно, что статический режим является частным случаем установившегося (вынужденного) режима при x(t) = const.


Понятия «переходный режим » и «установившийся режим » иллюстрируются графиками изменения выходной величины y(t) при двух типовых входных воздействиях x(t) (рис. 2.3). Граница между переходным и установившимся режимами показана вертикальной пунктирной линией.

Рис. 2.3. Переходные и установившиеся режимы при типовых воздействиях

2.3. Статические характеристики элементов

Передаточные свойства элементов и АСУ в статическом режиме описывают с помощью статических характеристик.

Статическая характеристика элемента – зависимость выходной величины y элемента от входной x

y = f(x) = y(x) (2.10)

в установившемся статическом режиме.

Статическая характеристика конкретного элемента может быть задана в аналитическом виде (например, y = kx 2 ) или в виде графика (рис. 2.4).

Рис. 2.4. Статическая характеристика элемента

Как правило, связь между входной и выходной величинами – однозначная. Элемент с такой связью называют статическим (позиционным) (рис. 2.5, а ). Элемент с неоднозначной связью – астатическим (рис. 2.5, б ).

Рис. 2.5. Виды статических характеристик

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

· линейные;

· нелинейные.

Линейный элемент – элемент, имеющий статическую характеристику в виде линейной функции (рис. 2.6):

y = b + ax. (2.11)



Рис. 2.6. Виды линейной функции

Нелинейный элемент – элемент, имеющий нелинейную статическую характеристику.

Нелинейная статическая характеристика аналитически обычно выражается в виде степенных функций, степенных полиномов, дробных рациональных функций и более сложных функций (рис. 2.7).


Рис. 2.7. Виды нелинейных функций

Нелинейные элементы в свою очередь подразделяют на:

· элементы с существенно нелинейной статической характеристикой;

· элементы с несущественно нелинейной статической характеристикой;

Несущественно нелинейная статическая характеристика – характеристика, описываемая непрерывной дифференцируемой функцией.

Практически это математическое условие означает, что график функции y = f(x) должен иметь гладкую форму (рис. 2.5, а ).В ограниченном диапазоне изменения входной величины x такая характеристика может быть приближенно заменена (аппроксимирована) линейной функцией. Приближенная замена нелинейной функции линейной называется линеаризацией. Линеаризация нелинейной характеристики правомерна, если в процессе работы элемента его входная величина меняется в небольшом диапазоне вокруг некоторого значения x = x 0 .

Существенно нелинейная статическая характеристика – характеристика, описываемая функцией, имеющей изломы или разрывы.

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

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

Так, например, линеаризация по методу касательной заключается в разложении функции y(x) в интервале вокруг некоторой точки x 0 в ряд Тейлора и в последующем учете первых двух членов этого ряда:

y(x) » y(x 0) + y¢(x 0)(x – x 0), (2.12) где y¢(x 0) – значение производной функции y(x) в заданной точке А с координатами x 0 и y 0 .



Геометрический смысл такой линеаризации заключается в замене кривой y(x) касательной ВС, проведенной к кривой в точке А (рис. 2.8).

Рис. 2.8. Линеаризация статической характеристики методом касательной

При анализе АСУ удобно линейные статические характеристики рассматривать в отклонениях переменных x и y от значений x 0 и y 0 :

Dy = y - y 0 ; (2.13)

Dx = x - x 0 . (2.14)

Рис. 2.9. Схема четырехполюсника с линейными элементами

Нелинейное дифференциальное уравнение – уравнение, в котором функция Ф содержит произведения, частные, степени и т. д. переменных y(t), x(t) и их производных.

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

0. (2.18)



Рис. 2.10. Схема четырехполюсника с нелинейным резистором

В функцию Ф (дифференциальное уравнение) входят также величины, называемые параметрами . Они связывают между собой аргументы (y(t), y¢(t),… y (n) (t); x(t),…x (m) (t), t ) и характеризуют свойства элемента с количественной стороны. Например, параметрами являются масса тела, активное сопротивление, индуктивность и емкость проводника и т. д.

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

Для всех реальных элементов выполняется условие m £ n .

Коэффициенты a 0 , a 1 …a n и b 0 , b 1 …b m в уравнении (2.19) называются параметрами. Иногда параметры изменяются во времени, тогда элемент называют нестационарным или с переменными параметрами . Таковым, например, является четырехполюсник, схема которого приведена на рис. 2.10.

Однако в дальнейших рассуждениях будем рассматривать только элементы с постоянными параметрами.

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

Важнейшим практическим достоинством линейного уравнения (2.19) является возможность применения принципа наложения , согласно которому изменение выходной величины y(t) , возникающее при действии на элемент нескольких входных сигналов x i (t) , равно сумме изменений выходных величин y i (t) , вызываемых каждым сигналом x i (t) в отдельности (рис.2.11).


Рис. 2.11. Иллюстрация принципа наложения

2.4.2. Временные характеристики

Дифференциальное уравнение не дает наглядного представления о динамических свойствах элемента, но такое представление дает функция y(t) , т. е. решение этого уравнения.

Однако одно и то же дифференциальное уравнение может иметь множество решений, зависящих от начальных условий и характера входного воздействия x(t) , что неудобно при сопоставлении динамических свойств различных элементов. Поэтому было решено характеризовать эти свойства элемента только одним решением дифференциального уравнения, полученным при нулевых начальных условиях и одном из типовых воздействий: единичном ступенчатом, дельта-функции, гармоническом, линейном. Наиболее наглядное представление о динамических свойствах элемента дает его переходная функция h(t).

Переходная функция h(t) элемента – изменение во времени выходной величины y(t) элемента при единичном ступенчатом воздействии и нулевых начальных условиях.

Переходная функция может быть задана:

· в виде графика;

· в аналитическом виде.

Переходная функция, как и любое решение неоднородного (с правой частью) дифференциального уравнения (2.19), имеет две составляющие:

· вынужденную h в (t) (равна установившемуся значению выходной величины);

· свободную h с (t) (решение однородного уравнения).

Вынужденную составляющую можно получить решая уравнение (2.19) при нулевых производных и x(t) = 1

(2.20)

Свободную составляющую получаем решая уравнение (2.19) при нулевой правой части

h с (t) = (2.21)

где p k – k-й корень характеристического уравнения (в общем случае комплексное число); С k - k-я постоянная интегрирования (зависит от начальных условий).

Характеристическое уравнение – алгебраическое уравнение, степень и коэффициенты которого совпадают с порядком и коэффициентами левой части линейного дифференциального уравнения вида (2.19)

a 0 p n + a 1 p n –1 +…+ a n = 0. (2.22)

2.4.3. Передаточная функция

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

F(p) = Z { f(t) } = f(t) e -pt dt . (2.23)

Это преобразование устанавливает соответствие между функцией действительной переменной t и функцией комплексной переменной p = a + jb. Функцию f(t), входящую в интеграл Лапласа (2.23), называют оригиналом, а результат интегрирования – функцию F(p) – изображением функции f(t) по Лапласу.

Преобразование выполнимо лишь для функций, которые равны нулю при t< 0. Формально это условие в ТАУ обеспечивается умножением функции f(t) на единичную ступенчатую функцию 1 (t) или выбором начала отсчета времени с момента, до которого f(t) = 0.

Наиболее важными свойствами преобразования Лапласа при нулевых начальных условиях являются:

Z { f¢(t) } = pF(p); (2.24)

Z { f (t)dt } = F(p) / p. (2.25)

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

Применяя прямое преобразование Лапласа к дифференциальному уравнению (2.19) с использованием свойства (2.24) получим алгебраическое уравнение

D(p)Y(p) = K(p)X(p), (2.26)

D(p) = a 0 p n + a 1 p n-1 +…+ a n - собственный оператор; (2.27)

K(p) = b 0 p m + b 1 p m-1 +…+ b m - входной оператор. (2.28)

Введем понятие передаточной функции.

Передаточная функция – отношение изображения выходной величины к изображению входной величины при нулевых начальных условиях:

(2.29)

Тогда с учетом уравнения (2.26) и обозначений (2.27, 2.28) выражение для передаточной функции принимает вид:

(2.30)

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

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

Если коэффициент a 0 ¹ 0, то передаточная функция не имеет нулевого полюса (p = 0 ), характеризуемый ей элемент называют астатическим и передаточная функция этого элемента при p = 0 (t = ¥) равна передаточному коэффициенту

(2.31)

2.4.4. Частотные характеристики

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

Рассмотрим сущность и разновидности частотных характеристик. Пусть на вход линейного элемента (рис. 2.12, а ) в момент времени t = 0 подано гармоническое воздействие с частотой w


x(t) = x m sinw t. (2.32)

Рис. 2.12. Схема и кривые, поясняющие сущность частотных характеристик

По завершении переходного процесса установится режим вынужденных колебаний и выходная величина y(t) будет изменяться по тому же закону, что и входная x(t), но в общем случае с другой амплитудой y m и с фазовым сдвигом j по оси времени относительно входного сигнала (рис. 2.12, б ):

y(t) = y m sin(w t + j) . (2.33)

Проведя аналогичный опыт, но при другой частоте w, можно увидеть, что амплитуда y m и фазовый сдвиг j изменились, т. е. они зависят от частоты. Можно убедиться также, что для другого элемента зависимости параметров y m и j от частоты w иные. Поэтому такие зависимости могут служить характеристиками динамических свойств элементов.

В ТАУ наиболее часто используют следующие частотные характеристики:

· амплитудная частотная характеристика (АЧХ);

· фазовая частотная характеристика (ФЧХ);

· амплитудно-фазовая частотная характеристика (АФЧХ).

Амплитудная частотная характеристика (АЧХ) – зависимость отношения амплитуд выходного и входного сигналов от частоты


АЧХпоказывает, как элемент пропускает сигналы различной частоты. Пример АЧХ приведен на рис. 2.13, а .

Рис. 2.13. Частотные характеристики:

а – амплитудная; б – фазовая; в – амплитудно-фазовая; г – логарифмическая

Фазовая частотная характеристика ФЧХ – зависимость фазового сдвига между входным и выходным сигналами от частоты.

ФЧХ показывает, какое отставание или опережение выходного сигнала по фазе создает элемент при различных частотах. Пример ФЧХ приведен на рис. 2.13, б .

Амплитудную и фазовую характеристики можно объединить в одну общую – амплитудно-фазовую частотную характеристику (АФЧХ). АФЧХ представляет собой функцию комплексного переменного jw :

W(jw) = A(w) e j j (w) (показательная форма), (2.35)

где A(w) – модуль функции; j (w) – аргумент функции.

Каждому фиксированному значению частоты w i соответствует комплексное число W(jw i) , которое на комплексной плоскости можно изобразить вектором, имеющим длину A(w i) и угол поворота j (w i) (рис. 2.13, в ). Отрицательные значения j (w) , соответствующие отставанию выходного сигнала от входного, принято отсчитывать по часовой стрелке от положительного направления действительной оси.

При изменении частоты от нуля до бесконеч