Stepping Motor - 2,
이 페이지에서는 2상 스텝모터를 구동하기 위한 것으로 2상 스텝모터를 사용하였습니다.
구동 내용은 전원을 넣으면 빠르게 시계방향으로 계속 돌다가 UNU MP20 보드에 있는 스위치를 누르면
스텝모터가 반시계방향으로 회전 하는 것입니다.
스텝모터 구동 회로 및 확대 사진
왼쪽 사진은 위 회로 사진으로 스텝모터를 구동하기 위하여 빵판에 UNU MP20을 컨트롤러로 사용하고
A4988를 스텝모터 드라이브로 사용하여 만든 회로입니다.
스텝모터는 42mm x 42mm 크기로 흔하게 사용하는 2상 바이폴라방식 스텝모터 입니다.
그리고 스텝모터의 방향 전환은 UNU MP2- 보드의 아래쪽에 있는 스위치(위 사진 참고)를 사용하였습니다.
전원을 넣으면 시계 방향으로 빠르게 회전하고 스위치를 누르면 반시계 방향으로 빠르게 회전하도록 하였습니다.
아래 프로그램을 참고 하시기 바랍니다.
오른쪽의 A4988 스텝모터 드라이브는 알레그로사의 A4988을 사용하여 만든 회로로서 스텝모터를 손쉽게 구동할 수 있도록 만든 기판입니다. PIC의 3핀을 사용하여 디지탈 신호를 A4988 스텝모터 드라이브 기판과 연결(Enable, Clock, Dir)하고 프로그램하면 스텝모터를 쉽게 회전 시킬 수 있습니다.
A4988 보드를 컨트롤하기 위해서는 개의 핀을 사용 하는데
1. 1 번 핀 (Enable) - PIC PIN_C0
2. 7 번 핀 (Step) - PIC PIN_C1
3. 8 번 핀 (CW/CCW) - PIC PIN_C3
위의 핀들은 각각 UNU MP20의 C0, C1, C3에 연결하였습니다.(위 그림 참고)
아래 YouTube를 참고하시면 A4988 스텝모터 드라이브에 관하여 쉽게 이해 할 수 있습니다.
참고) How To Control a Stepper Motor with A4988 Driver and Arduino (YouTube)
스텝모터를 회전시키기 위해서 대부분 2 상 또는 5 상의 스텝모터와 그에 해당하는 모터 드라이브 그리고 컨트롤러가 있어야 합니다. 당연 전원도 있어야 하겠지요.
스텝모터를 회전 시키기 위해서는
1. 모터 활성화: PIN_C0 High 로
2. 모터의 회전 방향 설정: PIN_C3 를 High/Low 로 설정 (CW/CCW 회전 방향 결정, 구동 시켜 보면 자연스레 알게됨)
3. 펄스 입력: PIC PIN_C3를 사용하여 클럭(펄스)를 넣어 줌
4. 3 번 클럭을 연속으로 넣어주면 스텝모터는 펄스 입력에 맞추어 일전 각도로 연속적으로 회전
아래 동영상은 위와 같이 회로를 꾸미고 조이스틱 스위치를 누름에 따라 스텝모터를 다르게 구동하는 모습을 보여주는 동영상입니다.
전원을 넣으면 시계방향으로
ASL MP20 보드에 있는 스위치를 누르면
반시계 방향으로 회전합니다.
위 동영상에 관한 프로그램은 아래에 있습니다.
스텝모터 구동 회로 및 확대 사진
오른쪽의 A4988 스텝모터 드라이브는 알레그로사의 A4988을 사용하여 만든 회로로서 스텝모터를 손쉽게 구동할 수 있도록 만든 기판입니다. PIC의 3핀을 사용하여 디지탈 신호를 A4988 스텝모터 드라이브 기판과 연결(Enable, Clock, Dir)하고 프로그램하면 스텝모터를 쉽게 회전 시킬 수 있습니다.
A4988 보드를 컨트롤하기 위해서는 개의 핀을 사용 하는데
1. 1 번 핀 (Enable) - PIC PIN_C0
2. 7 번 핀 (Step) - PIC PIN_C1
3. 8 번 핀 (CW/CCW) - PIC PIN_C3
위의 핀들은 각각 UNU MP20의 C0, C1, C3에 연결하였습니다.(위 그림 참고)
아래 YouTube를 참고하시면 A4988 스텝모터 드라이브에 관하여 쉽게 이해 할 수 있습니다.
참고) How To Control a Stepper Motor with A4988 Driver and Arduino (YouTube)
스텝모터를 회전시키기 위해서 대부분 2 상 또는 5 상의 스텝모터와 그에 해당하는 모터 드라이브 그리고 컨트롤러가 있어야 합니다. 당연 전원도 있어야 하겠지요.
스텝모터를 회전 시키기 위해서는
1. 모터 활성화: PIN_C0 High 로
2. 모터의 회전 방향 설정: PIN_C3 를 High/Low 로 설정 (CW/CCW 회전 방향 결정, 구동 시켜 보면 자연스레 알게됨)
3. 펄스 입력: PIC PIN_C3를 사용하여 클럭(펄스)를 넣어 줌
4. 3 번 클럭을 연속으로 넣어주면 스텝모터는 펄스 입력에 맞추어 일전 각도로 연속적으로 회전
아래 동영상은 위와 같이 회로를 꾸미고 조이스틱 스위치를 누름에 따라 스텝모터를 다르게 구동하는 모습을 보여주는 동영상입니다.
전원을 넣으면 시계방향으로
ASL MP20 보드에 있는 스위치를 누르면
반시계 방향으로 회전합니다.
//* **************************************************************************** // // 190728 UNU MP20 - StepMotor 01 // UNU MP20 (PIC16F687) - A4998 // // 2019/07/29 // // injayu // //* **************************************************************************** #include <16f687.h> #fuses HS,NOWDT,NOMCLR #use delay (clock=18432000) #use rs232 (baud=19200, xmit=PIN_B7, rcv=PIN_B5) #define LED_ON output_low (PIN_C2) #define LED_OFF output_high (PIN_C2) #define IN_SW input (PIN_A3) #define SM_DIR_PIN PIN_C3 #define SM_CLK_PIN PIN_C1 #define SM_EN_PIN PIN_C0 #define SM_CCW output_low (SM_DIR_PIN) #define SM_CW output_high (SM_DIR_PIN) #define SM_CLK_L output_low (SM_CLK_PIN) #define SM_CLK_H output_high (SM_CLK_PIN) #define SM_ENABLE output_low (SM_EN_PIN) #define SM_DISABLE output_high (SM_EN_PIN) //* **************************************************************************** //* *************************************************** Step Motor Function **** int16 dy_time = 150 ; void sm_rotate_one_step (void) { SM_CLK_H ; LED_ON ; delay_us (dy_time) ; LED_OFF ; SM_CLK_L ; delay_us (dy_time) ; } //* **************************************************************************** //* **************************************** Device Initialization Fuctions **** void init_system (void) { //* 7 6 5 4 3 2 1 0 //* x x OSC2 OSC1 SW - - - set_tris_a (0xfF) ; //* - - 1 1 1 1 1 1 //* Tx - Rx - x x x x set_tris_b (0xFF) ; //* 1 1 1 1 1 1 1 1 //* - - - - - LED - - set_tris_c (0xFB) ; //* 1 1 1 1 1 0 1 1 delay_ms (500) ; } //* **************************************************************************** //* ********************************************************* Main Fuctions **** void main (void) { init_system () ; printf ("$#CLR_LCD;") ; delay_ms (10) ; printf ("$#BL_ON;") ; printf ("$1,1,** StepMotor Test **;") ; SM_ENABLE ; while (1) { if (IN_SW == 1) { SM_CW ; printf ("$3,3,Rotate CW Dir. ;") ; while (1) { sm_rotate_one_step () ; if (IN_SW == 0) break ; } } else { SM_CCW ; printf ("$3,3,Rotate CCW Dir.;") ; while (1) { sm_rotate_one_step () ; if (IN_SW == 1) break ; } } } } // *****************************************************************************
< Prev |
TOP
|
Next > |