Main Content

이 번역 페이지는 최신 내용을 담고 있지 않습니다. 최신 내용을 영문으로 보려면 여기를 클릭하십시오.

종속 연결 PI 제어기로 BLDC 모터 속도 제어하기

이 예제는 Simulink에서 기존 플랜트에 대한 PID 제어기를 조정하는 여러 가지 방법 중 하나를 보여줍니다. 여기에서는 Closed-Loop PID Autotuner 블록을 사용하여 종속 연결로 구성된 2개의 PI 제어기를 조정합니다. Autotuner 블록은 플랜트를 섭동하고 원하는 대역폭에 가깝게 추정된 플랜트 주파수 응답을 바탕으로 PID 조정을 수행합니다. Open-Loop PID Autotuner 블록과 달리 이 피드백 루프는 닫힌 상태로 유지되며, 초기 제어기 이득은 자동 조정 프로세스 중에 변경되지 않습니다.

BLDC 모터 모델

이 예제의 모델은 벅 컨버터와 3상 인버터 전원 링크가 결합된 3상 BLDC 모터를 사용합니다. 이상적인 스위치를 사용하기 보다는, 벅 컨버터는 MOSFET으로 그리고 인버터는 IGBT로 모델링하여 소자의 온-저항(on-resistance)과 특성이 적절하게 표현되도록 합니다. DC-DC 컨버터 링크의 전압과 인버터의 전압은 모터의 속도를 제어하는 반도체 게이트 트리거를 변경하여 제어할 수 있습니다.

mdl = 'scdbldcspeedcontrol';
open_system(mdl)

모터 모델 파라미터는 다음과 같습니다.

p    = 4;        % Number of pole pairs
Rs   = 0.1;      % Stator resistance per phase           [Ohm]
Ls   = 1e-4;     % Stator self-inductance per phase, Ls  [H]
Ms   = 1e-5;     % Stator mutual inductance, Ms          [H]
psim = 0.0175;   % Maximum permanent magnet flux linkage [Wb]
Jm   = 0.0005;   % Rotor inertia                         [Kg*m^2]
Ts  = 5e-6;      % Fundamental sample time               [s]
Tsc = 1e-4;      % Sample time for inner control loop    [s]
Vdc = 48;        % Maximum DC link voltage               [V]

이 모델은 종속 연결된 2개의 PI 제어기(하나는 내부 DC 링크 전압 루프용, 다른 하나는 외부 모터 속도 루프용)를 통해 안정적인 폐루프 동작이 이루어지도록 사전 구성되어 있습니다.

Kpw = 0.1;    % Proportional gain for speed controller
Kiw = 15;     % Integrator gain for speed controller
Kpv = 0.1;    % Proportional gain for voltage controller
Kiv = 0.5;    % Integrator gain for voltage controller

추종 성능을 테스트하기 위한 신호는 0-500 RPM, 500-2000 RPM, 2000-3000 RPM으로 이어지는 일련의 속도 램프입니다. 초기 제어기 이득을 적용하여 모델을 시뮬레이션했을 때 느린 추종 응답을 보이며, 이는 제어기의 재보정이 필요함을 나타냅니다.

open_system([mdl '/Visualization/RPM (Outer)'])
sim(mdl)

Closed-Loop PID Autotuner 블록 구성하기

이 예제에서는 Closed-Loop PID Autotuner 블록을 사용하여 제어기 성능을 개선합니다. 이 블록은 루프가 닫힌 상태에서 실험을 수행하면서 플랜트 주파수 응답을 추정한 다음 제어기 이득을 조정합니다. Control 서브시스템을 열어서 Autotuning Speed 서브시스템과 Autotuning Voltage 서브시스템에 들어 있는 Closed-Loop PID Autotuner 블록을 살펴봅니다.

open_system([mdl '/Control'])

종속 연결 루프의 일반적인 조정 방식을 따라서 먼저 외부 속도 루프가 열린 상태에서 내부 전압 루프를 조정합니다. 그런 다음 내부 전압 루프가 닫힌 상태에서 외부 속도 루프를 조정합니다.

PID 제어기의 조정 요구 사항을 지정하기 위해 각 PID Autotuner 블록의 조정 탭에 있는 파라미터를 사용합니다. 이 예제에서 제어기는 병렬 이산시간 PI 제어기입니다. 제어기 샘플 시간은 100마이크로초입니다.

두 제어기의 목표 위상 여유가 모두 60도일 때 성능과 강인성 사이에 적절한 균형이 유지됩니다.

외부 루프 제어기의 목표 대역폭을 100rad/s로 선택합니다. 내부 루프 제어기의 추정 목표 대역폭을 400rad/s로 선택합니다. 값을 이렇게 선택하면 내부 루프 제어기가 외부 루프 제어기보다 더 빠른 응답을 갖습니다.

Closed-Loop PID Autotuner 블록은 폐루프 실험을 수행하여 플랜트 주파수 응답을 구합니다. 블록 파라미터의 실험 탭에서 이 실험에 대한 파라미터를 지정합니다. 플랜트가 새 정상 상태에 도달했을 때, 공칭 동작점에서 플랜트 입력에서의 양의 변화량이 플랜트 출력에서의 양의 변화량을 발생시키므로 플랜트 부호입니다. 이 예제에서와 같이 플랜트가 안정적일 때 플랜트 부호는 DC 이득의 부호와 동일합니다.

자동 조정 프로세스 중에 주입되는 사인파의 진폭에는 1을 사용합니다. 이렇게 하면 플랜트가 플랜트 포화 한도 내에 머무는 동안 가진이 적절하게 가해집니다. 선택한 진폭이 너무 작으면 Autotuner 블록이 전력 전자 회로의 리플과 응답 신호를 구별하기 어렵습니다.

내부 루프 PI 제어기 조정하기

종속 연결된 제어기를 조정하기 위해 먼저 내부 전압 루프를 조정한 다음 외부 속도 루프를 조정하는 모델을 설정합니다.

내부 루프 제어기의 조정 프로세스를 활성화하기 위해 Autotuning Voltage 서브시스템에서 Tune Inner Voltage Loop Constant 블록 값을 1로 설정합니다. 이 값을 설정하면 외부 루프가 열리고 대신 내부 루프가 일정한 공칭 전압 기준 12.5를 사용하도록 구성됩니다.

set_param([mdl '/Control/Tune Inner Voltage Loop'],'Value','1')

또한 외부 루프 조정을 비활성화하기 위해 Tune Outer Speed Loop 상수 블록 값을 0으로 설정합니다.

set_param([mdl '/Control/Tune Outer Speed Loop'],'Value','0')

이 설정은 1~1.8초의 시뮬레이션 시간 동안 폐루프 조정 실험을 실행하도록 구성된 Closed-Loop PID Autotuner 블록을 활성화합니다. 플랜트는 정상 상태 동작 조건에 도달하는 데 처음 1초를 사용합니다. 폐루프 실험 지속 시간에 대한 양호한 추정값은 $200/{b_t}$이며, 여기서 ${b_t}$는 목표 대역폭입니다. Closed-Loop PID Autotuner 블록의 % conv 출력값을 사용하여 실험 진행 상황을 모니터링하고 % conv 신호가 100% 근처에서 안정화되면 실험을 중지할 수 있습니다.

시뮬레이션을 실행합니다. 실험이 완료되면 Closed-Loop PID Autotuner 블록은 내부 전압 루프에 대해 조정된 PID 제어기 이득을 반환합니다. 모델은 반환된 이득을 배열 VoltageLoopGains로 MATLAB 작업 공간에 내보냅니다.

close_system([mdl '/Visualization/RPM (Outer)'])
open_system([mdl '/Visualization/VDC (Inner)'])
sim(mdl)

새로운 이득으로 내부 루프 PI 제어기를 업데이트합니다.

Kpv = VoltageLoopGains(1);
Kiv = VoltageLoopGains(2);

외부 루프 PI 제어기 조정하기

다음으로 외부 속도 루프를 조정합니다. Autotuning Voltage 서브시스템에서 Tune Inner Voltage Loop Constant 블록 값을 0으로 변경하여 내부 전압 루프 조정을 비활성화합니다. 내부 루프 제어기는 새로 조정된 이득 KpvKiv를 사용합니다.

set_param([mdl '/Control/Tune Inner Voltage Loop'],'Value','0')

마찬가지로 Autotuning Speed 서브시스템에서 Tune Outer Speed Loop Constant 블록 값을 1로 변경하여 외부 속도 루프 조정을 활성화합니다. 이 루프의 경우 1초부터 시작해 0.9초의 페루프 자동 조정 시간을 사용합니다. 조정에 사용한 공칭 속도는 2000RPM입니다.

set_param([mdl '/Control/Tune Outer Speed Loop'],'Value','1')

시뮬레이션을 재실행합니다. 실험이 완료되면 Closed-Loop PID Autotuner 블록은 외부 속도 루프에 대해 조정된 PID 제어기 이득을 반환합니다. 모델은 반환된 이득을 배열 SpeedLoopGains로 MATLAB 작업 공간에 내보냅니다.

close_system([mdl '/Visualization/VDC (Inner)'])
open_system([mdl '/Visualization/RPM (Outer)'])
sim(mdl)

새로운 이득으로 외부 루프 PI 제어기를 업데이트합니다.

Kpw = SpeedLoopGains(1);
Kiw = SpeedLoopGains(2);

자동 조정 후 향상된 추종 성능

조정된 제어기의 성능을 확인하기 위해 두 루프 모두에서 조정을 비활성화합니다.

set_param([mdl '/Control/Tune Inner Voltage Loop'],'Value','0')
set_param([mdl '/Control/Tune Outer Speed Loop'],'Value','0')

조정된 이득을 적용했을 때 테스트 램프 신호를 더 잘 추종하는 결과를 보여줍니다.

sim(mdl)

참고 항목

관련 항목