Список использованных источников

  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)

Приложение 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 г.

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