Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология
Образование Политология Производство Психология Стандартизация Технологии


Регулятор типа П – пропорциональный



Закон регулирования:

Сигнал управления прямо пропорционален сигналу ошибки.

Недостатком регулятора является то, что в результате работы регулятора никогда не будет достигнуто выполнение условия ε=0.

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

Достоинства регулятора – простота реализации и настройки, безинерционность работы.

Регулятор типа ПИ – пропорционально-интегральный

Закон регулирования:

За счет интегрального члена асимптотически ошибка стремится к нулю.

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

 

Регулятор типа ПИД – пропорционально-интегрально-дифференциальный

Закон регулирования:

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

 

В настоящее время выпускаются типовые устройства – промышленные контролеры, реализующие функции ПИД-регулятора.

 

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

Реализация регуляторов

 

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

Этому выражению будет соответствовать следующая система разностных уравнений:

где τ – шаг интегрирования.

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

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

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

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

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

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

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

При этом временной интервал для таймера задается так, чтобы алгоритм ядра в нем был гарантированно посчитан.

Важным обстоятельством в данном случае является то, что τ= const.

Преобразуем расчетные выражения, внеся постоянные коэффициента К в выражения вычисления интеграла и дифференциала:

Учитывая, что τ= const, сделаем замену  и получим

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

 

Примерная реализация ядра регулятора на языке Си

#define T 100 // шаг расчета в тиках таймера

volatile float K1=10, K2=0.5, K3=100; // объявляем переменные для коэффициентов регулятора

volatile float Ix = 0; // объявляем переменную, в которой будет храниться значение интеграла

volatile float X, x; // объявляем переменные для уставки и текущего значения переменной

//регулирования

volatile float Eo; // объявляем переменную для хранения сигнала ошибки предыдущей итерации

float Get(void); //функция получения уставки, например, вводом с клавиатуры

float Mes(void); //функция измерения текущего значения регулируемой величины

void Act(float); //функция отработки управляющего сигнала (например, генерация ШИМ,

// формирование напряжения ЦАП и т.п.)

void Init(int, float); //инициализация таймера на заданный интервал срабатывания

SIGNAL(…) //описание обработчика прерываний нулевого таймера

{

       float E, D;

       X = Get();

x = Mes();

E = X - x;

       Ix += (E*K1);

       D = (E – Eo) * K2;

       U = Ix + D + E*K3;

       Eo = E;

       Act(U);

}

int main()

{

       …

Init(0, T);

for(;;)

                   {

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

//коэффициентов и т.п.

                   };

}

Выбор длительности такта

Реальная (устанавливаемая в программе) длительность такта  зависит от:

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

· Вычислительной мощности контроллера – чистого машинного времени, которое занимает расчет алгоритма управления .

· Длительности накладных расходов исполнения программы,

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

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

Рассмотрим наш пример.

Примем следующие времена исполнения операций:

· Сложение – 2 такт

· Умножение – 4 такта

· Присваивание – 1 такт

· Выполнение функции – 23 такта

Рассчитаем :

X = Get(); - 1+23=24 тактов

x = Mes(); - 1+23=24 тактов

E = X - x; - 1+2=3 тактов

Ix += (E*K1); - 1+2+4=7 тактов

D = (E – Eo) * K2; 1+2+4=7 тактов

U = Ix + D + E*K3; 1+2+2+ 4=9 тактов

Eo = E; 1 такт

Act(U); 23 татка

Итого: тактов.

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

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

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


Поделиться:



Последнее изменение этой страницы: 2019-05-08; Просмотров: 202; Нарушение авторского права страницы


lektsia.com 2007 - 2024 год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! (0.027 с.)
Главная | Случайная страница | Обратная связь