Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лаба 2 / Лабораторная работа №2_Токарев_0421_МСУ.docx
Скачиваний:
0
Добавлен:
26.06.2025
Размер:
610.78 Кб
Скачать

МИНОБРНАУКИ РОССИИ

Санкт-Петербургский государственный

электротехнический университет

«ЛЭТИ» им. В.И. Ульянова (Ленина)

Кафедра РАПС

отчет

по лабораторной работе № 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. Ввод и отображение информации на дисплейном модуле

  1. Соберем схему, соединив между собой отладочную плату и плату дисплейного

модуля, подключив соответствующие контакты друг к другу.

  1. Напишем управляющую программу в среде разработки Arduino IDE. Листинг программы представлен в соответствующем разделе. Сначала определим с помощью команды lcd.print(analogRead(0)) значения байт для кнопок. Затем напишем программу для отображения на дисплее фамилии и наименования кнопок, расположенных на дисплейном модуле.

  2. Загрузим программу в отладочную плату. Для этого подключим плату к компьютеру

помощью usb-кабеля, затем в среде Arduino IDE нажмем на кнопку «Загрузка», предварительно проверив во вкладке «Инструменты», что плата определилась как Arduino Uno.

  1. Наблюдаем на первой строчке дисплея надпись «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)

  1. Напишем управляющую программу в среде разработки Arduino IDE. Листинг программы представлен в соответствующем разделе.

  2. Загрузим программу в отладочную плату. Для этого подключим плату к компьютеру

помощью usb-кабеля, затем в среде Arduino IDE нажмем на кнопку «Загрузка», предварительно проверив во вкладке «Инструменты», что плата определилась как Arduino Uno.

  1. Наблюдаем в консоли меню, управляем двигателем с помощью выбора того или иного пункта.

Листинг управляющей программы контроллера

  1. Ввод и отображение информации на дисплейном модуле

/*

Токарев А.А.

группа 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 секунды

}

Соседние файлы в папке Лаба 2