본문 바로가기

관리하지않음/아두이노

[아두이노] DM860H 드라이버로 NEMA 23각 스텝모터 제어하기​​​

어쩌다 보니 NEMA 23각 스텝 모터와 DM860H 모터 드라이버가 생겼습니다.

 

NEMA23 모터 + DM860H 모터 드라이버

공모전에 제출한 아이디어 구현을 위해서 이 모터를 꼭 써야 한다는데,

구매한 곳에서는 Mach3 라는 프로그램을 사용하는 방법만 제공했습니다.

 

판매처 "미스터 조각기" 포스팅 - 모터, 모터드라이버 연결 세팅하기

 

구글링을 해봐도 한글로 된 포스팅이나 영상은 제대로 된 게 없었습니다.

모터에 어떤 신호를 줘야 하는지 몰라서 헤매다가, 영어로 된 유튜브 영상 하나를 발견했습니다.

아래 영상에서는 아두이노로 DM860H 드라이버와 스텝모터 제어하는 방법을 알려줬습니다.

 

Big Stepper Motors with Arduino

 

오늘 포스팅에서는 위 영상을 따라한 모터+모터 드라이버 사용법과, 더 간단한 예제 코드를 정리했습니다.

1. 필요한 부품

영상에서 튜토리얼로 제공하는 회로를 구성하기 위해서는 DM860H 모터 드라이버와 스텝 모터, 아두이노를 제외하고도 택틱스위치(버튼), 저항, 가변저항 그리고 24V 파워서플라이가 필요했습니다.

 

아두이노 우노를 제외하고는 기본적인 빵판도 없던 터라, 공모전 사업비가 지급되자마자 아두이노 기본키트, 24V 파워서플라이 및 220용 파워코드를 구매했습니다.

 

24V 파워서플라이 + 220용 파워코드 (가격 싼거로 아무거나 구매했습니다.)

24V 파워서플라이는 제가 가지고 있는 NEMA 23각 스텝 모터가 24V 전원 인가를 필요로 해서 구매했습니다.

220용 파워코드는 파워서플라이를 집 콘센트와 연결하기 위해서 구매했습니다. 

2. 회로 구성

유튜브에서 찾은 튜토리얼 영상에 나오는 회로 구성도입니다.

출처 : https://dronebotworkshop.com/big-stepper-motors/

회로도와 똑같이 보드와 부품들을 연결해줬습니다.

먼저 파워서플라이, 파워코드, DM860H 모터를 연결합니다.

 

파워서플라이 + 파워코드 + DM860H 모터드라이버 연결

그리고 NEMA 23각 스텝 모터와 DM860H 모터를 연결합니다.

 

DM860H 모터드라이버 + NEMA 23각 스텝모터

 

그리고 아두이노와 DM860H모터를 연결하고 , 택틱스위치, 가변저항을 사용해 보드를 구성해줍니다.

 

실제 보드 구성

급하게 보드 구성을 해서 알아보기가 어렵습니다. 

회로도 보고 핀 번호만 맞게 알아서 꽂으시면 됩니다.

3. 코드

보드를 잘 연결했다면, 튜토리얼에서 나온 코드를 아두이노 보드에 올려주세요.

아래 URL에서 유튜버가 제공하는 article과 code를 볼 수 있습니다.

 

https://dronebotworkshop.com/big-stepper-motors/

/*
  Stepper Motor Test
  stepper-test01.ino
  Uses MA860H or similar Stepper Driver Unit
  Has speed control & reverse switch
  
  DroneBot Workshop 2019
  https://dronebotworkshop.com
*/

// Defin pins

int reverseSwitch = 2;  // Push button for reverse
int driverPUL = 7;    // PUL- pin
int driverDIR = 6;    // DIR- pin
int spd = A0;     // Potentiometer

// Variables

int pd = 500;       // Pulse Delay period
boolean setdir = LOW; // Set Direction

// Interrupt Handler

void revmotor (){

  setdir = !setdir;
  
}


void setup() {

  pinMode (driverPUL, OUTPUT);
  pinMode (driverDIR, OUTPUT);
  attachInterrupt(digitalPinToInterrupt(reverseSwitch), revmotor, FALLING);
  
}

void loop() {
    pd = map((analogRead(spd)),0,1023,2000,50);
    digitalWrite(driverDIR,setdir);
    digitalWrite(driverPUL,HIGH);
    delayMicroseconds(pd);
    digitalWrite(driverPUL,LOW);
    delayMicroseconds(pd);
 
}

 

파워코드를 콘센트에 연결하면 다음과 같이 모터가 돌아가는 걸 확인할 수 있습니다.

 

 

동작 영상

 

4. 더 간단한 예제

택틱스위치나 가변저항 없이, 모터만 돌려보는 간단한 코드입니다.

아두이노 + NEMA 스텝 모터 + DM860H 모터 드라이버 + 24V 파워서플라이(+파워코드)만 있으면 됩니다.

 

보드 구성은 다음과 같습니다.

보드 구성

int driverPUL = 7;    // PUL- pin
int driverDIR = 6;    // DIR- pin

int pd = 1000;
boolean setdir = LOW; // Set Direction


void setup() {
  pinMode (driverPUL, OUTPUT);
  pinMode (driverDIR, OUTPUT);
}

void loop() {
    digitalWrite(driverDIR,setdir);
    digitalWrite(driverPUL,HIGH);
    delayMicroseconds(pd);
    digitalWrite(driverPUL,LOW);
    delayMicroseconds(pd);
 
}

 

동작 영상입니다.

동영상이 90도 돌아갔네요ㅠ_ㅠ

동작 영상2

아두이노를 사용해 DM860H 모터드라이버 + NEMA 스텝모터를 제어해봤습니다.

L298N 모터드라이버를 사용해서도 제어할 수 있을 것 같은데, 아직 삽질 중입니다.

다음번에 성공하면 포스팅해보겠습니다 :)

공모전 사업비로 구매한 부품들이 하나 둘 도착하고 있습니다.

개발할게 많지만, 포스팅할 것들도 많아서 행복하네요 :>


잘못된 내용이 있다면 언제든지 댓글이나 메일로 알려주시면 감사하겠습니다.

이 포스팅이 도움이 되었다면 공감 부탁드립니다.

궁금한 점은 언제든지 댓글 남겨주시면 답변해드리겠습니다:D