Embeded/ARM Cortex-M4

스태핑 모터 상 제어

gharlic 2015. 7. 10. 20:38

 

마이크로프로세서에서 바퀴 등을 돌려야할 때 흔히 사용되는 모터가 스태핑모터다

일단 DC모터 보다 높은 전압과 전류를 소비하지만 강한 파워를 보여준다.

 

문제는

 이 놈을 제어하는 것이 보통의 DC모터처럼 전압을 가하면 땡이 아니라는 것이다.

상 제어가 필요없는 모터드라이버를 사용하면 좋겠지만 그렇지 않은 경우

상 제어를 별도로 해 줘야한다.

 

상 제어?

 이 모터를 구동시키는 방법엔 1상, 2상, 1-2상 여자방식이 있다.

스태핑모터의 내부에는 4개의 전자석이 있다. 이 전자석들이 차례로 동작하면서

모터를 회전시키는 것이다. 전자석들이 동작하는 방식에 따라 1상, 2상, 1-2상 여자방식이 나뉘게 된다.

 

1상

전자석들을 편의상 ABCD라고 할 때

ABCD

ABCD

ABCD

ABCD

의 형태로 신호를 보내는 경우다.

소비전력은 가장 낮으나 부드럽지 못하고 진동이 강하다.

 

2상

ABCD

ABCD

ABCD

ABCD

의 형태로 신호를 보내는 경우다.

1상에 비해 더 부드러운 동작을 보여주지만 전력소비가 더 크다.

 

1-2상

ABCD

ABCD

ABCD

ABCD

ABCD

ABCD

ABCD

ABCD

의 형태로 신호를 보내는 경우다.

1상과 2상이 합쳐진 형태로 보다 정밀한 제어가 가능하다.



소스 짜는 요령

ABCD중 하나 만 잡고 봤을 때 이 놈이 어느 Tick에 작동하는 지에 주목하면 간단해진다.

void moveForword() {
	if( moveSwt == 1) {
		if(cnt == 1 || cnt == 2 || cnt == 3) GPIO_SetBits(GPIOE,GPIO_Pin_1);
		else GPIO_ResetBits(GPIOE,GPIO_Pin_1);

		if(cnt == 3 || cnt == 4 || cnt == 5) GPIO_SetBits(GPIOE,GPIO_Pin_2);
		else GPIO_ResetBits(GPIOE,GPIO_Pin_2);

		if(cnt == 5 || cnt == 6 || cnt == 7) GPIO_SetBits(GPIOE,GPIO_Pin_3);
		else GPIO_ResetBits(GPIOE,GPIO_Pin_3);

		if(cnt == 7 || cnt == 8 || cnt == 1) GPIO_SetBits(GPIOE,GPIO_Pin_4);
		else GPIO_ResetBits(GPIOE,GPIO_Pin_4);

		if(cnt == 1 || cnt == 2 || cnt == 3) GPIO_SetBits(GPIOC,GPIO_Pin_9);
		else GPIO_ResetBits(GPIOC,GPIO_Pin_9);

		if(cnt == 3 || cnt == 4 || cnt == 5) GPIO_SetBits(GPIOC,GPIO_Pin_8);
		else GPIO_ResetBits(GPIOC,GPIO_Pin_8);

		if(cnt == 5 || cnt == 6 || cnt == 7) GPIO_SetBits(GPIOC,GPIO_Pin_7);
		else GPIO_ResetBits(GPIOC,GPIO_Pin_7);

		if(cnt == 7 || cnt == 8 || cnt == 1) GPIO_SetBits(GPIOC,GPIO_Pin_6);
		else GPIO_ResetBits(GPIOC,GPIO_Pin_6);

		cnt++;
		if(cnt == 9) cnt = 1;
	}
}

라인트레이서(2개의 스태핑모터가 결합된 것)을 1-2상방식으로 전진시키기 위한 소스이다.

타이머 핸들러에선 위 함수를 매 클럭마다 호출하며 moveSwt변수에 의해 허용/비허용이 제어된다.

cnt변수가 매 주기마다 1~8을 반복하며 GPIO핀들을 제어하고 있다.

반응형

'Embeded > ARM Cortex-M4' 카테고리의 다른 글

초음파 센서  (0) 2015.07.10
UART - PC, 블루투스 통신  (0) 2015.07.10
Sink방식과 Source방식  (0) 2015.07.10
DAC(Digital-Analog Converter)  (0) 2015.07.10
ADC(Analog-Digital Converter)  (0) 2015.07.10