Сервоприводы непрерывного вращения

Тема в разделе "Arduino & Shields", создана пользователем Hlx, 11 янв 2012.

  1. Hlx

    Hlx Нуб

    Купил 2 вот таких (Сервомотор Servo SM-S4306R arduino 360град) и столкнулся проблемами:
    1. Как в таком случае пользоваться функцией .read(), ведь они возвращает максимум 180 градусов, а тут серво непрерывного вращения.
    2. Как пользоваться функцией .write(), если к примеру мне нужно сделать 2 оборота? По сути ето .wirte(720) , но на практике работало по моему не правильно.

    3. я не могу остановить серво. То есть даже при скетче:

    Код (Text):
    #include <Servo.h>
    Servo myservo;
    int pos = 0;

    void setup(){
      Serial.begin(9600);
      myservo.attach(9);
    }

    void loop(){

         myservo.write(145);
         while(1);
    }
    Сервопривод крутиться без остановки. Это проблема в сервоприводе, в библиотеке или я не правильно делаю?
     
  2. Hlx

    Hlx Нуб

    не много разобрался


    вот отсюда инфа.
    Но у меня сервопривод стоит при 95.
     
  3. nailxx

    nailxx Официальный Нерд Администратор

    Да, всё так. Сервы управляются с помощью сигналов PWM/PPM, которыми задаётся некое значение, от минимального до максимального. В случае ограниченной сервы — это угол, в случае постоянного вращения — это скорость/направление. Библиотека просто правильно отражает область значений [0; 180] на эти сигналы. Эквилибриуму соответствует 90. Это в идеале. Но на практике моторы не всегда идеально откалиброваны, поэтому возможны отклонения как у вас. Чтобы сделать вашу серво «програмно-откалиброванной», поиграйте с входными параметрами конструктора объекта Servo() — ему можно передавать велечины минимального/максимального значения сигнала.

    Update: Hlx прав, параметры передаются не в конструктор, а в метод Servo.attach()
     
  4. Hlx

    Hlx Нуб

    http://arduino.ru/Reference/Library/Servo/attach

    Синтаксис

    servo.attach(pin)
    servo.attach(pin, min, max)

    Параметры

    • [*]servo: переменная типа Servo
      [*]pin: номер выхода, к которому подключаем servo и с которого осуществляется управление приводом
      [*]min (опциональный): ширина импульса в микросекундах, соответствующий минимальному (угол 0 градусов) положению сервопривода. (по умолчанию 544)
      [*]max (optional): ширина импульса в микросекундах, соответствующий максимальному (угол 180 градусов) положению сервопривода.

    щас буду пробовать)