Вращения шагового двигателя на указанный угол с дисплея

. Здравствуйте,мне нужно написать код на Arduino IDE. Вот моя схема, у меня есть
Плата микроконтроллера Arduino Uno
Плата управления на драйвере DRV8825
Модуль питания, имеющий 3,3 5 и 12 Вольт напряжения
4.Модуль энкодера KY-035
5.Дисплей на базе драйвера TM1637
6.Тумблер
7.Блок питания 9В и 1А.
8.Шаговый двигатель Nema 17 42BYGHM609
Шаговый двигатель подключен к плате управления на драйвере DRV8825, с этой платы управления выводятся Step на 2 пин ардуино, Direction на 3 пин ардуино и Eneble на 4 пин ардуино, тумблер подключен к 5 и 6 пину ардуино,модуль энкодера на 7(SW) 8(DT) и 9(Clk) пин.
Дисплей подключен к Analog In к А5(CLK) ПИНУ И А4(Dio) . Мне нужно чтобы Шаговый двигатель поворачивался на заданный угол поворота(от 0 до 360 градусов) и останавливался при достижении этого угла, это надо сделать так, чтобы изначально на дисплее было значение 0, и дальше при повороте ручки энкодера это числовое значение на дисплее увеличивалось(если я кручу ручку вправо) и после выставления этого значения на дисплее я должен нажать на кнопку энкодера и двигатель должен повернуться на этот угол и остановиться при достижении этого угла, далее я могу опять изменить угол на дисплее путем вращении ручки энкодера, или оставить такой как есть. Основная проблема в том, что с
двигателем 28BYJ-48, все работает, а с Nema 17 даже не поворачивается, пробовал менять скорость, тоже ничего, помогите пожалуйста

#include <TM1637Display.h>
#include <AccelStepper.h>
#include <Encoder.h>

#define CLK A5
#define DIO A4
#define STEP_PIN 2
#define DIR_PIN 3
#define MS1_PIN 4
#define MS2_PIN 5
#define MS3_PIN 6
#define BUTTON_PIN 7
#define HALL_PIN A2 // Пин, к которому подключен датчик Холла KY-035

TM1637Display display(CLK, DIO);
Encoder myEnc(8, 9);
AccelStepper stepper(AccelStepper::DRIVER, STEP_PIN, DIR_PIN);
int angle = 0;
int targetAngle = 0;
int direction = 1;
int stepMode = 1;
bool buttonPressed = false;
bool motorRunning = false;
bool encoderTouched = false;

void save_parameters() {
  // Здесь ваш код для сохранения параметров
  // Например, сохранение в EEPROM или в другое хранилище
}

void setup() {
  pinMode(MS1_PIN, OUTPUT);
  pinMode(MS2_PIN, OUTPUT);
  pinMode(MS3_PIN, OUTPUT);
  pinMode(BUTTON_PIN, INPUT_PULLUP);
  display.setBrightness(0x0f);
  stepper.setMaxSpeed(10000);
  stepper.setAcceleration(10000);
  motorRunning = false;
  pinMode(HALL_PIN, INPUT);
  Serial.begin(9600); // Инициализация монитора порта
}

void loop() {
  int newPosition = myEnc.read();
  angle = newPosition;
  display.showNumberDec(angle);

  // Измерение напряжения с датчика Холла KY-035
  int hallSensorValue = analogRead(HALL_PIN); // Чтение значения с аналогового пина
  float voltage = hallSensorValue * (5.0 / 1023.0); // Преобразование значения в диапазон напряжений

  Serial.print("Hall Voltage: ");
  Serial.println(voltage, 2); // Вывод значения напряжения с двумя десятичными знаками

  if (digitalRead(BUTTON_PIN) == LOW && !buttonPressed && !motorRunning) {
    targetAngle = angle;
    buttonPressed = true;
    motorRunning = true;
    int steps = calculateSteps(targetAngle);
    stepper.move(steps);
    stepper.setSpeed(direction * 1000); // Увеличение скорости вращения двигателя
  }

  if (digitalRead(BUTTON_PIN) == HIGH) {
    buttonPressed = false;
  }

  if (motorRunning) {
    if (stepper.distanceToGo() == 0 && motorRunning) {
      motorRunning = false;
      display.showNumberDec(targetAngle);
      save_parameters(); // Сохранение параметров после остановки двигателя
      Serial.println("Motor stopped");
    }
    stepper.run();
  }

  if (digitalRead(5) == LOW) {
    direction = -1;
  } else {
    direction = 1;
  }

  switch (stepMode) {
    case 1:
      digitalWrite(MS1_PIN, LOW);
      digitalWrite(MS2_PIN, LOW);
      digitalWrite(MS3_PIN, LOW);
      break;
    case 2:
      digitalWrite(MS1_PIN, HIGH);
      digitalWrite(MS2_PIN, LOW);
      digitalWrite(MS3_PIN, LOW);
      break;
    case 3:
      digitalWrite(MS1_PIN, LOW);
      digitalWrite(MS2_PIN, HIGH);
      digitalWrite(MS3_PIN, LOW);
      break;
    case 4:
      digitalWrite(MS1_PIN, HIGH);
      digitalWrite(MS2_PIN, HIGH);
      digitalWrite(MS3_PIN, LOW);
      break;
    case 5:
      digitalWrite(MS1_PIN, HIGH);
      digitalWrite(MS2_PIN, HIGH);
      digitalWrite(MS3_PIN, HIGH);
      break;
  }
}

int calculateSteps(int targetAngle) {
  Serial.print("Target angle: ");
  Serial.println(targetAngle);
  
  int stepsPerRevolution = 0;
  switch (stepMode) {
    case 1:
      stepsPerRevolution = 200; // полношаговый режим
      break;
    case 2:
      stepsPerRevolution = 400; // полушаговый режим
      break;
    case 3:
      stepsPerRevolution = 800; // 1/4 шага
      break;
    case 4:
      stepsPerRevolution = 2048 * 8; // 1/8 шага
      break;
    case 5:
      stepsPerRevolution = 2048 * 16; // 1/16 шага
      break;
  }

  float stepResolution = 1; // Разрешение шага (по умолчанию 1)
  float steps = (float)targetAngle / 360.0 * (float)(stepsPerRevolution * stepResolution);
  return round(steps);
}

По описанию , у Nema 17 номинальный ток 1.7А.
Какой источник питания для него используете?

9 В, 1А, с другим скетчем он вращался вроде нормально, вот с этим проьлема что-то

У драйвера минимальное рабочее напряжение 8.2 V.
Если что-то и работало, то на грани. Я бы начал с того, что взял более подходящий источник питания.

P.S. Как “костыльный” вариант можно попробовать добавить по питанию двигателя конденсатор примерно 470 - 1000мкф на 25-50В

Действительно, если автомобиль легко буксирует прицеп в 450 кг, это совершенно не значит, что то же самое он способен проделывать с 8-тонным прицепом.
Да и двигатели немного разные. То, что к одному идет 4 провода, а к другому 5, на размышления не навело?

И вообще, если задаете вопрос, его обязательно надо сопровождать принципиальной схемой.

Так на D4 подключен EN или MS1 ?
Где EN → LOW?

Где???

Это схема в стиле xGPT ))

Это куда конденсатор подключать. А то мало ли что…
Screenshot_1.111777png