Пропадает ШИМ при использовании библиотеки Servo.h

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

  1. Tomasina

    Tomasina Сушитель лампочек Модератор

    на 6 и 9 пине сидят коллекторные моторы (через драйвер), на 10 и 11 пине - сервы.
    Библиотека для серв стандартная, вызывается через #include <Servo.h>
    Так вот при таком раскладе 9 пин перестает выдавать ШИМ-сигнал и работает как цифровой, т.е. либо 0, либо 1 на выходе и мотор гонит на полную.
    Если закомментировать строчку servoLeft.attach(10), отвечающую за серву на 10 пине, то ШИМ на 9 пине снова работает.
    При этом ШИМ на пине 6 работает всегда корректно, даже если строки servoLeft.attach(10) и servoRight.attach(11) активны.
    Другие пины использовать не выйдет, они заняты и плата уже разведена :(
     
  2. Alex19

    Alex19 Гуру

    Предположу, что у Вас, что-то на ATmega168/328.
    Пин 9 и 10 в режиме ШИМ, работают на таймере 1, который используется в библиотеке Servo. Библиотеки серво нужен таймер 16 бит, в этих платах только 1 такой таймер.

    Сложно сказать, сходу вижу варианты, если таймер 2 свободен.
    Это SoftPWM, я не работал с данной библиотекой, подробнее тут - https://code.google.com/p/rogue-code/wiki/SoftPWMLibraryDocumentation#Installation

    И второй вариант, опускаться на AVR и переписать библиотеку Servo, но ней тоже нужен таймер - http://easyelectronics.ru/upravlenie-mnozhestvom-servomashinok.html.

    Использовать таймер 0, не советую, но на крайний случай можно изучить и такой вариант.

    UPD. Таймер 2, пин 3 и 11, что у Вас там?
    И 0 таймер у Вас занят, 6 и 5 пин.
     
    Последнее редактирование: 13 сен 2015
  3. DrProg

    DrProg Вечный нерд

    Однозначно дело в таймере 1, он отвечает за шим на 9 и 10 ноге.
     
    ИгорьК нравится это.
  4. cody_c++

    cody_c++ Нерд

    Короч генератор ШИМ занят импульсами для серво