Слабый крутящий момент шагового двигателя
- Войдите на сайт для отправки комментариев
Пнд, 26/08/2013 - 14:34
Здравствуйте форумчане! Пишу к вам так как уже 5-ый день мучаюсь с одной проблемой (Обыскал весь интернет так и ничего не нашёл).
Проблема заключается в следующем: имеется биполярный шаговой двигатель без опознавательных знаков (его параметры не известны). Я пытаюсь подключить его к ардуине с помощью драйвера l293d. Подаю на него 9-12В, 0,3А. Он крутится, но его крутящий момент совершенно слаб, если лёгко коснуться вала то с легкостью можно прокрутить его в обратную сторону. Пробовал разные режимы управления но между ними нету никакой разницы (по крутящему моменту).
Использую этот код
//
void unStepMotor(int pin_1, int pin_2,int pin_3,int pin_4,int speedMotor){
digitalWrite(pin_1,HIGH);
digitalWrite(pin_2,LOW);
digitalWrite(pin_3,LOW);
digitalWrite(pin_4,LOW);
delay(speedMotor + 1);
//
digitalWrite(pin_1,HIGH);
digitalWrite(pin_2,HIGH);
digitalWrite(pin_3,LOW);
digitalWrite(pin_4,LOW);
delay(speedMotor + 1);
//
digitalWrite(pin_1,LOW);
digitalWrite(pin_2,HIGH);
digitalWrite(pin_3,LOW);
digitalWrite(pin_4,LOW);
delay(speedMotor + 1);
//
digitalWrite(pin_1,LOW);
digitalWrite(pin_2,HIGH);
digitalWrite(pin_3,HIGH);
digitalWrite(pin_4,LOW);
delay(speedMotor + 1);
//
digitalWrite(pin_1,LOW);
digitalWrite(pin_2,LOW);
digitalWrite(pin_3,HIGH);
digitalWrite(pin_4,LOW);
delay(speedMotor + 1);
//
digitalWrite(pin_1,LOW);
digitalWrite(pin_2,LOW);
digitalWrite(pin_3,HIGH);
digitalWrite(pin_4,HIGH);
delay(speedMotor + 1);
//
digitalWrite(pin_1,LOW);
digitalWrite(pin_2,LOW);
digitalWrite(pin_3,LOW);
digitalWrite(pin_4,HIGH);
delay(speedMotor + 1);
//
digitalWrite(pin_1,HIGH);
digitalWrite(pin_2,LOW);
digitalWrite(pin_3,LOW);
digitalWrite(pin_4,HIGH);
delay(speedMotor + 1);
//
}
void setup(){
pinMode(8,OUTPUT);
pinMode(7,OUTPUT);
pinMode(4,OUTPUT);
pinMode(2,OUTPUT);
}
//
void loop(){
for(int i=0; i<=60; i++) unStepMotor(8,7,4,2,0);
for(int j=0; j<=60; j++) unStepMotor(2,4,7,8,0);
}


Кто может подсказать в чём может быть проблема ?
Во-первых, этот шаговик может питалься и от 24В.
Во-вторых, ваш блок питания может просто не давать нужные токи.
В третих, вы должны знать что момент ШД зависит от скорости вращения, чем ниже скорость тем выше момент.
Так же рекомендую вам воспользоваться библиотекой AccelStepper.
Косвенно "вольтовость" можно оценить по сопротивлениям обмоток.
Во-первых, этот шаговик может питалься и от 24В.
Во-вторых, ваш блок питания может просто не давать нужные токи.
В третих, вы должны знать что момент ШД зависит от скорости вращения, чем ниже скорость тем выше момент.
Так же рекомендую вам воспользоваться библиотекой AccelStepper.
Я увеличивал напряжение до 19В но не каких изменений в силе крутящего момента не наблюдалось. Пробовал подать на него 12В 0,6А спалил драйвер двигателя L293D. При уменьшении скорости вращения шагания он останавливается либо начинает вести себя непредсказуемо (вращается в разные стороны).
Косвенно "вольтовость" можно оценить по сопротивлениям обмоток.
Не можете ли Вы подробнее описать как это делается. Я измерял обмотки и у меня вышло 25,9 Ом ы 27,1 Ом.
Косвенно "вольтовость" можно оценить по сопротивлениям обмоток.
Не можете ли Вы подробнее описать как это делается. Я измерял обмотки и у меня вышло 25,9 Ом ы 27,1 Ом.
Значит не верно управляете двигателем.
При использование скетча приведенного выше шаговик вращался без крутящего момента.
Попробовал использовать следующий скетч
#include <AccelStepper.h> AccelStepper stepper( 2, 3, 4, 5); void setup() { stepper.setMaxSpeed(200); // stepper.setSpeed(50); // stepper.setMinPulseWidth(10); // stepper.moveTo(50); } void loop() { stepper.moveTo(200); stepper.setSpeed(100); stepper.runSpeedToPosition(); }где 2,3 - первая обмотка, 3,4-вторая. К сожелению двигатель не вращяется (
#include <AccelStepper.h> // Define a stepper and the pins it will use AccelStepper stepper; // Defaults to 4 pins on 2, 3, 4, 5 void setup() { stepper.setMaxSpeed(300.0); stepper.setAcceleration(100.0); } void loop() { stepper.runToNewPosition(0); stepper.runToNewPosition(1000); }И попробуйте поменять местами выводы.
Попробуйте поиграться примерами из библиотеки AccelStepper
И попробуйте поменять местами выводы.
Использовал Ваш код и перебрал все возможные 24 комбинации.Но к сожалению двигатель дёргается но не крутится ( В чём может быть проблема ?
Попробуйте поиграться примерами из библиотеки AccelStepper
У меня Arduino Leonardo и к сожелению под неё примеры не компилируются.
void loop(){ for(int i=0; i<=60; i++) unStepMotor(8,7,4,2,0); for(int j=0; j<=60; j++) unStepMotor(2,4,7,8,0); }Кто может подсказать в чём может быть проблема ?
Незаметил что бы вы задавали скорость, Вам не кажется что частота слишком велика, и он не успевает за ней, точнее не синхронно идет?
Немного не понятно в первом скетче у вас обмотки подключены
первая 8-4 вторая 7-2 ?
void loop(){ for(int i=0; i<=60; i++) unStepMotor(8,7,4,2,0); for(int j=0; j<=60; j++) unStepMotor(2,4,7,8,0); }Кто может подсказать в чём может быть проблема ?
Незаметил что бы вы задавали скорость, Вам не кажется что частота слишком велика, и он не успевает за ней, точнее не синхронно идет?
Если я увеличу задержку то шаговик перестаёт вращаться и дёргается со стороны в сторону. Экспериментально нашел что максимальная задержка между шагами может быть 1800 микросекунд.
Немного не понятно в первом скетче у вас обмотки подключены
первая 8-4 вторая 7-2 ?
Да Вы правы.
Будут ли ещё варианты как его можно разкрутить. А то я уже всё перепробывал и ничего не вышло ((
Я увеличивал напряжение до 19В но не каких изменений в силе крутящего момента не наблюдалось. Пробовал подать на него 12В 0,6А спалил драйвер двигателя L293D. При уменьшении скорости вращения шагания он останавливается либо начинает вести себя непредсказуемо (вращается в разные стороны).
Если вы спалили L293D, значит он кушает значительно больший ток. Попробуйте драйвер на L298 и с библиотекой AccekStepper должен работать, если конечно правильно подключить выводы