Всем привет. Почему библиотека и библиотека-ли останавливает двигатель?
Собираю станочек. Шаговик должен двигать каретку туда-сюда без ускорения/замедления . От 0 до 2500 шагов. Каретка делает 7 приходов в ноль и мотор встаёт в нуле. Проверяю сигнал Step осциллографом на входе драйвера DM556-вижу сигнал пока мотор вращается, как встаёт-его нет. Значит Леонардо перестаёт его генерировать, драйвер не при чём. После сброса ситуация в точности повторяется, на седьмом приходе в ноль пропадает сигнал Step(11 pin Ардуины). Если изменить скорость, то остановка уже происходит не на 7-м приходе в ноль. Т.е. тоже меняется. Сброс не помогает.
Что я делаю не так?
Код ниже:
Собираю станочек. Шаговик должен двигать каретку туда-сюда без ускорения/замедления . От 0 до 2500 шагов. Каретка делает 7 приходов в ноль и мотор встаёт в нуле. Проверяю сигнал Step осциллографом на входе драйвера DM556-вижу сигнал пока мотор вращается, как встаёт-его нет. Значит Леонардо перестаёт его генерировать, драйвер не при чём. После сброса ситуация в точности повторяется, на седьмом приходе в ноль пропадает сигнал Step(11 pin Ардуины). Если изменить скорость, то остановка уже происходит не на 7-м приходе в ноль. Т.е. тоже меняется. Сброс не помогает.
Что я делаю не так?
Код ниже:
C++:
#include "GyverStepper.h"
GStepper<STEPPER2WIRE> stepper(800, 11, 4, 1);
int speedstep = 2000;//задаём скорость
const uint32_t oborot = 2500;//количество шагов в однусторону
long d;
void homming() // шаговик едет домой, ищет концевик, позиция сбрасывается в 0
{
if (digitalRead(6)) //проверка концевика
{ stepper.setSpeed(-2000);
while (digitalRead(6))
stepper.tick();
}
else //это если при включении ардуины каретка уже дома, но всё равно ищем верный 0
{
stepper.setSpeed(400);
while (!digitalRead(6))
{
stepper.tick();
}
stepper.reset(); // тормозим, приехали
stepper.setSpeed(-400);
while (digitalRead(6))
{
stepper.tick();
}
}
stepper.reset();// стоп и сброспозиции в 0
}
void setup()
{
pinMode(6, INPUT_PULLUP); // концевик 0
stepper.setMaxSpeed(speedstep);
stepper.setAcceleration(0);
stepper.autoPower(true);
stepper.setRunMode(KEEP_SPEED);
homming(); //устанавливаем каретку в 0
stepper.setSpeed(2000);
}
void loop()
{
stepper.tick(); //вызываем часто, согласно совету разработчика.
if (d != stepper.getCurrent()) //чтобы switch срабатывал только 1 раз в контрольной точке
{
switch (stepper.getCurrent())
{
case 0: //Вот в этом нуле на седьмой раз мотор останавливается.
d = stepper.getCurrent();
while (digitalRead(6) == 1) {};// если мы в 0 а концевик не сработал, значит был пропуск шагов.Корректируем
stepper.setSpeed(speedstep);
stepper.tick();//вызываем часто, согласно совету разработчика.(Убирал-не помогает)
break;
case 1250:
d = stepper.getCurrent();
stepper.tick();//вызываем часто, согласно совету разработчика.(Убирал-не помогает)
break;
case 2500:
d = stepper.getCurrent();
stepper.setSpeed(-1 * speedstep);//разворот
stepper.tick();//вызываем часто, согласно совету разработчика.(Убирал-не помогает)
break;
default:
d = stepper.getCurrent();
stepper.tick();//вызываем часто, согласно совету разработчика.(Убирал-не помогает)
}
}
}
Изменено: