- •Содержание
- •Понятие вычислительной системы
- •Организация микроконтроллерных систем управления
- •Микроконтроллеры. Основные сведения
- •Интерфейсы связи с датчиками Сигнальные интерфейсы и цифровые интерфейсы
- •Прием импульсно-дискретных сигналов
- •Демодуляция квадратурно-модулированного сигнала
- •Прием аналоговых сигналов
- •Схемотехника ацп
- •Ацп последовательного счета
- •Ацп последовательного приближения
- •Расширение разрядности. Метод передискретизации
- •Стандартные интерфейсы связи Интерфейсы связи
- •Топологии сетей
- •Последовательный интерфейс i2с
- •Состояние старт и стоп
- •Подтверждение
- •Адресация в шине i2c
- •Преимущества
- •Последовательный интерфейс spi Введение
- •Электрическое подключение
- •Протокол передачи
- •Cравнение с шиной i2c
- •Последовательный интерфейс rs-232
- •Can интерфейс
- •Описание стандарта
- •Контроль ошибок
- •Скорость передачи и длина сети
- •Методы выявления и устранения ошибок данных при передаче
- •Блоковые коды
- •Свёрточные коды
- •Коды обнаружения Циклический избыточный код (crc)
- •Бит чётности
- •Формализованный алгоритм расчёта crc16
- •Корректирующие коды
- •Каскадное кодирование. Итеративное декодирование
- •Выбор кода
- •Некоторые методы (алгоритмы) обработки сигналов
- •Калибровка сигнала
- •Компенсация сигнала
- •Табличные вычисления и тарировочные таблицы Табличные вычисления
- •Тарировочные таблицы
- •Коррекция нуля, обнуление
- •Фильтрация
- •Разностное уравнение дискретного фильтра
- •Рекурсивные (бих) и нерекурсивные (ких) фильтры
- •Устойчивость
- •Зависимости частотных свойств звеньев системы регулирования
- •Регуляторы
- •Регулятор типа п – пропорциональный
- •Регулятор типа пи – пропорционально-интегральный
- •Регулятор типа пид – пропорционально-интегрально-дифференциальный
- •Реализация регуляторов
- •Примерная реализация ядра регулятора на языке Си
- •Выбор длительности такта
- •Вычисления с плавающей и фиксированной точкой
- •Основы технологии разработки программного обеспечения Структура программы на языке Си
- •Компиляция программы
- •Директивы препроцессора
- •Присоединение файла
- •Макросы
- •Условная компиляция
- •Типы переменных
- •Математические операторы
- •Операторы цикла
- •Условный оператор
- •Оператор выбора
Примерная реализация ядра регулятора на языке Си
…
#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 — дробная часть
Так же, как и для целых, знаковый бит — старший.