공대스러운/액추에이터 프로젝트

액추에이터 프로젝트1 - 스텝모터 컨트롤 기본

통학하는 공대생 2023. 8. 22. 22:37

아두이노로 서보모터를 컨트롤 하는것은 인터넷, 책을 비롯해 많은 기본 예제 및 강의에서 다루고 있고, 저 또한 이를 응용해서 많은 경험을 했습니다.
하지만 어느샌가 각도제어의 제한도 없고 훨씬 범용적으로 사용할 수 있는 스텝모터에 자연스레 관심이 생겨 여기저기 찾아보다가 한 영상을 발견했어요:
https://youtube.com/watch?v=iIs82XkTvhY&feature=sharea

따라서 본 게시글을 위 영상을 따라 공부한 기록임을 알립니다!




고민할 이유 있습니까. 바로 필요한 부품을 파밍하고 집에 없는 재료는 바로 구매 했습죠

예전에 쓰던 3d프린터 인데, 참으로 아낌없이 주는 나무 마냥 재료를 다 제공하네요 ㅎ
여기서 파워서플라이랑 스텝모터, 스텝모터 케이블을 뜯어냈구요
이 드라이버는 없어서 구매 했습니다.


필요한 재료를 정리 해 보면

  • 아두이노
  • 빵판
  • 점퍼선
  • 스텝모터
  • 파워서플라이
  • 스텝모터 드라이버 (TMC2225)


정도 입니다.

바로 회로도랑 코드 한번 보시죠

외부 전원은 파워서플라이로 공급합니다


참고로 여기서 파워서플라이를 연결할 때 어떻게 하는건지 몰라서 한참 헤메었는데, v+라고 적힌게 (+), cmm이라고 적인게 (-) 였습니다.


int en = 2;           // enable핀, 스텝모터에 전압 인가를 결정합니다
int step = 3;    	  // step핀, 이 핀의 신호가 HIGH에서 LOW로 갈 때 하나의 스텝이 옮겨집니다 
int dir = 4;			  // direction핀, HIGH이면 시계, LOW이면 반시계로 회전합니다

void setup() {
	pinMode(en, OUTPUT);     // 세 핀 모두 출력이니 OUTPUT으로 설정합니다
	pinMode(step, OUTPUT);
	pinMode(dir, OUTPUT);

	digitalWrite(en, LOW);   // 일단 처음 디폴트 값은 모두 LOW로 설정 해 줍시다
	digitalWrite(step, LOW);
	digitalWrite(dir, LOW);

	delay(1000);             // 그러고 1초간 대기 하구요
}

void loop() {

	digitalWrite(step, HIGH);  
	delay(1);
	digitalWrite(step, LOW);
	delay(1);                  // 이 네줄의 코드가 하나의 스텝을 옮기게 됩니다

}


이 회로도와 코드를 그대로 옮겨 작성하고 실행 하면 -> 반시계방향으로 계속 회전합니다.
당연하죠, void setup에서 dir핀은 LOW (반시계 방향), en핀도 LOW(모터에 전원 인가)로 설정 해 두었으니까요


추가적으로 설명을 하자면 void loop 에서 가장 마지막에 있는 delay함수가 모터의 회전속도를 결정짓습니다.

void loop() {

	digitalWrite(step, HIGH);
	delay(1);
	digitalWrite(step, LOW);
	delay(0.5);

}

직접 해보니 0.5정도로 내려보면 가장 빨라지는 것 같아요.
잘은 모르겠지만 파워 서플라이의 전원을 더 높여주면 속도가 빨라지지 않을까 싶습니다.

기본은 이정도로 하고, 앞으로 이를 활용해서 응용을 해볼까 합니다.
아직은 배워가는 입장이지만, 혹시나 궁금한게 있으시면 댓글이나 인스타 DM으로 연락 주세요!

https://www.instagram.com/study_4_machine/

로그인 • Instagram

www.instagram.com


감사합니다 :)