Не работает скетч шагового двигателя

ildarsuyunov
Offline
Зарегистрирован: 02.06.2020

для проекта мне нужно сделать управление шагового двигателя с помощью пульта, я сделал всё по схеме, но скетч шаговый двигатель не работает

так выглядет схема проекта. а так код, при загрузке на плату драйвер шагового двигателя ничего не делает,не горит.

#include <IRremote.h>
int RECV_PIN = 5;//The definition of the infrared receiver pin 5
int Pin0 = 8;//definition digital 8 pins as pin to control the IN1 (ULN24L01)
int Pin1 = 9;//definition digital 9 pins as pin to control the IN2 (ULN24L01)
int Pin2 = 10;//definition digital 10 pins as pin to control the IN3 (ULN24L01)
int Pin3 = 11;//definition digital 11 pins as pin to control the IN4 (ULN24L01)

int _step = 512; 
int _speed = 1; 
IRrecv irrecv(RECV_PIN);
decode_results results;
int dir;
void setup()
{
   pinMode(Pin0, OUTPUT);//Set digital 8 port mode, the OUTPUT for the output
   pinMode(Pin1, OUTPUT);//Set digital 9 port mode, the OUTPUT for the output
   pinMode(Pin2, OUTPUT);//Set digital 10 port mode, the OUTPUT for the output
   pinMode(Pin3, OUTPUT);//Set digital 11 port mode, the OUTPUT for the output
   irrecv.enableIRIn(); //Initialization infrared receiver
} 

void loop() 
{
  if (irrecv.decode(&results)) { 
    switch(results.value){
    case 0xF076C13B/*-*/:
                        dir = 1;
                        break;
    case 0xA3C8EDDB/*+*/:
                        dir = 0;
                        break;
    case 0xC101E57B/*0*/: 
                        Speed(15); //Stepper motor speed = 1 slow  (note:speed from 1 to 15)
                        Step(0);   //Stepper motor stop   
                        break;
    case 0x9716BE3F/*1*/:
                        Speed(15);//Stepper motor speed = 15 fast (note:speed from 1 to 15)
                        if(dir==0){
                          Step(512);//Stepper motor forward 512 steps ---- 360 angle  
                        }else{
                          Step(-512);//Stepper motor backward 512 steps ---- 360 angle
                        }                       
                        break;
    case 0x3D9AE3F7/*2*/: 
                        Speed(15);//Stepper motor speed = 15 fast (note:speed from 1 to 15)
                        if(dir==0){
                          Step(1024);//Stepper motor forward 1024 steps ---- 2*360 angle 
                        }else{
                          Step(-1024);//Stepper motor backward 1024 steps ---- 2*360 angle
                        }
                        break;
    case 0x6182021B/*3*/:
                        Speed(15);//Stepper motor speed = 15 fast (note:speed from 1 to 15)
                        if(dir==0){
                          Step(1536);//Stepper motor forward 1536 steps ---- 3*360 angle
                        }else{
                          Step(-1536);//Stepper motor backward 1536 steps ---- 3*360 angle 
                        }
                        break;
    case 0x8C22657B/*4*/:  
                        Speed(15);//Stepper motor speed = 15 fast (note:speed from 1 to 15)
                        if(dir==0){
                          Step(2048);//Stepper motor forward 2048 steps ---- 4*360 angle
                        }else{
                          Step(-2048);//Stepper motor backward 2048 steps ---- 4*360 angle
                        }
                        break;
    case 0x488F3CBB/*5*/: 
                        Speed(15);//Stepper motor speed = 15 fast (note:speed from 1 to 15)
                        if(dir==0){
                          Step(2560);//Stepper motor forward 2560 steps ---- 5*360 angle
                        }else{
                          Step(-2560);//Stepper motor backward 2560 steps ---- 5*360 angle
                        }
                        break;
    case 0x449E79F/*6*/: 
                        Speed(15);//Stepper motor speed = 15 fast (note:speed from 1 to 15)
                        if(dir==0){
                          Step(3072);//Stepper motor forward 3072 steps ---- 6*360 angle 
                        }else{
                          Step(-3072);//Stepper motor backward 3072 steps ---- 6*360 angle
                        }
                        break;
    case 0x32C6FDF7/*7*/:  
                        Speed(15);//Stepper motor speed = 15 fast (note:speed from 1 to 15)
                        if(dir==0){                      
                          Step(3584);//Stepper motor forward 3584 steps ---- 7*360 angle 
                        }else{
                          Step(-3584);//Stepper motor backward 3584 steps ---- 7*360 angle 
                        }
                        break;
    case 0x1BC0157B/*8*/: 
                        Speed(15);//Stepper motor speed = 15 fast (note:speed from 1 to 15)
                        if(dir){
                        Step(4096);//Stepper motor forward 4096 steps ---- 8*360 angle
                        }else{
                        Step(-4096);//Stepper motor backward 4096 steps ---- 8*360 angle
                        }
                        break;
    case 0x3EC3FC1B/*9*/: 
                        Speed(15);//Stepper motor speed = 15 fast (note:speed from 1 to 15)
                        if(dir==0){
                        Step(4608);//Stepper motor forward 4608 steps ---- 9*360 angle  
                        }else{
                        Step(-4608);//Stepper motor backward 4608 steps ---- 9*360 angle 
                        }
                        break;
    default :
             Step(0);   //Stepper motor stop
             break;
    }        
    irrecv.resume(); // Receiving the next value
  }  
}
void Speed(int stepperspeed)//set Stepper speed 
{
    _speed = 15 - stepperspeed;
    if( _speed<1){
     _speed = 1;
    }
    if( _speed>15){
     _speed = 15;
    }
}
void Step(int _step)//Stepper motor rotation
{
  if(_step>=0){  // Stepper motor forward
    for(int i=0;i<_step;i++){   
      setStep(1, 0, 0, 1);
      delay(_speed); 
      setStep(1, 0, 0, 0);
      delay(_speed);
      setStep(1, 1, 0, 0);
      delay(_speed);
      setStep(0, 1, 0, 0);
      delay(_speed);
      setStep(0, 1, 1, 0);
      delay(_speed);
      setStep(0, 0, 1, 0);
      delay(_speed);
      setStep(0, 0, 1, 1);
      delay(_speed); 
      setStep(0, 0, 0, 1);
      delay(_speed);
    }
  }else{ // Stepper motor backward
     for(int i=_step;i<0;i++){  
      setStep(0, 0, 0, 1);
      delay(_speed);
      setStep(0, 0, 1, 1);
      delay(_speed);
      setStep(0, 0, 1, 0);
      delay(_speed);
      setStep(0, 1, 1, 0);
      delay(_speed);
      setStep(0, 1, 0, 0);
      delay(_speed);
      setStep(1, 1, 0, 0);
      delay(_speed);
      setStep(1, 0, 0, 0);
      delay(_speed);
      setStep(1, 0, 0, 1);
      delay(_speed);
    }
   }
}
void setStep(int a, int b, int c, int d)  
{  
    digitalWrite(Pin0, a);     
    digitalWrite(Pin1, b);     
    digitalWrite(Pin2, c);     
    digitalWrite(Pin3, d);     
}

 

ildarsuyunov
Offline
Зарегистрирован: 02.06.2020

не знаю влияет ли case 0x32C6FDF7 на код, ИК приемник,пульт,шаговик все работает

 

ildarsuyunov
Offline
Зарегистрирован: 02.06.2020

вот так выглядет, то что я сделал, по схеме

 

b707
Offline
Зарегистрирован: 26.05.2017

Для проверки двигателя и соединений выкиньте из кода все команды пульта, вставьте в Луп просто например Step(100) и посмотрите, будет ли крутится

ildarsuyunov
Offline
Зарегистрирован: 02.06.2020
void loop() 
{
  Step(100); 
}
написал так, ничего
 
ildarsuyunov
Offline
Зарегистрирован: 02.06.2020

b707 пишет:
Для проверки двигателя и соединений выкиньте из кода все команды пульта, вставьте в Луп просто например Step(100) и посмотрите, будет ли крутится

void loop() 
{
  Step(100); 
}
написал так. также
ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

А что за мотор? Его правда можно от ардуины питать?

ildarsuyunov
Offline
Зарегистрирован: 02.06.2020

 Из базового комплекта ардуино, 28BYJ-48 с драйвером uln2003(если не ошибаюсь)

использую те же компоненты что на схеме, точь в точь

Komandir
Komandir аватар
Offline
Зарегистрирован: 18.08.2018

ildarsuyunov пишет:

...драйвер шагового двигателя ничего не делает,не горит...

А питание на нем есть ? А выбор 5-12 правильно сделан ?

mykaida
mykaida аватар
Offline
Зарегистрирован: 12.07.2018

Может питания не хватае, может драйвер убитый, может соединения нет, может мотор дохлый.

Проверьте тестером или светодиодиками выход на пинах 8, 9, 10, 11. Если все нормально подайте сигнал на драйвер и проверьте выход с драйвера. Проверьте мотор.

ildarsuyunov
Offline
Зарегистрирован: 02.06.2020

Внешнего питания нет, питание через плату ардуино, 5,12 вольт подключены к макетной плате, также 5 вольт подключен к макетной плате, всё как в схеме

mykaida
mykaida аватар
Offline
Зарегистрирован: 12.07.2018

ildarsuyunov пишет:

void loop() 
{
  Step(100); 
}
написал так, ничего
 

А более полно можно? какие интервалы между шагами? если 1 - то совсем мало. Попробуйте 50 или 100.

ildarsuyunov
Offline
Зарегистрирован: 02.06.2020

драйвер,мотор, пины, ик приемник, пульт, всё работает, все проверил, подключал через крон 9 вольт, без результата, как писали выше убрать все case , убрал, но не думаю что правильно написал

Komandir
Komandir аватар
Offline
Зарегистрирован: 18.08.2018

Без мотора огоньки бегают ?

Komandir
Komandir аватар
Offline
Зарегистрирован: 18.08.2018

по умолчанию вижу 1 мс на шаг ...

mykaida
mykaida аватар
Offline
Зарегистрирован: 12.07.2018

Попробуйте эту программу


int Pin0 = 8;//definition digital 8 pins as pin to control the IN1 (ULN24L01)
int Pin1 = 9;//definition digital 9 pins as pin to control the IN2 (ULN24L01)
int Pin2 = 10;//definition digital 10 pins as pin to control the IN3 (ULN24L01)
int Pin3 = 11;//definition digital 11 pins as pin to control the IN4 (ULN24L01)
int _speed=50

i
void setup()
{
   pinMode(Pin0, OUTPUT);//Set digital 8 port mode, the OUTPUT for the output
   pinMode(Pin1, OUTPUT);//Set digital 9 port mode, the OUTPUT for the output
   pinMode(Pin2, OUTPUT);//Set digital 10 port mode, the OUTPUT for the output
   pinMode(Pin3, OUTPUT);//Set digital 11 port mode, the OUTPUT for the output
 
} 

void loop() 
{
 
 // Stepper motor backward
     for(int i=0;i>100;i++){  
      setStep(0, 0, 0, 1);
      delay(_speed);
      setStep(0, 0, 1, 1);
      delay(_speed);
      setStep(0, 0, 1, 0);
      delay(_speed);
      setStep(0, 1, 1, 0);
      delay(_speed);
      setStep(0, 1, 0, 0);
      delay(_speed);
      setStep(1, 1, 0, 0);
      delay(_speed);
      setStep(1, 0, 0, 0);
      delay(_speed);
      setStep(1, 0, 0, 1);
      delay(_speed);
    
   }
}
void setStep(int a, int b, int c, int d)  
{  
    digitalWrite(Pin0, a);     
    digitalWrite(Pin1, b);     
    digitalWrite(Pin2, c);     
    digitalWrite(Pin3, d);     
}

 

ildarsuyunov
Offline
Зарегистрирован: 02.06.2020

удалил весь код и написал такой

  1. const int stepsPerRevolution = 200;
  2.  
  3. Stepper myStepper(stepsPerRevolution, 8,9,10,11); //подключение к пинам 8…11 на Ардуино
  4.  
  5. void setup() {
  6.  
  7. myStepper.setSpeed(60); //установка скорости вращения ротора
  8.  
  9. Serial.begin(9600);
  10.  
  11. }
  12.  
  13. void loop() {
  14.  
  15. //Функция ожидает, пока поступит команда, преобразовывает текст и подает сигнал на двигатель для его вращения на указанное число шагов.
  16.  
  17. Serial.println("Move right"); //по часовой стрелке
  18.  
  19. myStepper.step(stepsPerRevolution);
  20.  
  21. delay(1000);
  22.  
  23. Serial.println("Move left"); //против часовой стрелки
  24.  
  25. myStepper.step(-stepsPerRevolution);
  26.  
  27. delay(1000);
  28.  
  29. }

двигатель работает но слабо

ildarsuyunov
Offline
Зарегистрирован: 02.06.2020

я до этого пробовал через кнопки и все такое, прикол в томя, простые коды без ничего работает хорошо, когда пишу код с пультом,кнопками, ничего

 

ildarsuyunov
Offline
Зарегистрирован: 02.06.2020

не работает(

mykaida
mykaida аватар
Offline
Зарегистрирован: 12.07.2018

ildarsuyunov пишет:

я до этого пробовал через кнопки и все такое, прикол в томя, простые коды без ничего работает хорошо, когда пишу код с пультом,кнопками, ничего

Где программа с кнопками?

NikShel
Offline
Зарегистрирован: 21.01.2018

ildarsuyunov пишет:

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

А Вы коды своего пультика предварительно считывали? В скетче написаны правильные коды?