Працюємо з 09:00 до 19:00 без вихідних.
Самовивіз - Київ біля ТЦ Квадрат бул.Перова

Постановка задачі проекту

Ставимо задачу автоматично тягати двигуном постійного струму корисну вагу лінійно уперед-назад із затримкою між реверсами. Швидкість переміщення корисної ваги повинна вручну регулюватись в діапазоні 0 ... 100% за допомогою змінного резистора. Також за допомогою другого змінного резистора необхідно вручну регулювати час затримки між моментами реверсу двигуна. Сам двигун з редуктором та пристрій його управління повинні бути розміщені на рухомій частині пристрою. Зупинка двигуна повинна відбуватись під час спрацювання кінцевиків.

Напруга живлення двигуна 12 В, а струм споживання до 1 А. Принцип механічного переміщення рухомої коробки двигуном в даній статті не має значення (черв'ячна передача, зубчата, колісна, ремінна ...).

Схемне рішення та вибір компонентів

Для реалізації проекту необхідний недорогий, компактний, легко програмований контролер з двома аналоговими входами для підключення двох змінних резисторів, двома дискретними входами для підключення кінцевих вимикачів та двома дискретними широтноімпульсними виходами для управління драйвером двигуна. Ідеально підійде плата контролера ATtiny85 зі стабілізатором напруги 5 В на борту (але в цьому проекті він не знадобиться).

В якості силової частини наступний за потужністю та вартістю після самого дешевого драйвера двигуна L9110S іде двухамперний L298N - його я і візьму. Він компактний, здатний комутувати напругу до 35 В, має зручні роз'єми під гвинтове з'єднання дротів. Також в нього на борту стоїть стабілізатор напруги 5 В, від котрого будемо живити контролер, просто для зручності монтажу (інакше, якщо подавати 12 В прямо на вхід стабілізатора напруги контролера, то потрібно буде два дроти втикати в один конектор драйвера).


В якості кінцевиків буду використовувати, мої улюблені магнітні датчики Хола A3144. При чому тут можна в повній мірі використовувати фізичні особливості даного датчика, а саме те, що він реагує тільки на один напрямок силових ліній магнітного поля. Магніти розташуємо по краям ділянки руху пристрою та направимо їх різними полюсами до рухомої частини з датчиками Хола, що виключить можливість спрацьовування не того кінцевика, котрий потрібний при інерційному забіганні рухомої каретки. А на рухомій каретці A3144 поставимо також у протилежних напрямах по відношенню до корпусу. При цьому їх можна встановити зовсім поруч та підводити до магнітів не впираючись у них, а проводити поруч за дотичною, що на мій погляд легше механічно налагодити.

Схема з'єднань

Зберемо усі компоненти та модулі в електричну схему. Чудово - усі входи-виходи плати контролера зайняті - використовуємо її по повній. Не підключеним залишаємо тільки вхід стабілізатора напруги, так як 5 В від драйвера подаємо прямо на вхід 5 В контролера.

Змінні резистори поставимо номіналом 10 кОм. Звичне підключення - крайні виводи резистора на плюс та мінус живлення, а середній вивід на аналоговий вхід ATtiny85.

Датчики Хола теж у звичному увімкненні з підтяжкою виходу на плюс живлення.

В драйвера двигуна є виходи на два двигуни постійного струму. Ми будемо використовувати тільки один. Два дискретних входи та один його вихідний канал залишаться не задіяні. Прикро, але так трапляється в житті силових драйверів.


Монтаж пристрою

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

Довелося постаратися, щоб усе стало компактним і до того ж залишилась можливість втикнути контролер в USB-порт комп'ютера для програмування та перепрограмування.

На останньому фото видно, що A3144 стоять у протилежному напрямку корпусів для реагування кожного з них на свій магніт, повернутий відповідним полюсом до датчика.

Резистори я припаяв гарними шлейфами. +5 В драйвера тут береться не з гвинтового конектора, а знизу з контактної ділянки плати.

Верхній гвинтовий конектор демонтований для зручності монтажу - він у даному проекті зайвий.

Програма контролеру

int motor1 = 0;
int motor2 = 1; 
int analogPin = 5; int WaitPin = 4;
int val = 0;     // змінна для зберігання значення int twait = 0; // змінна для зберігання значення
const int koncevik1 = 2;
const int koncevik2 = 3;
int stage = 0;
void setup()
{
   pinMode(koncevik1, INPUT);
   pinMode(koncevik2, INPUT);
   pinMode(motor1, OUTPUT);
   pinMode(motor2, OUTPUT);
   digitalWrite(motor1, LOW);
   digitalWrite(motor2, LOW);
}
void loop()
{
   val = analogRead(analogPin);  // зчитуємо значення з порту, що підключений до потенціометра швидкості обертання twait = analogRead(WaitPin);  // зчитуємо значення з порту, що підключений до потенціометра часу очікування
   if (stage==100) {
     digitalWrite(motor1, LOW); //зупинити двигун
     digitalWrite(motor2, LOW); //зупинити двигун
     delay(2000 + twait * 57); //затримка 2 ... 60 сек
     stage = 200;
   }
   if (stage==300) {
     digitalWrite(motor1, LOW); //зупинити двигун
     digitalWrite(motor2, LOW); //зупинити двигун
     delay(2000 + twait * 57); //затримка 2 ... 60 сек
     stage = 0;
   }
   if (stage==0) {
     digitalWrite(motor2, LOW);
     analogWrite(motor1, val / 4); // analogRead повертає значення від 0 до 1023, analogWrite повинно бути в діапазоні від 0 до 255
     if (!digitalRead(koncevik1)) stage = 100;
   }
   if (stage==200) {
     digitalWrite(motor1, LOW);
     analogWrite(motor2, val / 4); // analogRead повертає значення від 0 до 1023, analogWrite повинно бути в діапазоні від 0 до 255
     if (!digitalRead(koncevik2)) stage = 300;
   }
   delay(10);
}

Диапазон регулирования задержки перед обратным ходом двигателя здесь задан 2 ... 60 сек. Для задания другого диапазона задержки необходимо подправить формулу 2000 + twait * 57

Выводы

Программа и схема прекрасно себя зарекомендовали. Получилось законченное цельное автономное устройство. Магнитные концевики не изнашиваются механически со временем, драйвер выбран с запасом мощности. Хотя КПД драйвера был бы на много выше, если он был на основе MOSFET-транзисторов.

Время задержки изменения направления движения 2 ... 60 сек и скорости перемещения 0 ... 100 % прекрасно регулируются переменными резисторами. Их можно прикрутить к панельке, на которой можно нанести шкалы для удобства перенастройки. А для уменьшения габаритов устройства, можно вместо переменных резисторов установить миниатюрные подстроечные.

Проект будет интересен для широких масс робототехников как теоретическая пища к реализации своих актуальных задач.

Написати відгук

Примітка: HTML размітка не підтримується! Використовуйте звичайтий текст.
    Погано           Добре
Конденсатор електролітичний алюмінієвий

Конденсатор електролітичний алюмінієвий

Використовується для згладжування пульсацій в джерелах живлення, в генераторах сигналів, в частотних..

2.03грн.

Електронний термостат на нагрів або охолодження

Електронний термостат на нагрів або охолодження

ОписПрограмований терморегулятор призначений для контролю температури в діапазоні від -50 °С до +110..

82.32грн.

Плата контролера STM32F4-DISCOVERY

Плата контролера STM32F4-DISCOVERY

Плата розробника STM32F4-DISCOVERY дозволяє користувачам запросто будувати проекти на суперсько..

802.92грн.

Модуль CAN Bus в SPI

Модуль CAN Bus в SPI

Модуль для включення любительського контролеру в мережу CAN або для об'єднання любительських контрол..

72.93грн.

Оптопара PC817C

Оптопара PC817C

Оптопара з відкритим колектором в корпусі DIP-4..

2.43грн.