Сервопривод или редуктор?

iddqd649
Offline
Зарегистрирован: 15.08.2012

В общем то вопрос такой: можно ли использовать сервопривод как двигатель для машинки? Или обязательно нужен редуктор?

maksim
Offline
Зарегистрирован: 12.02.2012

 Ножно. Есть два варианта:
1. Купить серву постоянного вращения.
2. Переделать обычную серву в серву постоянного вращения (вот например подробно здесь).

Минусы: Большой диаметр колес из-за низкой скорости вращения.
Плюсы: Для управления занят только один вывод дуины и не нужно дополнительных радиоэлементов.

AlexFisher
AlexFisher аватар
Offline
Зарегистрирован: 20.12.2011

Интересно... нужно будет попробовать.

nestandart
nestandart аватар
Offline
Зарегистрирован: 15.06.2011

Я делал мотор редукторы из sg5010. Неплохой мотор редуктор для гусеничного робота. Я выбросил из сервы всю электронику т.к. скорость не устраивала. Дал на моторы 7.5-8.5в и получил , примерно два оборота в секунду , нехилый момент (около 8кг/см) и потребление тока 160 -250мА.  Меня это вполне устроило. По крайней мере лучше чем специальные мотор редукторы (для роботов) , у которых скорость около 4-5 об/сек , потребление 100 -150мА и совершенно никакой момент (около 0.5кг/см). А по цене почти одно и то же.

Плюс комплект качалок позволит (при наличии прямых рук) установить любое колесо , звезду , шестерню. 

Вобщем , я за серво-редукторы.

AlexFisher
AlexFisher аватар
Offline
Зарегистрирован: 20.12.2011

Меня интересует не столько "крутить", сколько "крутить с управляемой скоростью"

nestandart
nestandart аватар
Offline
Зарегистрирован: 15.06.2011

Работайте с серво мотором как с обычным мотор редуктором. Т.е. драйвер моторов  может управлять скоростью посредством ШИМа. 

AlexFisher
AlexFisher аватар
Offline
Зарегистрирован: 20.12.2011

А как же реверс? В статье и управление шимом, и реверс, и ключей дополнительных не надо.

nestandart
nestandart аватар
Offline
Зарегистрирован: 15.06.2011

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

AlexFisher
AlexFisher аватар
Offline
Зарегистрирован: 20.12.2011

Не. Для меня лично выбрасывать что-то штатное - компактное, чтобы потом подключить како-то внешний драйвер... неспортивно. и неэлегантно. Имеет смысл только при необходимости получения максимального крутящего момента.

nestandart
nestandart аватар
Offline
Зарегистрирован: 15.06.2011

>>неспортивно. и неэлегантно<< 

А это как посмотреть. Не со всеми программными функциями серва будет нормально работать ( а тем более две или четыре сервы).

Например полная загрузка таймера не даст серве корректно работать.

А управление драйвером - элементарно.

Так же скорость низкая , без повышения напруги робот будет еле ползать.

 

 

ich
Offline
Зарегистрирован: 10.06.2012

Я на своём роботе сделал именно так, как в указанной выше ссылки.

Работает как часы и реверсия и ни каких дополнительных драйверов не надо. И скорость можно регулировать. Всё делается с помощью "Servo.h"

До оределённого момента я был просто ослеплён возможнастями моих переделанных "сервей / сервяй / сервов / (или как их там)". Но потом захотел я повернуть моего робота на точные 90° 180° 360° и всё.

Пробывал калдовать со временем подачи импульса на сервы. Работало так себе, меня не удовлетварило. Вот по этому я за вёл этот разговор. А добавление сенсоров отслеживающих вращение калёс приводит к большому использованию Pin'ов, что в итоге равняется использованию степпера.

Вот так.

mr.il
Offline
Зарегистрирован: 05.01.2013

Народ, привет!

Подскажите плз. Приобрел мотор-редуктор DF05SR, подключил к ардуино, (желтый - 9, красный - +5, коричневый - земля)

пытаюсь выполнить код с робокрафта:

int servoPin = 9;            // порт подключения сервы
int myAngle;                 // будет хранить угол поворота
int pulseWidth;              // длительность импульса
 
void servoPulse(int servoPin, int myAngle)
{
  pulseWidth = (myAngle * 11) + 500;  // конвертируем угол в микросекунды
  digitalWrite(servoPin, HIGH);       // устанавливаем серве высокий уровень
  delayMicroseconds(pulseWidth);      // ждём
  digitalWrite(servoPin, LOW);        // устанавливаем низкий уровень
  delay(20);                          //
}

void setup()
{
  pinMode(servoPin, OUTPUT);          // конфигурируем пин сервы, как выход
}

void loop()
{
  // медленно поворачиваем серву от 0 до 180 градусов
  for (myAngle=0; myAngle<=180; myAngle++) { 
    servoPulse(servoPin, myAngle);
  }
  delay(300);
  // а теперь обратно
  for (myAngle=180; myAngle>=0; myAngle--) { 
    servoPulse(servoPin, myAngle);
  }
  delay(300);
} 

при выполнении, вал мотора поворачивается 2 цикла (оборота 3 на цикл) по часовой стрелке, то есть за один loop редуктор крутится 2 раза по часовой, за тем 2 цикла против часовой стрелки, и по новой.

Сам разобрался как заставить его сделать одно перемещение по часовой:

 

digitalWrite(servoPin, HIGH);       // устанавливаем серве высокий уровень
  delayMicroseconds(pulseWidth);      // ждём
  digitalWrite(servoPin, LOW);        // устанавливаем низкий уровень

а вот как его заставить обратно повернуться, по алгоритму разобраться не могу

mr.il
Offline
Зарегистрирован: 05.01.2013

Модератор, прошу удалить предыдущий пост, надо было искать по DFR05SR.

  myservo.write(91); //стоим на месте

90, 92 - висит не может сдвинутся, но подрагивает
90-0 крутится с разной скоростью по часовой
93-180 крутится с разной скоростью против часовой