ошибка в коде энкодер шаговый двигатель
- Войдите на сайт для отправки комментариев
Ср, 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 - нужно сделать несколько оборотов. Вот вам и "тормоза"