Не синхронно работают моторы

Тема в разделе "Arduino & Shields", создана пользователем Blackgeneral, 10 апр 2021.

  1. Blackgeneral

    Blackgeneral Нерд

    Ценю Ваш юмор, но не вижу в этом нормы. Хотелось бы услышать техническое обоснование "данного феномена"
     
  2. akl

    akl Гуру

    я уже писал - чтобы сдвинуть с места мотор, тем более чтобы он смог провернуть редуктор, нужно приложить некоторую энергию, далеко не бесконечно малую.
     
  3. Blackgeneral

    Blackgeneral Нерд

    Это логично, НО: в двух похожих программах и на одни и тех же аккумуляторах моторы ведут себя по-разному: в одном случае стартуют с нуля, в другом с 77. Я не улавливаю логики.
     
  4. b707

    b707 Гуру

    значит программы не настолько "похожие", как вам кажется
     
  5. akl

    akl Гуру

    программу где с нуля в студию!

    если это что-то вроде
    Код (C++):
    for(d=0;d<150;d++){
    motor4.setSpeed(d);
    motor3.setSpeed(d);
    delay(10);
    то очевидно, что скважность 77 будет достигнута где-то за 0,7 секунды, примерно тогда мотор и стартанет.
     
  6. Blackgeneral

    Blackgeneral Нерд

    Почему так? Из-за задержки в 10мс ?
    Возможно. Посмотрю более внимательно.
     
  7. Рокки1945

    Рокки1945 Гуру

    Необходима калибровка - механика может отставать от электроники
     
  8. Blackgeneral

    Blackgeneral Нерд

    Самая первая в моем посте. Только "d" заменено на "i".
     
  9. akl

    akl Гуру

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

    ну и да, значение нарастает по 1 за 10 миллисекунд. посчитай за сколько накапает 70
     
    Blackgeneral нравится это.
  10. Рокки1945

    Рокки1945 Гуру

  11. Blackgeneral

    Blackgeneral Нерд

    Да, писал, не спорю. Моторы стартуют не одновременно, на одном из моторов задержка, которая, как Вы подметили может быть в том числе из-за строки "delay(10);", но старт происходит с нулевой скорости и до максимальной, т.е. как положено. Т.е. проблема только одновременность.

    А в коде http://forum.amperka.ru/threads/Не-синхронно-работают-моторы.22060/#post-284147 вообще задержек нет, а он стартует только со значения "int sped1=77;". Если значение находится в диопазоне от 33 до 75, то колесо "заводится с толкача. Если ниже - то стоит на месте.

    Это понятно, но не целую же секунду. ДО этого машинки не делал, но видел, что собранные машинки начинают ехать по дуге. И это как раз "отставание" или "не совершенство" подобной механики.
     
    Последнее редактирование: 21 апр 2021
  12. akl

    akl Гуру

    что значит с "нулевой скорости"?
    Код (C++):
    for(d=0;d<150;d++){
    motor4.setSpeed(d);
    motor3.setSpeed(d);
    delay(10);
    }
    здесь d равняется нулю только 10 миллисекунд, еще 10 миллисекунд оно ранвяется 1, через 0,1 секунды оно становится 10. то есть ты прям на глаз видишь, что у тебя мотор стартанул не позже чем 20 миллисекунд с момента запуска программы? (а там ведь еще бутлодер с пол секунды или типа того ждет и проверяет связь с компом)
     
  13. Blackgeneral

    Blackgeneral Нерд

    я имею в виду, что мотор начал медленно крутиться и потом набирать обороты. В другом случае этого не происходит пока переменная не будет равна 77. Вот я и хочу понять в чем тут фокус.
    ))) Я вижу разницу в старте колес примерно полсекунды.
    Т.е. проверяет даже тогда, когда кабель не подключен?
     
  14. akl

    akl Гуру

    ну так потому что он стартует на условных d=77, а потом продолжает набирать обороты вплоть до d=150
    он вообще не знает подключен ли кабель - он стартует и ждет какое-то время пока не начнут поступать команды для перепрошивки и этого всего, если команды не поступили - запускает основную программу.

    значит как минимум одно колесо стартует не с нуля. скорее всего они оба не с нуля стартуют, просто одно позже другого.
     
    Последнее редактирование: 21 апр 2021
    Blackgeneral нравится это.
  15. Blackgeneral

    Blackgeneral Нерд

    Вот я и хочу понять почему. В редукторе дело?
     
  16. Blackgeneral

    Blackgeneral Нерд

    Правильно ли я понял: происходит нажатие и отпускание кнопки и за это время вычисляется скорость мотора1 и мотора 2 (по числу оборотов?).
    Если они не не равны, то происходит коррекция?
     
  17. akl

    akl Гуру

    нет, там при запуске проверяется состояние какой-то кнопки S1, и если она нажата то включается режим калибровки void balanceMotors(), в процессе которого смотрят на глаз какое из колес быстрее и нажимая на соответствующие кнопки сравнивают скорости, потом нажимают на кнопку сохранить и выходят из этого режима, коэффициенты сохраняются в энергонезависимую память и при следующем запуске оттуда читаются.
     
    Blackgeneral нравится это.
  18. Blackgeneral

    Blackgeneral Нерд

    Понятно. На глаз скорости трудно сравнить, особенно если они отличаются не сильно. Надо что-то другое колхозить. )))
     
  19. akl

    akl Гуру

    налепи на колеса по кусочку изоленты какой-нить или бумажки, тогда легко заметно как с каждым оборотом одно колесо обгоняет другое. а если нужна супер-точность, то проще взять движок с выходом оси в две стороны чтоб на него оба колеса повесить, а рулить уже третьим колесом на серве или шаговике
     
    Blackgeneral нравится это.
  20. Blackgeneral

    Blackgeneral Нерд

    Ну это можно и без изоленты делать: куда машинка начнет заворачивать - там и "медленное" колесо.
    Остается вопрос увеличения скорости (оборотов). Как я понял, подбирается экспериментально, т.е. "измерил - подправил" и т.д.?