Главная | Обратная связь | Поможем написать вашу работу!
МегаЛекции

Электрическая схема устройства управления




Для задания необходимой последовательности команд используем контроллер 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»


 

 

Задание

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

 

 

Вариант Задание Примечания
1 Переложить с 1 на 4 и обратно  
2 Переложить с 5 на 2, а после поставить в 0  
3 Взять из 0 и положить в 2, после переложить в 3 и вернуть в 0  
4 Переложить с 4 на 6 и обратно  
5 Переложить с 5 на 4, а после на 1  
6 Переложить с 6 на 3  
7 Взять из 0, положить в 1,2,3,4 ячейки по очереди  
8 Переложить с 3 на 4, а затем на 1  
9 Переложить с 1 на 3 и обратно  
10 Переложить с 2 на 5, а затем на 4  

 

 

Авторы:

Виноградов Михаил Владимирович

Ненашев Артем Алексеевич

Поделиться:





Воспользуйтесь поиском по сайту:



©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...