Здравствуйте. помогите собрать систему. необходимо задавать шаговому двигателю необходимое число оборотов к примеру,нажал кнопку-двигатель провернулся строго на 50/2оборота ,и так далее генератор импульсов присмотрел на али.но им можно только регулировать скорость вращения в наличии шд23/57 и драйвер HBS57H
Например, так. Двигатель делает 100 шагов в одном направлении, потом обратно. Код (C++): #include <AccelStepper.h> #define POSITION 100 // позиция, к которой должен двигаться двигатель // Устанавливаем выводы const int enaPin = 2; const int dirPin = 3; const int stepPin = 4; // MotorInterfaceType, STEP, DIR AccelStepper myStepper(AccelStepper::DRIVER, stepPin, dirPin); int pos = 0; void setup() { // включение драйвера pinMode( enaPin, OUTPUT ); digitalWrite( enaPin, 0 ); // Устанавливаем максимальную скорость, коэффициент ускорения, // начальную скорость и целевую позицию int stepperSpeed = 150; myStepper.setMaxSpeed(stepperSpeed); myStepper.setAcceleration(stepperSpeed / 0.5); // ускорение 0.5 секунд myStepper.setSpeed(stepperSpeed); myStepper.moveTo(POSITION); } void loop() { // Изменение направления вращения, когда двигатель достигнет заданного положения if (myStepper.distanceToGo() == 0) { pos = POSITION - myStepper.currentPosition(); myStepper.moveTo(pos); } // Передвинуть на 1 шаг myStepper.run(); }
Привет, не хочу плодить новых тем, очень странное поведение очень простого кода. Задача простая, при появлении определенного уровня сигнала должен вращаться мотор 2, а через определенное время в данном случае 3,5 секунды, должны вращаться мотор 1 и мотор 2. Но в этом коде оба мотора начинают вращаться вместе. Код (C++): #include <GyverFilters.h> GFilterRA analog7; #include "GyverStepper2.h" GStepper2<STEPPER2WIRE> stepper1(400,4); GStepper2<STEPPER2WIRE> stepper2(200,6); #include "GyverWDT.h" static uint32_t tmr; bool flag = false; void setup() { Watchdog.enable(RESET_MODE, WDT_PRESCALER_512); analog7.setCoef(0.02); analog7.setStep(20); pinMode(4, OUTPUT); // + step servo pinMode(5, OUTPUT); // - step servo pinMode(6, OUTPUT); // + step steper pinMode(7, OUTPUT); // - step steper pinMode(A7, INPUT); // фоторезистор сигнал pinMode(19, OUTPUT); // питание фоторезистора digitalWrite(19, HIGH); digitalWrite(5, LOW); digitalWrite(7, LOW); stepper1.setAcceleration(150); stepper2.setAcceleration(150); stepper1.setMaxSpeed(10000); stepper2.setMaxSpeed(10000); } void loop() { stepper1.tick(); stepper2.tick(); if (analog7.filteredTime(analogRead(A7)) >= 150) { stepper2.setSpeed(700); if (millis() - tmr > 3500) { tmr = millis(); stepper1.setSpeed(100); } } else { stepper1.brake(); stepper2.brake(); } Watchdog.reset(); } где я ошибся?
Сброс таймера "tmr = millis()" по другому нужно делать. Сбросить один раз с триггеризацией, когда датчик сработал.
Если кто в курсе,подскажите по этой штуковине,не могу сообразить,. Выставил в настройках параметры при которых двигатель делает один оборот до следующего нажатия кнопки.Но при увеличении скорости вращения энкодером на панельки контроллера , двигатель продолжает вращаться некоторое время и точка останова постепенно смещается по ходу вращения.Если вернуть скорость, двигатель производит точно один оборот без смещения. не могу понять в чем причина. (энкодер на моторе +драйвер должны были бы среагировать на это.однако ошибки нет)
здравствуйте, Использую прошивку "Марлин" (в свободном доступе). При нажатии кнопки "Дом" все три оси станка перемещаются на 10мм . Какое значение в строках программы нужно заменить (исключить) ,что бы при "парковки " не было этих перемещений? Т.е "0" оставался там ,где была остановка ("зип" не получается прикрепить)