Страница 1 из 1

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

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

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

Добавлено: 09 дек 2018, 17:32
Эдуард
Здравствуйте!
Посмотрите в конце урока 35 я выложил вариант библиотеки StepDirDriverL. В нем свойство step имеет тип long.

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

Добавлено: 09 дек 2018, 17:49
Jer1ck0
Сейчас ковыряюсь с этой версией библиотеки. Не подскажете, а 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);
 }

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

Добавлено: 09 дек 2018, 18:08
Эдуард
Можно 180000. Компилятор автоматически преобразует в тип long. Можно и 180000L.

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

Добавлено: 09 дек 2018, 18:10
Jer1ck0
Код приложил выше

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

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

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

Добавлено: 11 дек 2018, 17:34
Эдуард
А в чем проблемы? Двигатель вращается? Останавливается по заданному числу шагов?

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

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

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

Добавлено: 11 дек 2018, 18:18
Эдуард
Если вы просто в цикле задаете myMotor.step(-180000); и myMotor.step(180000); в разные стороны крутит?