Страница 5 из 10 ПерваяПервая 12345678910 ПоследняяПоследняя
Показано с 41 по 50 из 93
  1. #41
    Пользователь
    Регистрация
    21.03.2010
    Сообщений
    64
    Вес репутации
    185

    По умолчанию Re: Управление шаговым двигателем

    Все, спасибо всем. наконецто я добился чего хотел выкладываю скеч, может кому пригодиться
    PHP код:
    #include <Stepper.h>

    #define STEPS 360 

    Stepper stepper(STEPS2345);
    int pol 5
    int x ;
    void setup() 

      
    stepper.setSpeed(30);
    //  Serial.begin(9600);
    stepper.step(-1000); // место этого возможно будет концевик, что бы не делать лишнии шаги
     


    void loop() 

      
    digitalWrite(20);
      
    digitalWrite(30);
      
    digitalWrite(40);
      
    digitalWrite(50);
     
    // int sensorValue = analogRead(5);
     // Serial.println(sensorValue, DEC);
      //******************
      //******************
      // ПОЛОЖЕНИЕ 1
      //******************
      //******************
      
    if ((261 <= analogRead(pol) ) && ( analogRead(pol) <=265) && (!= 1) ) 
      { 
        if (
    == 9)  
        { 
          
    stepper.step(-1000); 
          
    x=1;  
        }
        if (
    == 8)  
        { 
          
    stepper.step(-875); 
          
    x=1;  
        }
        if (
    == 7)  
        { 
          
    stepper.step(-750); 
          
    x=1;  
        }
        if (
    == 6)  
        { 
          
    stepper.step(-625); 
          
    x=1;  
        }
        if (
    == 5)  
        { 
          
    stepper.step(-500); 
          
    x=1;  
        }
        if (
    == 4)  
        { 
          
    stepper.step(-375); 
          
    x=1;  
        }
        if (
    == 3)  
        { 
          
    stepper.step(-250); 
          
    x=1;  
        }
        if (
    == 2)  
        { 
          
    stepper.step(-125); 
          
    x=1;  
        }
      }
      
    //******************
      //******************
      // ПОЛОЖЕНИЕ 2
      //******************
      //******************

      
    if ((284 <= analogRead(pol) ) && ( analogRead(pol) <=288) && (!= 2) ) 
      { 
           if (
    == 0)  
        { 
          
    stepper.step(125); 
          
    x=2;  
        }

        if (
    == 1)  
        { 
          
    stepper.step(125); 
          
    x=2;  
        }
        if (
    == 9)  
        { 
          
    stepper.step(-875); 
          
    x=2;  
        }
        if (
    == 8)  
        { 
          
    stepper.step(-750); 
          
    x=2;  
        }
        if (
    == 7)  
        { 
          
    stepper.step(-625); 
          
    x=2;  
        }
        if (
    == 6)  
        { 
          
    stepper.step(-500); 
          
    x=2;  
        }
        if (
    == 5)  
        { 
          
    stepper.step(-375); 
          
    x=2;  
        }
        if (
    == 4)  
        { 
          
    stepper.step(-250); 
          
    x=2;  
        }
        if (
    == 3)  
        { 
          
    stepper.step(-125); 
          
    x=2;  
        }

      }
    //******************
      //******************
      // ПОЛОЖЕНИЕ 3
      //******************
      //******************


      
    if ((313 <= analogRead(pol) ) && ( analogRead(pol) <=316) && (!= 3) ) 
      { 
           if (
    == 0)  
        { 
          
    stepper.step250  ); 
          
    x=3  ;  
        }

          if (
    == 1)  
        { 
          
    stepper.step(250); 
          
    x=3;  
        }
        if (
    == 2)  
        { 
          
    stepper.step(125); 
          
    x=3;  
        }
        if (
    == 9)  
        { 
          
    stepper.step(-750); 
          
    x=3;  
        }
        if (
    == 8)  
        { 
          
    stepper.step(-625); 
          
    x=3;  
        }
        if (
    == 7)  
        { 
          
    stepper.step(-500); 
          
    x=3;  
        }
        if (
    == 6)  
        { 
          
    stepper.step(-375); 
          
    x=3;  
        }
        if (
    == 5)  
        { 
          
    stepper.step(-250); 
          
    x=3;  
        }
        if (
    == 4)  
        { 
          
    stepper.step(-125); 
          
    x=3;  
        }


      }
    //******************
      //******************
      // ПОЛОЖЕНИЕ 4
      //******************
      //******************

      
    if ((348 <= analogRead(pol) ) && ( analogRead(pol) <=351) && (!= 4) ) 
      { 
        
          if (
    == 0)  
        { 
          
    stepper.step(  375 ); 
          
    x;  
        }


           if (
    == 1)  
        { 
          
    stepper.step(375); 
          
    x=4;  
        }
        if (
    == 2)  
        { 
          
    stepper.step(250); 
          
    x=4;  
        }
        if (
    == 3)  
        { 
          
    stepper.step(125); 
          
    x=4;  
        }
        if (
    == 9)  
        { 
          
    stepper.step(-625); 
          
    x=4;  
        }
        if (
    == 8)  
        { 
          
    stepper.step(-500); 
          
    x=4;  
        }
        if (
    == 7)  
        { 
          
    stepper.step(-375); 
          
    x=4;  
        }
        if (
    == 6)  
        { 
          
    stepper.step(-250); 
          
    x=4;  
        }
        if (
    == 5)  
        { 
          
    stepper.step(-125); 
          
    x=4;  
        }



      }
    //******************
      //******************
      // ПОЛОЖЕНИЕ 5
      //******************
      //******************

      
    if ((389 <= analogRead(pol) ) && ( analogRead(pol) <=395) && (!= 5) ) 
      { 
          if (
    == 0)  
        { 
          
    stepper.step500  ); 
          
    x=5  ;  
        }

       if (
    == 1)  
        { 
          
    stepper.step(500); 
          
    x=5;  
        }
        if (
    == 2)  
        { 
          
    stepper.step(375); 
          
    x=5;  
        }
        if (
    == 3)  
        { 
          
    stepper.step(250); 
          
    x=5;  
        }
        if (
    == 4)  
        { 
          
    stepper.step(125); 
          
    x=5;  
        }
        if (
    == 9)  
        { 
          
    stepper.step(-500); 
          
    x=5;  
        }
        if (
    == 8)  
        { 
          
    stepper.step(-375); 
          
    x=5;  
        }
        if (
    == 7)  
        { 
          
    stepper.step(-250); 
          
    x=5;  
        }
        if (
    == 6)  
        { 
          
    stepper.step(-125); 
          
    x=5;  
        }


      }
    //******************
      //******************
      // ПОЛОЖЕНИЕ 6
      //******************
      //******************

      
    if ((445 <= analogRead(pol) ) && ( analogRead(pol) <=451) && (!= 6) ) 
      { 
        
          if (
    == 0)  
        { 
          
    stepper.step625  ); 
          
    x=  6;  
        }


         if (
    == 1)  
        { 
          
    stepper.step(625); 
          
    x=6;  
        }
        if (
    == 2)  
        { 
          
    stepper.step(500); 
          
    x=6;  
        }
        if (
    == 3)  
        { 
          
    stepper.step(375); 
          
    x=6;  
        }
        if (
    == 4)  
        { 
          
    stepper.step(250); 
          
    x=6;  
        }
        if (
    == 5)  
        { 
          
    stepper.step(125); 
          
    x=6;  
        }
        if (
    == 9)  
        { 
          
    stepper.step(-375); 
          
    x=6;  
        }
        if (
    == 8)  
        { 
          
    stepper.step(-250); 
          
    x=6;  
        }
        if (
    == 7)  
        { 
          
    stepper.step(-125); 
          
    x=6;  
        }

      }
    //******************
      //******************
      // ПОЛОЖЕНИЕ 7
      //******************
      //******************

      
    if ((518 <= analogRead(pol) ) && ( analogRead(pol) <=525) && (!= 7) ) 
      { 
          if (
    == 0)  
        { 
          
    stepper.step750  ); 
          
    x;  
        }

        if (
    == 1)  
        { 
          
    stepper.step(750); 
          
    x=7;  
        }
        if (
    == 2)  
        { 
          
    stepper.step(625); 
          
    x=7;  
        }
        if (
    == 3)  
        { 
          
    stepper.step(500); 
          
    x=7;  
        }
        if (
    == 4)  
        { 
          
    stepper.step(375); 
          
    x=7;  
        }
        if (
    == 5)  
        { 
          
    stepper.step(250); 
          
    x=7;  
        }
        if (
    == 6)  
        { 
          
    stepper.step(125); 
          
    x=7;  
        }
        if (
    == 9)  
        { 
          
    stepper.step(-250); 
          
    x=7;  
        }
        if (
    == 8)  
        { 
          
    stepper.step(-125); 
          
    x=7;  
        } 


      }
    //******************
      //******************
      // ПОЛОЖЕНИЕ 8
      //******************
      //******************

      
    if ((620 <= analogRead(pol) ) && ( analogRead(pol) <=630) && (!= 8) ) 
      {  
          if (
    == 0)  
        { 
          
    stepper.step875  ); 
          
    x;  
        }

        if (
    == 1)  
        { 
          
    stepper.step(875); 
          
    x=8;  
        }
        if (
    == 2)  
        { 
          
    stepper.step(750); 
          
    x=8;  
        }
        if (
    == 3)  
        { 
          
    stepper.step(625); 
          
    x=8;  
        }
        if (
    == 4)  
        { 
          
    stepper.step(500); 
          
    x=8;  
        }
        if (
    == 5)  
        { 
          
    stepper.step(375); 
          
    x=8;  
        }
        if (
    == 6)  
        { 
          
    stepper.step(250); 
          
    x=8;  
        }
        if (
    == 7)  
        { 
          
    stepper.step(125); 
          
    x=8;  
        }
        if (
    == 9)  
        { 
          
    stepper.step(-125); 
          
    x=8;  
        }
      }
    //******************
      //******************
      // ПОЛОЖЕНИЕ 9
      //******************
      //******************

      
    if ((770 <= analogRead(pol) ) && ( analogRead(pol) <=780) && (!= 9) ) 
      { 
        
         if (
    == 0)  
        { 
          
    stepper.step(1000); 
          
    x=9;  }
           if (
    == 1)  
        { 
          
    stepper.step(1000); 
          
    x=9;  
        }
        if (
    == 2)  
        { 
          
    stepper.step(875); 
          
    x=9;  
        }
        if (
    == 3)  
        { 
          
    stepper.step(750); 
          
    x=9;  
        }
        if (
    == 4)  
        { 
          
    stepper.step(625); 
          
    x=9;  
        }
        if (
    == 5)  
        { 
          
    stepper.step(500); 
          
    x=9;  
        }
        if (
    == 6)  
        { 
          
    stepper.step(375); 
          
    x=9;  
        }
        if (
    == 7)  
        { 
          
    stepper.step(250); 
          
    x=9;  
        }
        if (
    == 8)  
        { 
          
    stepper.step(125); 
          
    x=9;  
        }

      }


  2. #42
    Новичок
    Регистрация
    13.01.2012
    Возраст
    33
    Сообщений
    15
    Вес репутации
    154

    По умолчанию Re: Управление шаговым двигателем

    Всем привет!
    Некоторое время назад приобрел себе эту чудо железку, ардуино.
    Разумеется поморгал диодами, по нажимал на кнопки и тп. И захотел я повелевать шаговым двигателем! Купил драйвер l293d, шаговый мотор достал из фары ауди, вот такой (PDF). Выяснил, что в моторе на один оборот 24 шага, и 13 оборотов от края до края. Методом тыка написал скейтч, добавил в него стабилизацию кнопок, тк использовал обычные тактовые и они косячили. В итоге с помощью двух кнопок могу вертеть на 24 шага в одну сторону, или столько же в другую. Но хочется сделать это немного умнее, что бы нельзя было крутить мотор когда он упрется в крайнее положение, то есть надо как то считать пройденные шаги. Также на две не задействованные кнопки хочу повесить вращение в крайние положения, но что бы без лишних шагов.
    Честно сказать не думал, что мне так тяжко дастся программирование, не могу реализовать свои мысли в коде
    Поэтому прошу помощи у Вас.
    Код:
    #include <Stepper.h>
    
    #define motorSteps 24
    #define motorPin1 8
    #define motorPin2 9
    #define motorPin3 10
    #define motorPin4 11
    
    int switchPin1 = 2;
    int switchPin2 = 3;
    int switchPin3 = 4;
    int switchPin4 = 5;
    boolean lastButton1 = LOW;
    boolean currentButton1 = LOW;
    boolean lastButton2 = LOW;
    boolean currentButton2 = LOW;
    
    Stepper myStepper(motorSteps, motorPin1,motorPin2,motorPin3,motorPin4); 
    
    void setup() 
    {
      pinMode(switchPin1, INPUT);
      pinMode(switchPin2, INPUT);
      pinMode(switchPin3, INPUT);
      pinMode(switchPin3, INPUT);
      myStepper.setSpeed(200);
    }
    
    boolean debounce1(boolean last)
    {
      boolean current1 = digitalRead(switchPin1);
      if (last != current1)
      {
        delay(5);
        current1 = digitalRead(switchPin1);
      }
      return current1;
     }
     
     boolean debounce2(boolean last)
    {
      boolean current2 = digitalRead(switchPin2);
      if (last != current2)
      {
        delay(5);
        current2 = digitalRead(switchPin2);
      }
      return current2;
     }
    
    void loop() 
    {
          currentButton1 = debounce1(lastButton1);
          if (lastButton1 == LOW && currentButton1 == HIGH)
        {
          myStepper.step(-24);
        }
          lastButton1 = currentButton1;
      
          currentButton2 = debounce2(lastButton2);
          if (lastButton2 == LOW && currentButton2 == HIGH)
        {
          myStepper.step(24);
        }
          lastButton2 = currentButton2;
    }
    l293d сильно греется при подключении ШД, если его отключить от микросхемы нагрев пропадает, так и должно быть? Питание для мотора берется с БП от телефона 5в. Мотор при работе тоже довольно сильно греется, несмотря на 5в при положенных ему 12в.

  3. #43
    Администратор Аватар для Chip
    Регистрация
    08.06.2007
    Возраст
    54
    Сообщений
    13,376
    Вес репутации
    10

    По умолчанию Re: Управление шаговым двигателем

    На какой ток рассчитан ШД?

  4. #44
    Новичок
    Регистрация
    13.01.2012
    Возраст
    33
    Сообщений
    15
    Вес репутации
    154

    По умолчанию Re: Управление шаговым двигателем

    Цитата Сообщение от Chip Посмотреть сообщение
    На какой ток рассчитан ШД?
    Из даташита: Drive Current: 450 [mA] MAX.

  5. #45
    Администратор Аватар для Chip
    Регистрация
    08.06.2007
    Возраст
    54
    Сообщений
    13,376
    Вес репутации
    10

    По умолчанию Re: Управление шаговым двигателем

    Греться при таком токе будет .

  6. #46
    Новичок
    Регистрация
    13.01.2012
    Возраст
    33
    Сообщений
    15
    Вес репутации
    154

    По умолчанию Re: Управление шаговым двигателем

    Цитата Сообщение от Chip Посмотреть сообщение
    Греться при таком токе будет .
    Просто греется даже когда двигатель не работает.
    А по поводу подсчета шагов не подскажите? Как это реализовать?

  7. #47
    Администратор Аватар для Chip
    Регистрация
    08.06.2007
    Возраст
    54
    Сообщений
    13,376
    Вес репутации
    10

    По умолчанию Re: Управление шаговым двигателем

    Для умной реализации есть варианты
    1-использовать концевики
    2-постоянно сохранять свое положение

    В крайних положениях есть концевики?

  8. #48
    Новичок
    Регистрация
    13.01.2012
    Возраст
    33
    Сообщений
    15
    Вес репутации
    154

    По умолчанию Re: Управление шаговым двигателем

    Цитата Сообщение от Chip Посмотреть сообщение
    Для умной реализации есть варианты
    1-использовать концевики
    2-постоянно сохранять свое положение

    В крайних положениях есть концевики?
    Нет. Концевиков нету. Но я думаю, что можно при каждой активации двигателя считать сколько и куда он сделал шагов, и что бы нельзя было уйти меньше 0 и 24*13(полностью выкрученный шток). Так реально?

    Что значит сохранять положение?

  9. #49
    Администратор Аватар для Chip
    Регистрация
    08.06.2007
    Возраст
    54
    Сообщений
    13,376
    Вес репутации
    10

    По умолчанию Re: Управление шаговым двигателем

    можно, но только до первого выключения, а потом сохранять его положение в EEPROM

  10. #50
    Новичок
    Регистрация
    13.01.2012
    Возраст
    33
    Сообщений
    15
    Вес репутации
    154

    По умолчанию Re: Управление шаговым двигателем

    Про что хотя бы гуглить?

Страница 5 из 10 ПерваяПервая 12345678910 ПоследняяПоследняя

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •