Всем доброго времени суток, есть задача. Заставить перемещаться каретку самодельного станка на определенное расстояние с определенной скоростью. Там останавливаться и ждать дальнейших указаний через порт. Скажем так перемещение состоит примерно из 180000 шагов. Функция step библотеки StepDir принимает значения +-32000. То есть код для перемещения на 32000 шагов работает как надо, если я хочу это перемещение зациклить через for то начинается постоянное движение, которое не прекращается. Как можно вызвать остановку при достижении к примеру 180000 шагов?
Заранее спасибо
Перемещение каретки на определенное расстояние
Re: Перемещение каретки на определенное расстояние
Здравствуйте!
Посмотрите в конце урока 35 я выложил вариант библиотеки StepDirDriverL. В нем свойство step имеет тип long.
Посмотрите в конце урока 35 я выложил вариант библиотеки StepDirDriverL. В нем свойство step имеет тип long.
Re: Перемещение каретки на определенное расстояние
Сейчас ковыряюсь с этой версией библиотеки. Не подскажете, а 180000 шагов прописывать просто 180000 или 180000l? и тоже самое с отрицательным значением? подставлял всевозможные варианты и мотор все равно крутится в одну сторону.
Код: Выделить всё
#include <TimerOne.h>
#include <StepDirDriverL.h>
#define PWMA 11 // выходы arduino
#define AIN1 9
#define AIN2 8
#define STBY 13
StepDirDriverL myMotor(7, 6, 5); // создаем объект типа StepDirDriver, задаем выводы для сигналов
unsigned int timeCounter; // счетчик времени
int motorSpeed = 70; // скорость мотора
int i;
void setup() {
Serial.begin(9600);//открываем порт на 9600
Timer1.initialize(250); // инициализация таймера 1, период 250 мкс
Timer1.attachInterrupt(timerInterrupt, 250); // задаем обработчик прерываний
myMotor.setMode(0, false); // шаговый режим, без фиксации при остановке
myMotor.setDivider(1); // делитель частоты 10 (1 оборот в сек)
md = 0; // начальн2й режим
myMotor.step(0); // начальный запуск
pinMode(PWMA, OUTPUT);//порты выхода мотора
pinMode(AIN1, OUTPUT);
pinMode(AIN2, OUTPUT);
pinMode(STBY, OUTPUT);
}
void loop() {
if (Serial.available() > 0) { //проверка буфера порта
int prg = Serial.read(); //присваивание содержимого к переменной
switch (prg) {
case 'a':
myMotor.step(-180000);
break;
case 'b':
myMotor.step(-10000);
break;
default:
break;
}
}
}
//-------------------------------------- обработчик прерывания 0,25 мс
void timerInterrupt() {
myMotor.control(); // управвление двигателем
timeCounter++; // счетчик времени
digitalWrite(AIN1, LOW); // крутим моторы в одну сторону
digitalWrite(AIN2, HIGH);
analogWrite(PWMA, motorSpeed);
}
Последний раз редактировалось Jer1ck0 09 дек 2018, 18:10, всего редактировалось 1 раз.
Re: Перемещение каретки на определенное расстояние
Можно 180000. Компилятор автоматически преобразует в тип long. Можно и 180000L.
Re: Перемещение каретки на определенное расстояние
Код приложил выше
Re: Перемещение каретки на определенное расстояние
Пошел третий день разборов. Не получается ровным счетом ничего. А можн осделать остановку шагового мотора по таймеру например? Если я знаю время одного оборота? Но не совсем понимаю как с помощью еще одного таймера это осуществить?
Re: Перемещение каретки на определенное расстояние
А в чем проблемы? Двигатель вращается? Останавливается по заданному числу шагов?
Re: Перемещение каретки на определенное расстояние
если я использую StepDirDriverL и большие значения шагов, то крутит только в одну сторону.
если я использую StepDirDriver то не дает сделать больше 32к шагов но все норм снаправлением.
если же я использую любой цикл, то начинается постоянное вращение без остановки.
если я использую StepDirDriver то не дает сделать больше 32к шагов но все норм снаправлением.
если же я использую любой цикл, то начинается постоянное вращение без остановки.
Re: Перемещение каретки на определенное расстояние
Если вы просто в цикле задаете myMotor.step(-180000); и myMotor.step(180000); в разные стороны крутит?
Вернуться в «Шаговые двигатели и драйверы»
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 0 гостей