Электрическая схема устройства управления
⇐ ПредыдущаяСтр 2 из 2 Для задания необходимой последовательности команд используем контроллер Arduino (рис.3) с записанной в его память соответствующей программой (КОДОМ). Имеем 8 датчиков в виде конечных микропереключателей, расположение которых определяет положение захвата крана-штабелера. Сигналы с датчиков поступают на вход контроллера. С выхода контроллера поступает 6 команд на три электродвигателя, работающих в реверсивном режиме. Рис.3. Плата Arduino
Рис.4. Подключение платы Arduino (вариант 1)
Рис.4. Подключение платы Arduino (вариант 2)
Рис.4. Подключение платы Arduino (вариант 3)
В процессе управления необходимо переместить захват с грузом из позиции калибровки в нужную ячейку стеллажа или взять груз из заданной ячейки склада и переместить в нулевую позицию. Для этого используется определенная последовательность команд. Внутри корпуса блока управления установлены: плата Arduino mega, которая принимает данные с концевых выключателей и управляет процессом, две платы драйверов двигателей L298N для управления 3-мя двигателями и плата индикации для выбора режима работы стенда. Общий вид блока управления и расположение плат приведено на рисунке 4 а, б.
а б Рис.5. Общий вид блока управления (а) и расположение плат (б) Пины для подключения указаны в примере. Пример Опишем алгоритм, для управления направлением и скоростью вращения двигателями осям X, Y, Z, а также определение срабатывания концевых выключателей в соответствии с положениями захвата. После опишем функцию калибровки. Функция калибровки перемещает захват в исходную позицию.
int motor_x1 = 2;//Подключение мотора, управляющего осью Х, 2 пин для //управления скоростью ШИМ, остальные 2 используются для выбора //направления вращения, нужно подавать разноименные сигналы int motor_x2 = 38; int motor_x3 = 40;
int motor_y1 = 4; //Подключение мотора, управляющего осью Y int motor_y2 = 46; int motor_y3 = 48;
int motor_z1 = 3; //Подключение мотора, управляющего осью Z int motor_z2 = 42; int motor_z3 = 44;
int conx1 = 22;// Подключение концевых выключателей для оси X int conx2 = 24; int conx3 = 26;
int cony1 = 34; // Подключение концевых выключателей для оси Y int cony2 = 36;
int conz1 = 28; // Подключение концевых выключателей для оси Z int conz2 = 30; int conz3 = 32;
void setup() { //Объявляем указанные выше порты, на моторах OUTPUT потому что мы //будем посылать на них сигнал, а у кнопок INPUT, потому что мы //принимаем данные pinMode (motor_x1, OUTPUT); pinMode (motor_x2, OUTPUT); pinMode (motor_x3, OUTPUT); pinMode (motor_y1, OUTPUT); pinMode (motor_y2, OUTPUT); pinMode (motor_y3, OUTPUT); pinMode (motor_z1, OUTPUT); pinMode (motor_z2, OUTPUT); pinMode (motor_z3, OUTPUT);
pinMode(conx1, INPUT_PULLUP); pinMode(conx2, INPUT_PULLUP); pinMode(conx3, INPUT_PULLUP); pinMode(cony1, INPUT_PULLUP); pinMode(cony2, INPUT_PULLUP); pinMode(conz1, INPUT_PULLUP); pinMode(conz2, INPUT_PULLUP); pinMode(conz3, INPUT_PULLUP); pinMode(but1, INPUT_PULLUP); pinMode(but2, INPUT_PULLUP); pinMode(but3, INPUT_PULLUP); collibration(); //Функция калибровки, Указана ниже } void loop() {
} void motorx(int speedx, bool rotx)//Готовая функция для мотора Х, которая //принимает направление и скорость вращения { if (rotx == 1) { digitalWrite(motor_x2, 0); digitalWrite(motor_x3, 1); } else { digitalWrite(motor_x2, 1); digitalWrite(motor_x3, 0); }
analogWrite(motor_x1, speedx); }
void motory(int speedy, bool roty) { if (roty == 1) { digitalWrite(motor_y2, 1); digitalWrite(motor_y3, 0); } else { digitalWrite(motor_y2, 0); digitalWrite(motor_y3, 1); } analogWrite(motor_y1, speedy); }
void motorz(int speedz, bool rotz) { if (rotz == 1) { digitalWrite(motor_z2, 1); digitalWrite(motor_z3, 0); } else { digitalWrite(motor_z2, 0); digitalWrite(motor_z3, 1); } analogWrite(motor_z1, speedz); }
void collibration()//Функция калибровки, которая приводит захват в 0-ю точку { while (!digitalRead(cony2) == 0) motory(250,1); motory(0,1);
while (!digitalRead(conz1) == 0) motorz(250,1); motorz(0,1);
while (!digitalRead(conx3) == 0) motorx(250,1); delay(600);
motorx(0,1); }
Для работы стенда в демонстрационном режиме с индикацией и кнопками выбора ячеек необходимо загрузить библиотеку, которая должна быть расположена в определенной папке на том же носителе, где и основная программа (коды). Для запуска демонстрационной программы управления необходимо: -запустить программу «Ардуино»; -выбрать Скетч; -подключить библиотеку (в диалоговом режиме); -добавить ZIP библиотеки, для этого выбираем папку с флешки и нажимаем «OPEN»
Задание Переместить захват крана-штабелера из позиции калибровки в нужную позицию используя логические выражения, которые мы можем воплотить на микроконтроллере и остальной периферии.
Авторы: Виноградов Михаил Владимирович Ненашев Артем Алексеевич
Воспользуйтесь поиском по сайту: ©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...
|