Подскажите алгоритм управления для 2ух шаговиков (Camera Slider)

Андрей К.

★✩✩✩✩✩✩
25 Май 2019
287
23
Москва. Щукино
На шкиву мотора я поставил метку, очень хорошо видно где то в середине ролика и в конце. Мотор (который крутит ось У) останавливается, а каретка продолжает ехать какое то расстояние. Чем меньше скорость и общее расстояние пробега, тем меньше несоответствие. В данном ролике скорость 70мм.
Видео - https://dropmefiles.com/ZXDCT
 

rGlory

★✩✩✩✩✩✩
11 Май 2021
200
20
@Андрей К.,

Насчет динамики по Y. Вы почему-то сравниваете грубый режим в новой прошивке с тонким в старой. Если вы хотите управлять по градусу на клик энкодера, перейдите в режим fine. Если вы хотите, чтобы в грубом режиме поворачивался или двигался с той же динамикой, то это не получится - физика не позволит. Повернутся на 10 градусов или проехать 50мм за тоже время, что вы щелкнули энкодером на этом железе просто не получится. А если поставить железо, которое таком сможет, то это стрехнет камеру. В общем-то надо сравнивать тонкий режим с тонким. Если же вы хотите отказаться от "грубого" режима, я могу его убрать, но вы сами жаловались, что приходится слишком много крутить.
 

Андрей К.

★✩✩✩✩✩✩
25 Май 2019
287
23
Москва. Щукино
@rGlory,
Я видео выложил выше.
По У оси. Отчасти мне иногда тяжело выразить мысли. Поэтому делайте скидку на некий не профессионализм в области программ. Отчасти да, иногда приходится много крутить, но это я у себя компенсировал увеличением шага, что не сильно влияло на качество в работе. И это сильно не напрягало в общем. Но когда было предложено 2 режима ГРУБО и ТОНКО, нужно было посмотреть и понять, а нужно ли это в данный момент. По оси Х оно вроде прокатывает. А по У нет. Тут пока не попробуешь, не поймешь.
 

Андрей К.

★✩✩✩✩✩✩
25 Май 2019
287
23
Москва. Щукино
@rGlory,
Сейчас я уже немного запутался. По настройкам Xin, Xout, Yin, Yout... Я вам показывал как работает не ваш а мой скетч... Настройки по Х пробег примерно 50см, по У поворот на 90 градусов для камеры. Скорость где то 70 вроде ставил. На Больших скоростях это очень видно. На малых менее, но в кадре это очень видно.

@rGlory,
Вот видео с проблемой моего скетча - https://dropmefiles.com/KA69a
Снимал с пол года назад... Там я оставил конец прохода, и предмет стоял как бы по центру, а в конце переместился к краю... в целом не посвященный и не увидит... но это брак в работе.
 

Александр Симонов

★★★★✩✩✩
2 Авг 2018
727
208
@rGlory,
Сейчас я уже немного запутался. По настройкам Xin, Xout, Yin, Yout... Я вам показывал как работает не ваш а мой скетч... Настройки по Х пробег примерно 50см, по У поворот на 90 градусов для камеры. Скорость где то 70 вроде ставил. На Больших скоростях это очень видно. На малых менее, но в кадре это очень видно.
Вы ещё запутались, кому отвечаете. И да, я понял, что речь про ваш скетч. Хотел глянуть, может проще будет в нем баг исправить.
 
  • Лойс +1
Реакции: Андрей К.

Андрей К.

★✩✩✩✩✩✩
25 Май 2019
287
23
Москва. Щукино
Но там кроме бага, нужно будет добавить ещё плей-пауза по нажатию на энкодер во время работы.
Я это пытался сделать, но у меня мгновенного СТОПа не получилось, останавливается когда дойдет до конца цикла...
В новом скетче это сделано лучше, хотя тоже пока не мгновенное.
Новый скетч мне тоже понравился своим функционалом, даже та опция, которая мне казалась что вообще не нужна, это я про запись в память настроек последнего прохода, оказалась полезной. Поэтому, совсем отказываться от него я уже не хотел бы :)
 
Изменено:

rGlory

★✩✩✩✩✩✩
11 Май 2021
200
20
В новом скетче это сделано лучше, хотя тоже пока не мгновенное.
Тут такое дело, технически сделать "мгновенную" остановку проще простого - достаточно просто перестать выдавать импульсы. Но вот механика мгновенно не остановится, и скорее всего проедет лишнее. В управлении без обратной связи это приведет к отрыву виртуальных координат от физических и у вас появится тот самый рассинхрон.
Тут же как - изначально было так, скорость типа маленькая ускорения можно не делать, по Y проезжает гораздо меньше, чем по X, А при испытаниях и на скоростях гоняем, и Y под 90 градусов крутим при небольшом изменение X (кстати именно из-за это и была проблема с незаходом в меню и неправильным поворотом по Y). Ускорения можно конечно увеличить, но для начала с камерой потестируйте, там масса то значительная...
 

Андрей К.

★✩✩✩✩✩✩
25 Май 2019
287
23
Москва. Щукино
@rGlory,
Не, камера ничего не вносит. Да и вес тут в общем условный. Моторы стоят с усилием в 4 кг, а камера 0.5... она тормозится без инерции. Ничего не проезжает.
Да и тесты хоть с камерой хоть без неё идентичны.
Моторы рукой не провернешь, там удержание как нужно.
Сейчас нет 2ух метрового слайдера, забрали... так вот на нем, при полном использовании, при скорости 20мм и угле поворота 90, холостой, без поворота камеры в конце, проезд был 3см... так что про инерцию даже не вспоминайте.

Кстати, на вашем скетче, не смотря на мои придирки по разным моментам, работает идеально. Никакого несинхрона. Всё чисто !
 
Изменено:

rGlory

★✩✩✩✩✩✩
11 Май 2021
200
20
Да и тесты хоть с камерой хоть без неё идентичны.
На каком из скетчей?
Кстати, на вашем скетче, не смотря на мои придирки по разным моментам, работает идеально. Никакого несинхрона. Всё чисто !
Так оно потому так и работает, что у меня остановка не мгновенная, а заложены ограниченные ускорения. Но у ограничения ускорения есть побочный эффект, остановка не мгновенная :(
так вот на нем, при полном использовании, при скорости 20мм и угле поворота 90, холостой, без поворота камеры в конце, проезд был 3см... так что про инерцию даже не вспоминайте.
Вы меня неправильно поняли. Я не говорил, что в старом скетче рассинхрон происходит из-за инерции. Я говорил, что ее игнорирование рано или поздно тоже приведет к несинхрону. Да и на камеру, я думаю, большие ускорения не скажутся положительным образом.
 

Александр Симонов

★★★★✩✩✩
2 Авг 2018
727
208
Новый скетч мне тоже понравился своим функционалом, даже та опция, которая мне казалась что вообще не нужна, это я про запись в память настроек последнего прохода, оказалась полезной. Поэтому, совсем отказываться от него я уже не хотел бы :)
Ок, мне собственно больше интересно было баг найти. Я не хочу "конкурировать" с новой версией @rGlory

Вроде даже нашёл, так что если будет время, попробуйте подменить библиотеку AccelStepper на прикрепленную и еще раз попробовать старый скетч на большой дистанции.
 

Вложения

Андрей К.

★✩✩✩✩✩✩
25 Май 2019
287
23
Москва. Щукино
@rGlory,
1-Рассинхрон только на моем скетче с камерой и без.
2-Тут я вероятно не совсем корректно написал. У вас сейчас по нажатию на энкодер мы не останавливаемся, а выходим в меню, в которм нужно выбрать паузу и ещё раз нажать на энкодер... А это время ... То, что я называю мгновенным СТОП, это значит нажал, и оно остановилось, пусть оно даже пройдет 1см... это не вопрос. А пока через меню выключишь, проезд гораздо бОльше. Вот я о чем.
3-В старом скетче ( в моем) мне кажется что плавного пуска и остановки вообще нет. А то что вы сделали плавный пуск и стоп это действительно чудо !
 

Александр Симонов

★★★★✩✩✩
2 Авг 2018
727
208

Вложения

Андрей К.

★✩✩✩✩✩✩
25 Май 2019
287
23
Москва. Щукино
@Александр Симонов,
Я тоже понимаю что так не должно быть... но факт остается фактом... Может где то в самой программе стоят какие то ускорения... Может первый ремонт библиотеки был правильным, нужно только в программе что то подправить...
 
Изменено:

Александр Симонов

★★★★✩✩✩
2 Авг 2018
727
208
@Александр Симонов,
Может первый ремонт библиотеки был правильным, нужно только в программе что то подправить...
Первый ремонт может работать, с некоторыми костылями в скетче. Я пытался обойтись без них во втором варианте.

Попробуйте заменить всю функцию Home на вот такую с костылями:
C++:
void Home() {
  if (digitalRead(limitSwitch) == 1) {
    display.drawBitmap(0, 0, Homing, 128, 64, 1);
    display.display();
  }

  stepper1.resetLastStepTime();
  while (digitalRead(limitSwitch) == 1) {
    stepper1.setSpeed(-3000);
    stepper1.runSpeed();
  }
  delay(20);
  stepper1.setCurrentPosition(0);
  stepper1.moveTo(200);                       // отскок 
  stepper1.resetLastStepTime();
  while (stepper1.distanceToGo() != 0) {
    stepper1.setSpeed(3000);
    stepper1.runSpeed();
  }
  stepper1.setCurrentPosition(0);
  display.clearDisplay();
}
 

rGlory

★✩✩✩✩✩✩
11 Май 2021
200
20
У вас сейчас по нажатию на энкодер мы не останавливаемся, а выходим в меню, в которм нужно выбрать паузу и ещё раз нажать на энкодер... А это время ... То, что я называю мгновенным СТОП, это значит нажал, и оно остановилось, пусть оно даже пройдет 1см... это не вопрос. А пока через меню выключишь, проезд гораздо бОльше. Вот я о чем.
А так это мелочи. Я просто предположил, что останавливать сразу по нажатию не комильфо, мол вдруг по ошибке нажали, чтобы была возможность отказаться. Если хочется паузы сразу - есть их у нас. Пока сделал, что по клику просто вываливается в меню, слелать продолжение несколько сложнее, позже гляну, если надо. Скачайте обновление.

Ну и на сладкое, сюрприз :geek:
 
Изменено:

Андрей К.

★✩✩✩✩✩✩
25 Май 2019
287
23
Москва. Щукино
@Александр Симонов,
После замены блока в программе, момент первого старта -движения в нулевую позицию, едет нормально. При установках позиции по Х и У он пока прыгает.
Во время работы он двигается нормально, синхронно.
 

Александр Симонов

★★★★✩✩✩
2 Авг 2018
727
208
@Андрей К.,
C++:
void stepperposition(int n)
{
  stepper1.setMaxSpeed(3000);
  stepper1.setSpeed(200);
  stepper2.setMaxSpeed(3000);
  stepper2.setSpeed(200);
  if (TurnDetected)
  {
    TurnDetected = false;  // do NOT repeat IF loop until new rotation detected
    if (n == 1)
    {
      if (!rotationdirection)
      {
        if ( stepper1.currentPosition() - 1000 > 0 )   //  перемещения каретки на 1 щелчек - 1000 шагов мотора
        {
          stepper1.move(-1000);                        //  перемещения каретки на 1 щелчек - 1000 шагов мотора
          stepper1.resetLastStepTime();
          while (stepper1.distanceToGo() != 0)
          {
            stepper1.setSpeed(-3000);
            stepper1.runSpeed();
          }
        }
        else
        {
          stepper1.resetLastStepTime();
          while (stepper1.currentPosition() != 0)
          {
            stepper1.setSpeed(-3000);
            stepper1.runSpeed();
          }
        }
      }

      if (rotationdirection)
      {
        if ( stepper1.currentPosition() + 1000 < 53400 ) //  перемещения каретки на 1 щелчек - 1000 шагов мотора и
                                                         // задаем число в сантиметрах *800, на которое разрешено перемещение каретке
        {
          stepper1.move(1000);                           //  перемещения каретки на 1 щелчек - 1000 шагов мотора
          stepper1.resetLastStepTime();
          while (stepper1.distanceToGo() != 0)
          {
            stepper1.setSpeed(3000);
            stepper1.runSpeed();
          }
        }
        else
        {
          stepper1.resetLastStepTime();
          while (stepper1.currentPosition() != 53400) // задаем число в см*800, на которое разрешено перемещение каретке
          {
            stepper1.setSpeed(3000);
            stepper1.runSpeed();

          }
        }
      }
    }
    if (n == 2)
    {
      if (rotationdirection)
      {
        stepper2.move(-16);                     // шаг вращения по У
        stepper2.resetLastStepTime();
        while (stepper2.distanceToGo() != 0)
        {
          stepper2.setSpeed(-3000);
          stepper2.runSpeed();
        }
      }
      if (!rotationdirection)
      {
        stepper2.move(16);                      // шаг вращения по У
        stepper2.resetLastStepTime();
        while (stepper2.distanceToGo() != 0)
        {
          stepper2.setSpeed(3000);
          stepper2.runSpeed();
        }
      }
    }
  }
}
 

Андрей К.

★✩✩✩✩✩✩
25 Май 2019
287
23
Москва. Щукино
@rGlory,
Русское меню Круто ! Но с некоторыми пунктами нужно подумать в плане перевода.
Энкодер работает не четко, с осью У нужно что то делать... попасть в нужное место очень сложно. У слайдера осьХ это перемещение... плюс-минус 5-10см роли не играют... А вот ось У это основа. В грубом режиме почему то шагает по 9 в среднем, а в тонком практически не слушает энкодера... крутишь-крутишь... а он и не чует. Мне кажется библиотека не той системы. Что то там не то...
Пауза заработала, но уже не пойму почему, один раз сработала как нужно, потом останавливает, но при повторном нажатии не запускает на движение... Хотя экран с координатами появляется... но они стоят и не меняются...
При запуске ранее сохраненного движения, было при установках двигаться бесконечно, и на табло при загрузке стоит параметр 0, едет несколько раз и потом останавливается...

@Александр Симонов,
Заработало. Уже можно пользоваться. Я не знаю про какие вы писали костыли, но работает.
Спасибо.
Теперь бы нам новый скетч довести до нормы, и былоб супер.
 
Изменено: