모터제어

6. FOC (Field-Oriented Control) – 고성능 BLDC 제어의 핵심

motorcontrol 2025. 4. 5. 11:06
반응형

6. FOC (Field-Oriented Control) – 고성능 BLDC 제어의 핵심

모터를 전류 벡터로 제어하는 고급 기술

BLDC나 PMSM 모터를 사용할 때 가장 강력한 제어 방식이 바로 **FOC(Field-Oriented Control)**입니다.
이 제어 방식은 모터를 전류의 방향과 크기를 분해해서 제어하는 기술로, 고속·고효율·고정밀을 실현할 수 있어요.


🎯 왜 FOC가 필요한가요?

일반적인 PWM 제어나 단순 속도 제어는 다음과 같은 문제를 가집니다:

  • 고속 회전 시 진동 발생
  • 부하 변화에 대한 반응 속도 낮음
  • 효율 저하

FOC는 이런 문제를 해결하기 위해 전류를 **벡터(Vector)**로 보고, 모터 내부의 자속 방향에 맞춰 정밀하게 제어합니다.


🔄 전류를 분해해서 제어한다? (d-q 축 개념)

즉, 자속을 위한 전류는 최소화하고, 토크를 만드는 전류만 정밀하게 제어하자는 전략입니다.


🧮 수식으로 보는 FOC의 흐름

FOC 전체 제어 흐름은 다음과 같은 연산으로 구성됩니다:


🖼️ FOC 제어 블록 다이어그램

[Current Sensor]
      ↓
[Clarke Transform]
      ↓
[Park Transform] ← θ (Rotor angle)
      ↓
[PI Controller] ← 목표 i_d = 0, 목표 i_q = Torque Ref
      ↓
[Inv. Park Transform]
      ↓
[SVPWM / Sine PWM Generation]
      ↓
[Inverter → Motor]

🧠 FOC를 위해 필요한 요소들

항목설명
전류 센서 2~3상 전류 측정 필요 (shunt, Hall)
로터 위치 정보 센서(Hall/Encoder) 또는 센서리스 추정
고속 실시간 연산 MCU에서 5~20kHz 제어 루프 필요
SVPWM/Sine PWM 출력 전압을 최대 효율로 생성

👨‍💻 FOC 루프 간단 의사코드 예시

void FOC_Loop() {
    // 1. 전류 측정
    float ia, ib, ic = Measure_PhaseCurrent();

    // 2. Clarke 변환
    float ialpha, ibeta = ClarkeTransform(ia, ib, ic);

    // 3. 위치각 θ 획득
    float theta = GetRotorAngle();

    // 4. Park 변환
    float id, iq = ParkTransform(ialpha, ibeta, theta);

    // 5. PID 제어
    float vd = PID_id(id_ref - id);
    float vq = PID_iq(iq_ref - iq);

    // 6. 역 변환 → SVPWM
    float valpha, vbeta = InvParkTransform(vd, vq, theta);
    SVPWM_Generate(valpha, vbeta);
}

✅ 정리: FOC는 왜 중요한가?

항목설명
🎯 목표 자속과 토크 성분을 분리하여 정밀하게 제어
💡 특징 효율 ↑, 진동 ↓, 토크 반응 ↑, 정숙성 ↑
🔋 활용 전기차, 고성능 드론, 산업 로봇, 서보 시스템 등
📦 필요 조건 전류 센서 + 위치 정보 + 고속 연산 가능한 MCU

FOC는 단순한 제어가 아니라 모터 내부를 수학적으로 "해석하고 제어"하는 방식입니다.
고성능 모터 제어에는 거의 필수적으로 적용되고 있으며, 센서리스 FOC자동 튜닝 기능이 탑재된 상용 솔루션도 많아요.

반응형