Перемещение, ограниченное датчиками

Вопросы об управлении шаговыми двигателями
Eugene
Сообщения: 20
Зарегистрирован: 12 окт 2017, 23:12

Re: Перемещение, ограниченное датчиками

Сообщение Eugene » 25 окт 2017, 03:11

останавливается, крутится но скорость не меняется, что не так?


#include <AccelStepper.h>

#define STEP 10

#define DIR 11

#define EN 12

AccelStepper Stepper1(1, STEP, DIR);

float analogPin = A0;

float SPEED;
float valSensor;

int left_Button = 4;
int right_Button = 3;
int start_Button = 2;
int led_pin = 13;



void setup(){

Serial.begin(9600); // инициализируем порт, скорость 9600

pinMode(left_Button, INPUT);
pinMode(right_Button, INPUT);
pinMode(start_Button, INPUT);
pinMode(analogPin, INPUT);
pinMode(led_pin, OUTPUT);

Stepper1.setMaxSpeed(15000); //устанавливаем максимальную скорость вращения ротора двигателя (шагов/секунду)

Stepper1.setAcceleration(10000); //устанавливаем ускорение (шагов/секунду^2)

}

void loop() {

valSensor = analogRead(analogPin);
SPEED = valSensor;
Serial.println(SPEED);

if (digitalRead(start_Button) == HIGH) {
Stepper1.moveTo(-5000);
Stepper1.setSpeed(SPEED);

}

if (digitalRead(right_Button) == HIGH) {
Stepper1.stop();
Stepper1.setCurrentPosition(0);
Stepper1.moveTo(5000);
}

else if (digitalRead(left_Button) == HIGH) {
Stepper1.stop();
Stepper1.setCurrentPosition(0);
}



Stepper1.runSpeed();
// Stepper1.run();

}


Эдуард
Администратор
Сообщения: 484
Зарегистрирован: 30 окт 2016, 20:53

Re: Перемещение, ограниченное датчиками

Сообщение Эдуард » 25 окт 2017, 09:46

Здравствуйте!
Я эту библиотеку никогда не использовал. А почему такая высокая скорость? 15000 шагов в сек.

Eugene
Сообщения: 20
Зарегистрирован: 12 окт 2017, 23:12

Re: Перемещение, ограниченное датчиками

Сообщение Eugene » 26 окт 2017, 04:54

Это всего лишь цифра, далекая от реальности
Проблема была в Serial.println(SPEED) Любая операция приводит к падению скорости до минимума. Вот бы совместить их плавное регулирование, позиционирование и вашу многозадачность. А пока ситуация следующая:

//valSensor = analogRead(map(analogPin, 0 ,1023, 1, 2000)); //при использовании скорость падает 60 шагов/32 с = 1,875 шаг/с
valSensor = analogRead(analogPin);
Skorost = valSensor*2,95;
//Serial.println(Skorost); // при использовании скорость падает 60 шагов/32 с = 1,875 шаг/с



if (digitalRead(start_Button) == HIGH) {


//вариант 1 60000/21 = 2857 шаг/с при 1,8гр 200 шаг/оборот 14,2 об/с или 857 об/мин
//Stepper1.setCurrentPosition(0);
//Stepper1.moveTo(60000);
//Stepper1.run();

//вариант 2 60000/14 = 4285 шаг/с при 1,8гр 200 шаг/оборот 21,4 об/с или 1285 об/мин
//Stepper1.setCurrentPosition(0);
//Stepper1.moveTo(60000);
//Stepper1.runToPosition();

//вариант 3 6000/18,5 = 324 шаг/с (скорость явно не указана)
//Stepper1.setCurrentPosition(0);
//Stepper1.moveTo(6000);
//Stepper1.runSpeedToPosition();

//вариант 4 60000/32 = 1875 шаг/с при 1,8гр 200 шаг/оборот 9,3 об/с или 562 об/мин(в процессе движения скорость не меняется)
//Stepper1.setCurrentPosition(0);
//Stepper1.moveTo(60000);
//Stepper1.setSpeed(-Skorost); //1022*2.95 (2,95 макс множитель, при котором движок вращается)
//Stepper1.runSpeedToPosition();

//вариант 5 (не останавливается)
//Stepper1.setCurrentPosition(0);
//Stepper1.moveTo(600);
//Stepper1.runSpeed();

//вариант 6 (не останавливается, скорость не изменяется)
Stepper1.setCurrentPosition(0);
Stepper1.moveTo(60);
Stepper1.setSpeed(-Skorost);
}
Stepper1.runSpeed();

Eugene
Сообщения: 20
Зарегистрирован: 12 окт 2017, 23:12

Re: Перемещение, ограниченное датчиками

Сообщение Eugene » 26 окт 2017, 05:58

Возвращаясь к вопросу скорости, воспользовался вашей программой: 25000 шагов, делитель 2, коммутация - шаговая, шагов/оборот - 200, период - 200 мкс. Расчетная скорость - 750 об/мин. Время - 32 с !!! 25000/200 = 125 об (за 32 с), т.е. 250 в мин. В чем я ошибаюсь?

Эдуард
Администратор
Сообщения: 484
Зарегистрирован: 30 окт 2016, 20:53

Re: Перемещение, ограниченное датчиками

Сообщение Эдуард » 26 окт 2017, 10:09

Можно так посчитать. Период переключения фаз 200 мкс * делитель (2) = 0,4 мс. Время одного оборота 0,4 мс * 200 = 0,08 сек или 12,5 об/сек. В минуту 12,5 * 60 = 750 об/мин. Время на 25000 шагов = 25000/200 = 125 оборотов * 0,08 = 10 сек.


Вернуться в «Шаговые двигатели и драйверы»

Кто сейчас на конференции

Сейчас этот форум просматривают: MailRu [Bot] и 2 гостя