Перемещение каретки на определенное расстояние

Вопросы об управлении шаговыми двигателями
Jer1ck0
Сообщения: 5
Зарегистрирован: 09 дек 2018, 16:53

Перемещение каретки на определенное расстояние

Сообщение Jer1ck0 » 09 дек 2018, 16:59

Всем доброго времени суток, есть задача. Заставить перемещаться каретку самодельного станка на определенное расстояние с определенной скоростью. Там останавливаться и ждать дальнейших указаний через порт. Скажем так перемещение состоит примерно из 180000 шагов. Функция step библотеки StepDir принимает значения +-32000. То есть код для перемещения на 32000 шагов работает как надо, если я хочу это перемещение зациклить через for то начинается постоянное движение, которое не прекращается. Как можно вызвать остановку при достижении к примеру 180000 шагов?
Заранее спасибо


Эдуард
Администратор
Сообщения: 484
Зарегистрирован: 30 окт 2016, 20:53

Re: Перемещение каретки на определенное расстояние

Сообщение Эдуард » 09 дек 2018, 17:32

Здравствуйте!
Посмотрите в конце урока 35 я выложил вариант библиотеки StepDirDriverL. В нем свойство step имеет тип long.

Jer1ck0
Сообщения: 5
Зарегистрирован: 09 дек 2018, 16:53

Re: Перемещение каретки на определенное расстояние

Сообщение Jer1ck0 » 09 дек 2018, 17:49

Сейчас ковыряюсь с этой версией библиотеки. Не подскажете, а 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 раз.

Эдуард
Администратор
Сообщения: 484
Зарегистрирован: 30 окт 2016, 20:53

Re: Перемещение каретки на определенное расстояние

Сообщение Эдуард » 09 дек 2018, 18:08

Можно 180000. Компилятор автоматически преобразует в тип long. Можно и 180000L.

Jer1ck0
Сообщения: 5
Зарегистрирован: 09 дек 2018, 16:53

Re: Перемещение каретки на определенное расстояние

Сообщение Jer1ck0 » 09 дек 2018, 18:10

Код приложил выше

Jer1ck0
Сообщения: 5
Зарегистрирован: 09 дек 2018, 16:53

Re: Перемещение каретки на определенное расстояние

Сообщение Jer1ck0 » 11 дек 2018, 14:51

Пошел третий день разборов. Не получается ровным счетом ничего. А можн осделать остановку шагового мотора по таймеру например? Если я знаю время одного оборота? Но не совсем понимаю как с помощью еще одного таймера это осуществить?

Эдуард
Администратор
Сообщения: 484
Зарегистрирован: 30 окт 2016, 20:53

Re: Перемещение каретки на определенное расстояние

Сообщение Эдуард » 11 дек 2018, 17:34

А в чем проблемы? Двигатель вращается? Останавливается по заданному числу шагов?

Jer1ck0
Сообщения: 5
Зарегистрирован: 09 дек 2018, 16:53

Re: Перемещение каретки на определенное расстояние

Сообщение Jer1ck0 » 11 дек 2018, 18:05

если я использую StepDirDriverL и большие значения шагов, то крутит только в одну сторону.
если я использую StepDirDriver то не дает сделать больше 32к шагов но все норм снаправлением.
если же я использую любой цикл, то начинается постоянное вращение без остановки.

Эдуард
Администратор
Сообщения: 484
Зарегистрирован: 30 окт 2016, 20:53

Re: Перемещение каретки на определенное расстояние

Сообщение Эдуард » 11 дек 2018, 18:18

Если вы просто в цикле задаете myMotor.step(-180000); и myMotor.step(180000); в разные стороны крутит?


Вернуться в «Шаговые двигатели и драйверы»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 2 гостя