roboforum.ru

Технический форум по робототехнике.

Шаговики 28BYJ-48 для мини webcam pan-tilt

Шаговики 28BYJ-48 для мини webcam pan-tilt

d00m » 27 фев 2013, 11:10

всем привет.
уже долго не могу разрешить эту задачу..
у меня есть небольшой самодельный pan-tilt из двух сервов для вебкамеры. все это управляется arduino+opnewrt
но я хочу поменять сервоприводы на шаговые двигатели, так как они работают гораздо тише.
это мне и нужно - сделать максимально тихий поворотный механизм.

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

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

Прошу совета, а то я уже не знаю что и придумать..

Re: Шаговики 28BYJ-48 для мини webcam pan-tilt

Myp » 27 фев 2013, 11:14

ты ими просто медленно управляешь =)
они достаточно шустрые https://www.youtube.com/watch?v=asv5-kYzSsE

Re: Шаговики 28BYJ-48 для мини webcam pan-tilt

d00m » 27 фев 2013, 11:29

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

Load the Arduino Example File/Examples/Stepper/st­epper­_speedControl
Than change the follow lines:
const int stepsPerRevolution = 2050;
Stepper myStepper(stepsPerRevolution ,8,10,11,9);
Max speed is 14 RPM At 5V

у меня не крутится.. а если не менять stepsPerRevolution и оставить его как было (200) то чуть-чуть прокручивается, еще медленнее чем было )

подключено также - 8,9,10,11
правда питание внешнее, так как у меня arduino nano..

Re: Шаговики 28BYJ-48 для мини webcam pan-tilt

RootAdmin » 27 фев 2013, 12:01

Быстрее чем 8-10 оборотов в минуту - начинают пропускать шаги. Не говоря о том, что мощность падает на порядок.

Re: Шаговики 28BYJ-48 для мини webcam pan-tilt

d00m » 27 фев 2013, 13:06

ну полные обороты мне и не нужны. максимум это 270 градусов обзор..
вот как упоры приделать и что делать с кодом чтобы оно так быстро крутилось ?

Re: Шаговики 28BYJ-48 для мини webcam pan-tilt

RootAdmin » 28 фев 2013, 01:27

С кодом - написать самостоятельно, порядок переключерия фаз - как в даташите. Вызывать шаои - из прерывания таймера для точности.
Гляну, был у меня скетчик.

Re: Шаговики 28BYJ-48 для мини webcam pan-tilt

d00m » 28 фев 2013, 20:06

жду с нетерпением, спасибо !

Re: Шаговики 28BYJ-48 для мини webcam pan-tilt

RootAdmin » 04 мар 2013, 12:21

Шаги переключать как-то так:
Код: Выделить всёРазвернуть
void stepMotor(int Step)
{
int thisStep = Step % 8;

    switch (thisStep) {
      case 0:    // 1000
      digitalWrite(motor_pin_1, HIGH);
      digitalWrite(motor_pin_2, LOW);
      digitalWrite(motor_pin_3, LOW);
      digitalWrite(motor_pin_4, LOW);
      break;
     case 1:    // 1100
      digitalWrite(motor_pin_1, HIGH);
      digitalWrite(motor_pin_2, HIGH);
      digitalWrite(motor_pin_3, LOW);
      digitalWrite(motor_pin_4, LOW);
      break;
     case 2:    // 0100
      digitalWrite(motor_pin_1, LOW);
      digitalWrite(motor_pin_2, HIGH);
      digitalWrite(motor_pin_3, LOW);
      digitalWrite(motor_pin_4, LOW);
      break;
     case 3:    // 0110
      digitalWrite(motor_pin_1, LOW);
      digitalWrite(motor_pin_2, HIGH);
      digitalWrite(motor_pin_3, HIGH);
      digitalWrite(motor_pin_4, LOW);
      break;
     case 4:    // 0010
      digitalWrite(motor_pin_1, LOW);
      digitalWrite(motor_pin_2, LOW);
      digitalWrite(motor_pin_3, HIGH);
      digitalWrite(motor_pin_4, LOW);
      break;
     case 5:    // 0011
      digitalWrite(motor_pin_1, LOW);
      digitalWrite(motor_pin_2, LOW);
      digitalWrite(motor_pin_3, HIGH);
      digitalWrite(motor_pin_4, HIGH);
      break;
     case 6:    // 0001
      digitalWrite(motor_pin_1, LOW);
      digitalWrite(motor_pin_2, LOW);
      digitalWrite(motor_pin_3, LOW);
      digitalWrite(motor_pin_4, HIGH);
      break;
     case 7:    // 1001
      digitalWrite(motor_pin_1, HIGH);
      digitalWrite(motor_pin_2, LOW);
      digitalWrite(motor_pin_3, LOW);
      digitalWrite(motor_pin_4, HIGH);
      break;
  }
}

Вызывать этот код - из прерывания по таймеру, вот так:
Код: Выделить всёРазвернуть
//Timer2 указатель вектора прерывания по переполнению
ISR(TIMER2_OVF_vect) {

  //Проверим направление, если больше границ - поменяем на противоположное
  if (curstep> 400 || curstep<0){dir=-dir;}
  curstep+=dir;
  //Переключение IO-вывода в другое состояние.
  digitalWrite(TOGGLE_IO,!digitalRead(TOGGLE_IO));
  stepMotor(curstep);
}

Тут двигатель делает 400 шагов туда-сюда.


Rambler\'s Top100 Mail.ru counter