Разгон шагового двигателя
Я в данный момент пытаюсь плавно передвигать шаговый двигатель. Проблема с шаговым двигателем заключается в том, что он издает высокий шум во время движения или иногда потрескивает от двигателя.
Поэтому я попробовал увеличить частоту шагового сигнала, что, похоже, немного помогло, но не идеально. Затем я попробовал микрошаг вместо полного шага, что тоже немного помогло, но шум все равно очень отчетливый.
Я использую двигатель PK244-01A И драйвер, к которому он подключен, — этот
Я совсем не уверен, что заданное мной линейное изменение слишком крутое или совершенно неправильное, но вот код, который управляет двигателем.
void stepper_motor::step_pwm()
{
digitalWrite(en_pin,HIGH);
delay(0.005);
digitalWrite(dir_pin,HIGH);
//LOW - Двигаемся к датчику
//ВЫСОКИЙ — отойти от датчика
delay(0.005);
int increment = 0;
int step_count = 0;
while(step_count <= max_step)
{
digitalWrite(step_pin,LOW);
delayMicroseconds(2000);
digitalWrite(step_pin,HIGH);
delayMicroseconds(2000-increment);
step_count++;
if(step_count >= 1)
{
increment++;
step_count = 0;
}
}
}
Что можно сделать, чтобы уменьшить шум двигателя?
@Carlton Banks, 👍0
Обсуждение2 ответа
У меня уже была похожая проблема. На самом деле очень важно правильно разогнать шаговый двигатель. Особенно под нагрузкой, если разогнать слишком круто, можно потерять шаги.
Поскольку вы уже используете среду Arduino, я предлагаю вам использовать библиотеку AccelStepper.
Я позволяю вам точно устанавливать параметры ускорения и максимальной скорости и использую правильно рассчитанный рампу.
Как узнать правильное ускорение? Указано ли это в техническом описании? Есть ли общее правило или что-то в этом роде?, @Carlton Banks
Вам нужно использовать скорректированную задержку как для высокой, так и для низкой части сигнала. Кроме того, что произойдет, если переменная "increment" больше 2000? Ничего хорошего, определенно. Лично я хотел бы иметь возможность задерживать на отрицательное число и отменять некоторые уже сделанные вещи, но я не думаю, что yoz может повернуть время вспять с помощью Arduino.
Вы правы насчет 2000 выше. Я не запускаю код так долго, обычно просто проверяю его в течение 3 секунд и выключаю. так что я предполагаю, что я бы достиг отрицательной задержки. Как мне вычислить эти скорректированные задержки?, @Carlton Banks
«Скорректированная задержка» — это как раз то значение, которое вы уже рассчитали: 2000-приращение, @JRE
- Accelstepper запустить степпер назад
- Как заставить шаговый двигатель вращаться по часовой стрелке и против часовой стрелки
- Управление направлением шагового двигателя с помощью кнопок.
- Использование кнопки для поворота шагового двигателя на 90 градусов.
- Изменение ШИМ на Arduino Mega, контакты 9 и 10 на 20–25 кГц
- Установить низкий уровень мощности или включить контакт драйвера шагового двигателя, чтобы шаговый двигатель не нагревался.
- Шаговый двигатель не работает с платой A4988
- Как запустить шаговый двигатель через последовательную связь
Если вы хотите выяснить, связана ли проблема с вашим изменением скорости или вашей работой, решите, проявляются ли проблемы только во время ускорения или замедления, или они также очевидны, когда двигатель работает на целевой скорости., @Chris Stratton
Ну... Проблема возникает во время нарастания, от начала и выше... как вы можете видеть в моем коде, я не заканчиваю в определенной точке, я просто начинаю с частоты и увеличиваю ее с каждым шагом. оно движется. Постоянно издает звук.. Я не уверен, что мне следует изменить? Оценка? стартовая частота? или что-то совершенно другое?, @Carlton Banks
Ваша рампа не линейна. Период вашего шага определяется переменной
increment
, однако частота увеличения переменнойincrement
зависит от периода шага. Более короткие шаги приводят к более частым приращениям. Я бы использовал аппаратный таймер ATmega для генерации шагового сигнала, прерывание указанного таймера для увеличения количества шагов на каждом шаге и чтобы логика управления скоростью работала параллельно в качестве основной задачи с фиксированной частотой. Более простым вариантом было бы воспользоваться библиотекой, которая сделает все это за вас, например, AccelStepper., @jmsКогда дело доходит до шума, именно с этим превосходно справляются степперы. Вы не сможете *устранить* его, но можете принять меры по его уменьшению: управлять катушками с синусоидальной формой тока (именно это и делает микрошаг), уменьшать ток двигателя, уменьшать ускорение двигателей и закрепите двигатели вибропоглощающим материалом. «Потрескивание» — это то, что происходит из-за неравномерности времени из-за ошибок в вашем коде., @jms