Всем привет. Почему библиотека и библиотека-ли останавливает двигатель?
Собираю станочек. Шаговик должен двигать каретку туда-сюда без ускорения/замедления . От 0 до 2500 шагов. Каретка делает 7 приходов в ноль и мотор встаёт в нуле. Проверяю сигнал Step осциллографом на входе драйвера DM556-вижу сигнал пока мотор вращается, как встаёт-его нет. Значит Леонардо перестаёт его генерировать, драйвер не при чём. После сброса ситуация в точности повторяется, на седьмом приходе в ноль пропадает сигнал Step(11 pin Ардуины). Если изменить скорость, то остановка уже происходит не на 7-м приходе в ноль. Т.е. тоже меняется. Сброс не помогает.
Что я делаю не так?
#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();//вызываем часто, согласно совету разработчика.(Убирал-не помогает)
}
}
}
Вот читаю я ваш вопрос, используемый код и возникает у меня ощущение , что понимание как работает step/dir у вас есть, как должно работать есть, а как работает используемый код и библиотека Гайвера - Ни-ра-зу.
Оно вам точно надо?
Пойдите, вначале, простым, примитивным путём - без библиотек, без функций и объектов.
Это же вы сможете, это же вам понятно выбрать правильно dir и дать 2500 импульсов на step.
потом сменнить dir и отшагать столько же в обратную сторону.
Всё это в void loop() - покажет вам работоспособность вашего алгоритма
Не забывайте ненавистный многими делей между шагами делать.
Это важно - у меня на разных моторах нужна разная как длительность шага, так и паузы между шагами.
А уже потом как заработает предложенное мной упрощение добавите концевик и сброс нуля.
Не торопитесь всё сделать за один раз - так вы не разобравшись застрянете в 3-5 глюках-особенностях-ошибках, причём одновременно и окончательно запутаетесь.
Делайте по кусочку, действие за действием - тогда проще будет понять где ошибка. В каких 20 строках, а не в 800.
Да-да-да, всё было бы так смешно, как вы показываете - помоги вы человеку довести его код до конца.
А так либо он забросил это дело,
либо помогаторов за мудаков принял и больше общаться ними не желает,
либо ему не срочно и пока что-то путное в теме не появится ТС писать не будет.
Чуете ни один расклад не в пользу предыдущей помощи и подобного, Вашему стёбного подхода.
Понимаете стёб и издёвки - терпим, если вы смогли помочь, и это была “цена” вашей помощи.
а ели вы только жёлчъю побрызгали и не смогли донести простую истину - то “дураков” стало Двое. Один что задал вопрос, а второй что не смог помочь и с говёным характером
Не спорю, но если начали проявлять дружелюбие и не безразличе - то в приличном клубе, приличные люди доводят дело до конца, а не только блистают своим остроумием.
Здесь всё таки не клуб весёлых и находчивых, и масляков не прячется за вашими спинами.
Я челове новый и вижу, что темы возникают - админы их не трут - потому что всё в рамках, а люди вместо помощи получают стёб вместо адекватных ответов, чуть человечней чем цитатат из мануала.
По сравнению с зарубежными форумами жёлчи много а помощи чуть.
Я понимаю, что многие тут не педагоги и не нанимались, но только зубоскалить и троллить - не хорошо так, не выход, не по людски и терпеть такое не делает чести ни ресурсу ни завсегдатаям.
Порой возникает такое ощущение что я не на русский форум зашёл а у поляков помощи попросил…
Здесь, как и в любом приличном клубе, есть правила поведения. Одним из первых пунктов значится
На форуме действует принцип “Со своим уставом в чужой монастырь не суйся”. Не следует указывать старожилам, для чего нужен форум, и что на нем следует делать.
Вы сейчас это правило нарушаете.
Ещё раз - здесь место для общения по интересам, ни помощь, ни обучение в интересы не входят. Конечно, получить помощь здесь можно, но только если это интересно. Большая часть же жаждущих помощи такого интереса не вызывает. Мы не виноваты, что кто-то им внушил, что а) Ардуино - это просто и б) форумы существуют для помощи им.
Спасибо за разьяснение, вашего виденья и вообще традиций.
А то что-то я стал забывать почему русские форумы сами в себе и вымирают.
Я то пришёл по ссылке из поиска, в тему, где великим местным не хватило навыков или интересов помочь человеку, а потереть мёртвые темы и офтопики - тоже “не сложилось”
Строго говоря и предерживаясь уставов и традиций высказывание своего виденья, мнения, отношения и понимания - Никак нельзя трактовать за Указание
указывать старожилам, для чего нужен форум, и что на нем следует делать.
Не указывалось как, кому и что следует делать.
Говорил лишь про “абстрактный” Приличный клуб и Приличных людей.
Единственное утверждение было:
Здесь всё таки не клуб весёлых и находчивых, и масляков не прячется за вашими спинами.
Возможно в этом я и вправду ошибся. Я как раз сморю богатство и уникальность местных проектов. На новом форуме, когда остались самые “местные”, без притока свежей “глупой” крови