Время, с Рисунок 23 – Зависимость напряжения на аккумуляторе от времени при

движении робота по циклу FTP75

На рисунке 23 отображена ключевая в данной работе зависимость – график, отражающий напряжение на аккумуляторе от времени движения робота, и демонстрирующий как падение напряжения при высокой нагрузке от электромоторов, так и постепенную разрядку аккумулятора от наличия постоянного минимального тока, протекающего в цепи управления от микроконтроллера. Данный ток был реализован путем добавления минимальной скорости движения 0, так как модель в силу особенностей используемых уравнений не может быть полностью остановлена, и так же данный подход не уменьшает точность моделирования, поскольку энергопотребление в пассивном режиме микроконтроллера Arduino Nano и

всех используемых компонентов составляет примерно 15 мА.

31

5 Анализ полученной цифровой модели робота

Разработанная модель цифрового двойника робота показала высокую точность в предсказании энергопотребления и поведения робота в различных эксплуатационных циклах. Это подтверждает корректность выбранных подходов к моделированию аккумуляторной батареи и кинематики робота.

Анализ энергопотребления робота показал, что наибольшие потери энергии происходят при ускорении и торможении, а также при движении с высокой скоростью. Это указывает на необходимость оптимизации алгоритмов управления для снижения энергопотребления в динамических режимах, в частности, добавление системы плавного пуска электромоторов.

Модель Шеферда, несмотря на свою простоту и удобство, имеет ограничения при моделировании батареи в условиях высоких токов разряда и значительных изменений температуры. Для более точного моделирования в будущих работах рекомендуется использовать более сложные модели, такие как модель Томаса-Ферми (ETFM).

Разработанный цифровой двойник может быть использован для оптимизации конструктивных параметров робота, таких как масса, размеры и тип аккумуляторной батареи, а также для тестирования различных алгоритмов управления перед их реализацией на реальном роботе.

Рекомендации по дальнейшей работе: для повышения точности моделирования следует использовать более сложные модели аккумуляторных батарей, учитывающие температурные эффекты и деградацию батареи со временем. Также, необходимо разработать и протестировать алгоритмы управления, которые минимизируют энергопотребление робота в динамических режимах. В будущих работах можно добавить подсистемы для управления роботом дистанционно, без использования подключения к компьютеру, например, использовав микроконтроллер на базе ESP32 с

встроенным модулем Wi-FI подключения. Так же следовало бы добавить

32

систему контроля температуры батареи и дополнительное охлаждение Н-

моста.

33

ЗАКЛЮЧЕНИЕ

В ходе выполнения научно-исследовательской работы был разработан цифровой двойник робота, включающий математическую модель аккумуляторной батареи, кинематическую модель движения робота и систему управления, основанную на заданных эксплуатационных циклах. Работа проводилась в среде Matlab Simulink, предлагающей широкий спектр различных инструментов для обработки результатов исследований.

Основные результаты работы:

1) Разработка математической модели аккумуляторной батареи:

Была реализована модель Шеферда, которая описывает поведение ячейки тяговой аккумуляторной батареи (ТАБ) при переменных токах разряда.

Модель учитывает такие параметры, как внутреннее сопротивление,

поляризационные и экспоненциальные составляющие, что позволяет достаточно точно предсказывать напряжение на клеммах батареи в зависимости от степени её разряда.

Цифровая модель данной батареи была интегрирована в Simulink в виде отдельной подсистемы после работ по оптимизации параметров модели через

Design Optimization на примере реальной ячейки ТАБ, что позволило использовать данную подсистему для анализа энергоэффективности робота с высокой точностью.

2) Создание кинематической модели робота:

Была разработана кинематическая модель, которая описывает движение робота с двумя ведущими колёсами и двумя ведомыми, а также учитывает внутренние и внешние характеристики используемых электродвигателей в зависимости от напряжения на обмотках и момента сопротивления движению.

3) Разработка системы управления роботом:

Была создана система управления, которая генерирует управляющие сигналы для двигателей робота на основе вводимых пользователем команд,

что позволяет в интерактивном режиме снимать показатели батареи при

34

движении по любому заданному пользователем маршруту. Система позволяет имитировать различные режимы движения, такие как движение по прямой,

повороты, ускорение и принудительное торможение.

Так же в цифровом двойнике робота были использованы стандартный цикл вождения, такие как FTP75, адаптированные к малым размерам робота,

и проведена серия экспериментов по анализу энергоэффективности робота при движении по данным циклам.

4) Интеграция подсистем в цифровой двойник:

Все подсистемы (модель аккумуляторной батареи, кинематическая модель и система управления) были объединены в единую модель цифрового двойника робота. Это позволило проводить комплексное моделирование,

включая анализ энергопотребления, траектории движения и характеристик батареи.

5) Экспериментальная проверка модели:

Для проверки точности модели были проведены эксперименты с реальным роботом, оснащённым датчиком тока и исследуемой ячейкой ТАБ.

Полученные экспериментальные данные были сравнены с результатами моделирования, что подтвердило адекватность разработанной модели.

Было выявлено, что модель Шеферда достаточно точно описывает поведение аккумуляторной батареи при умеренных токах разряда, однако при высоких токах наблюдаются некоторые отклонения, связанные с упрощениями модели.

Как показали результаты эксперимента, использование микропроцессоров Atmega328P в виде платы Arduino Nano с разрядностью АЦП 10 бит при применении алгоритмов фильтрации считывающих значений позволяет добиться приемлемых по точности результатов. Также поскольку разработанная установка носит универсальный характер относительно используемых компонентов, то она имеет возможность проводить замеры не только литиевых ТАБ, но и свинцовых, никелевых и др., а также при

35

уточнении их параметров имеется возможность теоретически предсказывать поведение аккумулятора при разрядке по имеющейся математической модели.

36

СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ

1 Управление в технических системах: учебник / Н. П. Деменков, Е. А.

Микрин. — Москва: Издательство МГТУ им. Н.Э. Баумана, 2017. —452 с.: ил.

ISBN 978-5-7038-4661-2. Ссылка: https://bmstu.press/catalog/item/5057/ (дата обращения 04.09.2024)

2 Ким Д. П. Теория автоматического управления. Т. 1. Линейные системы —

2-е изд., испр. и доп. — М.: ФИЗМАТЛИТ, 2016. — 312 с.

3 Ким Д. П. Теория автоматического управления. Т. 2. Многомерные,

нелинейные, оптимальные и адаптивные системы — 2-е изд., испр. и доп. —

М.: ФИЗМАТЛИТ, 2016. — 440 с.

4 Основы теории и проектирования систем управления. Методология.

Математические модели: учебное пособие / Н.М. Задорожная. М.: Изд-во МГТУ им. Н.Э. Баумана, 2016. – 36 с.: ил. Ссылка: https://bmstu.press/catalog/item/74/ (дата обращения 04.09.2024)

5 Характеристики типовых звеньев систем автоматического регулирования:

учебное пособие / Н.М. Задорожная, В.А. Дудоладов. – Изд-во МГТУ им. Н.Э.

Баумана, 2014. – 37 с.: ил. Ссылка: https://bmstu.press/catalog/item/2252/ (дата обращения 04.09.2024)

6 Сивцов В.И., Шахназаров Г.А. Практикум по основам теории управления:

Учебно-методическое пособие / Под. ред. К.А. Пупкова. М.: Изд-во МГТУ им.

Н.Э. Баумана, 2006. – 120 с.: ил. Ссылка: https://bmstu.press/catalog/item/2789/

(дата обращения 04.09.2024)

7 Статистическая динамика систем управления : учебное пособие /Н. П.

Деменков. — Москва : Издательство МГТУ им. Н.Э. Баумана, 2017. — 146 с. : ил.: https://bmstu.press/catalog/item/4997/ (дата обращения 04.09.2024)

37

Приложение 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");

38

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')

{

39

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);

40

Соседние файлы в папке Новый НИРС