
МИНОБРНАУКИ РОССИИ
Санкт-Петербургский государственный
электротехнический университет
«ЛЭТИ» им. В.И. Ульянова (Ленина)
Кафедра РАПС
отчет
по лабораторной работе № 2
по дисциплине «Микропроцессорные системы управления»
Тема: «Средства ввода-вывода и отображения информации в микропроцессорных системах управления»
Студент гр. 0421 |
|
Токарев А.А. |
Преподаватель |
|
Татаринцев Н.И. |
Санкт-Петербург
2023
Цель работы
Закрепление теоретических знаний по современной цифровой и микропроцессорной технике; приобретение практических навыков по работе с микроконтроллерами, средствами ввода/вывода и отображения информации применительно к системам управления объектами электроэнергетики и электротехники, в частности электроприводам.
Состав используемого оборудования и его краткие характеристики
В качестве отладочного модуля в данной лабораторной работе используется Arduino Uno R3. Внешний вид отладочного модуля представлен на рисунке 1.
Рисунок 1 – Внешний вид Arduino Uno R3
Основные характеристики отладочного модуля:
-Микроконтроллер: ATmega328
-Напряжение питания: 5 В
-Входное напряжение (рекомендуемое): 7-12 В
-Входное напряжение (предельное): 6-20 В
-Цифровые выводы I/O: 14 линий (6 из них - ШИМ)
-Аналоговые входы: 6 (АЦП)
-Максимальный ток на выводе I/0: 20 мА (для каждого вывода)
-Максимальный ток на выводе 3,3V: 50 мА
-Тактовая частота: 16 МГц
Для управления электродвигателем в данной лабораторной работе используется преобразователь на базе микросхемы VNH2SP30. Внешний вид модуля представлен на рисунке 2.
Рисунок 2 – Внешний вид преобразователя VNH2SP30
Основные характеристики преобразователя:
-Диапазон напряжения питания: 5,5V … 16V.
-Номинальный\максимальный ток: 14A\30A
-Управление логическим уровнем 3,3 вольт
-Максимальная частота ШИМ: 20 кГц
Преобразователь имеет защиту от перегрева, защиту от перенапряжения и защиту по току.
В качестве устройства вывод используется дисплейный модуль LCD Keypad Shield с шестью кнопками. Внешний вид дисплейного модуля представлен на рисунке 3.
Рисунок 3 – Внешний вид модуля LCD Keypad Shield
Ход выполнения лабораторной работы
1. Ввод и отображение информации на дисплейном модуле
Соберем схему, соединив между собой отладочную плату и плату дисплейного
модуля, подключив соответствующие контакты друг к другу.
Напишем управляющую программу в среде разработки Arduino IDE. Листинг программы представлен в соответствующем разделе. Сначала определим с помощью команды lcd.print(analogRead(0)) значения байт для кнопок. Затем напишем программу для отображения на дисплее фамилии и наименования кнопок, расположенных на дисплейном модуле.
Загрузим программу в отладочную плату. Для этого подключим плату к компьютеру
помощью usb-кабеля, затем в среде Arduino IDE нажмем на кнопку «Загрузка», предварительно проверив во вкладке «Инструменты», что плата определилась как Arduino Uno.
Наблюдаем на первой строчке дисплея надпись «Tokarev 0421», на второй строчке – в зависимости от нажатой кнопки: «Up», «Down», «Left», «Right» или «Select».
2. Ввод и отображение информации с помощью персонального компьютера
1. Соберем схему, соединив между собой отладочную плату и плату преобразователя,
подключив соответствующие контакты друг к другу. Подключим к силовым разъемам преобразователя электродвигатель постоянного тока. Модуль управления, используемый в данной работе, является сдвоенным, мы будем использовать только одну пару выходов для управления. Назначение входов/выходов сдвоенного модуля VNH2SP30 в соответствии с их обозначением на плате приведено в таблице 1.
Таблица 1 – Назначение входов/выходов модуля VNH2SP30
Обозначение контакта на модуле VNH2SP30 |
Назначение |
Обозначение контакта на плате Arduino Uno |
||||
+5V |
Напряжение питания +5В |
+5V |
||||
GND |
Общая шина питания |
GND |
||||
Analog In |
0 |
EN1 |
Разрешение на работу мотора М1, подключаемого к клеммам A1_B1 |
A0 |
||
2 |
CS1 |
Датчик тока мотора М1 |
A2 |
|||
8 |
INB1 |
Вход В драйвера 1 (вращение против часовой стрелки (CCW) для мотора М1) |
8 (D8) |
PWM |
||
7 |
INA1 |
Вход А драйвера 1 (вращение по часовой стрелке (CW) для мотора М1) |
7 (D7) |
|||
5 |
PWM1 |
ШИМ для мотора М1 |
5 (D5) |
Напишем управляющую программу в среде разработки Arduino IDE. Листинг программы представлен в соответствующем разделе.
Загрузим программу в отладочную плату. Для этого подключим плату к компьютеру
помощью usb-кабеля, затем в среде Arduino IDE нажмем на кнопку «Загрузка», предварительно проверив во вкладке «Инструменты», что плата определилась как Arduino Uno.
Наблюдаем в консоли меню, управляем двигателем с помощью выбора того или иного пункта.
Листинг управляющей программы контроллера
Ввод и отображение информации на дисплейном модуле
/*
Токарев А.А.
группа 0421
*/
// Подключение библиотеки LiquidCrystal:
#include <LiquidCrystal.h>
// инициализация библиотеки с номерами используемых контактов
LiquidCrystal lcd(8, 9, 4, 5, 6, 7); // LiquidCrystal(rs, enable, d4, d5, d6, d7)
void setup()
{
// Объявляем количество столбцов и строк в LCD:
lcd.begin(16, 2); // 16 столбцов, 2 строки
lcd.clear(); // Очищаем LCD
analogWrite(10,125); // Подсветка LCD: 10- номер контакта,
// 125-выходное значение ШИМ
}
// функция byte с именем key, которая будет возвращать
// байт для кнопок и закрепляем диапазон значений аналогового сигнала для
// каждой кнопки. Эти значения должны быть немного больше реальных
// измеренных.
byte key()
{
// Ранее определили значения для кнопок: select = 641, left = 410, up = 99, down = =256, right = 0
int val=analogRead(0); // Вводим переменную val для значений
//с аналогового контакта 0
if (val<50) return 5; // если меньше 50, возвращает 5
else if (val<200) return 3; // если меньше 200, возвращает 3
else if (val<300) return 4; // если меньше 300, возвращает 4
else if (val<500) return 2; // если меньше 500, возвращает 2
else if (val<700) return 1; // если меньше 700, возвращает 1
else if (val<=800) return 0; // если меньше 800, возвращает 0
}
void loop()
{
// Считываем значение в байтах с кнопки
lcd.clear();
lcd.setCursor(0, 0); // Устанавливаем курсор в нулевую позицию
lcd.print("Tokarev 0421"); // Выводим на LCD надпись с фамилией и номером группы
lcd.setCursor(0, 1); // Переводим курсор на вторую строку
// С помощью оператора switch определяем какая кнопка нажата:
switch (key())
{
case 1: // Если key вернул 1, то
lcd.print("Select"); // показываем на LCD - "Select"
break; // и выходим из оператора.
case 2: // Если key вернул 2, то
lcd.print("Left"); // показываем на LCD - "Left"
break; // и выходим из оператора.
case 3: // Если key вернул 3, то
lcd.print("Up"); // показываем на LCD - "Up"
break; // и выходим из оператора.
case 4: // Если key вернул 4, то
lcd.print("Down"); // показываем на LCD - "Down"
break; // и выходим из оператора.
case 5: // Если key вернул 5, то
lcd.print("Right"); // показываем на LCD - "Right"
break; // и выходим из оператора.
}
delay(250); // Задержка на 0,25 секунды
}