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

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

?

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

  1. Код

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

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

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

    ostrov Гуру

    Опять же какая задача для этих двигателей? Может быть они колесами крутят?
     
  2. rkit

    rkit Гуру

    Вот эти придирки.
     
  3. ostrov

    ostrov Гуру

    ТС уже вернул результаты?
     
  4. DIYMan

    DIYMan Guest

    Это называется придиркой? Прочитать вопрос автора и указать вам, что вам про Фому, а вы про Ерёму? Ну-ну.
     
  5. DIYMan

    DIYMan Guest

    Пока нет :)
     
  6. rkit

    rkit Гуру

    У автора крутятся одинаково, у меня крутятся одинаково, у вас крутятся по-разному. Кто про Фому, а кто про Ерему? И да, основа этого вашего мнения - чистой воды придирка и придуривание.
     
  7. ostrov

    ostrov Гуру

    По моему ему пофиг, а мы тут волосы рвем на жопе.
     
  8. DIYMan

    DIYMan Guest

    Вы упоротый, адью.
     
  9. DIYMan

    DIYMan Guest

    Да нет, может, и не пофик. Просто я автора прекрасно понимаю - когда глазом кажется, что что-то происходит не так, как надо, а дело оказывается в несовершенстве приборов измерения ;) На двух шагах на двигатель за проход loop не заметить разность скоростей шагания, вот и всё. Но шагать двигателям с разной скоростью, но с одинаковым кол-вом шагов - никто не запрещает, и мне кажется, что код именно это и делает, проблема только в оценке происходящего ТС, а не в том, что кто-то упоротый вдруг подумал, что мы решили, что один шаговик будет по шагам убегать от другого - вот откуда такую дичь наш "гуру" взял вообще? Я веду речь о простейшем физическом понятии - скорость, не более того.
     
  10. rkit

    rkit Гуру

    Правильно. Нечего возразить - обзови и сбеги. Поступок мужика.
     
  11. DIYMan

    DIYMan Guest

    Исходя из вышеизложенного в моём предыдущем посте (постов "гуру" теперь мне не видно, тишина, зашибись) и посыла, что у ТС всё подключено верно - можно сделать вывод, что библиотека работает корректно, и позволяет крутить движки с разной скоростью выполнения шага.

    Осмелюсь сделать предположение, что ТС нужно, чтобы один двигатель крутился быстрее, чем другой - я Капитан Очевидность сегодня :) Тогда делаем вывод (при условии, что НЕДОПУСТИМО шагать крупными порциями шагов, когда визуально видно, что один движок начинает работать только после отработки другого), что метод setSpeed тут не прокатит, поскольку мы хотим, чтобы движки работали "параллельно".

    В этом случае о методе setSpeed стоит забыть, выставив его в одинаковые значения у обоих движков. А необходимого поведения добиваться подсчётом кол-ва шагов, которые нужно сделать каждому из двигателей за один проход loop, причём стремиться, чтобы эта величина была всегда как можно меньшей (т.е., в идеале, стремиться к отношению 1/N - когда один мотор шагает 1 шаг, а второй - N шагов, где N >= 1; хуже, когда один мотор делает два шага, а второй - N*2 шагов, т.к. при больших N квант времени, выделенный второму движку, будет большим, что идёт вразрез с концепцией "параллельности" работы). На примере вводной, когда надо, чтобы первый движок крутился в два раза быстрее, чем второй:
    Код (C++):

    void loop()
    {
    motor1.step(2);
    motor2.step(1);
    }
     
    При этом стоит заметить, что СКОРОСТЬ шагания у движков - будет ОДИНАКОВАЯ, а вот эффект - именно тот, которого, возможно, хочет добиться автор. При таком подходе один квант времени (в нашем случае - время, необходимое на совершение трёх шагов) делится между двигателями по нужной формуле. Скорость шагания при этом, ещё раз - ОДИНАКОВАЯ.

    И, для закрепления: когда вызовами методов setSpeed устанавливается разная скорость шагания - то она таки РАЗНАЯ, эта скорость выполнения шага движком. Пока "гуру" не выучит понятие "скорость" - буду писать про скорость :)
     
  12. zzzkrestzzz

    zzzkrestzzz Нуб

  13. zzzkrestzzz

    zzzkrestzzz Нуб

    Скорость очень медленная визуально не определить, двигатели шагают поочередно.
     
  14. zzzkrestzzz

    zzzkrestzzz Нуб

    Новое
    Скорость очень медленная визуально не определить, двигатели шагают поочередно.
     
  15. DIYMan

    DIYMan Guest

    Из логов видно, что скорость шагания у двигателей - разная, следовательно, вы неправы в своём постулате про "вращаю одну ручку, скорость меняют оба". Всё работает в вашем скетче именно так, как и написано - вы оперируете скоростью шагания правильно. Другое дело, что это не то поведение, которое нужно вам, правильно?

    Давайте я задам простой вопрос, возможно, угадаю: вам надо, чтобы, допустим, если один потенциометр находился (условно), в положении 50, а второй (тоже условно) - в положении 100, то второй двигатель крутился бы быстрее в два раза, чем первый (другими словами - делал бы в два раза больше шагов, чем первый)? Правильно?

    Если угадал - выставляете setSpeed обоим моторам в ОДИНАКОВОЕ значение (это просто скорость отработки одного шага), а для того, чтобы второй мотор крутился в два раза быстрее, чем первый - рассчитываете для них кол-во шагов, которые каждый из них должен сделать в одном заходе в loop. Рассчитываете на основе значений потенциометров, как раз.

    Что касается вашего скетча, проверить это очень просто: поставьте второму мотору step(4) вместо step(2), как сейчас - залейте скетч, и посмотрите, что произойдёт ;)
     
  16. akl

    akl Гуру

    ящитаю, что "скоростью" в данном случае лучше называть не время выполнения одного шага, а количество шагов в единицу времени например.
     
    DIYMan нравится это.
  17. rkit

    rkit Гуру

    Это так и называется. А время выполнения одного шага называется "моментальная скорость".
     
  18. DIYMan

    DIYMan Guest

    В разрезе обсуждаемого скетча есть использование метода setSpeed, который устанавливает именно скорость выполнения одного шага. Именно об этой скорости я всё время и веду речь, опираясь ЧЁТКО на вводные, данные автором поста.

    Ясное дело, что скорее всего автору нужна именно вторая часть вашего утверждения, мне это тоже понятно, но, ещё раз - я отталкивался только от логики работы кода автора, и там, действительно, всё норм - движки шагают с разной скоростью шагания :)
     
  19. zzzkrestzzz

    zzzkrestzzz Нуб

    Так какой совет будет? Если не пользоваться библиотеками можно написать.
    Верно, но изначально проблема в том, что при вращении резистора оба двинателя меняют скорость, вплоть до остановки. Я конечно все понимаю, но когда одним резистором останавливаю оба двигателя, мне ничего не мерещится.
     

    Вложения:

    • 1.JPG
      1.JPG
      Размер файла:
      26,8 КБ
      Просмотров:
      760
  20. ostrov

    ostrov Гуру

    А может быть такое, что при уменьшении скорости до нуля интервал становится бесконечным? С учетом того что движки шагают по очереди, программа просто зависает?