Helpp. Помогите справиться с двгателем!

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

?

В чем может быть проблема?

  1. Код

    50,0%
  2. Подключение

    50,0%
  3. Я тупень

    100,0%
Можно выбрать сразу несколько вариантов.
  1. zzzkrestzzz

    zzzkrestzzz Нуб

    Пытаюсь управлять двигателями через резисторы (скоростью). Ничего не получается. При вращении ручки резистора скорость меняют оба мотора. ПОМОГИТЕ НЕРВЫ НА ПРЕДЕЛЕ. Вот код
    Код (C++):
    #include <Stepper.h>

    const int stepsPerRevolution = 64;
    Stepper motor1(stepsPerRevolution, 6, 8, 7, 9);
    Stepper motor2(stepsPerRevolution, 2, 3, 4, 5);

    void setup()
    {
    }

    void loop()
    {
      int sensor1 = analogRead(A0);
      int sensor2 = analogRead(A1);
      int motor1Speed = map(sensor1, 0, 1023, 0, 100);
      int motor2Speed = map(sensor2, 0, 1023, 0, 100);
      motor1.setSpeed(motor1Speed);
      motor2.setSpeed(motor2Speed);
      motor1.step(2);
      motor2.step(2);
    }
     
  2. ostrov

    ostrov Гуру

    Как подключены резисторы?
     
  3. zzzkrestzzz

    zzzkrestzzz Нуб

    Безымянный.jpg
     

    Вложения:

    Последнее редактирование модератором: 14 окт 2017
  4. ostrov

    ostrov Гуру

    Попробуйте перефразировать вопрос. Что вы хотите и что происходит.
     
  5. zzzkrestzzz

    zzzkrestzzz Нуб

    Мне нужно управлять скоростью вращения двигателями, но проблема в том, что при регулировки скорости одного, второй двигатель тоже меняет скорость, вне зависимости какой резистор крутишь
     
  6. rkit

    rkit Гуру

    Это шаговики. У них постоянный градус поворота на шаг. Если вы синхронно подаете им шаги, то они будут синхронно вращаться.
     
    NikitOS нравится это.
  7. zzzkrestzzz

    zzzkrestzzz Нуб

    Что значит синхронно подаю им шаги? Драйвера TB 6560
     
  8. rkit

    rkit Гуру

    То и значит. Буквально. Прочитайте свой код.
     
  9. ostrov

    ostrov Гуру

    Вот за это и не люблю библиотеки. Хрен знает что там внутри происходит. Шаговиками управление вручную писал, чего и всем желаю. На вики амперкином есть пример, правда там ошибка есть, но найти ее даже интересно. )
     
  10. ostrov

    ostrov Гуру

    Из кода ТС, кстати, я не понял как один резистор влияет на оба мотора.
     
  11. rkit

    rkit Гуру

    Он ни на что не влияет. Это шаговики.
     
  12. zzzkrestzzz

    zzzkrestzzz Нуб

    Что сделать, как справиться с этой чертовщиной
     
  13. rkit

    rkit Гуру

    Внимательно разбирайтесь, что такое шаговики, как они работают, и используйте библиотеку accelstepper.
     
  14. ostrov

    ostrov Гуру

    ТС пишет что скорость меняют оба шаговика, то есть как то влияет. Не понятно как в этой библиотеке реализуется setSpeed. Скорость шаговиков регулируется задержкой между шагами. Что делает команда motor1.steep(2); ?
     
  15. rkit

    rkit Гуру

    Два шага с интервалом 1/setSpeed.
    Ок, влияет. Но для любого достаточно большого Δt, Δθ/Δt будет равной для обоих шаговиков. Потому что шаги синхронные.
     
    Последнее редактирование: 14 окт 2017
  16. DIYMan

    DIYMan Guest

    Вы уверены, что с резисторов поступают РАЗНЫЕ значения? Выведите в Serial, что получается после analogRead - это как минимум, чтобы посмотреть.

    Глянул исходники библиотеки - там для скорости вычисляется задержка шага, сама функция step - блокирующая, и не отпустит, пока мотор не прошагает нужное кол-во шагов.
     
  17. ostrov

    ostrov Гуру

    То есть если мотора два, то сначала крутит один, потом второй?
     
  18. DIYMan

    DIYMan Guest

    Именно так, пруф:
    Код (C++):
    void Stepper::step(int steps_to_move)
    {
      int steps_left = abs(steps_to_move);  // how many steps to take

      // determine direction based on whether steps_to_mode is + or -:
      if (steps_to_move > 0) { this->direction = 1; }
      if (steps_to_move < 0) { this->direction = 0; }


      // decrement the number of steps, moving one step each time:
      while (steps_left > 0)
      {
        unsigned long now = micros();
        // move only if the appropriate delay has passed:
        if (now - this->last_step_time >= this->step_delay)

    // тут ещё куча кода
    В цикле, до посинения, сиречь до истечения кол-ва переданных как параметр шагов.
     
  19. ostrov

    ostrov Гуру

    ТС советую разобраться как работают шаговики и сделать все "вручную".
     
  20. zzzkrestzzz

    zzzkrestzzz Нуб

    Подскажте простым языком что изменить, куда посмотреть, тупень я не понимаю