реверс шагового двигателя
- Войдите на сайт для отправки комментариев
Вс, 18/10/2015 - 01:18
Помогите разобраться, почему ШД не делает реверс, крутится только в одну сторону.
#include <Stepper.h>
#define steps 720
int motorPin1 = 8; // Blue / Синий - 28BYJ48 pin 1
int motorPin2 = 9; // Pink / Розовый - 28BYJ48 pin 2
int motorPin3 = 10; // Yellow / Желтый - 28BYJ48 pin 3
int motorPin4 = 11; // Orange / Оранжевый - 28BYJ48 pin 4
int button1= A2;
int button2= A3;
Stepper stepper(steps, 8, 9, 10, 11);
int stepCount = 0; // number of steps the motor has taken
int lookup[8] = {
B01000, B01100, B00100, B00110, B00010, B00011, B00001, B01001};
void setup() {
pinMode(motorPin1, OUTPUT);
pinMode(motorPin2, OUTPUT);
pinMode(motorPin3, OUTPUT);
pinMode(motorPin4, OUTPUT);
pinMode(button1, INPUT);
pinMode(button2, INPUT);
}
void loop() {
if (digitalRead(button1) == HIGH)
{
stepper.setSpeed(3);
stepper.step(1);
}
if (digitalRead(button2) == HIGH)
{
stepper.setSpeed(3);
stepper.step(-1);
}
}
Кто может,
#include <Stepper.h> int steps = 630; int motorPin1 = 8; // Blue / Синий - 28BYJ48 pin 1 int motorPin2 = 9; // Pink / Розовый - 28BYJ48 pin 2 int motorPin3 = 10; // Yellow / Желтый - 28BYJ48 pin 3 int motorPin4 = 11; // Orange / Оранжевый - 28BYJ48 pin 4 int button1= A2; int button2= A3; Stepper stepper(steps, 8, 9, 10, 11); int stepCount; // number of steps the motor has taken void setup() { pinMode(motorPin1, OUTPUT); pinMode(motorPin2, OUTPUT); pinMode(motorPin3, OUTPUT); pinMode(motorPin4, OUTPUT); pinMode(button1, INPUT); pinMode(button2, INPUT); Serial.begin(9600); } void loop() { Serial.println(stepCount); if (digitalRead(button1) == HIGH) { stepper.setSpeed(10); stepper.step(+1); stepCount++; } if (digitalRead(button2) == HIGH) { stepper.setSpeed(10); stepper.step(-1); stepCount--; } }помогите, я тут немного подтёр, но двигатель никак не хочет крутиться в обратную сторону.
для начала разберись как подключаются кнопки и что такое дребезг
потом попробуй двумя кнопками светик вкл - выкл.
когда в коде будет правильная обработка кнопок - движемся дальше
http://www.arduino.md/arduino-and-stepper-motor-28byj-48/
спасибо
скачал, загрузил и проверил скэтч, мотор рычит и вообще не двигается.
Добавил в свой скэтч - delay, с любой кнопки продолжает крутиться только в одну сторону, назад крутится не хочет.
void loop() { Serial.println(stepCount); if (digitalRead(button1) == HIGH) { stepper.setSpeed(10); stepper.step(2048); delay(1000); stepCount++; } if (digitalRead(button2) == HIGH) { stepper.setSpeed(10); stepper.step(-2048); delay(1000); stepCount--; } }включил лампочки. всё горит , включатся и выключается, но движение ротора только в одну сторону.
void loop() { Serial.println(stepCount); if (digitalRead(button1) == HIGH) { digitalWrite(led1, HIGH); stepper.setSpeed(10); stepper.step(1); delay(10); } if (digitalRead(button2) == HIGH) { digitalWrite(led2, HIGH); stepper.setSpeed(10); stepper.step(-1); delay(10); } digitalWrite(led1, LOW); digitalWrite(led2, LOW); }Попробуйте так https://www.arduino.cc/en/Tutorial/StepperOneRevolution
#include <Stepper.h> #define steps 720 const int stepsPerRevolution=200; // количество шагов в полном обороте двигателя Stepper myStepper(stepsPerRevolution,8,9,10,11); int minangle=15; // угол поворота на 1 нажатие (шаг камеры) int motorPin1 = 8; // Blue / Синий - 28BYJ48 pin 1 int motorPin2 = 9; // Pink / Розовый - 28BYJ48 pin 2 int motorPin3 = 10; // Yellow / Желтый - 28BYJ48 pin 3 int motorPin4 = 11; // Orange / Оранжевый - 28BYJ48 pin 4 int button1= A2; int button2= A3; int stepCount = 0; // number of steps the motor has taken int lookup[8] = { B01000, B01100, B00100, B00110, B00010, B00011, B00001, B01001}; void setup() { pinMode(motorPin1, OUTPUT); pinMode(motorPin2, OUTPUT); pinMode(motorPin3, OUTPUT); pinMode(motorPin4, OUTPUT); pinMode(button1, INPUT); pinMode(button2, INPUT); } void loop() { if (digitalRead(button1) == HIGH) { myStepper.step(stepsPerRevolution*minangle/360*(-1)); } if (digitalRead(button2) == HIGH) { myStepper.step(stepsPerRevolution*minangle/360); } }Или без библиотеки напрямую, будет крутить или нет, вперед/назад
int motorPin1 = 8; // Blue / Синий - 28BYJ48 pin 1 int motorPin2 = 9; // Pink / Розовый - 28BYJ48 pin 2 int motorPin3 = 10; // Yellow / Желтый - 28BYJ48 pin 3 int motorPin4 = 11; // Orange / Оранжевый - 28BYJ48 pin 4 int button1= A2; int button2= A3; int sped = 5; void setup() { pinMode(motorPin1, OUTPUT); pinMode(motorPin2, OUTPUT); pinMode(motorPin3, OUTPUT); pinMode(motorPin4, OUTPUT); pinMode(button1, INPUT); pinMode(button2, INPUT); } void loop() { if (digitalRead(button1) == HIGH) { switch (poz) { case 1: digitalWrite (motorPin1, 1 ); delay (sped); digitalWrite (motorPin1, 0 ); delay (sped); poz =2; break; case 2: digitalWrite (motorPin2, 1 ); delay (sped); digitalWrite (motorPin2, 0 ); delay (sped); poz =3; break; case 3: digitalWrite (motorPin3, 1 ); delay (sped); digitalWrite (motorPin3, 0 ); delay (sped); poz =4; break; case 4: digitalWrite (motorPin4, 1 ); delay (sped); digitalWrite (motorPin4, 0 ); delay (sped); poz =1; break; } } if (digitalRead(button2) == HIGH) { switch (poz) { case 1: digitalWrite (motorPin4, 1 ); delay (sped); digitalWrite (motorPin4, 0 ); delay (sped); poz =2; break; case 2: digitalWrite (motorPin3, 1 ); delay (sped); digitalWrite (motorPin3, 0 ); delay (sped); poz =3; break; case 3: digitalWrite (motorPin2, 1 ); delay (sped); digitalWrite (motorPin2, 0 ); delay (sped); poz =4; break; case 4: digitalWrite (motorPin1, 1 ); delay (sped); digitalWrite (motorPin1, 0 ); delay (sped); poz =1; break; } } }Спасибо за ответ
Но к сожалению ни один из вариантов не заработал, ротор мотора даже не крутится. Я не пойму, почему они утверждают, что если поменять значение на минус в stepper.step(-1); мотор начинает крутится в обратную сторону, при этом это утверждение я встречал в разных скэтчах, скачивал, проверял, у меня крутится только в одну сторону. Может нужно мотор запитать через драйвер?
Мне кажется, неплохо бы опубликовать схему включения.
Всем кто отвечал ещё раз спасибо
я поменял концы на моторе голубой на оранжевый и реверс появился с помощью минуса. Есть подозрение, что китайцы перепутали цвет проводов. Мой скэтч работает можно копировать.
Вы знаете вот эта последяя, без библиотеки, должна крутить чтобы проверить правильность подключения контактов. просто я копировал и забыл обьявить переменную poz ниже я выложу исправленую.
int motorPin1 = 8; // Blue / Синий - 28BYJ48 pin 1 int motorPin2 = 9; // Pink / Розовый - 28BYJ48 pin 2 int motorPin3 = 10; // Yellow / Желтый - 28BYJ48 pin 3 int motorPin4 = 11; // Orange / Оранжевый - 28BYJ48 pin 4 int button1= A2; int button2= A3; int sped = 5; int poz =1 ; void setup() { pinMode(motorPin1, OUTPUT); pinMode(motorPin2, OUTPUT); pinMode(motorPin3, OUTPUT); pinMode(motorPin4, OUTPUT); pinMode(button1, INPUT); pinMode(button2, INPUT); } void loop() { if (digitalRead(button1) == HIGH) { switch (poz) { case 1: digitalWrite (motorPin1, 1 ); delay (sped); digitalWrite (motorPin1, 0 ); delay (sped); poz =2; break; case 2: digitalWrite (motorPin2, 1 ); delay (sped); digitalWrite (motorPin2, 0 ); delay (sped); poz =3; break; case 3: digitalWrite (motorPin3, 1 ); delay (sped); digitalWrite (motorPin3, 0 ); delay (sped); poz =4; break; case 4: digitalWrite (motorPin4, 1 ); delay (sped); digitalWrite (motorPin4, 0 ); delay (sped); poz =1; break; } } if (digitalRead(button2) == HIGH) { switch (poz) { case 1: digitalWrite (motorPin4, 1 ); delay (sped); digitalWrite (motorPin4, 0 ); delay (sped); poz =2; break; case 2: digitalWrite (motorPin3, 1 ); delay (sped); digitalWrite (motorPin3, 0 ); delay (sped); poz =3; break; case 3: digitalWrite (motorPin2, 1 ); delay (sped); digitalWrite (motorPin2, 0 ); delay (sped); poz =4; break; case 4: digitalWrite (motorPin1, 1 ); delay (sped); digitalWrite (motorPin1, 0 ); delay (sped); poz =1; break; } } }Если нет проверяйте правильность подключения!
Вы можете даже безАрдуио подавать напряжение на двигатель согласно того что прописано в коде и он будет крутиться
Спасибо за обсуждение темы.
С анвлогичной проблемой справился благодаря этой теме, только при использовании драйвера ULN2003 достаточно поменять местами выыводы IN2 и IN3. Возможно, кому-то пригодится.
Всем спасибо, пишу, может комуто тоже моможет, тоже попалось двигло и долго мучался с реверсом. А оказалось тоже стоит поменять местами выводы in2 и in3, так что тоже помогло.