이 튜토리얼에서는 아두이노와 ESC를 사용하여 브러시리스 모터를 제어하는 방법을 배웁니다. BLDC 모터 작동 원리에 대한 더 자세한 내용은 다른 기사나 다음 영상을 참조하세요. 영상에는 브러시리스 모터 작동 원리와 아두이노 및 ESC로 제어하는 방법이 포함되어 있습니다.
개요
이 예제에서는 다음과 같은 사양의 아웃러너 BLDC 모터를 사용합니다: KV 등급 1000, 2S, 3S 또는 4S 리포 배터리로 구동 가능, 30A ESC 필요. 브러시리스 모터의 KV 등급은 무부하 상태에서 볼트당 RPM을 정의합니다.
이 경우 1000KV는 예를 들어 2S 리포 배터리(전압 7.4V)로 모터에 전원을 공급하면 최대 7.4 × 1000 = 7400 RPM을 달성할 수 있음을 의미합니다.
브러시리스 모터는 전력 소모가 크며, 가장 일반적인 전원 공급 방법은 리포(LiPo) 배터리를 사용하는 것입니다. 리포 배터리의 "S" 숫자는 배터리가 몇 셀로 구성되었는지를 나타내며, 각 셀은 3.7V입니다.
이 예제에서는 3셀인 3S 리포 배터리(11.1V)를 사용하겠습니다. 따라서 모터가 최대 11100 RPM에 도달할 것으로 기대됩니다.
이 예제에서 사용할 30A ESC는 모터 요구사항과 일치합니다. ESC 한쪽에는 모터의 3상을 제어하는 세 개의 선이 있고, 다른 쪽에는 전원용 VCC와 GND 두 선이 있습니다.
ESC에서 나오는 또 다른 세 선 세트가 있는데, 이게 신호선, +5V, 그라운드입니다. 이 ESC 기능은 배터리 제거 회로(Battery Eliminator Circuit, BEC)라고 하며, 이름 그대로 마이크로컨트롤러용 별도 배터리가 필요 없도록 해줍니다. 이를 통해 ESC가 마이크로컨트롤러용으로 사용할 수 있는 정류된 5V를 제공합니다.
이 연결이 서보 모터에서 보는 것과 동일함을 알 수 있습니다.
따라서 ESC와 아두이노로 브러시리스 모터를 제어하는 것은 아두이노로 서보를 제어하는 것만큼 간단합니다. ESC는 서보와 같은 유형의 제어 신호, 즉 표준 50Hz PWM 신호를 사용합니다.
이는 매우 편리한데, 예를 들어 RC 비행기를 만들 때 보통 서보와 브러시리스 모터가 모두 필요하고, 이 방식으로 동일한 유형의 컨롤러로 쉽게 제어할 수 있습니다.
아두이노를 사용하여 50Hz PWM 신호를 생성하고, 펄스 폭 또는 하이 상태 지속 시간이 1밀리초에서 2밀리초 사이로 변하면 ESC가 모터를 최소에서 최대 RPM으로 구동합니다.
아두이노 브러시리스 모터 제어 – 회로도
이 예제의 회로도입니다. ESC 외에 모터 속도 제어용 간단한 가변저항만 사용합니다.
필요한 부품
브러시리스 모터
ESC 30A
리포 배터리
아두이노 보드
가변저항
브레드보드와 점퍼 와이어
BLDC 모터 제어 아두이노 코드
아두이노 코드는 몇 줄 안 되는 매우 간단한 코드입니다.
/*
아두이노 브러시리스 모터 제어
by Dejan, https://howtomechatronics.com
*/
#include <Servo.h>
Servo ESC; // ESC 제어용 서보 객체 생성
int potValue; // 아날로그 핀에서 읽은 값
void setup() {
// ESC를 9번 핀에 연결
ESC.attach(9, 1000, 2000); // (핀, 최소 펄스 폭, 최대 펄스 폭 - 마이크로초)
}
void loop() {
potValue = analogRead(A0); // 가변저항 값 읽기 (0~1023)
potValue = map(potValue, 0, 1023, 0, 180); // 서보 라이브러리용으로 0~180 스케일링
ESC.write(potValue); // ESC로 신호 전송
}
설명
서보 라이브러리를 정의해야 합니다. 서보 라이브러리로 50Hz PWM 신호를 쉽게 생성할 수 있기 때문입니다. 그렇지 않으면 아두이노가 생성하는 PWM 신호는 다른 주파수입니다. 그런 다음 ESC 제어용 서보 객체를 생성하고 가변저항의 아날로그 입력을 저장할 변수를 정의합니다. setup 섹션에서 attach() 함수로 ESC의 제어 신호가 연결된 아두이노 핀과 PWM 신호의 최소/최대 펄스 폭(마이크로초)을 정의합니다.
loop 섹션에서 먼저 가변저항을 읽고, 0~1023 값을 0~180 값으로 매핑합니다. 그런 다음 write() 함수로 ESC에 신호를 보내거나 50Hz PWM 신호를 생성합니다. 0~180 값은 setup에서 정의한 1000~2000마이크로초 값에 대응됩니다.
이 코드를 아두이노에 업로드하고 배터리로 모든 것을 전원 켜면, 가변저항으로 브러시리스 모터 속도를 0에서 최댓값까지 제어할 수 있습니다.
하지만 몇 가지 주의할 점이 있습니다. 모터에 처음 전원을 공급할 때 신호 값은 최소값인 1밀리초와 같거나 낮아야 합니다. 이를 ESC 아밍(arming)이라고 하며, 모터가 확인 비프음을 내어 제대로 아밍되었음을 알립니다. 전원 공급 시 더 높은 값(스로틀 업 상태)이면 ESC가 올바른 최소값으로 스로틀 다운할 때까지 모터를 시작하지 않습니다. 이는 안전 측면에서 매우 편리한데, 전원 켤 때 스로틀 업 상태면 모터가 시작하지 않기 때문입니다.
ESC 캘리브레이션
마지막으로 ESC 캘리브레이션 작동 방식을 설명하겠습니다. 모든 ESC마다 고유한 하이/로우 포인트가 있으며 약간씩 다를 수 있습니다. 예를 들어 로우 포인트가 1.2밀리초이고 하이 포인트가 1.9밀리초일 수 있습니다. 이런 경우 스로틀이 중간 지점인 1.2밀리초에 도달하기 전 첫 20% 구간에서는 아무것도 하지 않습니다.
이 문제를 해결하려면 ESC를 캘리브레이션하거나 하이/로우 포인트를 원하는 대로 설정하면 됩니다. 이를 위해 ESC에 전원을 공급하기 전에 먼저 가변저항을 최대 또는 현재 중간 지점보다 큰 값으로 스로틀 업합니다. 그런 다음 ESC에 전원을 공급하면 모터에서 몇 번의 비프음이 나며 새로운 하이 포인트가 설정되었음을 확인합니다.
2초 후, 가변저항을 새로운 로우 포인트로 원하는 위치로 이동시킵니다. 다시 확인 비프음이 들리고 ESC 캘리브레이션이 완료됩니다. 이제 스로틀이 즉시 반응하며 이 두 새 포인트 사이에서 모터를 제어할 수 있습니다.
이 튜토리얼은 여기까지입니다. 아두이노 브러시리스 모터 제어를 무선으로 하는 방법을 배우고 싶다면, 아두이노 기반 RC 송신기를 만들고 BLDC 모터를 제어하는 방법을 설명한 이전 영상을 확인하세요.
이 튜토리얼이 도움이 되었기를 바랍니다. 궁금한 점은 아래 댓글 섹션에 자유롭게 질문해 주시고, 아두이노 프로젝트 모음도 확인해 보세요.