Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
SVT.doc
Скачиваний:
23
Добавлен:
25.09.2019
Размер:
1.65 Mб
Скачать

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

#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 татка

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

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

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

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

Вычисления с плавающей и фиксированной точкой

Числа с фиксированной точкой — формат представления вещественного числа в памяти ЭВМ в виде целого числа. При этом само число x и его целочисленное представление x′ связаны формулой

,

где z — цена (вес) младшего разряда.

Простейший пример арифметики с фиксированной запятой — перевод рублей в копейки. В таком случае, чтобы запомнить сумму 12 рублей 34 копейки, мы записываем в ячейку памяти число 1234.

В случае, если z < 1, для удобства расчётов делают, чтобы целые числа кодировались без погрешности. Другими словами, выбирают целое число u (машинную единицу) и принимают . В случае, если z > 1, его делают целым.

Если не требуется, чтобы какие-либо конкретные дробные числа входили в разрядную сетку, обычно выбирают — это позволяет использовать в операциях умножения и деления битовые сдвиги. Про такую арифметику говорят: «f битов на дробную часть, i=n−f — на целую» и обозначают как «i,f» или «i.f». Например: арифметика 8,24 отводит на целую часть 8 битов и 24 — на дробную. Соответственно, она способна хранить числа от −128 до 128−z с ценой (весом) младшего разряда .

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

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

  • сложение:

  • умножение:

  • деление:

здесь [] – операция округления до целого.

Если в дробной части f-бит, то:

здесь shr и shl – сдвиг вправо и сдвиг влево соответственно.

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

Число с плавающей запятой состоит из:

  • мантиссы (выражающей значение числа без учёта порядка)

  • знака мантиссы (указывающего на отрицательность или положительность числа)

  • порядка (выражающего степень основания числа, на которое умножается мантисса)

  • знака порядка

Нормальной формой числа с плавающей запятой называется такая форма, в которой мантисса (без учёта знака) находится на полуинтервале [0; 1). Такая форма записи имеет недостаток: некоторые числа записываются неоднозначно (например, 0,0001 можно записать в 4 формах — 0,0001×100, 0,001×10−1, 0,01×10−2, 0,1×10−3), поэтому распространена (особенно в информатике) также другая форма записи — нормализованная, в которой мантисса десятичного числа принимает значения [1; 10). В такой форме любое число (кроме 0) записывается единственным образом. Недостаток заключается в том, что в таком виде невозможно представить 0, поэтому представление чисел в информатике предусматривает специальный признак (бит) для числа 0.

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

Машинный эпсилон называется наименьшее положительное число ε такое, что (знаком обозначено машинное сложение). Грубо говоря, числа a и b, соотносящиеся так, что, машина не различает.

Диапазоны чисел

Одинарная (float)

Двойная (double)

Расширенная (long double)

Размер типа (байт)

4

8

10

Число десятичных знаков

7

15

19

Наименьшее значение нормализованное

1,4E−45

5,0E−324

1,9E−4951

Наименьшее значение нормализованное

1,2E−38

2,3E−308

3,4E−4932

Наибольшее значение

3,4E+38

1,7E+308

1,1E+4932

Поля

S-E-F

S-E-F

S-E-I-F

Размеры полей

1-8-23

1-11-52

1-15-1-63

S — знак, E — показатель степени, I — целая часть, F — дробная часть

Так же, как и для целых, знаковый бит — старший.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]