Управление мотором по нажатию кнопки

Уважаемые знатоки! Предлагаю Вашему вниманию два варианта кода.

Здесь двигатель запускается при нажатии кнопки Start и плавно набирает скорость.

При отключении кнопки тут же останавливается.Плавный старт даёт большую скорость.

Скорость и усилие на валу являются удовлетворительными для моих целей.

Но при большем количестве двигателей возникает путаница с enable.

Здесь созданы функции Прямой ход и Реверс.Путаницы с enable не возникает.Но не работает плавный старт.Из за этого двигатель не достигает нужной скорости.

В устройстве будет от 3 до 5 двигателей.Две синхронные пары и отдельный.Синхронные пары имеют Прямой ход и Реверс.Отдельный двигатель имеет только Прямой ход.

Сам я не программист и не могу сообразить что тут нужно.В первом варианте плавный старт работает,во втором нет.А должен.

когда у вас будет куча шаговиков ваши делеи вас просто задолбают — они наложатся на все моторы))))

Управление мотором по нажатию кнопки

В устройстве будет от 3 до 5 двигателей.Две синхронные пары и отдельный.Синхронные пары имеют Прямой ход и Реверс.Отдельный двигатель имеет только Прямой ход.

Используя Ардуино, даже у Онкеля вряд ли получится плавно разгонять и тормозить 5 шаговиков не синхронно.

Плавно разгонять нужно только один.Это связано со средой,которую этот двигатель крутит.Тормозить плавно не нужно.Плавный разгон на синхронных парах тоже не нужен.

Я такую задачу решал бы созданием несколько вычислительных процессов. На каждый ШД свой выч. процесс. Пусть они крутятся по своим программам.

ПС: Вот только без создания выч. процессов я перестал писать программы.

Управление мотором по нажатию кнопки

Плавно разгонять нужно только один.Это связано со средой,которую этот двигатель крутит.Тормозить плавно не нужно.Плавный разгон на синхронных парах тоже не нужен.

Задача сводится к виделению минимально возможного кванта времени и набору пауз между дерганием step для каждого мотора, с помощью этих квантов. Для двух двигателей можно и в loop() все организовать, особенно если нисего больше микроконтроллер не делает. Я как-то делал на таймере.

Используя Ардуино, даже у Онкеля вряд ли получится плавно разгонять и тормозить 5 шаговиков не синхронно.

Не вижу никаких проблем. Хватило бы ног. Тем более в случае ТС — нужно 3 пина на степпер (step, dir, enable), да и просто с H-мостами если (20 ног на 5 шаговиков в уне уже туговато вытащить, но можно как раз 20). Заводим прерывание по таймеру с минимальным временем шага, и в функции обработки этого прерывания дрыгаем ногами.

Используя Ардуино, даже у Онкеля вряд ли получится плавно разгонять и тормозить 5 шаговиков не синхронно.

у вас что там за шаговики и какова же скорость их вращения?))

16мгц, скорость друины, с ноги можно выжать прям в среде друины около 32кгц(если память мне не изменяет), 32кгц /5 = 6кгц на шаговик. берем стандартный шаговик 47 шагов на оборот. 6кгц /47 = 127 об\сек.

отнимем по 10 оборотов на математику( а она там простая, по 3 переменных на шаговик на момент разгона по нескольку операций сложения/умножения/деления)

получим 117, давайте даже 110 возьмем, итого 110 об\сек = 6600 об\мин(гдеб шаговиков таких набрать, чтоб 6к оборотов нормально держали). вы точно уверены что это сложно реализовать? плавный разгон+торможение 5 шаговиков?

и это всё, что написано выше, взято с диким занижением аппаратных возможностей. и это без учета того что с 5 ног можно выжать много больше чем 32кгц сумарно, там выйдет примерно по 30кгц +/- на ногу(порядка 30к об\мин).

Читайте также: Ремонт лодочных моторов тохатсу в ярославле

Друзья мои!Тут проблема не в том,чтобы разогнать двигатель до максимума!Здесь нужна приличная тяга.

Вот эта фигня отлично работает в loop.Достигается скорость 600 — 700 об/мин.,при этом хорошая тяга.Но при передаче в функцию значения dl = 500;, и последующей попытке изменить его до 125 ничего не выходит!Можно всё сделать в loop.но если циклов больше одного то условия енабле начинают противоречить друг другу.

От енабле отказываться не хочется,потому что двигатели греются как утюги.

Внутри функции такой проблемы нет.

когда у вас будет куча шаговиков ваши делеи вас просто задолбают — они наложатся на все моторы))))

А что можно использовать вместо делей?

Управление мотором по нажатию кнопки

Используя Ардуино, даже у Онкеля вряд ли получится плавно разгонять и тормозить 5 шаговиков не синхронно.

Не вижу никаких проблем. Хватило бы ног. Тем более в случае ТС — нужно 3 пина на степпер (step, dir, enable), да и просто с H-мостами если (20 ног на 5 шаговиков в уне уже туговато вытащить, но можно как раз 20). Заводим прерывание по таймеру с минимальным временем шага, и в функции обработки этого прерывания дрыгаем ногами.

Речь шла о плавном разгоне раздельно для 5 моторов. Уточнение, что это не нужно, появилось потом.

Речь шла о плавном разгоне раздельно для 5 моторов. Уточнение, что это не нужно, появилось потом.

я понял, что там синхронно некоторые моторы включены, но тем не менее независимая работа 5 шаговиков на одном мк — задача весьма занудная, но решаемая. У меня 8 диммеров (а там частоты повыше будут) с 8 различными фэйдингами (это термин как раз для скорости изменения) крутятся. 5 шаговиков сам не делал (не было необходимости), но на 2 шаговика (в моем случае 4 ф униполярные) даже в atmega8 программа занимает 30% (менее 3к) флеша, так что число управляемых независимо шаговиков определяется лишь числом имеющихся ног.

Управление мотором по нажатию кнопки

Речь шла о плавном разгоне раздельно для 5 моторов. Уточнение, что это не нужно, появилось потом.

я понял, что там синхронно некоторые моторы включены, но тем не менее независимая работа 5 шаговиков на одном мк — задача весьма занудная, но решаемая. У меня 8 диммеров (а там частоты повыше будут) с 8 различными фэйдингами (это термин как раз для скорости изменения) крутятся. 5 шаговиков сам не делал (не было необходимости), но на 2 шаговика (в моем случае 4 ф униполярные) даже в atmega8 программа занимает 30% (менее 3к) флеша, так что число управляемых независимо шаговиков определяется лишь числом имеющихся ног.

Не могу согласиться, что задача тривиальная, и уж тем более, что она ограничена количеством ног. И прямой связи с диммерами не вижу.

порадовала скорость шаговиков без потери момента у тс))))))))))))))

наверно у него моторы с другой физикой))))))))))))))))

порадовала скорость шаговиков без потери момента у тс))))))))))))))

наверно у него моторы с другой физикой))))))))))))))))

Пока nema 23 на всех.На синхронные пары планирую 34,но их пока нет.Синхронные пары будут двигаться медленно и там наверно не будет проблем с тягой и скоростью.Проблема с одним движком ,на котором я испытываю функции приведенные выше.

Не могу согласиться, что задача тривиальная, и уж тем более, что она ограничена количеством ног. И прямой связи с диммерами не вижу.

Элементарно. Как работает многоканальный диммер? Есть два прерывания, одно — для фэйдинга (плавного изменения яркости), другое- для ШИМ, причем это физически может быть одно и то же прерывание по тому же самому таймеру, ну и в функции обработки прерывания включаются / выключаются пины, управляющие мосфитами или симисторами, и декрементируется / инкрементируется яркость, для всех каналов в одной функции прерывания. А при управлениии шаговиками вместо вкл/выкл пинов делаем перещелкивание пинов, четырех (если прямое управление) или формируем импульст step (если управление через драйвер шд), и также декрементируем / инкрементируем скорости ШД.

Читайте также: Гребной винт для лодочного мотора устройство

пы сы у меня даже физически светодиодный диммер на 8 каналов и драйвер для двух униполярных 4ф шаговиков- одно и то же, только фирмварь разная. Беру 8 канальные LED диммеры в корпусе на дин рейку, перепрошиваю и управляю cnc микрофрезером

Видео:Уроки Arduino #6 - отработка нажатия кнопки при помощи флажковСкачать

Уроки Arduino #6 - отработка нажатия кнопки при помощи флажков

Работа с кнопками

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

  • С фиксацией – кнопка остаётся нажатой после отпускания, без фиксации – отключается обратно.
  • Нормально разомкнутая (Normal Open, NO) – при нажатии замыкает контакты. Нормально замкнутая (Normal Closed, NC) – при нажатии размыкает контакты.
  • Тактовые кнопки – замыкают или размыкают контакт. У обычных тактовых кнопок ноги соединены вдоль через корпус (см. картинку ниже). Переключатели – обычно имеют три контакта, общий COM, нормально открытый NO и нормально закрытый NC. При отпущенной кнопке замкнута цепь COM-NC, при нажатой замыкается COM-NO.

Управление мотором по нажатию кнопки

Видео:Управление двигателем постоянного тока. Схема управления мотором Ардуино проекты.Скачать

Управление двигателем постоянного тока. Схема управления мотором Ардуино проекты.

Подключение и подтяжка

Управление мотором по нажатию кнопки

Из урока про цифровые пины вы помните, что микроконтроллер может считывать напряжение со своей ноги. Соответственно кнопка может подать на пин тот уровень, к которому подключена её вторая нога. В том же уроке мы обсуждали, что не подключенный никуда цифровой пин принимает наводки из воздуха, и считанное с него значение будет практически случайным. То есть подключив к пину 5V (сигнал высокого уровня) через кнопку, мы ничего не добьёмся: при нажатой кнопке на пине будет считываться четкий сигнал высокого уровня, а при отпущенной – случайное значение. Для решения этой проблемы существует такое понятие, как подтяжка (pull) пина. Подтяжка выполняется к земле (pull down) или питанию (pull up) микроконтроллера при помощи резистора. Подтяжка выполняется противоположно принимаемому сигналу, т.е. если нужно ловить высокий сигнал, подтяжка выполняется к земле, если ловить нужно сигнал земли – подтяжка выполняется к питанию. Вот два варианта подключения кнопки, с подтяжкой к VCC и GND соответственно: Как выбирается сопротивление резистора? Тут всё очень просто: при нажатии на кнопку через резистор потечёт ток, так как в любом случае замыкается цепь питание-земля. Чем выше ток, больше потери энергии и нагрев резистора, а это никому не нужно, поэтому сопротивление резистора подтяжки обычно выбирается в диапазоне 5-50 кОм. Если ставить больше – подтяжка может не обеспечить стабильный уровень сигнала на пине, а если ставить меньше – будут больше потери энергии в нагрев резистора: при сопротивлении в 1 ком через него потечёт ток величиной 5 В/1000 Ом = 5 мА, для сравнения плата Ардуино с МК в активном режиме потребляет 20-22 мА. Чаще всего для подтяжки используется резистор на 10 кОм. Как вы помните из урока о цифровых пинах, у МК AVR есть встроенные резисторы для всех GPIO, эти резисторы подключены к питанию (к VCC), то есть буквально дублируют первую схему из этого урока и позволяют не использовать внешний резистор. У микроконтроллеров другой архитектуры бывает подтяжка к GND, или вообще может не быть внутренней подтяжки. При использовании подтяжки к питанию мы получим инвертированный сигнал – функция digitalRead() вернёт 1 при отпущенной кнопке, и 0 при нажатой (при использовании нормально-разомкнутой кнопки). Давайте подключим кнопку на пин D3 (и GND):

Читайте также: Где нельзя плавать с мотором

Видео:Уроки Arduino. Расширенное управление кнопкойСкачать

Уроки Arduino. Расширенное управление кнопкой

Алгоритмы

Отработка нажатия

В большинстве реальных применений работать с текущим состоянием кнопки очень неудобно, например когда действие должно быть выполнено однократно при нажатии на кнопку, т.е. по клику. Чуть усложним конструкцию, добавив один флаг, который будет помнить состояние кнопки. Такая конструкция позволяет отслеживать нажатие и отпускание кнопки и реагировать на них однократно:

Дребезг контактов

Кнопка не идеальна, и контакт замыкается не сразу, какое-то время он “дребезжит”. Прогоняя данный алгоритм, система опрашивает кнопку и условия приблизительно за 6 мкс, то есть кнопка опрашивается 166’666 раз в секунду! Этого достаточно, чтобы получить несколько тысяч ложных срабатываний. Избавиться от дребезга контактов можно как аппаратно, так и программно: аппаратно задача решается при помощи RC цепи, то есть резистора (

100nF). Выглядит это следующим образом:

Программно можно ввести простейший таймер нажатия, основанный на millis() , время гашения дребезга примем 100 миллисекунд. Вот так будет выглядеть код:

Рекомендуется конечно же использовать аппаратный способ, так как он не нагружает ядро лишними расчетами. В 99.99% проектов будет достаточно программного антидребезга, так то смело используйте конструкцию с millis() .

“Импульсное” удержание

В устройствах с управлением кнопкой очень часто бывает нужна возможность изменения значения как однократно кликом по кнопке, так и “автоматически” с тем же шагом – при удержании. Такой вариант реализуется очень просто, добавлением ещё одного условия в наш предыдущий алгоритм, а именно: если кнопка была нажата, но ещё не отпущена, и прошло времени больше, чем задано – условие вернёт true . В примере ниже периодичность “нажатий” при удержании настроена на 500 миллисекунд (2 раза в секунду):

Пользоваться таким кодом напрямую будет неудобно, поэтому можно “обернуть” его в класс (читай урок про классы и урок про написание библиотек).

Простейший класс кнопки

Вот так предыдущий пример можно сделать классом (мы делали это вот в этом уроке), положить его в отдельный файл (button.h) и пользоваться:

Другие возможности кнопки

Кнопка только с виду кажется простым устройством, дающим 0 и 1, но, подключив фантазию и время, можно придумать гораздо больше применений обычной кнопке. В моей библиотеке GyverButton реализовано очень много всяких интересных возможностей по работе с кнопкой, вот список:

  • Работа с нормально замкнутыми и нормально разомкнутыми кнопками
  • Работа с подключением PULL_UP и PULL_DOWN Опрос кнопки с программным антидребезгом контактов (настраиваемое время)
  • Отработка нажатия, удерживания, отпускания, клика по кнопке (+ настройка таймаутов)
  • Отработка одиночного, двойного и тройного нажатия (вынесено отдельно)
  • Отработка любого количества нажатий кнопки (функция возвращает количество нажатий)
  • Функция изменения значения переменной с заданным шагом и заданным интервалом по времени
  • Возможность работы с “виртуальными” кнопками (все возможности библиотеки используются для матричных и резистивных клавиатур)

Подробное описание библиотеки можно почитать в заголовочном файле на странице библиотеки, также там есть много примеров.

Видео:Урок 5. Управление двигателем постоянного тока ESP32 и MicroPythonСкачать

Урок 5.  Управление двигателем постоянного тока ESP32 и MicroPython

Аналоговые клавиатуры

Аналоговые клавиатуры – достаточно глубокая тема, достойная отдельного урока (у меня его пока что нет). Максимально подробный урок-исследование можно посмотреть на сайте Codius.

Видео:Управление асинхронным двигателемСкачать

Управление асинхронным двигателем

Видео



📹 Видео

САМАЯ ПРОСТАЯ СХЕМА Включения / Выключения одной Нефиксируемой кнопкой любой нагрузкиСкачать

САМАЯ ПРОСТАЯ СХЕМА Включения / Выключения одной Нефиксируемой кнопкой любой нагрузки

Управление двигателем постоянного тока, линейным приводом. АрдуиноСкачать

Управление двигателем постоянного тока, линейным приводом. Ардуино

Включение/выключение одной кнопкой! ПРОСТЕЙШАЯ СХЕМА.Скачать

Включение/выключение одной кнопкой! ПРОСТЕЙШАЯ СХЕМА.

Реверс мотора с помощью одного выключателя.Без Н-моста и релеСкачать

Реверс мотора с помощью одного выключателя.Без Н-моста и реле

Уроки Arduino #5 - работа с цифровыми портами и подключение кнопкиСкачать

Уроки Arduino #5 - работа с цифровыми портами и подключение кнопки

Шаговые двигатели, и как ими управлять с помощью микроконтроллераСкачать

Шаговые двигатели, и как ими управлять с помощью микроконтроллера

Привод для жалюзи на базе Arduino uno своими руками. Управление шаговыми моторами с помощью кнопок.Скачать

Привод для жалюзи на базе Arduino uno своими руками. Управление шаговыми моторами с помощью кнопок.

Уроки Ардуино #11 - плавное управление нагрузкой, ШИМ сигналСкачать

Уроки Ардуино #11 - плавное управление нагрузкой, ШИМ сигнал

Как устроена кнопка с регулировкой оборотов в электроинструментеСкачать

Как устроена кнопка с регулировкой оборотов в электроинструменте

Как подключить магнитный пускатель. Схема подключения.Скачать

Как подключить магнитный пускатель. Схема подключения.

Уроки Arduino #8 - управление релеСкачать

Уроки Arduino #8 - управление реле

Уроки Arduino - управление бесколлекторным моторомСкачать

Уроки Arduino - управление бесколлекторным мотором

FLprog - управление 2-мя заслонками по нажатию кнопкиСкачать

FLprog - управление 2-мя заслонками по нажатию кнопки

Самая простая кнопка включения светодиодов , моторов и т.дСкачать

Самая простая кнопка включения светодиодов ,   моторов и т.д

Уроки Arduino - управление сервомашинкойСкачать

Уроки Arduino - управление сервомашинкой
Поделиться или сохранить к себе:
Технарь знаток