Уважаемые знатоки! Предлагаю Вашему вниманию два варианта кода.
Здесь двигатель запускается при нажатии кнопки 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 - отработка нажатия кнопки при помощи флажковСкачать
Работа с кнопками
Кнопка является простейшим устройством, при помощи которого можно управлять ходом программы на микроконтроллере, но физически она выполняет очень простую функцию: замыкает и размыкает контакт. Кнопки бывают нескольких типов:
- С фиксацией – кнопка остаётся нажатой после отпускания, без фиксации – отключается обратно.
- Нормально разомкнутая (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. Расширенное управление кнопкойСкачать
Алгоритмы
Отработка нажатия
В большинстве реальных применений работать с текущим состоянием кнопки очень неудобно, например когда действие должно быть выполнено однократно при нажатии на кнопку, т.е. по клику. Чуть усложним конструкцию, добавив один флаг, который будет помнить состояние кнопки. Такая конструкция позволяет отслеживать нажатие и отпускание кнопки и реагировать на них однократно:
Дребезг контактов
Кнопка не идеальна, и контакт замыкается не сразу, какое-то время он “дребезжит”. Прогоняя данный алгоритм, система опрашивает кнопку и условия приблизительно за 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Скачать
Аналоговые клавиатуры
Аналоговые клавиатуры – достаточно глубокая тема, достойная отдельного урока (у меня его пока что нет). Максимально подробный урок-исследование можно посмотреть на сайте Codius.
Видео:Управление асинхронным двигателемСкачать
Видео
📹 Видео
САМАЯ ПРОСТАЯ СХЕМА Включения / Выключения одной Нефиксируемой кнопкой любой нагрузкиСкачать
Управление двигателем постоянного тока, линейным приводом. АрдуиноСкачать
Включение/выключение одной кнопкой! ПРОСТЕЙШАЯ СХЕМА.Скачать
Реверс мотора с помощью одного выключателя.Без Н-моста и релеСкачать
Уроки Arduino #5 - работа с цифровыми портами и подключение кнопкиСкачать
Шаговые двигатели, и как ими управлять с помощью микроконтроллераСкачать
Привод для жалюзи на базе Arduino uno своими руками. Управление шаговыми моторами с помощью кнопок.Скачать
Уроки Ардуино #11 - плавное управление нагрузкой, ШИМ сигналСкачать
Как устроена кнопка с регулировкой оборотов в электроинструментеСкачать
Как подключить магнитный пускатель. Схема подключения.Скачать
Уроки Arduino #8 - управление релеСкачать
Уроки Arduino - управление бесколлекторным моторомСкачать
FLprog - управление 2-мя заслонками по нажатию кнопкиСкачать
Самая простая кнопка включения светодиодов , моторов и т.дСкачать
Уроки Arduino - управление сервомашинкойСкачать