Я проектирую гидро-пневмо-автоматику. Электроника не мой стиль. Задача в том чтобы управлять неким высокоскоростным вентилем с помощью шагового мотора. Мотор - 42STH60-1206A. Для просоты и удобства подключен к ардуине через драйвер шагового двигателя (Troyka-модуль). Простенький код с задержкой высокого и низкого сигнала в 2000 микросекунд. На выходе вращение вала около 1 об/сек. С меньшей задержкой мотор перестает реагировать. Только гудит. Блок питания мотора 3 А. Как разогнать его до заявленных 2500 шагов в секунду? P.S. Нужен именно шаговый мотор, ибо обратной связи нет и не будет.
1. Разгон повышением напряжения 2. Вы ошибаетесь, думая что с шаговым двигателем не нужна обратная связь. Под нагрузкой он вполне может пропускать шаги.
В данном случае, будет обновляться нулевая позиция. Ваша правда, возможно придется создавать обратную связь, а не хочется. Повышением напряжения - что это значит? Момент конечно подрастет, но скорость. И почему эта зараза не хочет есть например задержку в 1000 или 500?
Подрастет момент, двигатель быстрее повернется. Не всматриваясь в характеристики двигателя, похоже получается так, что он еще не успел провернуться на шаг, а Вы ему уже следующий командуете. Вот он и гудит.
Код (Text): // Troyka-Stepper подключён к следующим пинам: const byte stepPin = 7; const byte directionPin = 8; const byte enablePin = 11; void setup() { // Настраиваем нужные контакты на выход pinMode(stepPin, OUTPUT); pinMode(directionPin, OUTPUT); pinMode(enablePin, OUTPUT); } void loop() { // Подаём питание на двигатель digitalWrite(enablePin, HIGH); // Задаём направление вращения по часовой стрелке digitalWrite(directionPin, HIGH); // Делаем 200 шагов for (int i = 0; i < 200; ++i) { // Делаем шаг digitalWrite(stepPin, HIGH); delayMicroseconds(2000); digitalWrite(stepPin, LOW); delayMicroseconds(2000); } // Переходим в режим экономичного удержания двигателя... analogWrite(enablePin, 100); //... на три секунды delay(3000); // Меняем направление вращения digitalWrite(directionPin, LOW); // Включаем двигатель на полную мощность digitalWrite(enablePin, HIGH); // Делаем 200 шагов for (int i = 0; i < 200; ++i) { digitalWrite(stepPin, HIGH); delayMicroseconds(2000); digitalWrite(stepPin, LOW); delayMicroseconds(2000); } // Ничего не делаем без отключения двигателя delay(3000); // Отключаем двигатель digitalWrite(enablePin, LOW); // Ничего не делаем до перезагрузки while (true) { ; } }