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


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

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

Поиск

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

 

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

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

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

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

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

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

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

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

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

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

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

Важным обстоятельством в данном случае является то, что τ=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(;;)

                   {

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

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

                   };

}



Поделиться:


Последнее изменение этой страницы: 2024-06-27; просмотров: 6; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.117.170.80 (0.009 с.)