리니어 이송레일 엑추에이터 구동실험

아두이노를 사용하여 리니어 이송레일을 구동하는 실험을 합니다. 400mm 리니어 이송 레일 슬라이더이며, T8(8mm) 2mm피치(한바퀴에 2mm이동)의 리드스크류와 NEMA17 4248 스텝모터가 사용되었습니다.
이송속도는 초당 0~20mm이며 오차는 약 0.5mm입니다. 횡축 부하는 최대 15Kg입니다.
스텝모터는 DC12V(3A) 또는 24V(1.5A) 전원으로 TB6560 스텝모터드라이버를 통해 구동합니다.

 

 

1. 가변저항을 사용한 정역구동 실험

 

10K가변저항을 사용하여 정역제어 및 속도제어를 하며 아두이노 보드의 A0핀을 통해 아날로그 값을 입력 받습니다.

아래는 실제 구동모습입니다.

- 결선 방법

1. 스텝모터 케이블을 스텝모터드라이브보드에 연결한 후 조여줍니다.

스텝모터는 총 4개의 선을 가지고 있으며 각각 A+ A- B+ B- 상을 나타냅니다.

 

 

2. DC 전원 케이블을 스텝모터드라이브보드에 연결한 후 조여줍니다. 

모터를 구동하기 위한 전원이 필요하며 여기서는 DC12V 5A 전원아답터를 사용합니다. 아답터와 연결을 위한 DC잭 연결케이블을 모터드라이버에 +/- 극성에 맞에 연결합니다.

 

3. 아두이노 보드와 스텝모터드라이브보드를 결선해줍니다.

아두이노 보드로 스텝모터를 제어할 수 있도록 합니다. 아두이노 보드에서 GND와 디지털IO 8번, 9번을 사용하게 됩니다.

 

 

 

4. 가변저항과 아두이노보드를 결선합니다.

가변저항의 VCC와 GND(1번과 3번핀)는 아두이노 보드의 5V와 GND로 연결하고 2번핀은 A0로 연결합니다.

 

 

 

 

 

라이브러리는 아래 링크에서 다운로드하고 아두이노 프로그램 메뉴에서 스케치->라이브러리 포함하기->.ZIP 라이브러리 추가를 누르고, 파일선택창이 나오면 다운받은 라이브러리 파일을 선택하시면 됩니다.

라이브러리

소스코드

아래는 소스코드입니다. 아두이노 IDE에 붙여넣기 하여 컴파일하고 업로드합니다.

// 가변저항을 이용한 리니어 이송레일 정역제어

/* 라이브러리 include */
#include <HCMotor.h>

/* 모터드라이버 연결핀 */
#define DIR_PIN 8 //스텝모터드라이버 DIR 연결핀
#define CLK_PIN 9 //스텝모터드라이버 CLK 연결핀

/* 가변저항 연결핀 */
#define POT_PIN A0

/* 스텝모터 구동 중간지점(데드존 영역) */
#define DEADZONE 20 

/* 아날로그 입력값 0~1024 값으로 정역영역지정 */
#define POT_REV_MIN 0
#define POT_REV_MAX (512 - DEADZONE)
#define POT_FWD_MIN (512 + DEADZONE)
#define POT_FWD_MAX 1024

/* HCMotor 라이브러리 인스턴스 생성 */
HCMotor HCMotor;

void setup() 
{

  /* 라이브러리 초기화 */
  HCMotor.Init();

  /* 모터0을 스텝모터로 설정하고 연결된 핀을 지정 */
  HCMotor.attach(0, STEPPER, CLK_PIN, DIR_PIN);

  /* 모터를 연속동작모드로 설정*/
  HCMotor.Steps(0,CONTINUOUS);
}


void loop() 
{
  int Speed, Pot;

  /* 가변저항으로 부터 아날로그 값을 입력받음 */ 
  Pot = analogRead(POT_PIN);

  /* 역방향? */
  if (Pot >= POT_REV_MIN && Pot <= POT_REV_MAX)
  {
    HCMotor.Direction(0, REVERSE);
    Speed = map(Pot, POT_REV_MIN, POT_REV_MAX, 10, 1024);

  /* 정방향? */
  }else if (Pot >= POT_FWD_MIN && Pot <= POT_FWD_MAX)
  {
    HCMotor.Direction(0, FORWARD);
    Speed = map(Pot, POT_FWD_MIN, POT_FWD_MAX, 1024, 10);

  /* 데드존(중간지점)? */
  }else
  {
    Speed = 0;
  }

  /* 속도설정 */
  HCMotor.DutyCycle(0, Speed);

}

 

2. 리미트스위치를 이용한 왕복구동 실험

 

 

- 결선 및 리미트스위치 조립방법

1. 스텝모터 케이블을 스텝모터드라이브보드에 연결한 후 조여줍니다.

스텝모터는 총 4개의 선을 가지고 있으며 각각 A+ A- B+ B- 상을 나타냅니다.

2. DC 전원 케이블을 스텝모터드라이브보드에 연결한 후 조여줍니다. 

모터를 구동하기 위한 전원이 필요하며 여기서는 DC12V 5A 전원아답터를 사용합니다. 아답터와 연결을 위한 DC잭 연결케이블을 모터드라이버에 +/- 극성에 맞에 연결합니다.

3. 아두이노 보드와 스텝모터드라이브보드를 결선해줍니다.

아두이노 보드로 스텝모터를 제어할 수 있도록 합니다. 아두이노 보드에서 GND와 디지털IO 8번, 9번을 사용하게 됩니다.

 

 

4. 리미트 스위치 조립방법

리미트 스위치를 고정하기 위한 서포트를 리니어레일에 조립합니다. 먼저 레일의 홀에 너트를 집어넣고 핀셋 등으로 너트가 수평이 되도록 합니다.

서포트를 너트에 넣고 조여줍니다. 너트를 드라이버등으로 잡아주면서 서포트를 돌리면 고정이 쉽습니다.

다음으로 아래와 같이 리미트 스위치를 볼트로 서포트위에 고정합니다.

 

반대 쪽도 같은 방법으로 리미트 스위치를 단단하게 고정시켜 줍니다. 

 

3P 수수 점퍼선을 사용하여 리미트 스위치 케이블에서 브레드보드로 연결합니다. 2개의 리미트 스위치에서 5V와 GND 선을 모아서 아두이노 보드로 연결하게 됩니다.

리미트 스위치의 신호선은 브레드보드를 거쳐 각각 오른쪽 리미트 스위치는 디지털IO 3번과, 왼쪽 리미트 스위치틑 디지털IO 2번과 연결하면 됩니다.

 

 

 

 

 

 

 

라이브러리는 아래 링크에서 다운로드하고 아두이노 프로그램 메뉴에서 스케치->라이브러리 포함하기->.ZIP 라이브러리 추가를 누르고, 파일선택창이 나오면 다운받은 라이브러리 파일을 선택하시면 됩니다.

라이브러리

소스코드

아래는 소스코드입니다. 아두이노 IDE에 붙여넣기 하여 컴파일하고 업로드합니다.

// 리미트스위치를 사용한 왕복구동 실험

/* 라이브러리 include */
#include <HCMotor.h>


/* 모터드라이버 연결핀 */
#define DIR_PIN 8 //스텝모터드라이버 DIR 연결핀
#define CLK_PIN 9 //스텝모터드라이버 CLK 연결핀
/* 리미트스위치 연결핀 */
#define LLIMIT_PIN 3
#define RLIMIT_PIN 2

/* HCMotor 라이브러리 인스턴스 생성 */
HCMotor HCMotor;

int Speed = 10;

void setup() 
{
  /* 라이브러리 초기화 */
  HCMotor.Init();

  /* 모터0을 스텝모터로 설정하고 연결된 핀을 지정 */
  HCMotor.attach(0, STEPPER, CLK_PIN, DIR_PIN);

  /* 모터를 연속동작모드로 설정*/
  HCMotor.Steps(0,CONTINUOUS);
  /* 속도설정 */
  HCMotor.DutyCycle(0, Speed);
  
  pinMode(LLIMIT_PIN, INPUT); 
  pinMode(RLIMIT_PIN, INPUT); 

  
}

void loop() 
{
  /* 왼쪽 리미트스위치가 감지되면 정방향, 오른쪽 리미트스위치가 감지되면 역방향 */
  if (digitalRead(LLIMIT_PIN) == LOW)
    HCMotor.Direction(0, FORWARD);
  else if (digitalRead(RLIMIT_PIN) == LOW)
    HCMotor.Direction(0, REVERSE);
  
}