https://ctms.engin.umich.edu/CTMS/index.php?example=CruiseControl§ion=SystemModeling
Control Tutorials for MATLAB and Simulink - Cruise Control: System Modeling
Cruise Control: System Modeling Key MATLAB commands used in this tutorial are: ss , tf Contents Physical setup Automatic cruise control is an excellent example of a feedback control system found in many modern vehicles. The purpose of the cruise control sy
ctms.engin.umich.edu
위의 사이트를 참고해서 정리한 글입니다!!
1. Cruise Control
cruise control을 feedback control의 대표적인 예시로 현대의 이동수단에 사용된다. 해당 시스템의 목적은 바람, 도록의 상태 등 외부의 disturbance에 관계없이 일정한 속도를 유지하는 것이다. 현재 속도를 측정하고 reference speed와 비교 후 제어 법칙에 따라 자동으로 스로틀을 조정하는 방식을 이용한다.
이동수단의 free-body diagram을 간단하게 생각해보자. 질량은 m이고 엔진, 바퀴에 의해 앞으로 작용하는 힘은 uf라고 하자. 도로와의 마찰과 공기저항에 의해서 저항력이 생기는데 이는 속도에 비례하고 반대방향으로 작용하므로 bv라고 하자.이를 식으로 나타내면 아래와 같다.
위의 시스템은 first-order mass-damper system이다. 우리는 여기에서 속도에 관심이 있으므로 output equation은 아래와 같다.
1)State-space model
해당 시스템은 하나의 state variable만 필요하고 여기서는 속도이다. state-space는 아래와 같이 표현된다.
매트랩으로는 ss()함수를 이용해서 아래코드를 사용한다.
m = 1000;
b = 50;
A = -b/m;
B = 1/m;
C = 1;
D = 0;
cruise_ss = ss(A,B,C,D);
2)Transfer function
초기조건을 0으로 가정하고 라플라스 변환을 적용하면 전달함수를 아래처럼 구할 수 있다.
매트랩을 이용하면 아래 코드를 이용한다.
m=1000;
b=50;
cruise_tf=tf([1],[m,b]);
2. System Analysis
1)Open-loop step response
위의 시스템에 500N의 힘을 가했을 때 결과를 확인해보자!! 아래의 매트랩 코드를 사용한다.
m=1000;
b=50;
u=500;
tf_cruise=tf([1],[m,b]);
step(u*tf_cruise);
axis([0 200 0 12]);

위의 시스템은 open-loop system이다. 힘 500N을 가했을 때 그 feedback없이 결과를 그대로 나타낸 것이다. 1000kg의 자동차에 500N의 힘을 가하면(damping coefficient=50Ns/m) 최종적으로 10m/s의 속도를 가지게 된다. 해당 시스템은 overshoot없이 목표한 값에 도달하지만 rise time이 60초로 너무 길다. 우리는 다른 부분에 영향을 주지 않으면서 시스템을 빠르게 하는 feed back controller를 만드는 것이 목표이다.
2)open-loop poles/zeros
위의 cruise systemd는 s=-b/m에서 하나의 pole을 가지고 이는 아래의 매트랩 코드로 확인 가능한다.
m=1000;
b=50;
u=500;
tf_cruise=tf([1],[m,b]);
pzmap(tf_cruise);
axis([-1 1 -1 1]);

결과는 간단하게 -50/1000=-0.05에 pole이 하나 있는 것으로 나타났다. 여기서 우리가 알 수 있는 것은 아래와 같다.
- pole이 음의 실수이므로 open-loop system은 stable하고 oscillate하지 않는다.
- 시스템의 반응은 pole의 크기에 따라서 결정된다. pole이 원점에서 멀어지면 시스템은 steady-state값에 더 빨리 도달한다.
우리가 시스템의 parameter를 변경할 수 없으므로 controller를 디자인해서 closed-loop system의 pole/zero의 위치를 바꾸고 원하는 성능을 만족하도록 해야한다. 여기서 성능의 목표는 아래와 같다.
- Rise time < 5s
- Overshoot < 10%
- Steady-state error < 2%
현재 상태에서는 rise time만 감소 시켜서 시스템이 빠르게 반응하도록 만들면 된다.
3)Open-loop Bode plot
frequency response의 크기와 주파수를 각각 두개의 그래프에 나타낸 것이 bode plot이다. 아래 매트랩 함수를 통해서 그 결과를 확인할 수 있다.
m=1000;
b=50;
u=500;
tf_cruise=tf([1],[m,b]);
bode(tf_cruise);

전형적인 first-order system의 bode diagram이다. bode를 그리기 위한 식을 정리하면 아래처럼 정리된다.
이제 gain 1/b와 분모에 first-order system으로 나누어서 생각해보자. gain은 bode-plot에서 크기를 y축 방향으로 20log(K)만큼 이동시킨다. 위의 예제에서는 20log(1/b)=20log(1/50)=-33.97로 그려지는 그래프를 y축 방향으로 -34만큼 이동시킨다. 분모의 first-order system은 break frequency인(b/m=50/1000=0.05)에서 크기는 20dB/dec의 기울기를 각도는 0도에서 90도로 변하게 한다. 여기서는 분모에 존재하므로(지수가 -1) 크기의 기울기는 -20dB/dec, 각도는 0~-90도로 변화한다. 이러한 예측을 종합해서 부드럽게 연결하면 위와 같은 bode diagram이 나타난다.
'control tutorials > cruise control' 카테고리의 다른 글
| 3. Simulink modeling (0) | 2025.01.29 |
|---|---|
| 2. Control (0) | 2025.01.22 |