본문 바로가기
Embedded SW/Control Theory

Feedback Controller 설계 (매트랩 m파일을 이용한 시뮬레이션)

by 방구석 임베디드 2022. 10. 7.
반응형

안녕하세요.

마지막으로 하나만 더 정리하고 우선

DC모터 Feedback Controller 제어기 설계 글을 마치려고 합니다.

 

다들 아시겠지만 이글은 연재하여 쓰고 있는 글이기 때문에

아래 글을 읽고 오시면 좋을 것 같습니다.

 

1) 제어란 무엇인가?
https://embeddedchallenge.tistory.com/475

​2) 매트랩이란? 매트랩 학생용 다운로드 및 라이센스 받는 방법
https://embeddedchallenge.tistory.com/477

​3) 매트랩 기초 연습 (행렬 연산, 데이터 나누기, 그래프 그리기)
https://embeddedchallenge.tistory.com/478

4) 지수함수, 모터 모델링, 전달함수, 시간함수 정리
https://embeddedchallenge.tistory.com/479

5) DC모터 모델링, 매트랩 전달함수 생성 후 그래프 확인
https://embeddedchallenge.tistory.com/480

6) Simulink를 이용한 전달함수 시뮬레이션 수행 방법 정리
https://embeddedchallenge.tistory.com/481

7) DAQ? Data Acquisition? DC모터 전달함수의 K와 Tau 값을 계산, 확인하는 방법 정리
https://embeddedchallenge.tistory.com/482

8) Feedback Controller 설계 방법 정리 (ex DC모터 제어, P Controller)
https://embeddedchallenge.tistory.com/484

9) Pole이란 무엇이고, 1차 전달함수에서 Pole에 위치에 따른 응답특성은?
https://embeddedchallenge.tistory.com/485

 

10) P controller 정상오차 분석 정리 (DC모터 P 제어기 Steady State Error 분석)

https://embeddedchallenge.tistory.com/490

 

11) PI 제어기 설계 (PI Controller DC Motor Design)

https://embeddedchallenge.tistory.com/491

 

요약하면

우리는 DC모터 속도제어를 하기 위하여

DC모터 전달함수를 만들었습니다.

그리고 그 모터의 파라미터를 찾았고

드디어 모터를 수식화 하는데 성공했습니다.

그리고 그 모터를

아래와 같이 가지고 와서 PI Controller를 설계하였습니다.

아래는 Matlab Simulink를 이용하여 만든 것입니다.

이렇게 시뮬레이션 한 결과 데이터를 다시

Matlab Workplace로 가지고 와서,

아래와 같은 그림을 그렸습니다.

하지만, 실제로 matlab m파일에서도 시뮬레이션이 가능합니다.

한번 만들어보고, 이렇게 만들었을때 유익이 무엇인지 한번 생각해 보도록 하겠습니다.

 

저는 아래와 같은 코드를 만들었습니다.

우리가 찾은 파라미터를 집어넣고

step 입력값을 만들기 위해

t = 0 : 0.01 : 20

즉 20초를 0.01단위로 배열을 만들었습니다.

그러면 총 2001개의 배열이 생기기게 됩니다.

그리고 이 시간에 맞추어 u라는 step 함수를 만들기 위해

u(1:1000) = 126;

u(1001:2001) = 215;

이러한 코드를 만들었습니다.

이 코드는 굉장히 유용한 코드입니다.

u배열은 StepTime이 10초인 step 값을 배열로 저장하고 있습니다.

 

그리고 C, G, Gc를 아래와 같이 만들었습니다.

그럼 다시 한번 코드를 살펴 보시겠습니다.

그리고 lsim을 이용하여 u에 input을 넣었을때,

시간에 따른 결과값을 y로 도출하고 있는것을 볼 수 있습니다.

clear;
close all;
clc;

StepTime = 10.05;
K = 44.3222;
Tau = 0.8689;

Kp = 0.2;
Ki = 0;

% Simulation Operation
t = 0:0.01:20; 
u(1:1000) = 126;
u(1001:2001) = 215;

C = tf([Kp Ki],[1 0]); 
G = tf([K],[Tau 1]); 
Gc = feedback(G*C,1) % Gc = G*C/(1+G*C)
y = lsim(Gc,u,t);

%Plot
plot(t, u, 'b');
hold on;
plot(t, y, 'r');
xlim([6 15]);
ylim([100 240]);
title('PI Controller');
xlabel('Time [s]');
ylabel('Motor Speed [RPM]');
grid on;
legend('Target Speed [RPM]', 'Simulation Motor Speed [RPM]');

그리고 이것을 그림으로 그려보면 아래와 같이 나오게 됩니다.

 

1) Kp = 0.2 (P Controller)

2) Kp = 0.2, Ki = 0.35

우선 이전글에서 Simulink를 이용한 것과 동일한 결과를 얻은 것을 볼 수 있습니다.

하지만, 지금 저는 Gc를 구하게 되었고

이것을 이용해서

Step에 따른 응답 명령어로 구할 수 있습니다.

아래와 같이 Stepinfo(Gc)를 통해서

아래의 feedback 제어기 전체 전달함수의 응답특성을 데이터로 얻을 수 있습니다.

Rising Time : 0.188

Settling Time : 0.8254

이러한 정보를 얻을 수 있네요!

따라서, 하나의 m파일로 잘 코드를 작성하는것이

더 효율적인 시뮬레이션 결과값을 도출하는데 도움이 될 수 있습니다.

 

이제 제어의 1단계가 정리가 된것 같습니다 ㅎㅎ

그러면 이제 또 재미있는 글을 한번 써보겠습니다 ㅎㅎ

반응형

댓글