#1 2019-10-14 14:36:03

leons
Участник
Зарегистрирован: 2019-10-14
Сообщений: 33

управление шаговым двигателем

Помогите найти ошибку в скетче , мотор должен отработать 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(); //запуск шагового двигателя. Эта строка повторяется вновь и вновь для непрерывного вращения двигателя

}

#2 2019-10-14 15:14:42

г0сть
Гость

Re: управление шаговым двигателем

во второй строке очепятка или как?

#3 2019-10-14 15:54:04

leons
Участник
Зарегистрирован: 2019-10-14
Сообщений: 33

Re: управление шаговым двигателем

вот тут ,AccelStepper Stepper1(1.13,12); //использует пин 12 и 13 для dir и step, 1 - режим "external driver" (A4988)
драйвер у меня другой

#4 2019-10-14 16:55:25

leons
Участник
Зарегистрирован: 2019-10-14
Сообщений: 33

Re: управление шаговым двигателем

нашлась ошибка (1.13,12)

#5 2019-10-14 16:58:57

leons
Участник
Зарегистрирован: 2019-10-14
Сообщений: 33

Re: управление шаговым двигателем

с 13 пина может переназначить чтоб не моргал светодиод ??

#6 2019-10-14 20:29:04

Kaka
Участник
Зарегистрирован: 2018-03-21
Сообщений: 358

Re: управление шаговым двигателем

leons пишет:

нашлась ошибка (1.13,12)

Главное, сам нашёл smile

#7 2019-10-14 21:24:09

leons
Участник
Зарегистрирован: 2019-10-14
Сообщений: 33

Re: управление шаговым двигателем

Kaka пишет:
leons пишет:

нашлась ошибка (1.13,12)

Главное, сам нашёл smile


    Гость помог , ещё бы кнопку привязать вкл. выкл. к ENBL  smile

#8 2019-10-14 22:26:54

г0сть
Гость

Re: управление шаговым двигателем

leons пишет:

    ещё бы кнопку привязать вкл. выкл. к ENBL  smile

так в чем проблема?

#9 2019-10-14 22:46:28

leons
Участник
Зарегистрирован: 2019-10-14
Сообщений: 33

Re: управление шаговым двигателем

г0сть пишет:
leons пишет:

    ещё бы кнопку привязать вкл. выкл. к ENBL  smile

так в чем проблема?


   Учится говорят никогда не поздно , у меня с этим не сраслось. я больше по старинке возьму двух позиционный тумблер и буду переключать ENBL   с +5в на GND  cool а вот скорость регулировать потенциометром больше надо
    Я не программист а так зашёл сюда ,как то нужно было сделать счётчик и помогла мне одна программка Flprog, а там с шаговиками как-то не дружат но пытаются по мелочи я про форумчян   big_smile

#10 2019-10-14 22:52:19

г0сть
Гость

Re: управление шаговым двигателем

т.е вам нужно одной кнопкой включать/выключать? Ну так digitalWrite(номер_пина_к_которому_подключен_ENBL, HIGH); или LOW в зависимости от потребности

#11 2019-10-15 11:49:26

leons
Участник
Зарегистрирован: 2019-10-14
Сообщений: 33

Re: управление шаговым двигателем

г0сть пишет:

т.е вам нужно одной кнопкой включать/выключать?


так , я выложу код

#12 2019-10-15 21:28:18

г0сть
Гость

Re: управление шаговым двигателем

ждем-с ....

#13 2019-10-17 21:21:07

leons
Участник
Зарегистрирован: 2019-10-14
Сообщений: 33

Re: управление шаговым двигателем

вот , на железе не проверял , с кавычками наверное напутал

#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(); //запуск шагового двигателя. Эта строка повторяется вновь и вновь для непрерывного вращения двигателя

}

#14 2019-10-18 09:27:16

ard125
Участник
Зарегистрирован: 2019-01-30
Сообщений: 63

Re: управление шаговым двигателем

leons пишет:

вот , на железе не проверял

думаете кто-то будет за вас проверять?

leons пишет:

с кавычками наверное напутал

и не только с кавычками
Ну и далее: во-первых, избавьтесь от дребезга. Во-вторых, у вас кнопка с фиксацией или без? Если без фиксации то нужно еще предусмотреть запоминание состояния кнопки. Иначе мотор будет крутиться до тех пор пока кнопка нажата.

#15 2019-10-18 10:46:24

leons
Участник
Зарегистрирован: 2019-10-14
Сообщений: 33

Re: управление шаговым двигателем

Кнопка планируется с фиксацией

#16 2019-10-18 12:43:10

г0сть
Гость

Re: управление шаговым двигателем

leons пишет:

Кнопка планируется с фиксацией

тогда уж действительно чем не вариант

по старинке возьму двух позиционный тумблер и буду переключать ENBL   с +5в на GND

#17 2019-10-18 18:10:42

leons
Участник
Зарегистрирован: 2019-10-14
Сообщений: 33

Re: управление шаговым двигателем

мы уже начали программно значит тому и быть

#18 2019-10-18 19:13:06

ard125
Участник
Зарегистрирован: 2019-01-30
Сообщений: 63

Re: управление шаговым двигателем

ошибки уже исправили?

#19 2019-10-18 20:09:01

leons
Участник
Зарегистрирован: 2019-10-14
Сообщений: 33

Re: управление шаговым двигателем

#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);//выключаем
 
 }
 
 } 

#20 2019-10-18 20:11:18

leons
Участник
Зарегистрирован: 2019-10-14
Сообщений: 33

Re: управление шаговым двигателем

завтра снесу всё железо буду пробовать ,  компелируетса без ошибок

#21 2019-10-19 11:21:27

ard125
Участник
Зарегистрирован: 2019-01-30
Сообщений: 63

Re: управление шаговым двигателем

leons пишет:

  компелируетса без ошибок

сурьёзно?

#22 2019-10-19 18:36:41

leons
Участник
Зарегистрирован: 2019-10-14
Сообщений: 33

Re: управление шаговым двигателем

ard125 пишет:
leons пишет:

  компелируетса без ошибок

сурьёзно?

   

   почти, не считая ковычек, дальше прикрутить потенциометр для регулировки скорости или задержки

#23 2019-10-19 18:41:10

ard125
Участник
Зарегистрирован: 2019-01-30
Сообщений: 63

Re: управление шаговым двигателем

"ковычки" - это типа фигурные скобки {} ?
Я бы на вашем месте сначала исправил все ошибки и проверил работу кода с кнопкой, а потом уже брался бы за потенциометры.

Редактировался ard125 (2019-10-19 18:41:35)

#24 2019-10-19 19:49:32

leons
Участник
Зарегистрирован: 2019-10-14
Сообщений: 33

Re: управление шаговым двигателем

вот рабочий скетч ,
вот только скорость меня волнует , перепробовал увеличивать  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)

#25 2019-10-19 20:55:02

leons
Участник
Зарегистрирован: 2019-10-14
Сообщений: 33

Re: управление шаговым двигателем

почему моторчик с принтера такой быстрый а мой NEMA 23  НЕ МОЖЕТ ЕГО ДОГНАТЬ
https://www.youtube.com/watch?v=dlrjSMwTy_w

https://www.youtube.com/watch?v=oahy5K4drJk

Быстрое сообщение

Введите сообщение и нажмите Отправить

Подвал раздела