Шаговый двигатель совместно с бесколлекторным мотором

Тема в разделе "Моторы, сервоприводы, робототехника", создана пользователем Sazuki, 3 сен 2018.

  1. Sazuki

    Sazuki Нуб

    Доброго времени суток. Волею случая только начинаю осваивать среду ардуино и многие моменты еще не понимаю , как они работают или почему не работают. Для себя немного уже разобрался принцип написания скетча для работы с Шаговыми,Серво и бесколлекторными двигателями. Но у меня что-то не получается совместить в скетче работу разных типов двигателей и их управление с джостика.
    Часть писал сам, часть собирал из других готовых скетчей.
    Заранее спасибо, прошу указать на мои ошибки, или показать готовый скетч.

    Код (C++):
    #include <Stepper.h>

    float N = 10. ;
    int xValue, yValue;
    const int stepsmotor1 = 2000;
    Stepper myStepper1(stepsmotor1, 4, 5, 6, 7);

    int ENB = 9;
    int in1 = 10;
    int in2 = 11;

    int joypinx = A1;
    int joypiny = A0;
    int joypinf = A2;
    int led = 8;

    void setup()
    {
      pinMode(ENB, OUTPUT);
      pinMode(in1, OUTPUT);
      pinMode(in2, OUTPUT);
      pinMode(joypinx, INPUT);
      pinMode(joypiny, INPUT);
      pinMode(joypinf, INPUT);
      pinMode(led, OUTPUT);
      Serial.begin(9600);


    }

    void loop() {
    joypinx = analogRead(joypinx)>>7;  // shift 7 0.1.2.3.4.5.6.7

      joypiny = analogRead(joypiny)>>7;  // shift 7 0.1.2.3.4.5.6.7
    joypinf = analogRead(joypinf)>>7;  // shift 7 0.1.2.3.4.5.6.7

        Serial.print('X');Serial.print(joypinx);Serial.print(';');  Serial.print('Y');Serial.print(joypiny);Serial.print(';'); Serial.print('F');Serial.print(joypinf);Serial.println(';'); //test

      if(joypinx==0){in1, in2 .step(+1);}                    //step1(false,stepxcor,sp1table);}//speed

      if(joypinx==7){in1,in2 .step(-1);}                    //step1(true ,stepxcor,sp1table);}//speed

      if(joypiny==0){myStepper1.step(+1);}                    //step2(false,stepycor,sp2laser);}//speed

      if(joypiny==7){myStepper1.step(-1);}                    //step2(true ,stepycor,sp1laser);}//speed   !!! sp1laser !!! slow down

      if(joypinf==0) { digitalWrite(led2, LOW); digitalWrite(led3, LOW);} // laser to work

      else        { digitalWrite(led2,HIGH); digitalWrite(led3,HIGH); } // laser to work
    }
     
    Последнее редактирование: 3 сен 2018
  2. Mitrandir

    Mitrandir Гуру

    Это что должно делать?
    Вставьте код через кнопку на тулбаре, читать сложно.
     
  3. Sazuki

    Sazuki Нуб

    Это будет двух осевой штатив.
    А в дальнейшем ,как разберусь с этим, на его базе хочу сделать радиоуправляемую турель для страйкбола.
     
    Последнее редактирование: 3 сен 2018
  4. Mitrandir

    Mitrandir Гуру

    Я сточки зрения синтаксиса интересуюсь... In1 и in2 это целые, а у целого числа нет метода step
     
  5. Sazuki

    Sazuki Нуб

    Хорошо ,это уяснил.
    Но и с другим кодом почему то тоже не работает.
    Если он стоит в коде совместно с Шаговым то есть step.
    Я предполагаю, что не корректно присваиваю каждому из моторов свою ось (x/y).
    Собственно даже когда часть кода брал для шагового двигателя , а другую часть от бесколлекторного.
    Итог один, не работает.

    Код (C++):
    {
    xValue = xValue + ( (map(analogRead(xPin), 0, 1024, 0, 510) -xValue)*2)/(N+1) ;
    yValue = yValue + ( (map(analogRead(yPin), 0, 1024, 0, 510) -yValue)*2)/(N+1) ;

    Serial.print(xValue);
    Serial.print("\t");
    Serial.print(yValue);
    Serial.println("\t");
    if(xValue>255)
    {
    analogWrite(ENA, xValue-255);
    digitalWrite(in1, HIGH);
    digitalWrite(in2, LOW);
    }
    else
    {
    analogWrite(ENA, 255-xValue); //
    digitalWrite(in1, LOW);
    digitalWrite(in2, HIGH);


    }
     
  6. vvr

    vvr Инженерище


    а по отдельности научились управлять обеими моторами ?
     
  7. Sazuki

    Sazuki Нуб

    Да по отдельности все работает без проблем. Со всеми типами двигателей научился работать не важно с каким количеством моторов, а вот чтобы разные типы двигателей одновременно в одном скетче, вот возникли проблемы.
     
  8. vvr

    vvr Инженерище

    везёт вам.....
    у меня с любым количеством не получается....
     
  9. Sazuki

    Sazuki Нуб

    Доброго времени суток, все вожусь со скетчем одновременной работы бесколлекторного мотора с шаговым двигателем. В представленном скетче оба мотора двигаются , но почему-то только по одно оси.
    Помогите исправить сей момент.

    Код (C++):
    #include <Stepper.h>

    int xValue;
    float N = 10. ;

    const int stepsmotor1 = 2000;
    Stepper myStepper1(stepsmotor1, 4, 5, 6, 7);

    int ENA = 9;
    int in1 = 10;
    int in2 = 11;

    int joypinx = A1;
    int joypiny = A0;
    int joypinf = A2;
    int led = 8;

    void setup()
    {
      pinMode(ENA, OUTPUT);
      pinMode(in1, OUTPUT);
      pinMode(in2, OUTPUT);
      pinMode(joypinx, INPUT);
      pinMode(joypiny, INPUT);
      pinMode(joypinf, INPUT_PULLUP);
      pinMode(led, OUTPUT);
      Serial.begin(9600);
      myStepper1.setSpeed(80);
    }

    void loop() {
    if (digitalRead(joypinf) == HIGH) {

    digitalWrite(led, HIGH);

    }

    else {

    digitalWrite(led, LOW);

    xValue = xValue + ( (map(analogRead(joypinx), 0, 1024, 0, 510) -xValue)*2)/(N+1) ;
    Serial.print(xValue);
    Serial.print("\t");

    if(xValue>255)
    {
    analogWrite(ENA, xValue-255);
    digitalWrite(in1, HIGH);
    digitalWrite(in2, LOW);
    }
    else
    {
    analogWrite(ENA, 255-xValue);
    digitalWrite(in1, LOW);
    digitalWrite(in2, HIGH);
    }
    //////////////////////////////////////////////////////////////////////////
    Serial.print('Y');Serial.print(joypiny);Serial.print(';');
    joypiny = analogRead(joypiny)>>7;
    if(joypiny==0){myStepper1.step(+1);}                  
    if(joypiny==7){myStepper1.step(-1);}                  
    }
    }
     
  10. ANV

    ANV Гуру

    Ветку не читал, но осуждаю

    Это все делается без ардуино на стандартном пульте для р/у моделей, приемнике и сервах
     
    parovoZZ нравится это.