Управление пневматическим и электрическим двигателем при помощи микроконтроллера



Министерство образования и науки Российской Федерации

 

Федеральное государственное бюджетное образовательное учреждение высшего образования

 

«Курганский государственный университет»

 

Кафедра «Автоматизация производственных процессов»

 

 

ОСНОВЫ МЕХАТРОНИКИ

Методические указания к комплексу лабораторных работ

по курсу «Основы мехатроники»

для студентов направлений подготовки

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; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!