-
아두이노 | BLDC모터Technology/Arduino 2024. 11. 25. 19:42
1. BLDC모터
BLDC모터(Brushless DC motor)는 표현 그대로, DC모터처럼 동작하지만 브러쉬(brush)가 없는 모터이다. 기존의 DC모터는 브러쉬 구조를 이용해 전극의 방향을 계속 바꿔주어야 한 방향으로 계속해서 회전할 수 있는데, 이는 전극과 브러쉬 사이의 마찰로 인해 효율이 낮고 수명이 비교적 짧다는 단점이 있다. BLDC모터는 브러쉬가 없기 때문에 DC모터보다 효율이 높고 수명도 길다는 장점이 있지만, 브러쉬 구조 없이 한 방향으로 회전시키기 위해 DC모터보다 복잡한 구조와 제어 방법을 가지고 있다는 단점이 있다. DC모터와는 달리 세 가닥의 전선이 모터로부터 나온다.
2. ESC
DC모터는 양 전극에 전원을 연결하기만 하면 회전하기 때문에 제어가 단순하지만, BLDC모터를 제어하기 위해서는 전원 외에도 ESC(Electronic Speed Controller)가 별도로 필요하다. ESC에는 마이크로컨트롤러와 여섯 개의 트랜지스터 등이 내장되어 있으며, 신호선으로부터 PWM 디지털 신호를 받으면 PWM 신호에서 HIGH가 유지된 시간에 따라 BLDC모터의 회전 속력을 제어한다. 아래 링크로 접속하면 해당 예제에서 다루고자 하는 BLDC모터와 ESC를 모두 구매할 수 있다.
3. 제어 방법
BLDC모터를 직접 제어하려면 모터 내부에 있는 전자석에 차례대로 전류를 흘려보내야겠지만, ESC를 사용한다면 PWM 신호를 ESC에 입력하는 것으로 BLDC모터의 회전 속력을 제어할 수 있다. 따라서 서보모터를 제어할 때와 동일한 라이브러리와 알고리즘을를 사용한다. ESC에 2.0 ms동안 HIGH를 유지하는 PWM 신호를 입력하면 BLDC모터는 빠른 속력으로 회전하고, 1.0 ms동안 HIGH를 유지하는 신호를 입력하면 느린 속력으로 회전하거나 회전을 멈춘다. 즉, BLDC모터의 회전 속력은 PWM 신호에서 HIGH를 유지하는 시간에 비례한다. 하지만 ESC에 따라서 최대 회전 속력과 최소 회전 속력을 출력하는 PWM 신호의 기준은 다른데, 제조사에서 이에 대한 정보를 제공하지 않는다면 가변저항을 이용한 실험을 통해 해당하는 값을 알아낼 필요가 있다.
4. ESC 제어 규칙
BLDC모터 대부분이 고속으로 회전하기 때문에, 전원을 연결하자마자 고속으로 회전할 경우 사용자가 다치거나 주변부 충돌로 시스템이 고장나는 경우가 발생할 수 있다. 이러한 위험을 방지하기 위해 상용 ESC는 전원이 인가된 이후에 최대 회전 속력에 해당하는 PWM이 입력되는 동안은 알림음을 내며 동작하지 않는 규칙을 가지고 있다. 해당 예제에서 다루는 ESC의 경우에는 전원을 인가하면 두 번의 알림음을 계속해서 내는데, 해당 상태에서 최대 회전 속력에 해당하는 PWM이 입력되면 빠른 주기의 알림음을 내어 경고를 표시한다. 이후 최소 회전 속력에 해당하는 PWM을 입력하면 세 번의 알림음 이후에 모터가 동작을 시작한다. 이와 같이 ESC 제조사에서 ESC 제어 규칙을 제공하고 있으니 참고하길 바란다.
5. 예제
5.1. 회로 구성 - 가변저항 추가
5.2. 프로그램 작성 - 가변저항 추가
#include <Servo.h> // 서보모터 라이브러리 추가 Servo ESC; // ESC라는 이름의 서보모터 객체 생성 int value; // 정수형 변수 선언 void setup() { pinMode(A0, INPUT); // 아날로그 입력 A0번 핀을 입력(INPUT) 모드로 설정 ESC.attach(12); // ESC를 제어할 핀으로 12번 핀을 설정 Serial.begin(9600); // 시리얼 통신 시작 (통신 속도: 9600 bps) } void loop() { // 아날로그 입력 A0번 핀으로부터 아날로그 신호를 입력 받은 후 변수에 저장 value = analogRead(A0); value = map(value, 0, 1023, 1000, 2000); // 아날로그 신호 변환 후 변수에 저장 Serial.println(value); // 시리얼 모니터에 변수에 저장된 값 출력 후 줄 바꿈 ESC.writeMicroseconds(value); // ESC에 PWM 신호 출력 }
5.3. 회로 구성 - 가변저항 제외
5.4. 프로그램 작성 - 가변저항 제외
#include <Servo.h> // 서보모터 라이브러리 추가 Servo ESC; // ESC라는 이름의 서보모터 객체 생성 void setup() { ESC.attach(12); // ESC를 제어할 핀으로 12번 핀을 설정 delay(1000); // 1000 ms 대기 // ESC PWM 출력 최대 유지 ESC.writeMicroseconds(2000); // ESC에 PWM 신호 출력 delay(5000); // ESC PWM 출력 최소로 변경 ESC.writeMicroseconds(1000); delay(1000); } void loop() { ESC.writeMicroseconds(1500); delay(3000); ESC.writeMicroseconds(2000); delay(3000); ESC.writeMicroseconds(1500); delay(3000); ESC.writeMicroseconds(1000); delay(3000); }
[함께 읽으면 좋은 페이지]
참고문헌
- How To Mechatronics. (2019). How Brushless Motor and ESC Work and How To Control Them using Arduino. YouTube. https://www.youtube.com/watch?v=uOQk8SJso6Q. 2024.11.25.
반응형'Technology > Arduino' 카테고리의 다른 글
아두이노 라이브러리 | I2C 멀티플렉서 TCA9548A 모듈 (0) 2024.11.27 아두이노 라이브러리 | 비접촉 자기 엔코더 센서 AS5600 모듈 (2) 2024.11.26 아두이노 라이브러리 | 서보모터 정밀 제어 (0) 2024.11.24 아두이노 프로젝트 | 휴대용 냉각기 (0) 2024.11.23 아두이노 | 펠티어 열전소자 (0) 2024.11.22