Код 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);
}
}
}
@shweta S, 👍1
Обсуждение1 ответ
Я упомянул в комментариях, что вы должны считывать кнопки с помощью 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);
}
}
}
- Arduino uno + cnc Shield v3 + драйвер шагового двигателя A4988 + AccelStepper?
- Запустить два степпера одновременно
- Могу ли я запретить библиотеке Stepper удерживать двигатель?
- Питание двух шаговых двигателей с драйверами A4988
- Управление функцией включения на драйвере микрошагового устройства
- Шаговый двигатель с датчиком HCSR-04
- Шаговый двигатель не работает с платой A4988
- Nema 17, Arduino Uno и шаговый двигатель ~2H42B
Разделите проблему, проверьте, работает ли код кнопки, используя ее для включения светодиода. Затем запустите двигатель. (Есть ли причина, по которой вы используете аналоговые выводы?), @Code Gorilla
Я думаю, вам нужно считывать данные с кнопок с помощью analogRead(), поскольку вы подключили их к контактам A0 и A1 Arduino (контакты A0 и A1 являются аналоговыми)., @Sonali_B
Сколько проводов использует двигатель?, @jsotola
Ваш код выглядит так, как будто он написан для управления обычным двигателем., @jsotola