ошибка в коде энкодер шаговый двигатель
- Войдите на сайт для отправки комментариев
Ср, 02/06/2021 - 12:21
Доброго времени суток!!!
Есть желающие разобраться в коде
чисто по моим предположениям код не идеален поэтому для того чтобы крутить правильно шаговик нужны небольшие скорости в настройках кода. но я выкручивал их на полную) в итоге получал на выходе кучу импульсов. самопроизвольно потомучто не должен шаговик ходить больше чем энкодер отправил сигнала.
вот пример 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();
}
Есть желающие разобраться в коде
Это вопрос, просто знак "?" случайно пропущен? Или это утверждение?
Что касается остального Вашего текста
то я его прочитал очень внимательно и никаких вопросов или просьб к сообществу не обнаружил.
Чего Вы от нас хотите?
от вас хотел поиск ошибок в коде
был в соискателях никто не ответил
будем терпеливы подождем
благодарю за ответ
вот пример 2 кода в одном я encoder_pos (stepper.moveTo((long) round() установил вручную и моторчик бодро отработал шаги, но когда с енкодера идет сигнал та же позиция отрабатывает с тормозами.
может потому что вручную вы установили сразу 500 шагов, а чтобы энкодером накрутить хотя бы 100 - нужно сделать несколько оборотов. Вот вам и "тормоза"