Слабый крутящий момент шагового двигателя

aspo
Offline
Зарегистрирован: 26.08.2013

Здравствуйте форумчане! Пишу к вам так как уже 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);
}

Кто может подсказать в чём может быть проблема ?

maksim
Offline
Зарегистрирован: 12.02.2012

Во-первых, этот шаговик может питалься и от 24В.
Во-вторых, ваш блок питания может просто не давать нужные токи. 
В третих, вы должны знать что момент ШД зависит от скорости вращения, чем ниже скорость тем выше момент.

Так же рекомендую вам воспользоваться библиотекой AccelStepper.

Andrey_Y_Ostanovsky
Offline
Зарегистрирован: 03.12.2012

Косвенно "вольтовость" можно оценить по сопротивлениям обмоток.

aspo
Offline
Зарегистрирован: 26.08.2013

maksim пишет:

Во-первых, этот шаговик может питалься и от 24В.
Во-вторых, ваш блок питания может просто не давать нужные токи. 
В третих, вы должны знать что момент ШД зависит от скорости вращения, чем ниже скорость тем выше момент.

Так же рекомендую вам воспользоваться библиотекой AccelStepper.

Я увеличивал напряжение до 19В но не каких изменений в силе крутящего момента не наблюдалось. Пробовал подать на него 12В 0,6А спалил драйвер двигателя L293D.  При уменьшении скорости вращения шагания он останавливается либо начинает вести себя непредсказуемо (вращается в разные стороны).

 

aspo
Offline
Зарегистрирован: 26.08.2013

Andrey_Y_Ostanovsky пишет:

Косвенно "вольтовость" можно оценить по сопротивлениям обмоток.

Не можете ли Вы подробнее описать как это делается. Я измерял обмотки и у меня вышло 25,9 Ом ы 27,1 Ом.

maksim
Offline
Зарегистрирован: 12.02.2012

aspo пишет:
При уменьшении скорости вращения шагания он останавливается либо начинает вести себя непредсказуемо (вращается в разные стороны).
Значит не верно управляете двигателем.

maksim
Offline
Зарегистрирован: 12.02.2012

aspo пишет:

Andrey_Y_Ostanovsky пишет:

Косвенно "вольтовость" можно оценить по сопротивлениям обмоток.

Не можете ли Вы подробнее описать как это делается. Я измерял обмотки и у меня вышло 25,9 Ом ы 27,1 Ом.

В среднем у такого двигателя может быть ток обмотки 500 мА, тогда 26 Ом * 0,5 А = 13 В. При таком токе на скорости 20-30 об./мин. при сжатии вала пальцами он должен с трудом останавливаться.

aspo
Offline
Зарегистрирован: 26.08.2013

maksim пишет:

 Значит не верно управляете двигателем.

 

При использование скетча приведенного выше шаговик вращался без крутящего момента.

Попробовал использовать следующий скетч

#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-вторая. К сожелению двигатель не вращяется (

maksim
Offline
Зарегистрирован: 12.02.2012
#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);
}

И попробуйте поменять местами выводы.

vvadim
Offline
Зарегистрирован: 23.05.2012

Попробуйте поиграться примерами из библиотеки AccelStepper 

aspo
Offline
Зарегистрирован: 26.08.2013

maksim пишет:

И попробуйте поменять местами выводы.

Использовал Ваш код и перебрал все возможные 24 комбинации.Но к сожалению двигатель дёргается но не крутится ( В чём может быть проблема ?

aspo
Offline
Зарегистрирован: 26.08.2013

vvadim пишет:

Попробуйте поиграться примерами из библиотеки AccelStepper 

У меня Arduino Leonardo и к сожелению под неё примеры не компилируются.

Snubist
Offline
Зарегистрирован: 18.02.2013

 

aspo пишет:

 

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);
}

Кто может подсказать в чём может быть проблема ?

Незаметил  что бы вы задавали скорость, Вам не кажется что частота слишком велика, и он не успевает за ней, точнее не синхронно идет?

Iona
Offline
Зарегистрирован: 26.08.2013

Немного не понятно в первом скетче у вас обмотки подключены
первая 8-4 вторая 7-2 ?

aspo
Offline
Зарегистрирован: 26.08.2013

Snubist пишет:

 

aspo пишет:

 



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 микросекунд.

aspo
Offline
Зарегистрирован: 26.08.2013

Iona пишет:

Немного не понятно в первом скетче у вас обмотки подключены
первая 8-4 вторая 7-2 ?

Да Вы правы.

aspo
Offline
Зарегистрирован: 26.08.2013

Будут ли ещё варианты как его можно разкрутить. А то я уже всё перепробывал и ничего не вышло ((

vvadim
Offline
Зарегистрирован: 23.05.2012

aspo пишет:

 

Я увеличивал напряжение до 19В но не каких изменений в силе крутящего момента не наблюдалось. Пробовал подать на него 12В 0,6А спалил драйвер двигателя L293D.  При уменьшении скорости вращения шагания он останавливается либо начинает вести себя непредсказуемо (вращается в разные стороны).

 

Если вы спалили L293D, значит он кушает значительно больший ток. Попробуйте драйвер на L298 и с библиотекой AccekStepper должен работать, если конечно правильно подключить выводы