
- •Научно-исследовательская работа на тему:
- •Реферат
- •Перечень сокращений и обозначений
- •Введение
- •1 Обзор методов создания цифровых двойников
- •1.1 Цифро-аналоговые методы
- •1.2 Цифровые методы
- •1.3 Методы на основе машинного обучения
- •2 Разработка робота для исследования энергоэффективности ячейки тяговой аккумуляторной батареи
- •2.1 Определение требований
- •2.2 Выбор компонентов
- •2.3 Разработка схемы
- •2.4 Схема подключения
- •2.5 Список соединений:
- •2.6 Программирование
- •3 Создание цифрового двойника робота в Matlab Simulink
- •3.1 Математическая модель аккумуляторной батареи (модель Шеферда)
- •3.2 Кинематика робота
- •3.3 Система управления роботом
- •3.4 Реализация модели в Matlab
- •4 Исследование энергопотребления робота на основе цифрового двойника
- •5 Анализ полученной цифровой модели робота
- •Заключение
- •Список использованных источников
Список использованных источников
Управление в технических системах: учебник / Н. П. Деменков, Е. А. Микрин. — Москва: Издательство МГТУ им. Н.Э. Баумана, 2017. —452 с.: ил. ISBN 978-5-7038-4661-2. Ссылка: https://bmstu.press/catalog/item/5057/ (дата обращения 04.09.2024)
Ким Д. П. Теория автоматического управления. Т. 1. Линейные системы — 2-е изд., испр. и доп. — М.: ФИЗМАТЛИТ, 2016. — 312 с.
Ким Д. П. Теория автоматического управления. Т. 2. Многомерные, нелинейные, оптимальные и адаптивные системы — 2-е изд., испр. и доп. — М.: ФИЗМАТЛИТ, 2016. — 440 с.
Основы теории и проектирования систем управления. Методология. Математические модели: учебное пособие / Н.М. Задорожная. М.: Изд-во МГТУ им. Н.Э. Баумана, 2016. – 36 с.: ил. Ссылка: https://bmstu.press/catalog/item/74/ (дата обращения 04.09.2024)
Характеристики типовых звеньев систем автоматического регулирования: учебное пособие / Н.М. Задорожная, В.А. Дудоладов. – Изд-во МГТУ им. Н.Э. Баумана, 2014. – 37 с.: ил. Ссылка: https://bmstu.press/catalog/item/2252/ (дата обращения 04.09.2024)
Сивцов В.И., Шахназаров Г.А. Практикум по основам теории управления: Учебно-методическое пособие / Под. ред. К.А. Пупкова. М.: Изд-во МГТУ им. Н.Э. Баумана, 2006. – 120 с.: ил. Ссылка: https://bmstu.press/catalog/item/2789/ (дата обращения 04.09.2024)
Статистическая динамика систем управления : учебное пособие /Н. П. Деменков. — Москва : Издательство МГТУ им. Н.Э. Баумана, 2017. — 146 с. : ил.: https://bmstu.press/catalog/item/4997/ (дата обращения 04.09.2024)
Приложение 1
/*************************************
* Novikov A.D. Arduino Dual Motor *
*************************************/
int BatteryPin = A0; // Указываем порт OUT батареи
int ACSPin = A1; // Указываем порт OUT датчика ACS712
const int AverageValue = 500; // Переменная для хранения значения количества циклов считывания
long int ACSValue = 0; // Переменная для хранения значения с датчика
long int BatteryValue = 0; // Переменная для хранения значения с батареи
float ACSVoltage = 0; // Переменная для хранения значения напряжения на датчике
float ACSCurrent = 0; // Переменная для хранения значения тока на датчике
float BatteryVoltage = 0; // Переменная для хранения значения напряжения батареи
int Calibration = -3; // Переменная для калибровки
int IN1 = 2; // Указываем порт выхода первого управляющего сигнала первого мотора
int IN2 = 3; // Указываем порт выхода второго управляющего сигнала первого мотора
int IN3 = 4; // Указываем порт выхода первого управляющего сигнала второго мотора
int IN4 = 5; // Указываем порт выхода второго управляющего сигнала второго мотора
int EN1 = 9; // Указываем порт выхода ШИМ сигнала первого мотора
int EN2 = 10; // Указываем порт выхода ШИМ сигнала второго мотора
void setup()
{
pinMode(IN1, OUTPUT);
pinMode(IN2, OUTPUT);
pinMode(IN3, OUTPUT);
pinMode(IN4, OUTPUT);
pinMode(EN1, OUTPUT);
pinMode(EN2, OUTPUT);
Serial.begin(9600); // Открываем последовательноую связь на скорости 9600
Serial.println("Enter char for control:");
Serial.println("W. FORWARD");
Serial.println("S. REVERSE");
Serial.println("A. LEFT");
Serial.println("D. RIGHT");
Serial.println("B. BREAK");
}
void loop()
{
for (int i = 0; i < AverageValue; i++) // Повторяем цикл 500 раз в секунду
{
ACSValue += analogRead(ACSPin); // Считываем и записываем показания с датчика
BatteryValue += analogRead(BatteryPin); // Считываем и записываем показания с батареи
delay(2); // Пауза 2 мкс
}
ACSValue = ACSValue / AverageValue; // Делим полученное значение суммы значений на число измерений
ACSValue = ACSValue + Calibration; // Ручная калибровка
ACSVoltage = ACSValue * 5.0 / 1024.0; // Расчет напряжения на датчике
ACSCurrent = (ACSVoltage - (5.0/2)) / 0.185; // Расчет тока на датчике с учетом чувствительности в 185 мВ/А и выходного напряжения в 1/2 от опорного.
BatteryValue = BatteryValue / AverageValue; // Делим полученное значение суммы значений на число измерений
BatteryVoltage = BatteryValue * 5.0 / 1024.0; // Расчет напряжения на батарее
char user_input; // Переменная для хранения пользовательского ввода
while(Serial.available())
{
user_input = Serial.read(); // Чтение пользовательского ввода
if (user_input =='W') // Проверка ввода на соотвествие направлению движения
{
Forward(); // Вызов функции движения в данном направлении
}
else if(user_input =='S')
{
Reverse();
}
if (user_input =='A')
{
Left();
}
else if(user_input =='D')
{
Right();
}
else if(user_input =='B')
{
Stop();
}
else
{
//Serial.println("Invalid option.");
}
}
}
void Forward() // Функция движения в данном направлении
{
Serial.print("Forward: ");
digitalWrite(IN1, HIGH); // Установка выходного сигнала на соотв. цифровом порте в соотвествии с таблицей управляющих сигналов
digitalWrite(IN2, LOW);
Serial.print("Motor 1 Forward, ");
digitalWrite(IN3, HIGH);
digitalWrite(IN4, LOW);
Serial.println("Motor 2 Forward");
}
void Reverse()
{
Serial.print("Reverse: ");
digitalWrite(IN1, LOW);
digitalWrite(IN2, HIGH);
Serial.print("Motor 1 Reverse, ");
digitalWrite(IN3, LOW);
digitalWrite(IN4, HIGH);
Serial.println("Motor 2 Reverse");
}
void Left()
{
Serial.print("Left: ");
digitalWrite(IN1, LOW);
digitalWrite(IN2, HIGH);
Serial.print("Motor 1 Reverse, ");
digitalWrite(IN3, HIGH);
digitalWrite(IN4, LOW);
Serial.println("Motor 2 Forward");
}
void Right()
{
Serial.print("Right: ");
digitalWrite(IN1, HIGH);
digitalWrite(IN2, LOW);
Serial.print("Motor 1 Forvard, ");
digitalWrite(IN3, LOW);
digitalWrite(IN4, HIGH);
Serial.println("Motor 2 Reverse");
}
void Stop()
{
Serial.print("Stop: ");
digitalWrite(IN1, LOW);
digitalWrite(IN2, LOW);
Serial.print("Motor 1 Stop, ");
digitalWrite(IN3, LOW);
digitalWrite(IN4, LOW);
Serial.println("Motor 2 Stop");
}
Москва, 2024 г.