그라운드 임베디드 EN 유튜브 구독

노트 / 모터 제어

6스텝 구동: 여섯 조합으로 회전자 끌기

홀센서 세 개가 알려 주는 구간마다 두 상에만 전류를 흘려 회전 자기장을 만듭니다. 정류 표와 한계.

GROUND EMBEDDED · 정리 노트모터 제어 066스텝 구동 1static const uint8_t step_of_hall[8] = …// 예시… 2void hall_isr(void) {// 홀센… 3 uint8_t hall = read_hall();// 0~7 4 uint8_t step = step_of_hall[hall];

원리

전기각 한 바퀴를 60°씩 여섯 구간으로 나눕니다. 구간마다 한 상은 +, 한 상은 -, 나머지 한 상은 끊어 둡니다(플로팅). 이렇게 만든 고정자 자기장이 회전자 자석보다 약 90° 앞서도록 두면 회전자가 끌려갑니다.

정류 표 (예)

홀 (CBA) 전류 하이 로우 플로팅
101 A → B A B C
100 A → C A C B
110 B → C B C A
010 B → A B A C
011 C → A C A B
001 C → B C B A

홀 신호 배치와 상 이름은 모터마다 달라서 실제 모터에 맞게 표를 확인해야 합니다. 틀리면 떨기만 하거나 역방향으로 돌거나 전류가 크게 흐릅니다.

속도 제어

선택된 하이사이드(또는 로우사이드)를 PWM해서 평균 전압을 조절합니다. 전류 센싱을 더하면 토크도 제어할 수 있습니다.

한계와 센서리스

  • 60°마다 전류가 계단처럼 바뀌어 토크 리플과 소음이 있습니다.
  • 플로팅 상의 전압으로 역기전력이 0을 지나는 순간(제로 크로싱)을 감지하면 홀센서 없이도 구동할 수 있습니다. 드론 ESC가 이 방식입니다. 단, 정지와 저속에서는 역기전력이 작아 감지가 어렵습니다.

실험실의 BLDC 6스텝 3D 시뮬레이션에서 구간마다 바뀌는 스위치 조합과 회전자 위치를 확인할 수 있습니다.

여섯 스텝 표

3상 중 두 상에만 전류를 흘리고 한 상은 비워 둡니다. 전기각 60도마다 조합을 바꿉니다.

스텝 홀센서 (H1 H2 H3) 전류 방향 켜는 스위치 비는 상
1 1 0 1 A → B A 상단, B 하단 C
2 1 0 0 A → C A 상단, C 하단 B
3 1 1 0 B → C B 상단, C 하단 A
4 0 1 0 B → A B 상단, A 하단 C
5 0 1 1 C → A C 상단, A 하단 B
6 0 0 1 C → B C 상단, B 하단 A

홀센서 값과 스텝의 대응은 모터와 배선에 따라 달라집니다. 위 표는 한 가지 예이고, 실제로는 모터를 손으로 돌리며 홀센서 값이 바뀌는 순서를 적어 표를 만듭니다. 홀센서 값이 000이나 111로 읽히면 배선이 끊겼거나 전원이 빠진 것입니다.

그림으로 보기: 홀센서 신호

H1H2H3123456123456
회전자가 돌면 세 홀센서가 전기각 120도 간격으로 켜지고 꺼집니다. 세 신호의 조합이 지금 어느 스텝인지를 알려 줍니다.

코드 구조

static const uint8_t step_of_hall[8] = { 0xFF, 6, 4, 5, 2, 1, 3, 0xFF };   // 예시: 실제 값은 모터에 맞춰 측정

void hall_isr(void) {                       // 홀센서 세 핀의 양쪽 에지에서 호출
    uint8_t hall = read_hall();             // 0~7
    uint8_t step = step_of_hall[hall];
    if (step == 0xFF) { all_off(); fault = 1; return; }
    apply_step(step, duty);                 // 상단은 PWM, 하단은 계속 켬
}

홀센서가 바뀌는 순간 바로 다음 스텝으로 넘어가야 하므로 인터럽트에서 처리합니다. 속도는 켜진 상단 스위치의 PWM 듀티로 조절합니다.

3D 실험실여기까지 읽은 내용을 직접 돌려 볼 수 있습니다→

방향을 바꾸려면

표를 거꾸로 읽는 것이 아니라, 같은 홀센서 값에서 전류 방향을 반대로 줍니다(스텝을 3칸 건너뛴 것과 같습니다). 정방향과 역방향 표를 따로 두는 편이 실수가 적습니다.

데드타임

같은 상의 상단과 하단 스위치가 동시에 켜지면 전원이 단락됩니다. MOSFET은 꺼지는 데 시간이 걸리므로, 한쪽을 끄고 수백 ns를 기다린 뒤 반대쪽을 켭니다. 타이머의 데드타임 기능이나 게이트 드라이버가 이를 처리합니다.

6스텝의 한계와 다음 단계

전류가 60도마다 뚝뚝 바뀌기 때문에 토크가 출렁이고 소리가 납니다. 드론이나 전동 공구처럼 빠르게 도는 곳에서는 문제가 되지 않지만, 낮은 속도에서 부드러운 회전이 필요하면 3상 전류를 사인파로 만드는 FOC로 넘어갑니다.

현업에서 자주 터지는 문제

  • 모터가 떨기만 하고 돌지 않음: 홀센서와 상의 대응이 틀림. 세 상 중 두 선을 바꿔 보거나 표를 다시 측정
  • 한 방향으로만 잘 돎: 홀센서 위치가 어긋나 있음(진각 조정 필요)
  • 기동 직후 과전류: 정지 상태에서는 역기전력이 없어 전류가 크게 흐름. 듀티를 서서히 올림
3D 실험실에서 직접 돌려 보기값을 바꾸며 이 노트의 원리를 확인합니다→영상으로 이어 보기모터 시리즈 10편세상을 움직이는 힘 = DC모터, 이 영상 하나로 정리해드립니다.PROJECT COURSEDC 모터를 H-브리지로 직접 구동해 보고 싶다면밸런싱 로봇 하나를 요구사항, 회로와 PCB, 펌웨어, 앱까지 실무 순서대로 만드는 강의입니다. 10파트 165강.강의 살펴보기 →FREE PDF무료 전자책 3권 받기이 주제를 한 권으로 이어서 읽고 싶다면. BLDC 모터 제어, 직렬통신, 센서를 책 분량으로 묶었습니다. 이메일만 남기면 바로 받습니다.무료로 받기 →