이 번역 페이지는 최신 내용을 담고 있지 않습니다. 최신 내용을 영문으로 보려면 여기를 클릭하십시오.
DC 모터 제어
이 예제에서는 세트포인트 명령을 추적하고 부하 외란에 대한 민감도를 줄이는 3가지 DC 모터 제어 기술을 비교합니다.
피드포워드 명령
적분 피드백 제어
LQR 조절
DC 모터 모델에 관한 자세한 내용은 "시작하기:모델 작성하기"를 참조하십시오.
문제 설명
전기자 제어 DC 모터에서는 인가 전압 Va가 축의 각속도 w를 제어합니다.
이 예제에서는 부하 변동(즉, 모터 부하에 반하는 토크의 변화)에 대한 w의 민감도를 줄이는 두 가지 DC 모터 제어 기법을 보여줍니다.
DC 모터의 단순화한 모델을 위에서 확인할 수 있습니다. 토크 Td는 부하 외란을 모델링합니다. 이러한 외란이 유발하는 속도 변동을 최소화해야 합니다.
이 예제에서 물리 상수는 다음과 같습니다.
R = 2.0; % Ohms L = 0.5; % Henrys Km = 0.1; % torque constant Kb = 0.1; % back emf constant Kf = 0.2; % Nms J = 0.02; % kg.m^2/s^2
먼저 입력 2개(Va,Td)와 출력 1개(w)가 있는 DC 모터의 상태공간 모델을 만듭니다.
h1 = tf(Km,[L R]); % armature h2 = tf(1,[J Kf]); % eqn of motion dcm = ss(h2) * [h1 , 1]; % w = h2 * (h1*Va + Td) dcm = feedback(dcm,Kb,1,1); % close back emf loop
참고: 상태공간 형식을 이용해 계산하여 모델 차수를 최소화합니다.
이제 전압 Va의 계단 변동에 대한 각속도 응답을 플로팅합니다.
stepplot(dcm(1));
플롯을 마우스 오른쪽 버튼으로 클릭하고 "특성:정착 시간"을 선택하여 정착 시간을 표시합니다.
피드포워드 DC 모터 제어 설계
이 단순한 피드포워드 제어 구조를 사용하여 각속도 w를 지정된 값 w_ref로 명령할 수 있습니다.
피드포워드 이득 Kff는 Va에서 w로의 DC 이득의 역수로 설정되어야 합니다.
Kff = 1/dcgain(dcm(1))
Kff = 4.1000
부하 외란 상황에서 피드포워드 설계를 평가하기 위해, t=5에서 t=10초 사이 외란 Td = -0.1Nm으로 계단 명령 w_ref=1에 대한 응답을 시뮬레이션합니다.
t = 0:0.1:15; Td = -0.1 * (t>5 & t<10); % load disturbance u = [ones(size(t)) ; Td]; % w_ref=1 and Td cl_ff = dcm * diag([Kff,1]); % add feedforward gain cl_ff.InputName = {'w_ref','Td'}; cl_ff.OutputName = 'w'; h = lsimplot(cl_ff,u,t); title('Setpoint tracking and disturbance rejection') legend('cl\_ff') % Annotate plot line([5,5],[.2,.3]); line([10,10],[.2,.3]); text(7.5,.25,{'disturbance','T_d = -0.1Nm'},... 'vertic','middle','horiz','center','color','r');
피드포워드 제어가 부하 외란을 잘 처리하지 못하는 게 분명합니다.
피드백 DC 모터 제어 설계
이번에는 아래에 표시된 피드백 제어 구조를 시도해 보겠습니다.
정상 상태 오차가 0이 되도록 만들기 위해 다음 형식의 적분 제어를 사용합니다.
C(s) = K/s
where K is to be determined.
이득 K를 결정하려면 개루프 1/s * transfer(Va->w)에 적용된 근궤적 기법을 사용하면 됩니다.
h = rlocusplot(tf(1,[1 0]) * dcm(1)); setoptions(h,'FreqUnits','rad/s'); xlim([-15 5]); ylim([-15 15]);
곡선을 클릭하여 이득 값과 관련 정보를 읽습니다. 여기서 합리적인 선택은 K = 5입니다. 제어 시스템 디자이너 앱은 이러한 설계를 수행하기 위한 대화형 UI입니다.
이 새로운 설계를 같은 테스트 사례의 최초 피드포워드 설계와 비교해 보십시오.
K = 5; C = tf(K,[1 0]); % compensator K/s cl_rloc = feedback(dcm * append(C,1),1,1,1); h = lsimplot(cl_ff,cl_rloc,u,t); cl_rloc.InputName = {'w_ref','Td'}; cl_rloc.OutputName = 'w'; title('Setpoint tracking and disturbance rejection') legend('feedforward','feedback w/ rlocus','Location','NorthWest')
근궤적 설계가 부하 외란을 제거하는 데 더 효과적입니다.
LQR DC 모터 제어 설계
성능을 더 개선하기 위해 아래에 표시된 피드백 구조에 대한 선형 2차 조절기(LQR)를 설계해 보십시오.
LQR 체계는 오차 적분은 물론 상태 벡터 x=(i,w)를 사용하여 구동 전압 Va를 합성합니다. 그 결과, 전압의 형식은 다음과 같습니다.
Va = K1 * w + K2 * w/s + K3 * i
where i is the armature current.
외란 제거를 개선하려면 큰 적분 오차에 페널티를 적용하는 비용 함수를 사용하십시오. 비용 함수의 예는 다음과 같습니다.
여기서,
이 비용 함수의 최적 LQR 이득은 다음과 같이 계산됩니다.
dc_aug = [1 ; tf(1,[1 0])] * dcm(1); % add output w/s to DC motor model
K_lqr = lqry(dc_aug,[1 0;0 20],0.01);
그런 다음 시뮬레이션을 위한 폐루프 모델을 얻습니다.
P = augstate(dcm); % inputs:Va,Td outputs:w,x C = K_lqr * append(tf(1,[1 0]),1,1); % compensator including 1/s OL = P * append(C,1); % open loop CL = feedback(OL,eye(3),1:3,1:3); % close feedback loops cl_lqr = CL(1,[1 4]); % extract transfer (w_ref,Td)->w
이 플롯은 3가지 DC 모터 제어 설계용 폐루프 보드 다이어그램을 비교합니다.
bodeplot(cl_ff,cl_rloc,cl_lqr);
곡선을 클릭하여 시스템을 식별하거나 데이터를 검사합니다.
DC 모터 제어 설계 비교
마지막으로 시뮬레이션 테스트 사례에서 3가지 DC 모터 제어 설계를 비교합니다.
h = lsimplot(cl_ff,cl_rloc,cl_lqr,u,t); title('Setpoint tracking and disturbance rejection') legend('feedforward','feedback (rlocus)','feedback (LQR)','Location','NorthWest')
LQR 보상기는 추가적인 자유도로 인해 부하 외란 제거 시 (여기서 논의한 3가지 DC 모터 제어 설계 중에서) 가장 뛰어난 성능을 발휘합니다.