Как ускорить шаговый двигатель?
У меня есть шаговый двигатель 24BYJ48, и моя главная проблема в том, что я не могу заставить его вращаться быстро. Я понял, что для достижения высокой скорости я должен начать с низкой скорости и осторожно разгонять двигатель до более высоких скоростей.
Я не совсем уверен, как это ускорение должно быть сделано. Моя идея заключается в том, чтобы выполнять последовательности управления с изначально большой задержкой, а затем уменьшать задержку между каждым изменением последовательности для проводов двигателя.
Ниже приведен код, который я написал. Когда я его запускаю, двигатель на некоторое время ускоряется, но затем внезапно останавливается и издает пронзительный звук.
@, 👍0
Обсуждение2 ответа
Основная техника та, которую вы пытались запрограммировать. Время между импульсами шагового двигателя сокращается, чтобы вызвать ускорение, и удлиняется, чтобы замедлить. Реальное решение обычно использует профиль ускорения типа «S»-кривой, который начинается с медленного подъема до скорости ускорения, а затем, по мере приближения к целевой скорости вращения, замедляет скорость ускорения.
В вашем случае вы, возможно, достигли точки, когда слишком увеличили скорость ускорения, и двигатель не может на нее отреагировать.
@user2157416 - Я не могу ответить на ваш вопрос за вас. Я не знаю характеристик вашего двигателя и не могу разобрать ваш код, чтобы увидеть, где может быть какая-либо уязвимость. Насколько я знаю, может быть, тот факт, что вы устанавливаете четыре выходных сигнала привода по одному за раз, может быть проблемой, у вас может быть совершенно неподходящий блок питания или даже схема шагового драйвера, которая не подходит для этой работы., @Michael Karas
@auoa - верхний и нижний драйверы не контролируются программным обеспечением по отдельности, поэтому программное обеспечение не может ни вызывать, ни предотвращать короткие замыкания. Мертвое время с точки зрения того, что контролируется, будет просто временем, когда нет *приложенной* разницы напряжения на катушке *от драйверов*, однако ток все еще может протекать через улавливающие диоды из-за индуктивного распада., @Chris Stratton
Здесь происходит несколько вещей...
Если нагрузка чисто инерционная и малая (~ равна инерции ротора), ускорение обычно занимает всего несколько шагов. Не нужно его затягивать. Попробуйте несколько разных задержек после первого шага.
Если у вас есть моментная нагрузка (вы что-то толкаете), то в какой-то момент, во время ускорения, токи в обмотке будут слишком малы, чтобы создать требуемый момент. По мере увеличения скорости токи будут затухать из-за противо-ЭДС двигателя и индуктивности (которая весьма существенна).
Иногда, на определенных скоростях, шаговые двигатели проявляют динамическую нестабильность. То есть они начинают охотиться... быстрее, медленнее, быстрее, медленнее и т. д., пока двигатель не «заглохнет». Сопротивление, которое видит двигатель, глядя назад в цепь привода, является здесь ключевым фактором. На высоких скоростях регулятор тока выходит из-под напряжения, и эффективное сопротивление падает... что приводит к нестабильности.
Итак, экспериментируйте!!!
- Управление скоростью вентилятора с помощью библиотеки Arduino PID
- Как устранить шум от вентилятора 12 В с ШИМ-управлением на низкой скорости
- Вопрос о различных способах подключения платы драйвера двигателя L298N к Arduino и двигателям и их питания.
- Обратное вращение шагового двигателя
- Неиспользуемые контакты в Arduino L293D motor shield?
- Arduino uno + cnc Shield v3 + драйвер шагового двигателя A4988 + AccelStepper?
- Как заставить сервопривод вращаться на угол больше 180°
- Остановка/запуск двигателя постоянного тока с концевыми выключателями и кнопкой включения/выключения
Вы не включили всю свою программу. Попробуйте включить ее как текст, а не как изображение. Stack exchange имеет некоторую подсветку синтаксиса. Кроме того, как сказал auoa, **
delay()
исключает только длинные целые числа.** Вместо этого используйтеdelayMicroseconds()
для большей точности (которая все еще использует целые числа)., @Bort