Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Программирование микропроцессорных систем управления подвижного состава железных дорог. Учебное пособие по дисциплинам «Автоматизированные и микропроц.pdf
Скачиваний:
0
Добавлен:
08.09.2026
Размер:
2 Мб
Скачать
☆
byte pin_revers=4; boolean click_forward, click_zero, click_revers, click_forward_last, click_zero_last, click_re­vers_last; int value;
void setup() { value=zero; //Установка значения по умолчанию для // индикатора click_forward=false; click_zero=false; click_revers=false; click_forward_last=false; click_zero_last=false; click_revers_last=false;
pinMode (pin_forward, INPUT); pinMode (pin_zero, INPUT); pinMode (pin_revers, INPUT); for (int i = 0; i<SEGMENT_COUNT; ++i) pinMode(i + FIRST_SEGMENT_PIN, OUTPUT); }
boolean Click(int pin, boolean old_stat) /*
Описание функции Click обработки состояния кнопки. Аргументами функции являются переменные pin (цело­численная) -- номер канала и old_stat (логическая) -- предыдущее состояние ка­нала
*/ { boolean stat=digitalRead(pin);
// Задание переменной stat и считывание в // неё данных с цифрового входа
if (stat!=old_stat)
// Первая проверка изменения // состояния входа
{ delay (5);
61
// Задержка выполнения программы для // завершения переходных процессов
stat=digitalRead(pin); if (stat!=old_stat)
// Проверка подтверждения // изменившегося состояния
{ return stat; // Формирование выходного значения функции } } }
void loop() { click_forward=Click(pin_forward, click_forward);
// Вызов функции опроса // кнопок и подавления «дребезга»
click_zero=Click(pin_zero, click_zero); click_revers=Click(pin_revers, click_revers);
// Проверка условия выполнения перехода if (click_forward == HIGH && click_forward_last == LOW && value == zero) {value = forward;}
// Проверка условия выполнения перехода if (click_revers == HIGH && click_revers_last == LOW && value==zero) {value=revers;}
// Проверка условия выполнения перехода if ((click_zero == HIGH && click_zero_last == LOW) && (value == forward || value == revers)) {value=zero;} for (int j = 0; j<SEGMENT_COUNT; ++j) // Реализация параллельного вывода в порт // управления индикатором
62
{ boolean enableSegment = bitRead(value, j); // Побитовое чтение значений, управляющих // сегментами индикатора digitalWrite (j+FIRST_SEGMENT_PIN, enableSegment); } click_forward_last=click_forward; click_zero_last=click_zero; click_revers_last=click_revers; }
Сопоставить разработанные в п. п. 1 и 2 схемы алгоритмов с
соответствующим программным кодом.
5. Ввести программу в память микроконтроллера, запустить её на исполнение. Исследовать работу программы.
6. Исследовать программу счётчика нажатий.
/*
Управление счётчиком при помощи двух кнопок. Увеличение или уменьшение содержимого счётчика про­исходит при однократном нажатии на тактовую кнопку
*/ #define FIRST_SEGMENT_PIN 9 #define SEGMENT_COUNT 5 byte pin_plus=2; byte pin_minus=3;
// Переменные управления переключателями boolean click_plus, click_minus, click_plus_last, click_minus_last;
// Переменные управления счётчиком int value, delta;
void setup() { value=0; click_plus=false; click_plus_last=false; click_minus=false; click_minus_last=false;
63
pinMode (pin_plus, INPUT); pinMode (pin_minus, INPUT); for (int i = 0; i<SEGMENT_COUNT; ++i) pinMode(i + FIRST_SEGMENT_PIN, OUTPUT);
} boolean Click(int pin, boolean last_stat) { boolean stat=digitalRead(pin); if (stat!=last_stat) { delay (5); stat=digitalRead(pin); if (stat!=last_stat) { return stat; } } } void loop() { click_plus=Click(pin_plus, click_plus_last); click_minus=Click(pin_minus, click_minus_last);
//Проверка условия на нажатие кнопки "+1" if (click_plus == HIGH && click_plus_last == LOW) { delta=1; } else {
// Проверка условия на нажатие кнопки "-1" if (click_minus == HIGH && click_minus_last == LOW) { delta=-1; } else { delta=0;
64
}
Количество нажатий кнопки SA1
0 – – – –
– 1 – – – – + 2 – – – + –
… … … … …
… … + + + + +
} value=value+delta;
// Ограничение счётчика сверху if (value>31){value=31;}
// Ограничение счётчика снизу if (value<=0){value=0;}
for (int j = 0; j<SEGMENT_COUNT; ++j) { boolean enableSegment = bitRead(value, j); digitalWrite (j+FIRST_SEGMENT_PIN, enableSegment); } click_plus_last=click_plus; click_minus_last=click_minus; }
7. Ввести программу в память микроконтроллера, запустить её на исполнение. Исследовать работу программы. По результатам исследования заполнить таблицу 4.2
Таблица 4.2 Результаты исследования работы программы
HL1 HL2 HL3 HL4 HL5
8. Оформить отчёт по работе
Содержание отчёта
1. Наименование работы, цель работы.
2. Принципиальная схема устройства.
3. Примерный график переходных процессов, возникающих
при замыкании контактов.
65
4. Граф переходов состояний.
5. Схемы разработанных алгоритмов
6. Тексты вариантов программ, снабжённые комментариями.
7. Заполненная таблица 4.2
8. Заключение по работе, содержащее результаты исследова-
ния рассмотренного метода подавления дребезга, а также результаты анализа таблицы 4.2.
Исследование аналого-цифрового
преобразователя
Цель работы
Изучение особенностей конструкции и принципа действия па-
раллельного аналого-цифрового преобразователя.
Краткие теоретические сведения
Применение микропроцессоров в качестве управляющих и ди­агностирующих устройств связано с использованием большого числа самых разнообразных датчиков. Но практически все входные сигналы датчиков имеют аналоговую форму, и для того, чтобы микропроцессор мог воспринимать эту информацию, её необхо­димо преобразовать в цифровую форму. Эту операцию выполняют специальные преобразователи, называемые аналого – цифровыми
преобразователями (АЦП). По иной терминологии АЦП реализует кодово-импульсную модуляцию сигнала. При этом выполняется квантование информационного сигнала и его временная дискрети­зация.
Преобразование аналогового (непрерывного) сигнала, имею­щего бесконечное множество значений, в сигнал с конечным мно­жеством значений, называют квантованием по уровню. Идеальная операция квантования описывается статической характеристикой нелинейного элемента (НЭ) (рисунок 4.10) на вход которого пода­ётся аналоговый сигнал z ный сигнал z
.
к
Здесь ∆z – шаг квантования по уровню.
Ошибка квантования по уровню вычисляется следующим об­разом:
(t), а на выходе получается квантован-
вх
=  при
0,5
+ 0,5,

66
Рисунок 4.10 –Статическая характеристика
нелинейного элемента
где k – номер интервала по уровню.
Максимальное значение ошибки:
= ±0,5. (4.1)
 
Число возможных уровней (шагов квантования) определяется разрядностью АЦП. Преобразование сигнала, описываемого функ­цией непрерывного аргумента (времени) в сигнал, представляе­мый функцией дискретного аргумента, называют временной дис­кретизацией (рисунок 4.11).
Результат дискретизации представляется как z 0, 1, …; Здесь T
– шаг временной дискретизации.
ц
[nTц], где n =
д
В цифровых системах управления квантование по уровню и временная дискретизация осуществляются АЦП одновременно (рисунок 4.12).
67
Рисунок 4.11 – Результат выполнения операции
временной дискретизации сигнала
Рисунок 4.12 – Результат выполнения операций
временной дискретизации и квантования по уровню
Здесь z тования. Очевидно, что функция z < t < nT
[nTц] – результат временной дискретизации и кван-
дк
[nTц] не определена при (n−1)Tц
дк
. С целью получения сигнала на выходе АЦП, определённого
ц
во все моменты времени, необходимо функцию дискретного аргу­мента z т.е. тем или иным способом выполнить аппроксимацию z
[nTц] преобразовать в функцию непрерывного аргумента,
дк
[nTц].
дк
Процедуру такого преобразования называют восстановлением. Простейшим методом восстановления является ступенчатая экс­траполяция, или экстраполяция нулевого порядка (рисунок 4.13).
68
Рисунок 4.13 – Восстановленный сигнал
В этом случае значения восстановленной функции z
< t < (n+1)Tц принимаются равными zдк [nTц], т.е. значения функ-
nT
ц
ции z
(t) в рассмотренном интервале времени экстраполируются
вс
(t) при
вс
по одному отсчёту.
Роль восстанавливающего элемента при данном методе пре­образования играет память АЦП, куда заносится цифровой эквива­лент на время между преобразованиями. В этом случае текущее значение погрешности преобразования определяется выраже­нием:
()= 
()


()
.

и z
Если z
max
соответственно максимальное и минимальное
min
значения входного сигнала и при квантовании получают N- разрядный двоичный код, то шаг квантования по уровню:
=

2
1
При этом максимальная ошибка квантования с учётом выра-
жения (4.1):



=
(

(4.2)
)
9
В работе исследуется 2-х разрядный
аналого-цифровой пре-
образователь параллельного типа, схема которого приведена на
9
Преобразователь преобразует аналоговый, измеряемый сигнал в
эквивалентный 2-х разрядый двоичный код.
69
рисунке 4.14. Основой параллельного аналого-цифрового преобра­зователя являются линейка аналоговых компараторов (элементы DA1.1 – DA1.3), которые сравнивают входной сигнал АЦП (U опорным (эталонным) напряжением U
преобразованным делите-
оп,
вх
) с
лем R1 – R4. Величины сопротивлений резисторов, образующих де­литель, связаны следующим соотношением:
1 = 2 = 3 = 2 4. (4.3)
Подобное соотношение выбрано для того, чтобы величины по­тенциалов на узлах делителя относительно общего провода обра­зовывали характеристику нелинейного элемента, осуществляю­щего операцию квантования по уровню (рисунок 4.10). Каждый компаратор из линейки включается в том случае, если величина напряжение на его инвертирующем входе превышает величину опорного напряжения (на неинвертирующем), поступающем с со­ответствующего узла делителя.
Рассмотрим работу данного аналого-цифрового преобразова­теля. В том случае, если величина входного напряжения U меньше, чем напряжение U
, все компараторы выключены, код на
a0
вх
выходах линейки компараторов равен В000. Если величина вход­ного напряжения удовлетворяет соотношению U
≤ Uвх < Ub0, то
a0
срабатывает компаратор DA1.3, код на выходе линейки становится равен B001. При последующем увеличении напряжения U полнении соотношения U DA1.2, далее, если U
≥ Uc0, срабатывают все три компаратора, и на
вх
≤ Uвх < U
b0
срабатывает компаратор
c0
и вы-
вх
выходе линейки появляется код B111.
Как видно, получаемый на выходе линейки компараторов код содержит единицы в разрядах, номера которых соответствуют но­мерам сработавших компараторов. Этот код k взаимосвязан с номе­ром уровня квантования, а значит и с выходным кодом аналого­цифрового преобразователя z
= 2
(рисунок 4.10) следующим образом:
к
1,
откуда
(
= 
+ 1). (4.4)
70
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]