Проблема с AccelStepper

Обсуждение установки, настройки и использования LinuxCNC. Вопросы по Gкоду.
VladM
Новичок
Сообщения: 3
Зарегистрирован: 27 окт 2016, 09:37
Репутация: 0
Настоящее имя: Владислав
Контактная информация:

Проблема с AccelStepper

Сообщение VladM »

Здравствуйте!
Arduino UNO + CNC shild + A4988 + NEMA 17 0.9
Делитель выставлен на 1/16
Связка прекрасно работает с grbl.
Но заливаю тестовый скетч:

Код: Выделить всё

#include <AccelStepper.h>

AccelStepper Zaxis(1, 4, 7);

void setup() {
  Serial.begin(115200);
  Zaxis.setMaxSpeed(12000);
  Zaxis.setAcceleration(16000);
  Zaxis.setSpeed(6000);
  Zaxis.move(-8000);
}

void loop() {
  Zaxis.run();
}
и получаю странную работу двигателя. Сначала он делает несколько оборотов в противоположную сторону, затем отрабатывает перемещение в правильном направлении. Причем если указать положительно направление, то такого глюка нет. Отрабатывает правильно.
В чем может быть дело?
Спасибо!
Duhas
Мастер
Сообщения: 1961
Зарегистрирован: 10 окт 2015, 23:25
Репутация: 285
Настоящее имя: Андрей
Откуда: Красноярск
Контактная информация:

Re: Проблема с AccelStepper

Сообщение Duhas »

может я чего не понимаю, но в функции setup должны задавать настройки, к каким команда move в моем восприятии относиться не может. с другой стороны имеется команда run, которая либо запускает на выполнение поставленную задачу либо просто разрешает работу оси. В целом совет один - почитать документацию к библиотеке.. ну и составить для себя алгоритм работы, для начала на бумажке.
VladM
Новичок
Сообщения: 3
Зарегистрирован: 27 окт 2016, 09:37
Репутация: 0
Настоящее имя: Владислав
Контактная информация:

Re: Проблема с AccelStepper

Сообщение VladM »

Duhas писал(а):может я чего не понимаю, но в функции setup должны задавать настройки, к каким команда move в моем восприятии относиться не может. с другой стороны имеется команда run, которая либо запускает на выполнение поставленную задачу либо просто разрешает работу оси. В целом совет один - почитать документацию к библиотеке.. ну и составить для себя алгоритм работы, для начала на бумажке.
Насчет move вопрос спорный, т.к. это не команда, а скорее место хранения информации о расстоянии, на которое нужно переместиться. Сама по себе эта "команда" ничего не запускает. А вот запускается непосредственно перемещение командой run(), точнее её непрерывным повторением.
В любом случае, в исходном скетче, где впервые была замечена эта проблема move в setup не было. Вот изначальный код:

Код: Выделить всё

#include <AccelStepper.h>

#define MAX_BUF        (64)
char buffer[MAX_BUF];  // where we store the message until we get a newline
int sofar;  // how much is in the buffer

AccelStepper Zaxis(1, 4, 7);

float parsenumber(char code,float val) {
  char *ptr=buffer;
  while(ptr && *ptr && ptr<buffer+sofar) {
    if(*ptr==code) {
      return atof(ptr+1);
    }
    ptr=strchr(ptr,' ')+1;
  }
  return val;
}
void processCommand() {
  int cmd = parsenumber('G',-1);
  switch(cmd) {
    case  1:
    Zaxis.setSpeed(1600*parsenumber('F',0)/60);
    Zaxis.move(1600*parsenumber('Z',0)); 
    //Serial.print(parsenumber('F',0));
    //Serial.print(parsenumber('Z',0));
    break;
    default:  break;
    }
 }

void setup() {
  Serial.begin(115200);
  sofar=0;
  Zaxis.setMaxSpeed(12000);
  Zaxis.setAcceleration(16000);
}
void loop() {
  // listen for serial commands
  while(Serial.available() > 0) {  // if something is available
    char c=Serial.read();  // get it
    //Serial.print(c);  // repeat it back so I know you got the message
    if(sofar<MAX_BUF-1) buffer[sofar++]=c;  // store it
    if((c=='\n') || (c == '\r')) {
      // entire message received
      buffer[sofar]=0;  // end the buffer so string functions work right
      //Serial.print(F("\r\n"));  // echo a return character for humans
      processCommand();
      Serial.print("ok\n");
      sofar=0;
    }
  }
  Zaxis.run();
}
Примитивный парсер g-code для управления одним двигателем. Парсится всё правильно, setSpeed() и move() получают нужные значения. Но при отрицательных значениях перемещения такое странное поведение двигателя. При положительных, повторюсь, всё нормально.
Duhas
Мастер
Сообщения: 1961
Зарегистрирован: 10 окт 2015, 23:25
Репутация: 285
Настоящее имя: Андрей
Откуда: Красноярск
Контактная информация:

Re: Проблема с AccelStepper

Сообщение Duhas »

загляните в библиотеку аксельстеппер, ну или сюда ее прикрепите
VladM
Новичок
Сообщения: 3
Зарегистрирован: 27 окт 2016, 09:37
Репутация: 0
Настоящее имя: Владислав
Контактная информация:

Re: Проблема с AccelStepper

Сообщение VladM »

Duhas писал(а):загляните в библиотеку аксельстеппер, ну или сюда ее прикрепите
http://www.airspayce.com/mikem/arduino/ ... r-1.53.zip
Duhas
Мастер
Сообщения: 1961
Зарегистрирован: 10 окт 2015, 23:25
Репутация: 285
Настоящее имя: Андрей
Откуда: Красноярск
Контактная информация:

Re: Проблема с AccelStepper

Сообщение Duhas »

В текстовом виде а форуме погляжу, качать не буду
Ответить

Вернуться в «LinuxCNC»