Регулировка RPM шагового двигателя.
- Войдите на сайт для отправки комментариев
Пнд, 27/05/2019 - 12:29
Здравствуйте.
Попросили создать отдельную тему, вот, рад стараться :)
Суть такова, есть шаговый двигатель, драйвер 4988, библиотека StepperDriver, потенциомерт и кнопки.
Задача, нажав на кнопку начать вращать двигателем, на другую остановить а потенциометром, регулировать скорость вращения.
С кнопками разобрался, а вот со скоростью не очень.
int analogPin = 1; // номер порта к которому подключен потенциометр int val = 0; // переменная для хранения считываемого значения #include <Arduino.h> #define STOPPER_PIN 4 #define START_R_PIN 2 #define DIR 8 #define STEP 9 #define SLEEP 13 #define MOTOR_STEPS 200 #define RPM val // Microstepping mode. If you hardwired it to save pins, set to the same value here. #define MICROSTEPS 16 #include "A4988.h" #define MS1 10 #define MS2 11 #define MS3 12 A4988 stepper(MOTOR_STEPS, DIR, STEP, SLEEP, MS1, MS2, MS3); void setup() { Serial.begin(115200); //Конфигурация стартовой кнопки pinMode(START_L_PIN, INPUT_PULLUP); // Конфигурация стоповой кнопки pinMode(STOPPER_PIN, INPUT_PULLUP); } void loop(){ { val = analogRead(analogPin); // считываем значение с АЦП потенциометра Serial.println(val / 4); // выводим полученное значение } // Старт по кнопке if (digitalRead(START_R_PIN) == LOW){ //проверяем состояние кнопки, если нажата выполняем код: delay(500); //ждем половину секунды Serial.println("RUN_R"); //отправляем в порт сообщение stepper.enable(); //активируем степпер stepper.startRotate(50 * 360); //запускаем вращение ; } // Стоп по кнопке if (digitalRead(STOPPER_PIN) == LOW){ //проверяем состояние кнопки, если нажата выполняем код: delay(500); //ждем половину секунды Serial.println("STOPPER REACHED"); //отправляем в порт сообщение stepper.stop(); //останавливаем степпер } }
Вот хочу для RPM брать значение с val.
Подскажите пожалуйста, как правильно это сделать? Или может совсем все по другому нужно сделать?
Железо уже собрано и макет работает, осталось доло за софтом.
Спасибо.
Не видно. где вы в программе пытались менять скорость? - в строчках 13 и 15 вы определили дефайны для скорости и микрошага - но потом их нигде не используете. Кроме того, дефайн в строке 13 неправильный, от того, что вы в дефайне определили замену RPM на va - скорость от значения val зависеть не станет.
lСмотрите библиотеку - там есть метод stepper.begin(), который принимает и устанавливает эти параметры.
почитайте про кнопки, а то у вас както не кошерно кнопки обрабатываются.
http://arduino.ru/forum/programmirovanie/rabota-s-knopkami-v-pomoshch-novichku
.
Дело в том, что я не умею программировать, данный код у меня получился методом копипасты и редактирования примера из библиотеки. Поэтому и прошу помощи в написании программы.
Помогите пожалуйста с реализацией скорости, микрошаг трогать не надо, он как раз оптимальный под мою задачу.
Спасибо.
wowscheg, эта задача решается за полчаса переделкой скетча "Blink без delay". Попробуйте с помощью одной кнопки заставлять светодиод моргать, по другой останавливать процесс, а переменником регулировать интервал.
StepperDriver/examples/NonBlocking/NonBlocking.ino
stepper.begin(RPM, MICROSTEPS);
so see
IDE examples->Stepper->stepper_speedControl
Парни, похоже я сдаюсь. Не выходит каменный цветок.
Пробовал по всякому... Сочинил вот такое:
И почему это не работает, не могу понять. Просто пищит двигатель и не работает.
Был еще один полурабочий вариант, там крутилкой добивался какой-то скорости, но всего положения так три, причем максимальная скорость была когда АЦП было близко к нулю.
Не выходит каменный цветок.
А неча засовывать куда попало.))) Вы из #4 пробовали?
Да, пробовал, шаговик очень сильно шумит, аж страшно.
Да, пробовал, шаговик очень сильно шумит, аж страшно.
та хороший стук он обязательно вылезет )))
А по теме, барышня выше дала ссылку на готовый пример, вы уж попробуйте
/*
* Set target motor RPM (1-200 is a reasonable range)
*/
// read the sensor value:
int sensorValue = analogRead(A0);
if (sensorValue != prevsensorValue) {
prevsensorValue = sensorValue;
// map it to a range from 1 to 200:
int motorSpeed = map(sensorReading, 0, 1023, 1, 200);
stepper.setRPM(motorSpeed);
}
strarbit
Ваш код не компилировался, переделал вот так:
Код заработал, но вот опять грохочет, очнь уж шумная железка выходит. И чем ниже скорость, тем больше шума, соседи буду жаловаться :)
А вот когда в прописать в define RPM 30, ну или любую другую скорость, мотор ведет себя тихо, как и хотелось бы.
В библиотеке есть такая штука:
stepper.begin(RPM, MICROSTEPS);
Так вот, если вместо RPM вписать число, то таким образом можно регулировать обороты, вот только как на этот RPM завести показания с потенциометра?
Попробовал вот такую конструкцию:
Начинает работать потенциометр, но есть одна проблема. При значении АЦП - 1 мотор начинает потихоньку вращатся, но как только поднимаю значение на АЦП, меняется тон писка и мотор останавливается. Ничего не понимаю...
Покажите, как вы модифицировали "blink без delay" под мотор.
Менял значение long interval = 1000
Кнопок не делал, так как изначально понимал, что будет грохотать двигатель.
Попробовал вот такую конструкцию:
Начинает работать потенциометр, но есть одна проблема. При значении АЦП - 1 мотор начинает потихоньку вращатся, но как только поднимаю значение на АЦП, меняется тон писка и мотор останавливается. Ничего не понимаю...
неправильно,
ua6em подскажите пожалуйста как правильно?
Менял значение long interval = 1000
Кнопок не делал, так как изначально понимал, что будет грохотать двигатель.
Сделайте с кнопками и потенц. Затем нужно будет один фокус провернуть и грохота не будет.
так а настраивать жеж сей драйвер надо, где-то даже инструкция была, понадобится авометр
Виктор, настройка тока здесь не при чем, потому как при жестко прописаном RPM мотор крутится хорошо.
По Вашей подсказке перетащил строчку до сетапа, реакция на потенциометр есть, но все как-то не стабильно, дергается и громыхает, может немного проехать и снова грохочет. Добавил делей вот так:
и иногда полсекунды движется хорошо, ровненько и потом опят срывает в грохот.
Вот код целиком:
(R2AJI)
Намоточный станок что ли?
Да нет, просто двигаю железку при помощи ходового винта с гайкой. Для намоточного педалька нужна, правда где ее найти с ревесром? Ну ладно суть не в этом.
Вот рабочий код:
Есть у него правда один недостаток, скрость не регулируется во время движения, но можно подкрутить и еще раз нажать кнопку движения. Работает тихо, ну по крайней мере не гремит, немного пищит, но вполне терпимо.
Значит проблема в потенциометре/АЦП - болтает их. Соответственно - шаг переменный, что вызывает ощущение неравномерности звукового фона от мотора. А если его держать, то, скорее всего и микроудары почувствовать можно. Опять же - на шаговике при определенной скорости можно словить резонанс. Дорогие лидшайны имеют регулировку по фазам переключения (вроде так называется), что позволяет получить близкий к сайленту звук при работе.
Да нет, просто двигаю железку при помощи ходового винта с гайкой. Для намоточного педалька нужна, правда где ее найти с ревесром? Ну ладно суть не в этом.
Вот рабочий код:
Есть у него правда один недостаток, скрость не регулируется во время движения, но можно подкрутить и еще раз нажать кнопку движения. Работает тихо, ну по крайней мере не гремит, немного пищит, но вполне терпимо.
можно попробовать ввести флаги на кнопки
Владимир, вот так попробуй, сам не компилировал на ошибки не проверял )))
Ежели что, поправим )))
PS кстати подписан на твой канал на Ютубе, респект и уважуха, хочу себе кое-что из оборудования как и у тебя
монитором посмотрите, непрыгает ли MotorSpeed. Хороший электролит по питанию часто помогает.
компилируется - осталось проверить работоспособность
Виктор, Ваш код компилируется, но не работает.
Мотор дергается но не крутится, на потенциометр откликается, частота и тональность дергания меняется.
Виктор, Ваш код компилируется, но не работает.
Мотор дергается но не крутится, на потенциометр откликается, частота и тональность дергания меняется.
странно, при однократном нажатии кнопки обязан был работать как и прежде, установить ручку потенциометра в среднее положение и сбросить ардуину ресетом, нажать одну из кнопок...
надо искать детали и собирать макет, по другому чую никак
попробуй
Мотор-то киловаттный, поди?
Мотор-то киловаттный, поди?
Опыт общения с шаговиками ровно нулевой...
PS эксплуатировал следящие электроприводы станков чпу, с шаговиками сталкивался разве, что в кассах, принтерах да дисководах, но только как юзер, они там не ломаются
вот эти костыли попробуй:
можно сделать очень просто - пока мотор двигается - потенциометр не опрашивать
можно сделать очень просто - пока мотор двигается - потенциометр не опрашивать
насколько я понял библиотека написана так, что мотор в движении постоянно, как только пришла команда, Владимир и хочет иметь возможность подстройки скорости
Я уже посоветовал, как быстро и просто сделатьскетч незамысловатого мотания мотором, но он зачем-то непременно хочет библиотеку. Так что придётся ему страдать.
Я уже посоветовал, как быстро и просто сделатьскетч незамысловатого мотания мотором, но он зачем-то непременно хочет библиотеку. Так что придётся ему страдать.
я подозреваю в какое устройство он заливает эти скетчи, опыт общения у него с ним большой, хочет чтобы двигатели шумели не громче )))
Громче - тише... крайне субъективное понятие.
Дешёвые драйверы в реальной конструкции всё равно будут вызывать вибрацию, скрежет и пр. В ютубах достаточно роликов типа "A4988 vs TMC2100", в которых наглядно показывается разница в звуке между агрегатами с простыми и продвинутыми драйверами.
Все симптомы, которые он описывает, указывают на то, что драйвер не может дёрнуть вал. Причин тому множество (и они часто взаимосвязаны): большая скорость, малый выдаваемый на обмотки ток, повышенная нагрузка на валу при микрошаге и пр. и др.
Исключать их надо по-очереди. Я предложил самый понятный и контролируемый способ проверки с программной стороны, однако человеку хочется "через библиотеку". Что ж, это его выбор.
однако человеку хочется "через библиотеку". Что ж, это его выбор.
блин, зачем на драйвере 4988 библиотека? - знай себе STEP дергай - вот и все управление
Я уже посоветовал, как быстро и просто сделатьскетч незамысловатого мотания мотором, но он зачем-то непременно хочет библиотеку. Так что придётся ему страдать.
Он больше по харду ...
Давай, я ему попробую помочь, а ты подскажешь то волшебство )))
однако человеку хочется "через библиотеку". Что ж, это его выбор.
блин, зачем на драйвере 4988 библиотека? - знай себе STEP дергай - вот и все управление
Дак и я о том же. На блинке отладится, потом только вместо светодиода STEP пробивать быстрым HIGH-LOW. Если станок не с нанометровыми допусками - вполне себе тянет. Даже таймеров заводить не требуется.
Дел на полчаса.
Дергал степ, двигатель грохочет, резонирует и вообще всячески ведет себя плохо. Писать регулировку шимом, ну блин, это заново все изобретать, на отладку уйдет много времени, а оно надо? А вот библиотекой, крутит очень хорошо, легкий шелест, ну в зависимости от оборотов меняется его тон.
Железка новорожденная, но двигатель nema17, и я знаю, как он может на подобном драйвере шуметь или не шуметь. Нагрузка мизерная, я пальцами легко прокручиваю ходовой винт, сам шаговик больше сопротивляется.
Изобретать велосипед не стоит, если есть возможность поправить существующий РАБОЧИЙ и ТИХИЙ скетч, что бы регулировка оборотов была онлайном, то есть прямо на ходу, то я не против. Если нужно переписать все заново, то не стоит оно того.
Виктор, я сейчас на работе, твой скетч попробую вечером, после 21:00 по мск.
Владимир, напиши на почту НИК на яндексе
PS если работа мешает хобби ну её эту работу )))
Я, кстати, понял, почему на блинке было "громко" - микрошаг не был установлен. Если на скетче из первопоста фуллстеп врубить, то будет такая же песня.
Виктор, попробовал твой скетч, работает точно так же как и мой, на ходу обороты не регулируются.
Виктор, попробовал твой скетч, работает точно так же как и мой, на ходу обороты не регулируются.
какой именно, тот что с костылём?
попробовать уменьшать переменную i до 9
Да, который из поста #32
Да, который из поста #32
для начало подобрать delay - он у тебя равен 50, уменьшать до тех пор, пока не перестанет запускаться от кнопки, тогда посмотрим, что еще подкорректировать, просто сейчас любое изменение откликнется через 50 миллисекунд умножить на переменную i
суть понятна, на микрошаге надо подать не менее 16 микрошагов чтобы двигатель запустился
Да ладно, не стоит оно того, реально ведь костыли...
Да ладно, не стоит оно того, реально ведь костыли...
обязано работать )))
Да и в плане общего развития, так как с шаговиками дел не имел - хочется разобраться.
Где-то была унка с модулем с такими драйверами, осталось шаговик найти...
На микрошаге надо выйти на скорость инициализации в пределах 100 миллисекунд, тогда регулировка скорости будет отрабатывать практически без задержек, тут главное это время отклика самого двигателя, для твоего интересно оно какое?
3anic Bideo ot meก oH{\iHe ycTaHoBka ckopocT.