#1 2016-01-14 15:30:02

gorenkov
Учасник
З Кіев
Зареєстрований: 2015-11-05
Повідомлень: 41

Скорость вращение шагового двигателя

Здравствуйте,

http://arduino-ua.com/prod531-Shagovii_ … -1004A_27V - шаговый двигатель
http://arduino-ua.com/prod527-Draiver_s … ya_DRV8834 - драйвер

Подскажите, пожалуйста. Пытаюсь энкодером регулировать скорость шагового двигателя. В общем всё получается, но скорость регулирования не плавная. К примеру, я кручу ручку энкодера и скорость постепенно увеличивается, затем наступает момент когда скорость не увеличивается. А потом через несколько оборотов энкодера двигатель начинает крутиться как бешеный. Это нормально для шагового двигателя или что-то я сделал не так?

Заранее благодарен.

Неактивний

#2 2016-01-14 16:53:04

Йожэг
Учасник
Зареєстрований: 2015-12-30
Повідомлень: 97

Re: Скорость вращение шагового двигателя

Значения, получаемые с энкодера, точно увеличиваются плавно?

Неактивний

#3 2016-01-14 17:20:53

Йожэг
Учасник
Зареєстрований: 2015-12-30
Повідомлень: 97

Re: Скорость вращение шагового двигателя

Конденсаторы для убирания помех поставлены, провода не перепутаны, программа не подвисает, в ней переполнения целых типов не происходят? :-)

Неактивний

#4 2016-01-14 21:05:30

gorenkov
Учасник
З Кіев
Зареєстрований: 2015-11-05
Повідомлень: 41

Re: Скорость вращение шагового двигателя

Вот мой скетч, через консоль вижу постепенное увеличение константы отвечающей за скорость. После доситжения значения 200 и больше, скорость не увеличивается. После 300 двигатель начинает быстро крутиться. Если вращаю ручку энкодера в обратную сторону, происходит обратный эффект. Сначала скорость падает, но не уменьшается, а при значении меньше 200, скорость начинает уменьшаться.

/*
 Stepper Motor Control - one revolution

 This program drives a unipolar or bipolar stepper motor.
 The motor is attached to digital pins 8 - 11 of the Arduino.

 The motor should revolve one revolution in one direction, then
 one revolution in the other direction.


 Created 11 Mar. 2007
 Modified 30 Nov. 2009
 by Tom Igoe

 */

#include <Stepper.h>

const int stepsPerRevolution = 200;  // change this to fit the number of steps per revolution

int beg = 0;
int dir = 1;
// for your motor
//int button = 6;
//int switcher = 6;


// initialize the stepper library on pins 8 through 11:
Stepper myStepper(stepsPerRevolution, 2, 3);

//these pins can not be changed 2/3 are special pins
// Setting up the counter
int reading = 0;
int lowest = -500;
int highest = 500;
int changeamnt = 40;

// Timing for polling the encoder
unsigned long currentTime;
unsigned long lastTime;


// Pin definitions
const int pinA = 4;
const int pinB = 5;
int button = 6;

// Storing the readings

boolean encA;
boolean encB;
boolean lastA = false;



void setup() {
  // set the speed at 60 rpm:
  //myStepper.setSpeed(200);
  // initialize the serial port:
  pinMode(button, INPUT);
//  pinMode(switcher, INPUT);
 // set the two pins as inputs with internal pullups
  pinMode(pinA, INPUT_PULLUP);
  pinMode(pinB, INPUT_PULLUP);
  //pinMode(SW, INPUT_PULLUP);  
  digitalWrite(button  , HIGH); 
  // Set up the timing of the polling
  currentTime = millis();
  lastTime = currentTime; 
  // Start the serial monitor for debugging
  Serial.begin(9600);
  
  
  
}

void loop() {

// Read elapsed time
  currentTime = millis(); 
  // Check if it's time to read
  if(currentTime >= (lastTime + 5))
  {
    // read the two pins
    encA = digitalRead(pinA);
    encB = digitalRead(pinB);
    // check if A has gone from high to low
    if ((!encA) && (lastA))
    {
      // check if B is high 
      if (encB)
      {
        // clockwise
        if (reading + changeamnt <= highest)
        {
          reading = reading + changeamnt; 
          beg = reading;
        }
      }
      else
      {
        // anti-clockwise
        if (reading - changeamnt >= lowest)
        {
          reading = reading - changeamnt; 
          beg = reading;
        }
      }
      // Output reading for debugging
      Serial.print("Reading ");
      Serial.println(reading);
      Serial.print("Dir ");
      Serial.println(dir); 
//      Serial.print("SW ");
//      Serial.println(switcher);       
 /*     Serial.print("lastA ");
      Serial.println(lastA);         
      Serial.print("lastTime ");
      Serial.println(lastTime);         
*/      
    }
    // store reading of A and millis for next loop
    lastA = encA;
    lastTime = currentTime;

  }


if (beg == 0)
  {
myStepper.setSpeed(0);
myStepper.step(0);  
  
  }

if (beg > 0)
  {
//    dir = 1;
myStepper.setSpeed(beg);
myStepper.step(dir);
  }

if (beg < 0)
  {
myStepper.setSpeed(-beg);
myStepper.step(-dir);  
  }
 
if ( digitalRead (button)) 
  {}
  else
  {
beg = 0;
reading = 0;
Serial.println("Stop");
  }

/* if ( digitalRead(switcher) ) 
  {
beg = 0;
reading = 0;
  }
*/
  

}

Остання редакція gorenkov (2016-01-14 21:20:04)

Неактивний

#5 2016-01-14 21:08:29

gorenkov
Учасник
З Кіев
Зареєстрований: 2015-11-05
Повідомлень: 41

Re: Скорость вращение шагового двигателя

Йожэг пише:

Конденсаторы для убирания помех поставлены, провода не перепутаны, программа не подвисает, в ней переполнения целых типов не происходят? :-)

Конденсаторов - нет
Провода 100% не перепутаны
программа не подвисает, всё работает стабильно и прогнозируемо
насчёт переполнений не уверен - слишком мал опыт в программировании и работе с ардуино.

Неактивний

#6 2016-01-14 21:25:06

vvr
Учасник
Зареєстрований: 2015-04-12
Повідомлень: 878

Re: Скорость вращение шагового двигателя

что с энкодером, что с потенциометром проблемы с регулированием скорости вращения шагового двигателя.
до больших скоростей шаговый двигатель нужно ПРАВИЛЬНО разгонять

Неактивний

#7 2016-01-14 21:53:51

NoName
Customer
З Київ
Зареєстрований: 2014-07-08
Повідомлень: 1,446

Re: Скорость вращение шагового двигателя

vvr, а как правильно? плавно?

Неактивний

#8 2016-01-14 22:44:08

vvr
Учасник
Зареєстрований: 2015-04-12
Повідомлень: 878

Re: Скорость вращение шагового двигателя

Чтобы разогнать до большей скорости нужно использовать плавный разгон.
Величина ускорения будет зависеть от момента инерции: чем он больше, тем более плавный разгон нужно будет обеспечивать

Неактивний

#9 2016-01-14 23:42:41

Йожэг
Учасник
Зареєстрований: 2015-12-30
Повідомлень: 97

Re: Скорость вращение шагового двигателя

Т.е. достаточно просто плавно поворачивать энкодер? В чём-то тут подвох.

Неактивний

#10 2016-01-15 00:01:13

vvr
Учасник
Зареєстрований: 2015-04-12
Повідомлень: 878

Re: Скорость вращение шагового двигателя

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

Неактивний

#11 2016-01-15 00:03:20

vvr
Учасник
Зареєстрований: 2015-04-12
Повідомлень: 878

Re: Скорость вращение шагового двигателя

у шагового двигателя есть зона разгона
сначала нужно довести скорость до этой зоны, а уже потом разгонять до высоких скоростей
есть теория, схемы, графики

Неактивний

#12 2016-01-15 01:19:46

gorenkov
Учасник
З Кіев
Зареєстрований: 2015-11-05
Повідомлень: 41

Re: Скорость вращение шагового двигателя

vvr пише:

у шагового двигателя есть зона разгона
сначала нужно довести скорость до этой зоны, а уже потом разгонять до высоких скоростей
есть теория, схемы, графики

Спасибо за направление.    Будем искать...(с)

Неактивний

#13 2016-01-15 13:33:59

gorenkov
Учасник
З Кіев
Зареєстрований: 2015-11-05
Повідомлень: 41

Re: Скорость вращение шагового двигателя

Ещё заметит одну неприятную для меня особенность. Когда двигатель крутится на малых оборотах, он немного вибрирует и работает микрорывками - вращение не плавное. И соответственно тихонько "бурчит". Когда он крутится быстро - работает тихо и плавно. Это нормально?

Неактивний

#14 2016-01-15 13:38:25

Йожэг
Учасник
Зареєстрований: 2015-12-30
Повідомлень: 97

Re: Скорость вращение шагового двигателя

gorenkov пише:

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

Всё правильно, это же шаговый двигатель, он шагает)

Неактивний

#15 2016-01-20 00:11:47

gorenkov
Учасник
З Кіев
Зареєстрований: 2015-11-05
Повідомлень: 41

Re: Скорость вращение шагового двигателя

Йожэг пише:
gorenkov пише:

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

Всё правильно, это же шаговый двигатель, он шагает)

Получается заставить их "плавно" крутиться не получится? А как же тогда он плавно крутится на больших оборотах?

Неактивний

#16 2016-01-20 10:09:11

vvr
Учасник
Зареєстрований: 2015-04-12
Повідомлень: 878

Re: Скорость вращение шагового двигателя

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

Неактивний

#17 2016-01-26 20:15:10

gorenkov
Учасник
З Кіев
Зареєстрований: 2015-11-05
Повідомлень: 41

Re: Скорость вращение шагового двигателя

vvr пише:

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

По поводу микрошагов я уже пробовал. Действительно шаги намного менее заметные, движение плавнее. Но мне не хватает скорости вращения. Большое спасибо за ответы.

Буду комбинировать режимы.

Неактивний

#18 2016-01-26 21:28:53

vvr
Учасник
Зареєстрований: 2015-04-12
Повідомлень: 878

Re: Скорость вращение шагового двигателя

шаговый двигатель не шибко скоростное устройство
а какую скорость вы хотите ?

Неактивний

Швидке повідомлення

Введіть повідомлення і натисніть Надіслати

Підвал форуму