Как ускорить шаговый двигатель?

У меня есть шаговый двигатель 24BYJ48, и моя главная проблема в том, что я не могу заставить его вращаться быстро. Я понял, что для достижения высокой скорости я должен начать с низкой скорости и осторожно разгонять двигатель до более высоких скоростей.

Я не совсем уверен, как это ускорение должно быть сделано. Моя идея заключается в том, чтобы выполнять последовательности управления с изначально большой задержкой, а затем уменьшать задержку между каждым изменением последовательности для проводов двигателя.

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

, 👍0

Обсуждение

Вы не включили всю свою программу. Попробуйте включить ее как текст, а не как изображение. Stack exchange имеет некоторую подсветку синтаксиса. Кроме того, как сказал auoa, **delay() исключает только длинные целые числа.** Вместо этого используйте delayMicroseconds() для большей точности (которая все еще использует целые числа)., @Bort


2 ответа


2

Основная техника та, которую вы пытались запрограммировать. Время между импульсами шагового двигателя сокращается, чтобы вызвать ускорение, и удлиняется, чтобы замедлить. Реальное решение обычно использует профиль ускорения типа «S»-кривой, который начинается с медленного подъема до скорости ускорения, а затем, по мере приближения к целевой скорости вращения, замедляет скорость ускорения.

В вашем случае вы, возможно, достигли точки, когда слишком увеличили скорость ускорения, и двигатель не может на нее отреагировать.

,

@user2157416 - Я не могу ответить на ваш вопрос за вас. Я не знаю характеристик вашего двигателя и не могу разобрать ваш код, чтобы увидеть, где может быть какая-либо уязвимость. Насколько я знаю, может быть, тот факт, что вы устанавливаете четыре выходных сигнала привода по одному за раз, может быть проблемой, у вас может быть совершенно неподходящий блок питания или даже схема шагового драйвера, которая не подходит для этой работы., @Michael Karas

@auoa - верхний и нижний драйверы не контролируются программным обеспечением по отдельности, поэтому программное обеспечение не может ни вызывать, ни предотвращать короткие замыкания. Мертвое время с точки зрения того, что контролируется, будет просто временем, когда нет *приложенной* разницы напряжения на катушке *от драйверов*, однако ток все еще может протекать через улавливающие диоды из-за индуктивного распада., @Chris Stratton


2

Здесь происходит несколько вещей...

  1. Если нагрузка чисто инерционная и малая (~ равна инерции ротора), ускорение обычно занимает всего несколько шагов. Не нужно его затягивать. Попробуйте несколько разных задержек после первого шага.

  2. Если у вас есть моментная нагрузка (вы что-то толкаете), то в какой-то момент, во время ускорения, токи в обмотке будут слишком малы, чтобы создать требуемый момент. По мере увеличения скорости токи будут затухать из-за противо-ЭДС двигателя и индуктивности (которая весьма существенна).

  3. Иногда, на определенных скоростях, шаговые двигатели проявляют динамическую нестабильность. То есть они начинают охотиться... быстрее, медленнее, быстрее, медленнее и т. д., пока двигатель не «заглохнет». Сопротивление, которое видит двигатель, глядя назад в цепь привода, является здесь ключевым фактором. На высоких скоростях регулятор тока выходит из-под напряжения, и эффективное сопротивление падает... что приводит к нестабильности.

Итак, экспериментируйте!!!

,