steper мотор и количество оборотов.

Dima85
Offline
Зарегистрирован: 07.01.2013

У меня такой мторо и таким реле

Подскажите пожалуйста как его заставить сделать допустим 3 оборота в 1 сторону и 3 в другую.

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

//declare variables for the motor pins
 int motorPin1 = 8;    // Blue   - 28BYJ48 pin 1
 int motorPin2 = 9;    // Pink   - 28BYJ48 pin 2
 int motorPin3 = 10;    // Yellow - 28BYJ48 pin 3
 int motorPin4 = 11;    // Orange - 28BYJ48 pin 4
                         // Red    - 28BYJ48 pin 5 (VCC)

int motorSpeed = 1200;  //variable to set stepper speed
 int count = 0;          // count of steps made
 int countsperrev = 512; // number of steps per full revolution
 int lookup[8] = {B01000, B01100, B00100, B00110, B00010, B00011, B00001, B01001};

//////////////////////////////////////////////////////////////////////////////
 void setup() {
   //declare the motor pins as outputs
   pinMode(motorPin1, OUTPUT);
   pinMode(motorPin2, OUTPUT);
   pinMode(motorPin3, OUTPUT);
   pinMode(motorPin4, OUTPUT);
   Serial.begin(9600);
 }

//////////////////////////////////////////////////////////////////////////////
 void loop(){
   if(count < countsperrev )
     clockwise();
   else if (count == countsperrev * 2)
     count = 0;
   else
     anticlockwise();
   count++;
 }

//////////////////////////////////////////////////////////////////////////////
 //set pins to ULN2003 high in sequence from 1 to 4
 //delay "motorSpeed" between each pin setting (to determine speed)
 void anticlockwise()
 {
   for(int i = 0; i < 8; i++)
   {
     setOutput(i);
     delayMicroseconds(motorSpeed);
   }
 }

void clockwise()
 {
   for(int i = 7; i >= 0; i--)
   {
     setOutput(i);
     delayMicroseconds(motorSpeed);
   }
 }

void setOutput(int out)
 {
   digitalWrite(motorPin1, bitRead(lookup[out], 0));
   digitalWrite(motorPin2, bitRead(lookup[out], 1));
   digitalWrite(motorPin3, bitRead(lookup[out], 2));
   digitalWrite(motorPin4, bitRead(lookup[out], 3));
 }

 

 

Sanek1102
Offline
Зарегистрирован: 09.10.2011

 

 
  anticlockwise()
Эта юункция поворачивает мотор против часовой стрелки,
 clockwise()
А эта по часовой стрелки, причем поворот осуществляется сразу на 8 шагов.
 
23
//////////////////////////////////////////////////////////////////////////////
24
 void loop(){
25
   if(count < countsperrev )
26
     clockwise();
27
   else if (count == countsperrev * 2)
28
     count = 0;
29
   else
30
     anticlockwise();
31
   count++;
32
 }
33
 
34
//////////////////////////////////////////////////////////////////////////////

А это управляющая программа которая крутит мотор сначала в одну а потом другую сторону 

axill
Offline
Зарегистрирован: 05.09.2011

Управление шаговиками осуществляется не в терминах оборотоа, а в терминах шагов.

смотрите харрактеристику двигателя - сколько шагов на один оборот или что по сути тоже самое - на сколько градусов поворачивается ротор за один шаг

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

 

vvadim
Offline
Зарегистрирован: 23.05.2012

Есть  библиотеки для шаговых двигателей Stepper и AccelStepper . Они с примерами. Установите их и попробуйте примеры со своим драйвером и шаговиком - там нет ничего сложного и у вас всё заработает.