Працюємо з 09:00 до 20: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 размітка не підтримується! Використовуйте звичайтий текст.
    Погано           Добре
Помпа для відсмоктування припою

Помпа для відсмоктування припою

Інструмент для відбору зайвого припою з друкованої плати.Необхідно попередньо розплавити припой за д..

57.48грн.

Модуль розширення входів-виходів PCF8574A

Модуль розширення входів-виходів PCF8574A

Розширювач портів на основі спеціалізованої мікросхеми PCF8574AКомунікаційний інтерфейс I2CМодуль ро..

61.47грн.

Arduino основи програмування

Arduino основи програмування

Arduino основи програмуванняТут ми навчимося писати елементарну програму, здатну зробити що-небудь ц..

CNC шилд для Arduino NANO

CNC шилд для Arduino NANO

Шилд під Arduino NANO для керування 3D-принтером або CNC-верстатом.На шилді передбачені три ділянки ..

217.85грн.

STM32F103C8T6 ARM STM32

STM32F103C8T6 ARM STM32

Мінімальна плата контролера від світового лідера по виробництву контролерів - фірми STM32.Для заливк..

75.35грн.