반응형

녹칸다가 산업용 아두이노(fa-duino)에서 스탭모터(nema17)과 드라이버(tb6600)을 제어하는 내용을 진행하려다 보니 상당히 궁금한게 생겼다!

바로 작업이 완료될때의 시간을 측정하는 것이다!

 

산업용 아두이노에 task개념을 적용하기 위해서는 스탭모터를 A위치로 이동한다음 B위치로 이동한다면 그 사이의 시간을 알고 있어야 제어가 가능하다!

 

스탭모터가 정속으로 회전한다면 별 무리가 없으나 가감속이 적용된 경우 시간을 계산하는데 대 혼란이 온다!

(과거 물리학에서 문제를 푸는 것과 같다)

 

산업용 아두이노에서는 스탭모터를 제어하기 위해 accelstepper 라이브러리(library)를 활용한다!

그리고 유저가 입력해줘야하는 값은 최대속도(setMaxSpeed), 가속도(setAcceleration), 목표이동스탭량(moveTo)이다!

 

그러면 내가 목표로 이동하고자하는 스탭량을 이동하기 위해서 스탭모터의 작동시간은 몇초가 될 것인지를 계산해야한다!

앞에서 설명했듯이 가감속이 적용되어있어서 계산하기가 상~~~당히 쉽지가 않다!

 

그래서 여기저기 기웃기웃 하다가 계산하는 공식을 기반으로 해서 아래 계산기를 첨부하게 되었으니 녹칸다의 유용한 도구로 잘 활용해보도록 하자!

 

제약 조건은 아래와 같다!

1.TB6600에 한바퀴 회전하기 위한 스탭량이 1600일것

2.가감속이 적용되는 accelstepper library를 사용할 것!

3.스탭모터가 멈춰있다가 목표지점으로 이동할 것(초기 속도가 0일 것)

 

그리고 크게 2가지 경우의 수로 시간을 계산한다!

1.스탭모터가 목표지점으로 이동할때 최대로 가속되었을때 속도가 max speed에 도달한 경우.

2.최대속도에 도달하기전에 감속이 진행되는 경우.

 

앗! 물론 위 내용은 전혀 알 필요가 없다!

계산기에서 알아서 판단해서 계산하도록 만들어 두었는데 모든 경우의 수에 대응할 수 있는지는 모르겠다!

일단 이것은 녹칸다가 개인적으로 편하게 쓰기위해서 만들어 둔 것이므로 피드백이 있을 경우 수정하도록 한다!

 

예를 들어 사용하고자 하는 accelstepper 라이브러리를 활용한 스탭모터 제어 코드가 아래와 같다고 할때

#include <AccelStepper.h>

#define DIR 6
#define STEP 7

AccelStepper stepper = AccelStepper(1, STEP, DIR);

void setup()
{  
  Serial.begin(9600);
  stepper.setMaxSpeed(3000);
  stepper.setAcceleration(1500);
}

void loop()
{
  if(Serial.available()){
    char c = Serial.read();
    if(c == '0'){
      stepper.moveTo(1600);
    }else if(c == '1'){
      stepper.moveTo(0);
    }
  }
    stepper.run();
}

stepper.setMaxSpeed(3000); // 쵀대속도가 3000이다!

stepper.setAcceleration(1500); //가속도가 1500이다!

stepper.moveTo(1600); //목표로 이동하는 이동량이 0부터 1600까지 1600이다!

 

아래 계산기에 3000, 1500, 1600을 순서대로 입력한다음 계산완료버튼을 누른다!

그럼 대략 2.07초가 계산된다!

스탭모터에 설정된 속도와 가속도로 목표지점까지 이동하는데 2.07초가 걸리므로 task를 작성할때 2.07초후에 다음 작업을 진행하도록 작성하면 아~~~주 편리할 것 같다!

 

최대속도(setMaxSpeed)
가속도(setAcceleration)
이동스탭량(moveTo)
계산결과(초)
반응형
Posted by 덕력킹
,