Управление пневматическим и электрическим двигателем при помощи микроконтроллера
Министерство образования и науки Российской Федерации
Федеральное государственное бюджетное образовательное учреждение высшего образования
«Курганский государственный университет»
Кафедра «Автоматизация производственных процессов»
ОСНОВЫ МЕХАТРОНИКИ
Методические указания к комплексу лабораторных работ
по курсу «Основы мехатроники»
для студентов направлений подготовки
15.03.04 Автоматизация технологических процессов и производств
(профиль «Автоматизация технологических процессов и производств
(машиностроение)»),
27.03.04 Управление в технических системах (профиль «Системы и
технические средства автоматизации и управления»)
Курган 2018
Кафедра: «Автоматизация производственных процессов»
Дисциплина: «Основы мехатроники»
Составил: к.т.н., доцент Е.К. Карпов
Утверждены на заседании кафедры 21 декабря 2017 г.
Рекомендованы методическим советом
университета __________ 20___ г.
СОДЕРЖАНИЕ
ВВЕДЕНИЕ………………………………………………………………………......4
1 Обзор и тестирование различных типов датчиков, применяемых в мехатронике………………………………………………………………………….4
2 Управление пневматическим и электрическим двигателем при помощи микроконтроллера………………………………………………………………….11
|
|
3 Последовательный порт, параллельный, UART, передача данных с компьютера на микроконтроллер………………………………………………....15
4 Применение циклов, условий, функций и классов при программировании мехатронного устройства……………………………………………………….…18
5 Программный интерфейс и создание собственных библиотек…………….…20
6 Диагностика неисправностей микроконтроллерной системы управления…...21
7 Примеры подключения электронных элементов к микроконтроллеру………22
ВВЕДЕНИЕ
Целью освоения дисциплины «Основы мехатроники» является приобретение студентами знаний о содержании, определениях и методах применения мехатроники, мехатронных узлах, компонентном составе мехатронных устройств и особенностях их проектирования, формирование навыков проектирования простых мехатронных устройств на базе микроконтроллеров, их программирования и отладки.
Выполнение заданий данных методических указаний, позволит узнать основные понятия и определения мехатроники, классификацию и характеристики мехатронных устройств, сформировать для себя понятия о структуре мехатронных узлов, изучить принципы действия элементов исполнительной, управляющей и информационной подсистем мехатронных устройств и области их применения.
|
|
Перед выполнением лабораторных работ студентам рекомендуется ознакомиться с требованиями, предъявляемым к оформлению отчётов, и справочными материалами, представленными в 8 пункте данных методических указаний.
Обзор и тестирование различных типов датчиков, применяемых в мехатронике
Для выполнения проектов первого занятия необходимо понимать структуру представления программ, их основные элементы и особенности языка программирования, на котором они пишутся. Далее дано краткое описание всех команд, которые будут использоваться в первой лабораторной работе для работы с аналоговыми и дискретными датчиками и простым исполнительным устройством – сервоприводом.
Структура программы и базовые функции setup() и loop()
Любая программа, написанная Вами, должна включать в себя две функции и иметь следующий вид:
void setup()
{
//код программы, выполняемый один раз при включении
}
void loop()
{
//код, выполняемый постоянно, представляющий собой основную часть
}
В функции setup() обычно определяются режим работы портов и установка соединения по последовательному порту. В loop() записываются все операции чтения и записи данных с портов, математические и логические операции, вызовы других функций и прочие операции работы микроконтроллера, необходимые для выполнения поставленной задачи.
|
|
Фигурные скобки {} определяют начало и конец тела функции или блока выражений. На каждую открывающую фигурную скобку в программе должна быть закрывающая скобка.
Создание новых переменных и их типы
Переменные предназначены для хранения значений различных типов и их использования в ходе работы программы. Их типы, способы определения и границы видимости в целом аналогичны изученным на дисциплине “Основы программирования и алгоритмизации”. Стоит отметить, что номера контактов контроллера в больших программах обычно определяются глобальными переменными перед функцией setup(). В таком случае упрощается их перенастройка при замене одних контактов на другие. Пример создания и присваивания переменных:
int outPin; // объявление переменной целочисленного типа
outPin = 10; // и присваивание ей значения
float pi = 3.14; // объявление и присваивание – с плавающей точкой
В конце каждого выражения и для разделения элементов программ применяется точка с запятой – “;”. Однострочные комментарии начинаются с //.
|
|
Определение используемых входов и выходов микроконтроллера
Для того чтобы записать или считать информацию с какого-либо контакта микроконтроллера, необходимо предварительно его определить в функции setup():
void setup()
{
pinMode(12, INPUT); // 12 контакт определяется как дискретный вход
pinMode(outPin, OUTPUT); // 10 контакт определяется как выход
}
Цифровое чтение и цифровая запись сигналов
Функция digitalRead(inputPin); позволяет считать дискретный сигнал с контакта inputPin и получить значение HIGH или LOW (высокий или низкий логический уровень соответственно). Функция digitalWrite(outPin, HIGH); записывает на дискретный выход outPin логический сигнал, который может задаваться из переменной или константой. Используя эти команды можно получать состояния дискретных датчиков (например, кнопок), производить их программный анализ и выводить некоторую информацию на выходы контроллера, к которым подключены дискретные устройства (светодиоды, реле).
Аналоговое чтение и аналоговая запись сигналов
Считывание сигналов с аналоговых входов производится с помощью команды analogRead(A0). В качестве входа могут быть указаны контакты микроконтроллера с A0 до A5, причём считанный сигнал будет с 10-битовым разрешением (в соответствии с разрядностью аналого-цифрового преобразователя) и будет находиться в диапазоне от 0 до 1023.
При помощи широтно-импульсной модуляции реализуется аналоговый вывод с разрядностью в 8 бит (от 0 до 255). Контакты, которые им оборудованы, обозначены на плате символом “~”. Пример чтения сигнала с A3, его масштабирования и вывода на контакт с ШИМ:
int a = analogRead(A3) / 4;
analogWrite(9, a);
Функция задержки
Функция delay(1000); приостанавливает выполнение программы на заданное в миллисекундах время – в данном случае на одну секунду.
Конструкция if, if-else
Данные конструкции предназначены для выполнения некоторого выражения, заключённого в фигурные скобки, в том случае, если соблюдается проверяемое условие. Например:
if (a != b) // если а не равно b
{
a = b; // присвоить а значение b
}
else // иначе
{
a = 0; // присвоить а
b = 0; // и b нулю
}
Вторая часть конструкции else, выполняемая в случае не соблюдения условия в скобках после if, может быть пропущена, если нет необходимости в альтернативном действии.
В скобках после if могут быть использованы следующие операторы сравнения:
x == y // x равно y
x != y // x не равно y
x < y // x меньше y
x > y // x больше y
x <= y // x меньше или равно y
x >= y // x больше или равно y
Для записи нескольких условий, которые должны проверяться одновременно, могут быть использованы логические операторы:
&& – логическое “И” – истинно только в том случае, если оба условия выполняются, например:
if (x>0 && x<5) // если х больше нуля и меньше пяти
|| – логическое “ИЛИ” – истинно в случае, когда выполняется хотя бы одно из условий:
if (x > 0 || x < 0) // истинно, если x не равен нулю
Подключение библиотек и работа с ними
Существует множество готовых решений, реализованных как отдельные файлы, содержащие определение внутренних переменных и функций а также внешних функций, через которые осуществляется работа с ними. Их применение значительно упрощает написание программ и работу с отдельным оборудованием, сводя его к двум-трём строчкам кода. В ходе выполнения лабораторных работ вы познакомитесь с несколькими стандартными библиотеками. Подключение библиотек осуществляется при помощи записи вне функций программы следующей конструкции:
#include <название_библиотеки.h>
Конструкции для работы с конкретными библиотеками сугубо индивидуальны и должны изучаться отдельно при ознакомлении с её примерами или справочными файлами.
Соберите приведённые ниже схемы, напишите программы и проверьте их работоспособность. В качестве подсказок используйте Справочные материалы, находящиеся в конце этого пособия.
Электрическая схема с кнопкой и диодом
Рисунок 1 – Схема с одной кнопкой и одним диодом
Мигание диодом по нажатию кнопки. Текст программы:
void setup() {
pinMode(3, OUTPUT); // Третий контакт контроллера – выход (диод)
pinMode(4, INPUT); // Четвёртый контакт контроллера – вход (кнопка)
}
void loop() {
int a = digitalRead(4); // Чтение сигнала с кнопки в переменную
digitalWrite(3,a); // Подача значения переменной на диод
}
Два диода и две кнопки. Попробуйте сами собрать электрическую схему:
void setup() {
pinMode(3, OUTPUT); // Третий контакт контроллера – выход (диод 1)
pinMode(5, OUTPUT); // Пятый контакт контроллера – выход (диод 2)
pinMode(4, INPUT); // Четвёртый контакт контроллера – вход (кнопка 1)
pinMode(6, INPUT); // Шестой контакт контроллера – вход (кнопка 2)
}
void loop() {
int a = digitalRead(4); // Чтение сигнала с кнопки 1 в переменную a
digitalWrite(3,a); // Подача значения переменной на диод 1
int b = digitalRead(6); // Чтение сигнала с кнопки 2 в переменную b
digitalWrite(5,b); // Подача значения переменной на диод 2
}
Электрическая схема с фоторезистором и диодом
Рисунок 2 – Схема с фоторезистором и одним диодом
Включение диода в темноте и выключение на свету. Текст программы
void setup() {
pinMode(13, OUTPUT); // тринадцатый контакт – выход (диод)
}
void loop() {
//Если степень освещённости низкая (чтение аналогового порта А0 и
//сравнение с константой),
if (analogRead(A0) < 250)
digitalWrite(13, HIGH); //то включается светодиод
//Иначе
else
digitalWrite(13, LOW); //выключается светодиод
}
Потенциометр (переменный резистор) и диод. Электрическая схема
Рисунок 3 – Схема потенциометром и одним диодом
Управление яркостью светодиода от потенциометра. Программа
void setup() {
pinMode(9, OUTPUT); // девятый контакт – выход (диод)
}
void loop() {
//Чтение напряжения с потенциометра на порте А0 и переход от
//10-битного значения АЦП (от 0 до 1023) к 8-битному ЦАП
//(ШИМ от 0 до 255)
int x = analogRead(A0) / 4;
analogWrite(9, x); //Запись значения переменной на выход
delay(50); //Задержка в 50 миллисекунд между выполнениями loop()
}
Схема подключения сервопривода к микроконтроллеру
Рисунок 4 – Схема подключения сервопривода
Поворот сервопривода на угол 0 градусов и 180 градусов через каждые 2 секунды
#include <Servo.h> //Подключение библиотеки сервоприводов
Servo ServoA; //Создание объекта – сервопривода
void setup()
{
ServoA.attach(10); //Определение контакта подключения сервопривода
}
void loop()
{
ServoA.write(0); //Поворот сервопривода на нулевой угол
delay(2000); //Двухсекундная пауза
ServoA.write(180); //Поворот сервопривода на 180 градусов
delay(2000); //Двухсекундная пауза
}
Выполните задания и сохраните необходимые материалы для отчёта по лабораторным работам – названия схем, которые надо добавить в отчёт, написаны в Справочных материалах в конце этого пособия:
1) соберите электрическую схему и напишите программу управления светодиодом по нажатию кнопки;
2) соберите схему управления с двумя кнопками и двумя светодиодами;
3) соберите схему с фоторезистором и светодиодом – светодиод должен загораться в том случае, если фоторезистор регистрирует низкий уровень освещения;
4) соберите схему с потенциометром и светодиодом – управляйте яркостью свечения светодиода, в зависимости от угла поворота потенциометра;
5) подключите к микроконтроллеру сервопривод и напишите программу, изменяющую его угол поворота от 0 градусов до 180 и обратно каждые две секунды;
6) соберите схему мехатронного устройства с фоторезистором сервоприводом и светодиодом. Если фоторезистор регистрирует низкий уровень освещения, то должен загораться светодиод, в противном случае светодиод должен выключаться, а сервопривод – приходить в движение. Объясните, какие части полученной модели соответствуют компонентам мехатронного устройства.
Управление пневматическим и электрическим двигателем при помощи микроконтроллера
Напрямую от схемы микроконтроллера можно управлять только незначительной нагрузкой, такой, как например светодиоды. Для использования в схемах силовых элементов, характерных для мехатронных устройств, – электроприводов постоянного тока, сервоприводов с напряжением питания более 5В, приводами пневматических клапанов, необходимо использовать силовые ключи, построенные на транзисторах или модулях реле.
Реле подключаются к микроконтроллеру по трёхпроводной схеме: питание, земля, сигнал. Такая схема позволяет снизить нагрузку на управляющие выходы контроллера за счёт отдельной 5В-линии. На силовые линии такого реле подключается нагрузка таким образом, чтобы оно прерывало один из проводов питания. При подаче управляющего сигнала с контроллера, будет происходить замыкание линии питания электропривода или другого исполнительного устройства. В случае управления пневматическими клапанами с электрическими приводами, применение реле позволяет осуществлять программное управление мехатронными устройствами с пневматической силовой составляющей.
Также реле используются для согласования напряжения логических уровней в том случае, когда у управляющих, исполнительных и регистрирующих устройств они различаются.
Далее приведены задания, последовательное построение которых позволит реализовать простое мехатронное устройство управления электроприводом с помощью транзистора с возможностью регулирования его скорости вращения посредством потенциометра. Кнопка, выполняющая функции аварийного останова по прерыванию, и монитор позволяют расширить функционал устройства и предоставить пользователю информацию о его состоянии.
Соберите схемы второго занятия, напишите программы и проверьте их работоспособность. В качестве подсказок используйте Справочные материалы, находящиеся в конце этого пособия.
Управление скоростью мотора с помощью потенциометра
Рисунок 5 – Схема подключения микромотора
Текст программы управления скоростью мотора с помощью потенциометра
void setup()
{
pinMode(10, OUTPUT); //Контакт подключения микромотора
}
void loop()
{
int val = analogRead(A0) / 4; //Читаем значение потенциометра с А0 в
//переменную и согласуем её для АЦП-ЦАП
analogWrite(10, val); //Вращаем микромотор со скоростью из переменной
}
Управление двухстрочным шестнадцатисимвольным дисплеем LCD 1602
Рисунок 6 – Схема подключения дисплея с потенциометром уровня яркости
Текст программы секундного счётчика
#include <LiquidCrystal.h> //Подключение библиотеки мониторов
int time = 0; //Создание переменной счётчика, равного нулю
LiquidCrystal lcd(2,3,4,5,6,7); //Задание контактов подключения дисплея
void setup()
{
lcd.begin(16,2); //Определение двухстрочного 16-символьного дисплея
lcd.print(“Display test”); //Вывод текста на дисплей
}
void loop()
{
lcd.setCursor(0,1); //Установка курсора на первый символ второй строки
lcd.print(time); //Вывод значения переменной
delay(1000); //Задержка 1000 миллисекунд
time++; //Инкрементирование переменной
}
Пример обработчика прерываний
Соберите схему с кнопкой и светодиодом (для диода используйте сопротивление 100 Ом, для кнопки – 10 кОм).
volatile int state = LOW; //квалификатор перед переменной используется
//чтобы её можно было изменить из обработчика
//прерывания
void setup()
{
pinMode(13, OUTPUT);
attachInterrupt(0, blink, RISING); //настройка обработчика прерывания на
//нулевую линию (второй контакт); вызываемая прерыванием
// функция – blink; прерывание срабатывает при переходе сигнала
// на контакте с LOW на HIGH
}
void loop()
{
digitalWrite(13, state); //запись значения переменной state на светодиод
}
void blink() //функция, вызываемая прерыванием
{
state = !state; //инверсия значения переменной
}
Задания:
1) соберите схему с микромотором и потенциометром. Напишите программу для регулирования скорости вращения мотора в зависимости от угла поворота потенциометра;
2) дополните схему двухстрочным шестнадцатисимвольным LCD дисплеем, выводите на него значение, считанное с потенциометра. Для случая, когда мотор остановлен, на экран должно выводиться слово “STOP”;
3) дополните схему кнопкой. При нажатой кнопке мотор должен останавливаться. На экран монитора должно выводиться уведомление об этом;
4) перепишите программу таким образом, чтобы по нажатию кнопки происходило прерывание. Функция прерывания должна запускать мотор на вращение с заданной потенциометром скоростью, если он был остановлен и – останавливать, если он вращался. Информация о скорости вращения и срабатывании прерывания должна отображаться на дисплее.
Дата добавления: 2018-06-27; просмотров: 304; Мы поможем в написании вашей работы! |
Мы поможем в написании ваших работ!