Код Arduino не работает для униполярного шагового двигателя

Я использую униполярный шаговый двигатель 1,8 градуса. Я написал код для вращения шагового двигателя, то есть, когда вывод A0 становится HIGH, он должен вращаться по часовой стрелке, а когда вывод A1 становится HIGH, он должен двигаться против часовой стрелки, но двигатель вращается только один раз, когда я делаю A0/A1 HIGH, а затем останавливается. После этого он не вращается, даже если я делаю выводы A0, A1 высокими. Я совсем новичок в этом, пожалуйста, скажите, как решить эту проблему. Я использую микрошаговый привод, шаговый двигатель Nema 17 и плату Arduino Uno.

#include <Stepper.h>

#define STEPS_PER_MOTOR_REVOLUTION 32

#define STEPS_PER_OUTPUT_REVOLUTION 32 * 200 //2048  

Stepper small_stepper(STEPS_PER_MOTOR_REVOLUTION, 9, 8);
int  Steps2Take;
int buttonApin = A0;
int buttonBpin = A1;
int dirpin = 8;
int steppin = 9;
void setup()
{
  pinMode(buttonApin, INPUT);
  pinMode(buttonApin, INPUT);
  pinMode(dirpin, OUTPUT);
  pinMode(steppin, OUTPUT);
  small_stepper.setSpeed(1900);
}
void loop()
{
  int valA = digitalRead(buttonApin);

  if (valA == HIGH)
  { digitalWrite(dirpin, HIGH);
    for (int x = 0; x < 100; x++)
    { digitalWrite(steppin, HIGH);
      delayMicroseconds(1000);
      digitalWrite(steppin, LOW);
      delayMicroseconds(1000);
    }
  }
  int valB = digitalRead(buttonBpin);

  if (valB == HIGH)
  {
    digitalWrite(dirpin, LOW);
    for (int x = 0; x < 100; x++)
    {
      digitalWrite(steppin, LOW);
      delayMicroseconds(1000);
      digitalWrite(steppin, HIGH);
      delayMicroseconds(1000);
    }
  }
}

, 👍1

Обсуждение

Разделите проблему, проверьте, работает ли код кнопки, используя ее для включения светодиода. Затем запустите двигатель. (Есть ли причина, по которой вы используете аналоговые выводы?), @Code Gorilla

Я думаю, вам нужно считывать данные с кнопок с помощью analogRead(), поскольку вы подключили их к контактам A0 и A1 Arduino (контакты A0 и A1 являются аналоговыми)., @Sonali_B

Сколько проводов использует двигатель?, @jsotola

Ваш код выглядит так, как будто он написан для управления обычным двигателем., @jsotola


1 ответ


2

Я упомянул в комментариях, что вы должны считывать кнопки с помощью analogRead(). Но вы можете сделать это другим способом, просто подключив вывод кнопки к цифровым входам на arduino (любой от 0 до 13). Аналоговые выводы в основном используются для доступа к данным датчиков, насколько мне известно. Я исправляю ваш код следующим образом:

#include <Stepper.h>

#define STEPS_PER_MOTOR_REVOLUTION 32

#define STEPS_PER_OUTPUT_REVOLUTION 32 * 200 //2048

Stepper small_stepper(STEPS_PER_MOTOR_REVOLUTION, 9, 8);
int  Steps2Take;
int buttonApin = 4; //подключаем кнопку к цифровому выводу 4 на arduino
int buttonBpin = 5; //подключаем кнопку к цифровому выводу 5 на arduino
int dirpin = 8;
int steppin = 9;
void setup()
{
  pinMode(buttonApin, INPUT);
  pinMode(buttonApin, INPUT);
  pinMode(dirpin, OUTPUT);
  pinMode(steppin, OUTPUT);
  small_stepper.setSpeed(1900);
}
void loop()
{
  int valA = digitalRead(buttonApin);

  if (valA == HIGH)
  { digitalWrite(dirpin, HIGH);
    for (int x = 0; x < 100; x++)
    { digitalWrite(steppin, HIGH);
      delayMicroseconds(1000);
      digitalWrite(steppin, LOW);
      delayMicroseconds(1000);
    }
  }
  int valB = digitalRead(buttonBpin);

  if (valB == HIGH)
  {
    digitalWrite(dirpin, LOW);
    for (int x = 0; x < 100; x++)
    {
      digitalWrite(steppin, LOW);
      delayMicroseconds(1000);
      digitalWrite(steppin, HIGH);
      delayMicroseconds(1000);
    }
  }
}
,