Файл: Лабораторная работа 1 (Получение информации с датчиков).pdf
ВУЗ: Пермский национальный исследовательский политехнический университет
Категория: Методичка
Дисциплина: Системы реального времени
Добавлен: 15.11.2018
Просмотров: 1451
Скачиваний: 25
Ст. преп. каф. ИТАС Фёдоров Андрей Борисович
версия документа 2017-10-09
1
Лабораторная работа 1
Изучение принципов получения и обработки
информации с датчиков через дискретный и
аналоговый интерфейсы
Цель и задачи лабораторной работы
Цель: Получить практические навыки считывания и обработки сигналов с датчиков
через дискретный и аналоговый интерфейсы Arduino (микроконтроллера).
Задачи:
1) Ознакомиться с теорией.
2) Изучить способы подключения датчиков к дискретному и аналоговому
интерфейсам контроллера.
3) Освоить методику написания программ для получения и обработки сигналов с
датчиков через дискретный и аналоговый интерфейсы.
4) Выполнить задание своего варианта.
5) Ответить на контрольные вопросы.
6) Подготовить и защитить отчет по лабораторной работе.
Теория
Аппаратно-программный комплекс Arduino
Arduino – это электронный конструктор и удобная платформа быстрой разработки
электронных устройств для новичков и профессионалов. Платформа пользуется огромной
популярностью во всем мире благодаря удобству и простоте языка программирования, а
также открытой архитектуре и программному коду. Устройство программируется через
USB без использования программаторов.
Arduino позволяет компьютеру выйти за рамки виртуального мира в физический и
взаимодействовать с ним. Устройства на базе Arduino могут получать информацию об
окружающей среде посредством различных датчиков, а также могут управлять
различными исполнительными устройствами.
Микроконтроллер на плате программируется при помощи языка Arduino (основан
на языке Wiring (C/C++ с дополнительными библиотеками)) и среды разработки Arduino
(основана на среде Processing). Проекты устройств, основанные на Arduino, могут
работать самостоятельно, либо же взаимодействовать с программным обеспечением на
компьютере. Платы могут быть собраны пользователем самостоятельно или куплены в
сборе. Программное обеспечение доступно для бесплатного скачивания. Исходные
чертежи схем (файлы CAD) являются общедоступными, пользователи могут применять их
по своему усмотрению [1].
Ст. преп. каф. ИТАС Фёдоров Андрей Борисович
версия документа 2017-10-09
2
Микроконтроллер
Микроконтроллер сочетает на одном кристалле функции процессора и
периферийных устройств, содержит ОЗУ и (или) ПЗУ. По сути, это однокристальный
компьютер, способный выполнять относительно простые задачи. Микроконтроллер
отличается от микропроцессора интегрированными в микросхему устройствами ввода-
вывода, таймерами и другими периферийными устройствами [2].
Плата Arduino Uno построена на микроконтроллере с ядром AVR Atmel
ATmega328. Микроконтроллеры AVR имеют гарвардскую архитектуру (программа и
данные находятся в разных адресных пространствах) и систему команд, близкую к
идеологии RISC. Структура микроконтроллера с гарвардской архитектурой показана на
рисунке 1.
Рисунок 1 – Структура микроконтроллера с гарвардской архитектурой
Гарвардская архитектура обеспечивает потенциально более высокую скорость
выполнения программы по сравнению с фон-неймановской за счет возможности
реализации параллельных операций. Выборка следующей команды может происходить
одновременно с выполнением предыдущей, и нет необходимости останавливать
процессор на время выборки команды. Этот метод реализации операций позволяет
обеспечивать выполнение различных команд за одинаковое число тактов, что дает
возможность более просто определить время выполнения циклов и критичных участков
программы [3].
Порты платы Arduino Uno
Для управления портами в их электрической схеме имеется два переключателя,
которые можно переключать программно, используя специальные регистры ввода/вывода.
Такие переключатели имеются для каждого вывода, что означает возможность управлять
любым выводом порта. К примеру, один вывод порта можно настроить на ввод
информации, три разряда этого же порта на вывод, а оставшиеся вообще не настраивать,
оставить их в третьем логическом (высокоимпедансном) состоянии. Упрощенная схема
порта ввода/вывода показана на рисунке 2.
Ст. преп. каф. ИТАС Фёдоров Андрей Борисович
версия документа 2017-10-09
3
Рисунок 2 – Упрощенная схема порта ввода/вывода микроконтроллера
Обратите внимание на два переключателя – S
in
и S
out
, и сопротивление R
up
. С
помощью S
in
осуществляется переключение вывода порта или для работы на вход, или для
работы на выход. Управляется этот переключатель с помощью регистра ввода/вывода
DDRx. У каждого порта свой регистр. Каждый разряд регистра управляет
соответствующим разрядом порта (нулевой – нулевым, первый – первым и т.д.) При
записи в разряд регистра DDRx лог. 1, соответствующий ему разряд порта переключается
на вывод информации, а при записи лог. 0 – на ввод информации [4].
Установка и настройка среды Arduino
Скачать среду разработки Arduino можно по адресу https://www.arduino.cc/. После
установки среды разработки следует её запустить и подключить плату Arduino, например
Arduino Uno, к USB-порту компьютера. Если на плате Arduino установлен
приёмопередатчик CH340G, то для него будет необходимо скачать соответствующий
драйвер.
Далее необходимо настроить среду Arduino:
1) В пункте меню «Инструменты → Плата» выбрать нужный контроллер,
например, «Arduino/Genuino Uno».
2) В пункте меню «Инструменты → Порт» выбрать виртуальный COM-порт, к
которому подключён контроллер Arduino. Скорее всего, это будет COM3. Если
в списке доступных портов помимо COM3 представлены и другие, то,
вероятней всего, это будет порт с самым большим номером.
3) Выбрать пункт меню «Инструменты → Получить информацию о плате», и,
если, будет показано окошко с информацией о плате, то всё сделано правильно.
Теперь можно подключать к плате Arduino датчики, и приступать к написанию
программы. Проверить программу на присутствие синтаксических ошибок можно выбрав
пункт меню «Скетч → Проверить/Компилировать». Если ошибок нет, то можно
выполнить загрузку программы в плату, выбрав пункт меню «Скетч → Загрузка».
После успешной загрузки программы можно посмотреть результат её выполнения,
при условии, что в программе предусмотрена передача данных с контроллера на
компьютер. Для этого можно выбрать пункт меню «Инструменты → Монитор порта»,
Ст. преп. каф. ИТАС Фёдоров Андрей Борисович
версия документа 2017-10-09
4
тогда на экран будут выводиться данные в текстовом виде, либо «Инструменты →
Плоттер по последовательному соединению», и тогда будут строиться графики временной
развёртки сигналов.
Ход работы
Если лабораторная работа выполняется не в аудитории, то её можно выполнить в
симуляторе, например, Virtual Breadboard (http://www.virtualbreadboard.com/), Virtronics
Simulator
for
Arduino
(http://www.virtronics.com.au/),
Autodesk
123D
Circuits
(https://circuits.io/), Fritzing (http://fritzing.org/home/) или любом другом.
Подключение кнопки или геркона через дискретный интерфейс
Порт микроконтроллера (Arduino базируется на микроконтроллере), настроенный
на ввод, воспринимает лог. 0 при его подключении к «земле» GND и лог. 1 – при
подключении к питанию 5V.
Самый простой способ подключения кнопки представлен на рисунке 3, а
соответствующий код для платы Arduino – в листинге 1.
а) при нажатии на кнопку фиксируется
лог. 1;
б) при нажатии на кнопку фиксируется
лог. 0.
Рисунок 3 – Самая простая схема подключения кнопки к Arduino
(микроконтроллеру)
Листинг 1 – Простая программа считывания состояния кнопки
#define BTN_PIN 2
//Номер порта для подключения кнопки
bool btnState;
//Состояние кнопки (не нажата/нажата)
void setup()
{
// put your setup code here, to run once:
pinMode(BTN_PIN, INPUT);
//Настроить порт на ввод
Serial.begin(9600);
//Активировать последовательный порт
}
void loop()
{
// put your main code here, to run repeatedly:
btnState = digitalRead(BTN_PIN);
//Считать состояние кнопки в переменную
Serial.println(btnState);
//Передать значение переменной
delay(50);
//Задержка программы 50 мс
}
Ст. преп. каф. ИТАС Фёдоров Андрей Борисович
версия документа 2017-10-09
5
После загрузки программы в плату Arduino можно посмотреть результат её
выполнения с помощью монитора порта или плоттера по последовательному соединению.
Что происходит? При нажатии на кнопку получаем стабильный сигнал, в зависимости от
варианта подключения, – либо лог. 1, либо лог. 0. Но при отпускании кнопки сигнал
может меняться хаотически, либо же не меняться совсем. Это связано с тем, что при
размыкании кнопки провод, подключённый к порту ввода, «висит в воздухе», т.е. не
подключён ни к питанию 5V, ни к «земле» GND, и является, по сути, антенной.
Следует сказать, что такой способ подключения кнопки к Arduino
(микроконтроллеру) не безопасен, и может привести в «выгоранию» порта. Представим
себе ситуацию, что кнопка уже подключена, но программа в плату Arduino ещё не
загружена. Тогда события могут развиваться по трём сценариям:
1) Если Arduino ещё никто и никогда не программировал, то по умолчанию, все
порты настроены на ввод, и ничего страшного при нажатии кнопки не
произойдёт, т.к. сопротивление порта в режиме ввода бесконечно большое.
2) Если порт, к которому подключена кнопка кто-то ранее запрограммировал на
вывод лог. 0 (т.е. порт через внутренние схемы контроллера соединён с
«землёй» GND), то при нажатии на кнопку, подключённую по схеме 2а,
произойдёт «короткое замыкание» и через порт потечёт ток, превышающий
номинальный. При этом порт может выйти из строя, ведь предельный для него
ток не должен превышать 20 мА. Если же кнопка подключена по схеме 2б, то
ничего страшного не произойдёт.
3) Наоборот, если порт, к которому подключена кнопка кто-то ранее
запрограммировал на вывод лог. 1 (т.е. порт через внутренние схемы
контроллера соединён с питанием 5V), то при нажатии на кнопку,
подключённую по схеме 2а, ничего страшного не произойдёт. Но произойдёт
«короткое замыкание», если кнопка была подключена по схеме 2б.
Чтобы предотвратить возможное «короткое замыкание» нужно ограничить ток,
поэтому последовательно с кнопкой устанавливают защитный резистор номиналом,
например, 1 кОм (минимум 250 Ом). Тогда максимально возможный ток, протекающий
через порт, при самых неблагоприятных условиях составит 5 мА, что не приведёт к
повреждению порта. Схема подключения кнопки с токоограничивающим резистором
представлена на рисунке 4.
а) при нажатии на кнопку фиксируется
лог. 1;
б) при нажатии на кнопку фиксируется
лог. 0.
Рисунок 4 – Самая простая и безопасная схема подключения кнопки к Arduino
(микроконтроллеру)