Добавил:
ivanov666
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Программирование микропроцессорных систем управления подвижного состава железных дорог. Учебное пособие по дисциплинам «Автоматизированные и микропроц.pdf
X
- •ВВЕДЕНИЕ
- •1. Платформа Arduino UNO
- •1.1 Описание аппаратной части
- •2.1 Основы языка программирования С/С++
- •2.2 Арифметические операторы
- •2.2.1 Оператор присваивания
- •2.2.2 Сложение, вычитание, умножение и деление
- •2.2.3 Вычисление остатка от деления
- •2.3 Логические операторы
- •2.6.1 Условные операторы
- •2.6.1.1 Условный оператор if
- •2.6.1.2 Условный оператор if..else
- •2.6.1.3 Оператор switch…case
- •2.6.2 Операторы реализации циклических вычислений
- •2.6.2.1 Оператор цикла for
- •2.6.2.2 Оператор цикла while
- •2.6.2.3 Оператор цикла do...while
- •2.6.3 Оператор break
- •2.6.4 Оператор continue
- •2.6.5 Оператор return
- •2.6.6 Оператор перехода goto
- •2.7 Операции над битами
- •2.8 Составные операторы
- •2.8.1 Операторы ++ (инкремент) и – – (декремент)
- •2.8.2 Операторы += , –= , *= , /= , %=
- •2.8.3 Оператор &= и |=
- •2.9 Математические функции
- •2.9.2 Вычисление модуля числа
- •2.9.3 Ограничение числа заданным диапазоном
- •2.9.4 Масштабирование переменной
- •2.9.5 Возведение числа в степень
- •2.9.6 Вычисление квадратного корня числа
- •3. Ввод-вывод сигналов
- •3.2 Вывод дискретных сигналов digitalWrite()
- •3.3 Ввод дискретных сигналов digitalRead().
- •3.4 Ввод аналоговых сигналов analogRead()
- •3.5 Вывод аналоговых сигналов analogWrite()
- •4. Практические задания
- •5. Основы алгоритмизации
- •6. Элементы математической логики
- •7.1 Макетная плата
- •7.2 Постоянный резистор
- •7.3 Переменный резистор
- •7.4 Тактовая кнопка DTS-61N
- •7.5 Светодиод видимого спектра свечения
- •7.6 Четыре компаратора LM239N
- •7.7 Шесть логических элементов НЕ SN74HC04N
- •7.8 Приоритетный шифратор 8 в 3 SN74HC148N
- •7.9 Датчик угла поворота EXW1J-C24-AC0024L
- •7.11 Полевой транзистор IRF530NPBF
- •7.12 Дроссель Д25
- •КОНТРОЛЬНЫЕ ВОПРОСЫ
- •ИСПОЛЬЗОВАННЫЕ ИСТОЧНИКИ
- •СОДЕРЖАНИЕ

byte pin_revers=4;
boolean click_forward, click_zero, click_revers,
click_forward_last, click_zero_last, click_revers_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
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]
