Mega Timer1 и Timer3

Тема в разделе "Моторы, сервоприводы, робототехника", создана пользователем vvr, 12 авг 2015.

  1. vvr

    vvr Инженерище

    Управляю двумя шаговыми двигателями через прерывания .
    один на Timer1, второй на Timer3.
    по отдельности всё хорошо.
    при одновременном включении возникают какие то тормоза - тормозится сериал, посторочное выведение инфы на дисплей.
    в чём могут быть проблемы?
     
  2. Megakoteyka

    Megakoteyka Оракул Модератор

    Прерывания забивают все время контроллера?
     
  3. vvr

    vvr Инженерище

    да вроде нет.
    но программа начинает тормозить даже после выключения моторов концевиками
     
  4. Alex19

    Alex19 Гуру

    Ошибка в прерывании еще тот подарок.

    Возможно мне показалось не уверенность в ответе на вопрос Megakoteyka.
    Проверить можно, если у Вас есть осциллограф (возможно, можно воспользоватся анализатором логических уровней, не пробовал) или другая ардуина.

    С ардуиной, в начале обработчика прерывания шлем 1 на определенный пин, а в конце шлем 0 на тот же пин. А во второй ардуине, на прерываниях заводим таймер.

    Как я понял, прерывания нужны для того, чтобы опрашивать концевик, если мы не достигли его, даем команду еще на 1 шаг. Не совсем понятно зачем 2-ое прерывание, возможно для 2-го мотора, если это так, то почему их не объединить?

    А при достижении концивиков, таймеры останавливаются?

    Так же любопытно, что именно у Вас в прерываниях, просто взводится переменная needNextSep или дается реальная команда сделать шаг (если да, что за команда, просто дернуть пины или вызов функции в библиотеке к примеру от A4988)?

    Интервал вызова прерываний и есть ли другие прерывания?

    В общем и целом проблем с прерываниями может быть много, от банальных volatile, до наложении, потери, загрузки прерывания, доступу к переменным/функциям, которые могут меняться/вызываться в разных местах и т.д.

    UPD. По такому поводу достал у себя пылившийся Saleae Logic 16 (китаец), отлично работает, покупал для проверки оборудования и таких случаев.

    Хотя мне, видимо как и Вам лучше купить нормальный программатор (я любитель, поэтому пока жаба душит:)). Так же можете попробовать VisualMicro, вот только есть ли там демо период. Так как отладка есть только в платной версии.
     
    Последнее редактирование: 12 авг 2015
  5. vvr

    vvr Инженерище

    я через прерывания кручу шаговики.
    есть ещё функция разгона каждого мотора, правда она с делеями, но в общем сам принцип управления мотором мне нравится(код не мой, нашёл когда то в сети).
    по отдельности всё гуд - моторы запускаются по нажатию кнопки, плавно разгоняются, останавливаются при срабатывании соответствующих концевиков.
    вот вместе работают некрасиво:)
    при нажатии кнопки запускаю первый мотор - разгоняется, крутится. через 5 сек запускается второй - вот здесь начинается проблемка.
    если без разгона второй мотор, то всё нормально.
    если с разгоном (который с делеями), то тормоза в программе даже после остановки концевиками обеих моторов (заторможенная реакция на кнопки, на обновление дисплея)
    пока оставил без разгона, но хочется разобраться в чём проблемка.
     
  6. Alex19

    Alex19 Гуру

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

    Но раз Вы локализовали проблему, может есть смысл уйти от delay. Переписав код или поискать другой код без них.

    Если код, не является тайной, публикуйте попробуем разобраться вместе, надеюсь так же подключатся более опытные, чем я участники.

    UPD. Нашел в сети пример работы на прерываниях (вроде без delay, не увидел в заголовке ссылок на библиотеку)- http://avrdoc.narod.ru/index/0-7, внизу ссылка на код.

    Это описание - AVR446 - Linear speed control of stepper, оригинал описания - http://www.atmel.com/Images/doc8017.pdf.
     
    Последнее редактирование: 12 авг 2015