ошибка в коде энкодер шаговый двигатель

Arduinchlk
Arduinchlk аватар
Offline
Зарегистрирован: 15.03.2021

Доброго времени суток!!!

Есть желающие разобраться в коде

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

вот пример 2 кода в одном я encoder_pos (stepper.moveTo((long) round() установил вручную и моторчик бодро отработал шаги, но когда с енкодера идет сигнал та же позиция отрабатывает с тормозами.

#include <Arduino.h>
#include <AccelStepper.h>

#define encoder_pin_A 2
#define encoder_pin_B 3
int encoder_pin_A_last = LOW;
int encoder_pos = 0;
int n = LOW;

#define stepper_pin_step 13
#define stepper_pin_dir  14 //useless
// Enc have 24 steps per revolution
// The motor have 800 steps per revolution
// Want: 1 encoder rev = 1 stepper rev
// 800 / 24 = 33.3333333333...
float steps_per_pulse = 1.2;

AccelStepper stepper(AccelStepper::DRIVER, stepper_pin_step, stepper_pin_dir);

void setup(){
  stepper.setMaxSpeed(25000);
  stepper.setAcceleration(25000);

  pinMode(encoder_pin_A, INPUT_PULLUP);
  pinMode(encoder_pin_B, INPUT_PULLUP);

}

void loop(){

 // read encoder
  n = digitalRead(encoder_pin_A);

  if ((encoder_pin_A_last == LOW) && (n == HIGH)) {
    if (digitalRead(encoder_pin_B) == LOW) {
      encoder_pos--;
    } else {
      encoder_pos++;
    }
    // set stepper to the new calculated position
stepper.moveTo((long) round(500*steps_per_pulse));

      }


      encoder_pin_A_last = n;
      stepper.runToPosition();
}

с сигналом с энкодера


#include <Arduino.h>
#include <AccelStepper.h>

#define encoder_pin_A 2
#define encoder_pin_B 3
int encoder_pin_A_last = LOW;
int encoder_pos = 0;
int n = LOW;

#define stepper_pin_step 13
#define stepper_pin_dir  14 //useless
// Enc have 24 steps per revolution
// The motor have 800 steps per revolution
// Want: 1 encoder rev = 1 stepper rev
// 800 / 24 = 33.3333333333...
float steps_per_pulse = 1.2;

AccelStepper stepper(AccelStepper::DRIVER, stepper_pin_step, stepper_pin_dir);

void setup(){
  stepper.setMaxSpeed(25000);
  stepper.setAcceleration(25000);

  pinMode(encoder_pin_A, INPUT_PULLUP);
  pinMode(encoder_pin_B, INPUT_PULLUP);

}

void loop(){

 // read encoder
  n = digitalRead(encoder_pin_A);

  if ((encoder_pin_A_last == LOW) && (n == HIGH)) {
    if (digitalRead(encoder_pin_B) == LOW) {
      encoder_pos--;
    } else {
      encoder_pos++;
    }
    // set stepper to the new calculated position
stepper.moveTo((long) round(encoder_pos*steps_per_pulse));

      }


      encoder_pin_A_last = n;
      stepper.runToPosition();
}

 

 

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Arduinchlk пишет:

Есть желающие разобраться в коде

Это вопрос, просто знак "?" случайно пропущен? Или это утверждение?

Что касается остального Вашего текста

Arduinchlk пишет:

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

вот пример 2 кода в одном я encoder_pos (stepper.moveTo((long) round() установил вручную и моторчик бодро отработал шаги, но когда с енкодера идет сигнал та же позиция отрабатывает с тормозами.

то я его прочитал очень внимательно и никаких вопросов или просьб к сообществу не обнаружил.

Чего Вы от нас хотите?

Arduinchlk
Arduinchlk аватар
Offline
Зарегистрирован: 15.03.2021

от вас хотел поиск ошибок в коде

был в соискателях никто не ответил

 

Arduinchlk
Arduinchlk аватар
Offline
Зарегистрирован: 15.03.2021

будем терпеливы подождем

благодарю за ответ

 

b707
Offline
Зарегистрирован: 26.05.2017

Arduinchlk пишет:

вот пример 2 кода в одном я encoder_pos (stepper.moveTo((long) round() установил вручную и моторчик бодро отработал шаги, но когда с енкодера идет сигнал та же позиция отрабатывает с тормозами.

может потому что вручную вы установили сразу 500 шагов, а чтобы энкодером накрутить хотя бы 100 - нужно сделать несколько оборотов. Вот вам и "тормоза"