본문 바로가기
Science/Electronic Engineering

[아두이노] ESC를 통한 BLDC 모터 제어

by Ashwhale 2021. 1. 4.
728x90
반응형
SMALL

드론 제작 중 모터와 ESC를 검사하기 위해서

 

아두이노의 Servo 함수를 통하여 간단히 모터를 제어해봅니다.

 

A2212 / 13T BLDC 모터

사용할 모터 입니다.

브러쉬리스 모터이고 드론의 암에 고정된 상태로 진행하였습니다.

 

정격 30A ESC. 내부에 레귤레이터가 있어 주 전원 11~12V를 5V로 출력하여 MCU 구동전원으로 활용 가능하다.

사용할 ESC입니다.

이 역시 드론의 암에 고정된 상태로 주 전원과 모터, 아두이노에 각각 연결되어 있습니다.

 

 

<배선>

1. 주전원(리포배터리 3S)은 ESC의 +,- 에 연결합니다.

2. ESC의 A, B, C는 BLDC의 모터에 무작위로 연결합니다.

3. 신호선의 흰색(Signal)은 아두이노의 9번핀에 연결합니다.

4. 신호선의 검은색(GND)은 아두이노의 GND에 연결합니다.

 

<배선 추가설명>

1. 이후에 ESC와 BLDC의 연결을 바꿔 회전방향을 바꿀 수 있습니다.

2. 흰색 신호선(Signal)의 경우 임의로 선택가능합니다. 다만 아두이노에서 PWM지원 가능한 핀이어야 합니다.

본 코드에서는 9번핀을 사용하였습니다.

3. 검은색 신호선(GND)의 경우 접지 동기화를 통한 작동 신호의 안정을 위해 아두이노의 GND에 연결합니다.

 

<코드>

#include <Servo.h>	//아두이노 서보모터 제어 라이브러리
 
Servo test_motor;	// test_motor 라는 이름을 지정합니다.

int val=70;	//모터의 속도를 책임질 변수를 선언합니다.
 
void setup() {
  Serial.begin(9600);	//플로팅 시리얼을 통하여 속도를 제어하기 위하여 통신 속도를 지정합니다.
  test_motor.attach(9);	//PWM신호를 출력할 핀을 9번으로 설정합니다.      
  test_motor.write(60);	//아두이노가 동작을 시작하면 초기 속도로 60을 지정하고 3초를 대기합니다.
  delay(3000);                        
}
 
void loop() {
  if(Serial.available()){
    char temp = Serial.read();
    if(temp=='u'){		//u를 입력하여 속도를 올리고
      val += 5;
    }
    else if(temp=='d'){	//d를 입력하여 속도를 낮춥니다.
      val -= 5;
    }
    test_motor.write(val);	//루프를 반복하여 실시간으로 속도를 제어합니다.
  }
  Serial.print("current value : ");
  Serial.println(val); 
  delay(100);
}

 

<소스 링크>

github.com/Joyonclear/Arduino-BLDC-motor-control

 

Joyonclear/Arduino-BLDC-motor-control

BLDC motor control by ESC and Arduino(servo library). - Joyonclear/Arduino-BLDC-motor-control

github.com

 

<동작영상>

youtu.be/CYIBmM2VcUU

위 영상에서는 속도의 값을 65에서 95까지 조절하였습니다.

 

70부터 모터가 제어되기 시작하며, 100이상은 위험하여 진행하지 않았습니다.

반응형
LIST

댓글