Подключил шаговик к драйверу, драйвер подключил к пинам 8,9,10,11. Взял вот такой пример: Код (C++): #include <AccelStepper.h> AccelStepper stepper(8, 8, 9, 10, 11); // Указываем пины, к которым подключен драйвер шагового двигателя void setup() { stepper.setMaxSpeed(500); stepper.setSpeed(200); } void loop() { // читаем значение с потенциометра int val_a = analogRead(A0); // получаем скорость(от 50 до 500) относительно значения потенциометра(от 0 до 1023) int motorSpeed = map(val_a, 0, 1023, 50, 500); // задаем скорость мотору stepper.setSpeed(motorSpeed); // вращаем мотор stepper.runSpeed(); } Проблема такая: двигатель вроде как работает, но его дико трясет, и он вращается прерывисто. Да и вообще, мне кажется, что он делает несколько шагов в одну сторону, потом пропускает несколько шагов, потом пару шагов делает в другую сторону и тп. С библиотекой CustomStepper всё работало нормально, а AccelStepper не работает. Подскажите, в чем дело?! PS и еще: светодиоды ABCD на драйвере загораются черт знает как. Они вообще должны загораться последовательно, или в порядке 1-3-4-2?
Два вопроса - зачем вы сразу взяли пример с регуляцией скорости через АналогРид? - может для начала константу поставить? - реально потенциометр к А0 подключен. или просто пин пустой? ну и третий... мы же с Вами обсуждали библиотеку Stepper . AccelStepper - 'это Stepper c ускорением, более сложная и временами глючная. Почему не начать со Stepper
1, 2) Да просто у меня потенциометр уже был подключен, поэтому не стал убирать analogRead. С ним проблем нет, проблема только библиотекой. 3) Дело в том, что мне нужно контролировать, повернулся ли двигатель. То есть, следующее положение ему нужно задавать только тогда, когда он достиг предыдущей точки. В библиотеке CustomStepper был метод isDone, который позволял это контролировать, в accelstepper тоже что-то похожее есть, а в Stepper нет... Ох, как я с этими шаговиками намучился... Кстати, библиотеку Stepper я тоже попробовал, но ничего не заработало: драйвер пищит, все светодиоды горят, а двигатель не крутится.
1, 2) Да просто у меня потенциометр уже был подключен, поэтому не стал убирать analogRead. С ним проблем нет, проблема только библиотекой. 3) Дело в том, что мне нужно контролировать, повернулся ли двигатель. То есть, следующее положение ему нужно задавать только тогда, когда он достиг предыдущей точки. В библиотеке CustomStepper был метод isDone, который позволял это контролировать, в accelstepper тоже что-то похожее есть, а в Stepper нет... Ох, как я с этими шаговиками намучился... Кстати, библиотеку Stepper я тоже попробовал, но ничего не заработало: драйвер пищит, все светодиоды горят, а двигатель не крутится.
Не имея обратной связи от двигателя, например энкодера на валу - вы это никак проконтролировать не сможете. То. что сообщает вам библиотека - это только то, что она закончила выдавать на мотор команды. А повернулся ли он и на какой угол - это неизвестно. Если вы возьмете и заклините вал мотора совсем - библиотека с радостью сообщит вам isDone() = true. хотя мотор не повернется ни на градус. то, что у вас ни одна библиотека не работает - скорее всего означает. что вы что-то не так делаете. Например, перепутали выводы шагового мотора В принципе, для такой элементарной задачи, как повернуть шаговик на некий угол - вообще никакие библиотеки не нужны, достаточно замыкать обмотки мотора в нужном порядке