Здравствуйте! Столкнулся с такой проблемой (см скетч), у меня не одновременно останавливаются двигателя. Двигателя вращают 2 вала, одинакового шага (2мм), но задача состоит в том, чтобы за один оборот одного двигателя, второй проходил 0,2 мм. Оба двигателя вращают правильное количество оборотов. Но один на доли секунд вращает дольше, и с увеличением числа оборотов эти секунды растут. Мне кажется это из-за функции ускорения. Вопрос: Можно ли в этой библотеке задать так, чтобы двигателя начали свое вращение без ускорения? , #include <AccelStepper.h> AccelStepper Stepper1(4, 8, 9, 10, 11); //использует пин 12 и 13 для dir и step, 1 - режим "external driver" (A4988) AccelStepper Stepper2(4, 2, 3, 4, 5); int KNOPKA1 = 7; // пин кнопки положительное вращение int KNOPKA2 = 6; // пин кнопки отрицательное long steeps1 = 96000; // количество шагов на 60 оборотов вала long steeps2 = 9600; // количество шагов на 6 оборотов вала long KNO1 = 0; // Исходное значение для таймера. long KNO2 = 200; // 200 милисекунд предотвращения повторного нажатия long dir = 1; //используется для смены направления void setup() { Stepper1.setMaxSpeed(5000); //устанавливаем максимальную скорость вращения ротора двигателя (шагов/секунду) Stepper1.setAcceleration(3000); //устанавливаем ускорение (шагов/секунду^2) pinMode(KNOPKA1, INPUT_PULLUP); // включаем внутренний подтягивающий резистор pinMode(KNOPKA2, INPUT_PULLUP); // включаем внутренний подтягивающий резистор Stepper2.setMaxSpeed(500); Stepper2.setAcceleration(300); //Stepper1.setSpeed(3000); //Stepper2.setSpeed(300); } void loop() { unsigned long r = millis(); if(digitalRead(KNOPKA2) == 1) { if(r - KNO1 > KNO2) { Stepper2.move(steeps2); Stepper1.move(steeps1); steeps2 = steeps2*1; steeps1 = steeps1*1; KNO1 = r; } } Stepper1.run(); Stepper2.run(); if(digitalRead(KNOPKA1) == 1) { if(r - KNO1 > KNO2) { Stepper2.move(-steeps2); Stepper1.move(steeps1); steeps2 = steeps2*1; steeps1 = steeps1*1; KNO1 = r; } } Stepper1.run(); Stepper2.run(); }
Если можно подскажите пожалуйста, где посмотреть или вы имеете ввиду, посмотреть по форуму? Просто при отключения строк задающих максимальную скорость и ускорение, останется строга управления скорости, но этот оператор не может заставить вращаться двигатель должным образом. Двигатель начинает вращаться, только очень медленно, с постепенным ускорение которое тоже очень медленно.
примеры - AccelStepeer - examples - ConstantSpeed там нет ускорения - замедления а вообще правильно делать на одном моторе два НИКОГДА не будут одинаково работать
Или рисовать свою библиотеку на спареные ШД , но при плохом драйвере или питании возможно проскальзование.
Похоже у вас наверное маразм или склероз. Работать они будут, а вот синхроно нет . Вы сами про это писали, или уже забыли. Так включите свою шарманку и посмотрите. Или это не вы написали??
Кхм, не хочу показаться человеком желающим придти на всё готовенькое, но блин, та же проблема. Для corexy дёрнуло самому прошивку написать. Как всегда подумал - да чего там сложного. Теперь мучаюсь. В общем чтобы например направить каретку по траектории скажем 30 градусов, нужна как раз такая синхронизация. И вроде как мне кажется я её логично вычисляю, но что-то не так. И начинаю сомневаться что дело в разгоне. Я поставил его на 10000 сразу. То есть его вклад минимален. Дело походу в скорости, потому как с увеличением расстояния разница растёт, а фактор ускорения действует только на старте и финише. расстояние а - 3000 шагов, расстояние б - 1000 шагов логичная скорость для а - 1600 шагов в секунду, для б - 533, а реальная для б - 333 Ума не приложу что с этим делать. Вы случайно не смогли найти решение?