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 보드에 있는 스위치를 누르면
반시계 방향으로 회전합니다.

위 동영상에 관한 프로그램은 아래에 있습니다.
									 
	
//* ****************************************************************************
//
//		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 >