Працюємо з 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 разметка не поддерживается! Используйте обычный текст.
    Плохо           Хорошо
Провод монтажный 22AWG 4pin

Провод монтажный 22AWG 4pin

Провод в изоляцииКоличество в метрах..

34.27грн.

Резистор подстроечный 1; 10 кОм

Резистор подстроечный 1; 10 кОм

Переменный резистор или потенциометр для установки на печатную плату. Сопротивление подстраивается п..

9.95грн.

Цифровой датчик температуры и влажности DHT11 с подтягивающим резистором

Цифровой датчик температуры и влажности DHT11 с подтягивающим резистором

Измерение относительной влажности в пределах 20 ... 90 %Точность измерения влажности ± 5,0 %RHИ..

43.14грн.

Шестерня для зубчатого ремня на 30 зубьев под ось 8 мм

Шестерня для зубчатого ремня на 30 зубьев под ось 8 мм

Используется для передачи и редукции крутящего момента от двигателя до оси 8 ммКоличество зубьев 30 ..

54.93грн.

Модуль часов реального времени DS1302 + батарейка

Модуль часов реального времени DS1302 + батарейка

Модуль часов для любительских контроллеров на основе специализированной микросхемы DS1302Напряж..

34.80грн.