1. 영구자석 동기전동기 기초
표면부착형 영구자석 동기전동기(PMSM)는 회전자 표면에 영구자석이 부착되어 구조가 비교적 단순합니다. dq 회전 좌표계에서 전압 방정식은 다음과 같습니다.
\[ \begin{cases} u_d = R_s i_d + L_d \frac{di_d}{dt} - \omega_e L_q i_q \\ u_q = R_s i_q + L_q \frac{di_q}{dt} + \omega_e (L_d i_d + \psi_f) \end{cases} \]
여기서 \(u_d\), \(u_q\)는 d축과 q축 전압, \(i_d\), \(i_q\)는 d축과 q축 전류, \(R_s\)는 고정자 저항, \(L_d\), \(L_q\)는 d축과 q축 인덕턴스, \(\omega_e\)는 전기 각속도, \(\psi_f\)는 영구자석 쇄교자속입니다. 이 방정식에서 모터의 동작 특성이 이러한 파라미터와 밀접하게 관련됨을 알 수 있습니다.
2. 오프라인 식별 모델
오프라인 식별은 모터가 정지하거나 특정 비동작 상태에서 파라미터를 측정합니다.
고정자 저항 \(R_s\)의 오프라인 식별
일반적으로 직류 주입법을 사용합니다. 모터의 한 상 권선에 직류 전류 \(I_{dc}\)를 인가하고 해당 상 권선 양단의 전압 \(U_{dc}\)를 측정한 후, 옴의 법칙 \(R_s = \frac{U_{dc}}{I_{dc}}\)에 따라 고정자 저항을 구합니다. Python 예시 코드는 다음과 같습니다.
# 측정된 직류 전압과 전류를 가정
U_dc = 10.0 # 측정된 직류 전압 (V)
I_dc = 2.0 # 측정된 직류 전류 (A)
R_s = U_dc / I_dc
print(f"고정자 저항 R_s: {R_s} 옴")
인덕턴스 \(L_d\), \(L_q\)의 오프라인 식별
보통 펄스 응답법을 사용합니다. 모터에 좁은 펄스 전압을 인가하고 전류 응답을 검출하여 인덕턴스 값을 계산합니다. 실제 구현은 복잡하므로 대략적인 코드 프레임워크만 제시합니다.
# 펄스 전압 인가 후 전류 응답 데이터 시뮬레이션
current_response = [1.2, 1.5, 1.8, 2.0, 1.9, 1.7] # 가상의 전류 응답 데이터
# 구체적인 물리 모델에 따라 인덕턴스 계산 알고리즘 적용
# 여기서는 단순화된 예시로, 실제로는 더 복잡한 공식을 사용
def calculate_inductance(response):
start_current = response[0]
peak_current = max(response)
inductance = (peak_current - start_current) / some_constant # some_constant는 실제 상수로 대체
return inductance
L = calculate_inductance(current_response)
print(f"인덕턴스 L: {L} 헨리")
오프라인 식별의 장점은 정밀도가 높다는 점이지만, 모터를 정지시켜야 하므로 연속 운전 시스템에는 불편할 수 있습니다.
3. 온라인 식별 모델
오프라인 식별의 한계를 극복하기 위해 온라인 식별이 등장했습니다. 온라인 식별은 모터가 운전 중에도 파라미터를 실시간으로 추정할 수 있게 합니다.
모델 기준 적응 시스템(MRAS) 기반 온라인 식별
MRAS 방식은 모터의 실제 모델을 기준 모델로, 추정 모델을 가변 모델로 사용합니다. 두 모델 출력의 오차를 통해 가변 모델의 파라미터를 조정하여 실제 모델에 점진적으로 근접시킵니다. MATLAB 기반 핵심 코드 예시입니다.
% 파라미터 초기화
alpha = 0.1; % 적응률
Rs_hat = 1.0; % 고정자 저항 초기 추정값
Ld_hat = 0.01; % d축 인덕턴스 초기 추정값
Lq_hat = 0.01; % q축 인덕턴스 초기 추정값
psi_f_hat = 0.1; % 영구자석 쇄교자속 초기 추정값
% 모터 운전 중 샘플마다 파라미터 갱신
for k = 1:num_samples
% 현재 시점의 전압, 전류 등 측정값
u_d = measured_voltages(k, 1);
u_q = measured_voltages(k, 2);
i_d = measured_currents(k, 1);
i_q = measured_currents(k, 2);
omega_e = measured_speed(k);
% 기준 모델 출력 계산
y_ref = reference_model(u_d, u_q, i_d, i_q, omega_e);
% 가변 모델 출력 계산
y_hat = adjustable_model(u_d, u_q, i_d, i_q, omega_e, Rs_hat, Ld_hat, Lq_hat, psi_f_hat);
% 오차 계산
error = y_ref - y_hat;
% 적응률 기반 파라미터 업데이트
Rs_hat = Rs_hat + alpha * error(1) * i_d;
Ld_hat = Ld_hat + alpha * error(2) * (-omega_e * i_q);
Lq_hat = Lq_hat + alpha * error(2) * (omega_e * i_d);
psi_f_hat = psi_f_hat + alpha * error(2) * (-omega_e);
end
function y = reference_model(u_d, u_q, i_d, i_q, omega_e)
% 실제 모터 모델 기반 기준 출력
Rs = 1.0; Ld = 0.01; Lq = 0.012; psi_f = 0.1; % 실제 파라미터 (알려져 있다고 가정)
y(1) = u_d - Rs * i_d + omega_e * Lq * i_q;
y(2) = u_q - Rs * i_q - omega_e * Ld * i_d - omega_e * psi_f;
end
function y = adjustable_model(u_d, u_q, i_d, i_q, omega_e, Rs_hat, Ld_hat, Lq_hat, psi_f_hat)
% 추정 모델 기반 가변 출력
y(1) = u_d - Rs_hat * i_d + omega_e * Lq_hat * i_q;
y(2) = u_q - Rs_hat * i_q - omega_e * Ld_hat * i_d - omega_e * psi_f_hat;
end
이 코드는 모터 운전 중 측정값을 바탕으로 기준 모델과 가변 모델의 출력 오차를 계산하고, 적응률에 따라 파라미터 추정값을 갱신하여 실시간 식별을 수행합니다.
온라인 식별은 실시간 파라미터 변화를 추적할 수 있지만, 운전 환경의 잡음 등 간섭 요소로 인해 정밀도가 영향을 받을 수 있습니다.
4. 토크 관측
모터 토크를 정확히 관측하는 것은 성능 평가와 제어에 중요합니다. 파라미터를 알면 다음 공식으로 토크를 계산합니다.
\[ T_e = \frac{3}{2} p [\psi_f i_q + (L_d - L_q) i_d i_q] \]
여기서 \(p\)는 모터 극 쌍 수입니다. 식별된 파라미터와 함께 사용하면 모터 운전 중 실시간 토크를 관측할 수 있습니다. Python 예시입니다.
# 식별된 파라미터 가정
p = 4 # 극 쌍 수
psi_f = 0.1 # 영구자석 쇄교자속 (Wb)
L_d = 0.01 # d축 인덕턴스 (H)
L_q = 0.012 # q축 인덕턴스 (H)
# 현재 d축, q축 전류 가정
i_d = 1.5 # (A)
i_q = 2.0 # (A)
T_e = (3/2) * p * (psi_f * i_q + (L_d - L_q) * i_d * i_q)
print(f"현재 모터 토크 T_e: {T_e} Nm")
표면부착형 영구자석 동기전동기의 파라미터 식별은 오프라인과 온라인 방식 모두 장단점이 있으므로, 실제 응용에서는 상황에 맞게 선택해야 합니다. 토크 관측은 정확한 파라미터 식별을 기반으로 모터 성능 최적화를 지원합니다.