Постановка задачи проекта
Ставим задачу автоматически таскать двигателем постоянного тока полезный вес линейно вперёд-назад с задержкой между реверсами. Скорость перемещения полезного веса должна вручную регулироваться в диапазоне 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 % прекрасно регулируются переменными резисторами. Их можно прикрутить к панельке, на которой можно нанести шкалы для удобства перенастройки. А для уменьшения габаритов устройства, можно вместо переменных резисторов установить миниатюрные подстроечные.
Проект будет интересен для широких масс робототехников как теоретическая пища к реализации своих актуальных задач.
Понижающий преобразователь напряжения с ограничением по току 8...36В в 1,25...32В 5А
Импульсный преобразователь напряжения постоянного тока с 8 ... 36В в 1,25 ... 32В на основе мик..
95.69грн.
Arduino многомерные массивы
Привет друзья! Это уже второе видео о массивах. В первом я рассказал, что знаю об одномерных массива..
Реле 5В 2А с двумя группами переключающихся контактов
Электромагнитное реле с двумя группами переключающихся контактов. Рабочее напряжение на катушке..
52.13грн.
Модуль реле одноканальный 5В 10А
Одноканальный модуль реле для подключения напрямую к дискретному выходу контроллера. Светодиодная ин..
41.38грн.
Преобразование Char в Integer и обратно
Преобразование целочисленных переменных int в символьные переменные char в Arduino IDE - довольно пр..