Ви не увійшли.
Помогите найти ошибку в скетче , мотор должен отработать 200 шагов по часовой и 100 против часовой и так в цикле , а шагает в одну сторону
#include <AccelStepper.h>
AccelStepper Stepper1(1.13,12); //использует пин 12 и 13 для dir и step, 1 - режим "external driver" (A4988)
int dir = 1; //используется для смены направления
int step = 2; //єто у нас будетшаг (если 1- на 200 двигаем,2-на 100)
int dist = 100; //дистанция
void setup()
{
Stepper1.setMaxSpeed(6000); //устанавливаем максимальную скорость вращения ротора двигателя (шагов/секунду)
Stepper1.setAcceleration(20000); //устанавливаем ускорение (шагов/секунду^2)
}
void loop()
{
if(Stepper1.distanceToGo()==0)
{ //проверка, отработал ли двигатель предыдущее движение
if (step==1) //если біл шаг 2- тогда следующий -1
{
step = 2;
dist = 100;
}
else
{
step = 1;
dist = 200;
}
Stepper1.move(dist*dir);
dir = dir*(-1); //отрицательное значение dir, благодаря чему реализуется вращение в противоположном направлении
delay(500); //задержка на 1 секунду
}
Stepper1.run(); //запуск шагового двигателя. Эта строка повторяется вновь и вновь для непрерывного вращения двигателя
}
Неактивний
во второй строке очепятка или как?
ещё бы кнопку привязать вкл. выкл. к ENBL
так в чем проблема?
leons пише:ещё бы кнопку привязать вкл. выкл. к ENBL
так в чем проблема?
Учится говорят никогда не поздно , у меня с этим не сраслось. я больше по старинке возьму двух позиционный тумблер и буду переключать ENBL с +5в на GND а вот скорость регулировать потенциометром больше надо
Я не программист а так зашёл сюда ,как то нужно было сделать счётчик и помогла мне одна программка Flprog, а там с шаговиками как-то не дружат но пытаются по мелочи я про форумчян
Неактивний
т.е вам нужно одной кнопкой включать/выключать? Ну так digitalWrite(номер_пина_к_которому_подключен_ENBL, HIGH); или LOW в зависимости от потребности
ждем-с ....
вот , на железе не проверял , с кавычками наверное напутал
#include <AccelStepper.h>
AccelStepper Stepper1(1,11,12); //использует пин 12 и 11 для dir и step, 1 - режим "external driver"
int dir = 1; //используется для смены направления
int step = 2; //єто у нас будет шаг (если 1- на 100 двигаем,2-на 200)
int dist = 400; //дистанция
int buttonPin = 2; // номер порта нашей кнопки
int EnblPin = 13; // номер порта ENBL
void setup()
{
Stepper1.setMaxSpeed(6000); //устанавливаем максимальную скорость вращения ротора двигателя (шагов/секунду)
Stepper1.setAcceleration(13000); //устанавливаем ускорение (шагов/секунду^2)
pinMode(enblPin, OUTPUT); // устанавливаем порт ENBL на выход
pinMode(buttonPin, INPUT); // устанавливаем порт кнопки на вход
}
void loop() {
int buttonState = digitalRead(buttonPin); // читаем состояние порта кнопки и записываем в переменную
{
if (buttonState == HIGH) // делаем простую проверку нашей переменной, если на входе в порт кнопки присутствует напряжение
digitalWrite(endlPin, HIGH); // подаем 5 вольт на порт enbl
} else {
digitalWrite(enblPin, LOW); // выключаем enbl
}
if(Stepper1.distanceToGo()==0)
{ //проверка, отработал ли двигатель предыдущее движение
if (step==1) //если біл шаг 2- тогда следующий -1
{
step = 2;
dist = 100;
}
else
{
step = 1;
dist = 200;
}
Stepper1.move(dist*dir);
dir = dir*(-1); //отрицательное значение dir, благодаря чему реализуется вращение в противоположном направлении
delay(1000); //задержка на 1 секунду
}
Stepper1.run(); //запуск шагового двигателя. Эта строка повторяется вновь и вновь для непрерывного вращения двигателя
}
Неактивний
вот , на железе не проверял
думаете кто-то будет за вас проверять?
с кавычками наверное напутал
и не только с кавычками
Ну и далее: во-первых, избавьтесь от дребезга. Во-вторых, у вас кнопка с фиксацией или без? Если без фиксации то нужно еще предусмотреть запоминание состояния кнопки. Иначе мотор будет крутиться до тех пор пока кнопка нажата.
Неактивний
Кнопка планируется с фиксацией
тогда уж действительно чем не вариант
по старинке возьму двух позиционный тумблер и буду переключать ENBL с +5в на GND
#include <AccelStepper.h>
AccelStepper Stepper1(1,11,12); //использует пин 12 и 11 для dir и step, 1 - режим "external driver"
int dir = 1; //используется для смены направления
int step = 2; //єто у нас будетшаг (если 1- на 100 двигаем,2-на 200)
int dist = 400; //дистанция
int buttonPin = 2; // номер порта нашей кнопки
int EnblPin = 13; // номер порта ENBL
void setup()
{
Stepper1.setMaxSpeed(6000); //устанавливаем максимальную скорость вращения ротора двигателя (шагов/секунду)
Stepper1.setAcceleration(13000); //устанавливаем ускорение (шагов/секунду^2)
pinMode(13, OUTPUT);
}
void loop()
{
if(Stepper1.distanceToGo()==0)
{ //проверка, отработал ли двигатель предыдущее движение
if (step==1) //если біл шаг 2- тогда следующий -1
{
step = 2;
dist = 100;
}
else
{
step = 1;
dist = 200;
}
Stepper1.move(dist*dir);
dir = dir*(-1); //отрицательное значение dir, благодаря чему реализуется вращение в противоположном направлении
delay(1000); //задержка на 1 секунду
}
Stepper1.run(); //запуск шагового двигателя. Эта строка повторяется вновь и вновь для непрерывного вращения двигателя
}
{
if(digitalRead(2)==HIGH)//если кнопка нажата ...
{
digitalWrite(13,HIGH);//включаем светодиод
}
else//если не нажата...
{
digitalWrite(13,LOW);//выключаем
}
}
Неактивний
"ковычки" - это типа фигурные скобки {} ?
Я бы на вашем месте сначала исправил все ошибки и проверил работу кода с кнопкой, а потом уже брался бы за потенциометры.
Остання редакція ard125 (2019-10-19 18:41:35)
Неактивний
вот рабочий скетч ,
вот только скорость меня волнует , перепробовал увеличивать Stepper1.setMaxSpeed(6000); вплоть до 240000, разницы не заметил ,а в FLprog визуально быстрее, у меня драйвер работает в полушаговом режиме
#include <AccelStepper.h>
AccelStepper Stepper1(1,11,12); //использует пин 12 и 11 для dir и step, 1 - режим "external driver"
int dir = 1; //используется для смены направления
int step = 2; //єто у нас будетшаг (если 1- на 100 двигаем,2-на 200)
int dist = 400; //дистанция
int buttonPin = 2; // номер порта нашей кнопки
int EnblPin = 13; // номер порта ENBL
void setup()
{
Stepper1.setMaxSpeed(6000); //устанавливаем максимальную скорость вращения ротора двигателя (шагов/секунду)
Stepper1.setAcceleration(13000); //устанавливаем ускорение (шагов/секунду^2)
pinMode(13, OUTPUT);
}
void loop()
{
if(Stepper1.distanceToGo()==0)
{ //проверка, отработал ли двигатель предыдущее движение
if (step==1) //если біл шаг 2- тогда следующий -1
{
step = 2;
dist = 100;
}
else
{
step = 1;
dist = 200;
}
Stepper1.move(dist*dir);
dir = dir*(-1); //отрицательное значение dir, благодаря чему реализуется вращение в противоположном направлении
delay(200); //задержка на 1 секунду
}
Stepper1.run(); //запуск шагового двигателя. Эта строка повторяется вновь и вновь для непрерывного вращения двигателя
{
if(digitalRead(2)==HIGH)//если кнопка нажата ...
{
digitalWrite(13,HIGH);//включаем светодиод
}
else//если не нажата...
{
digitalWrite(13,LOW);//выключаем
}
}
}
Остання редакція leons (2019-10-19 19:57:50)
Неактивний
почему моторчик с принтера такой быстрый а мой NEMA 23 НЕ МОЖЕТ ЕГО ДОГНАТЬ
https://www.youtube.com/watch?v=dlrjSMwTy_w
Неактивний