본문 바로가기
임베디드 개발/STM32 (ARM Cortex-M)

STM32 ] BLDC 모터 제어 - 프로젝트 준비과정 (4)

by eteo 2022. 7. 19.

 

BLDC 모터 제어와 앱인벤터를 통한 앱개발은 팀 동료가 담당한 분야이긴 하나 프로젝트 전체 이해도 향상을 위해 개인적으로 정리한 내용과 동료의 자료를 첨부합니다.

 

 

 

DC모터

 

Brushed DC 모터는 2개의 전선으로만 구성되어 있으며 전동기를 구동시키기 위한 드라이버의 설계 및 제어가 용이하다는 장점이 있지만, Brush의 접촉을 통해서 회전에 따라 전기자 전류의 극성이 바뀌게 되므로, 기계적 소음과 전기적 잡음이 심하며 내구성이 떨어진다.

 

반면, BLDC 모터는 Brush가 제거된 형태로, 3상 모터의 6단계 정류(모터 위상의 전류를 전환하여 동작을 생성하는 공정) 패턴을 생성하기 위해 3개의 전선이 필요하며, 모터 컨트롤러가 사용된다. 이러한 6단계 정류 위상이 전자기장을 움직이면 영구 자석(회전자)가 회전한다.

 

 

 

 

 

우리가 프로젝트에 사용한 BLDC 모터의 품명은 BL3640A-24V 로 구동 드라이버가 내장된 형태라서 사용이 쉽다.

 

 

 

White 선은 Brake를 위한 선인데 안써도 된다.

Blue 선은 속도제어를 안하려면 GND에 같이 묶어도 되고 속도제어를 하려면 PWM 신호를 주면 된다.

Yellow는 FG 선으로 보통 모터 드라이버에서 회전수 값이 펄스로 출력되는데 안써도 된다.

Orange 선은 모터랑 보드가 같은 GND에 물려있으니까 LOW 신호를 주면 역방향으로 돌아서 정역제어를 할 수있다.

그리고 +, - 반대로 연결 시 모터가 손상될 수 있으니 주의해야 한다.

 

 

 

 

Top View로 본 메카넘 휠의 작동 원리

 

 

 

출처 : https://m.blog.naver.com/paynoh/221322336204

https://www.devicemart.co.kr/goods_process/get_html_to_string?url=/data/category/category_tech/001500010003/001500010003.html

https://www.researchgate.net/figure/Fig-5-Top-view-of-turning-principle-of-Mecanum-wheel_fig2_307868549

 

 

 

motor.h

#ifndef INC_MOTOR_H_
#define INC_MOTOR_H_

#include "main.h"
#include "tim.h"

#define SPEED 950

typedef enum {
	STOP,
	FORWARD,
	RIGHT,
	BACKWARD,
	LEFT,
	CW,
	CCW
}CONTROLLER_SIGNAL;

void Move(int controlcmd);
void Forward();
void Backward();
void Right();
void Left();
void Cw();
void Ccw();
void Stop();
void Motor_Init();

#endif /* INC_MOTOR_H_ */

 

motor.c 중 일부

void Motor_Init(){
	TIM2->CCR1 = SPEED;
	TIM2->CCR2 = SPEED;
	TIM2->CCR3 = SPEED;
	TIM2->CCR4 = SPEED;
}
void Move(int controlcmd){

	switch(controlcmd){
		case FORWARD:
			Forward();
			break;
		case BACKWARD:
			Backward();
			break;
		case RIGHT:
			Right();
			break;
		case LEFT:
			Left();
			break;
		case CW:
			Cw();
			break;
		case CCW:
			Ccw();
			break;
		case STOP:
			Stop();
			break;
		default:
			Stop();
			break;
		}
}
void Forward()
{
	HAL_GPIO_WritePin(GPIOG, GPIO_PIN_1,GPIO_PIN_RESET);	// Front Right	
	HAL_GPIO_WritePin(GPIOF, GPIO_PIN_9,GPIO_PIN_SET);		// Rear Left		
	HAL_GPIO_WritePin(GPIOF, GPIO_PIN_7,GPIO_PIN_RESET);	// Rear Right
	HAL_GPIO_WritePin(GPIOF, GPIO_PIN_8,GPIO_PIN_SET);		// Front Left

	HAL_TIM_PWM_Start(&htim2, TIM_CHANNEL_1);
	HAL_TIM_PWM_Start(&htim2, TIM_CHANNEL_2);
	HAL_TIM_PWM_Start(&htim2, TIM_CHANNEL_3);
	HAL_TIM_PWM_Start(&htim2, TIM_CHANNEL_4);
}

 

PG1, PF9, PF7, PF8 핀이 정역제어를 하는 오렌지 선이다.

오른쪽과 왼쪽의 모터는 마주보는 방향으로 배치되어 있으니까 위 코드처럼 하나는 HIGH, 하나는 LOW로 해야 한 방향으로 나아간다.

 

 

아래는 팀원의 자료입니다.