State space model สำหรับวงจร RLC โดย Matlab

MIMO

จากที่ก่อนหน้านี้เราได้ทำความรู้จักกับวงจร RLC แบบอนุกรม และได้ทำการจองการทำงานโดยใช้โปรแกรม Matlab/Simulink ไปแล้วในหัวข้อ จำลองการทำงานของ วงจร RLC อนุกรม โดย Matlab/Simulink https://csys.pro/sim/2833/

ในบล๊อกนี้เราจะศึกษาการจำลองการทำงานของระบบพลศาสตร์โดยสมการสเตท(State variable) ซึ่งจะเป็นพื้นฐานนำไปสู่การควบคุมแบบ Mutiple Inpts/Multiple Outputs(MIMO) ที่มีความซับซ้อนสูงขึ้น สมการสเตทสามารถเขียน block diagram ได้เป็น

จากบล๊อกไดอะแกรม สามารถเขียนเป็นสมการได้เป็น

\(\left\{\begin{array}{cl} \dot{x}=Ax+Bu \\ y=Cx+Du \end{array} \right.\)

(1)

จาก blog ก่อนหน้านี้เราพบว่า วงจร RCL สามารถเขียนสมการพลศาสตร์ได้ดังนี้

\(LC\frac{d^{2}v_{c}}{dt^{2}}+RC\frac{dv_{c}}{dt}+v_{c}=v_{i}\)

(2)

จัดรูปสมการ (2) ใหม่อีกครั้งเพื่อเปลี่ยนจากสมการอนุพันธ์อันดับสอง เป็นสมการสเตท โดยกำหนดให้

\( \left\{ \begin{array}{cl} x_{1}=v_{C} \\ x_{2}=\dot{v}_{C} \end{array} \right.\)

(3)

ทำการ derivative สมการ (3) จะได้

\(\left\{ \begin{array}{cl} \dot{x}_{1}=\dot{v}_{C}=x_{2} \\ \dot{x}_{2}=\ddot{v}_{C} =-\frac{R}{L}x_{2}-\frac{1}{LC}x_{1}+\frac{1}{LC}v_{i} \end{array} \right.\)

(4)

เขียนสมการ (4) ใหม่ ตามรูปแบบของสมการ (1)

\(\begin{Bmatrix} \dot{x}_{1} \\ \dot{x}_{2} \end{Bmatrix}=\begin{bmatrix} 0 &1 \\ -\frac{1}{LC} &-\frac{R}{L} \end{bmatrix}\begin{Bmatrix} x_{1} \\ x_{2} \end{Bmatrix}+\begin{bmatrix} 0 \\ \frac{1}{LC} \end{bmatrix}\begin{Bmatrix} v_{i} \end{Bmatrix}\)

(4)

จากสมการ (4) เราจะพบว่า

\(A=\begin{bmatrix} 0 &1 \\ -\frac{1}{LC} &-\frac{R}{L} \end{bmatrix}\)

\(B=\begin{bmatrix} 0 \\ \frac{1}{LC} \end{bmatrix}\)

เราต้องการให้ผลตอบสนองของระบบเป็น \( y(t)=u_{c}\) ดังนั้นจะสามารถเขียนสมการเอาพุตของสเตทได้เป็น

\(\begin{Bmatrix} y \end{Bmatrix}=\begin{bmatrix} 1 &0 \end{bmatrix}\begin{Bmatrix} x_{1} \\ x_{2} \end{Bmatrix}+\left[ 0 \right]\left\{ v_{i} \right\}\)

(5)

จากสมการ (5) เราจะพบว่า

\(C=\begin{bmatrix} 1 &0 \end{bmatrix} , \space D=\left[ 0 \right]\)

เมื่อได้ Matrix A , B , C และ D ครบถ้วนแล้วเราจะนำ Matrix เหล่านี้ไปสร้างเป็นสมการสเตทบนโปรแกรม Matlab เพื่อจำลองการทำงานของวงจร RLC แบบอนุกรม โดยกำหนดพารามิเตอร์ของวงจร RLC ดังนี้

C=0.1 uF
R=100 Ohm
L=0.004 mH;
Vi = square wave ความถี่ 500hz และมี duty cycle 50%
Matrix A, B, C และ D ที่ได้จากด้านบน

นำค่าพารามิเตอร์ทั้งหมดมาสร้างเป็น matlab script ทำหน้าที่เป็นฟังชั่น ให้สามารถถูกเรียกใช้ แล้วบันทึกเป็นไฟล์ชื่อ RLC.m ดังนี้

function dx=RLC(t,x)
%-----------------Define parameters--------------------%
C=0.1e-6;
R=100;
L=4e-3;
freq = 500; % Frecuency (Hz)
d_cycle = 50; % Duty cycle (%)
V_in = 2.5*(1+square(2*pi*freq*t,d_cycle));


%-------------define state variable---------------%
dx=zeros(2,1); %create array

dx(1)=x(2);
dx(2)=(1/(L*C))*(-R*C*x(2)-x(1)+V_in);

ให้ทำการสร้าง matlab script ขึ้นมาอีกหนึ่งไฟล์ ตั้งชื่อว่า State_var_RLC.m ซึ่งจะหน้าที่สองอย่าง อย่างแรกคือคือเป็นโปรแกรมหลักในการเรียกใช้ function RLC ที่อยู่ในไฟล์ RLC.m และอย่างที่สองคือทำหน้าที่ในการพล๊อตกราฟผลตอบสนองของระบบ ดังนี้

%call function RLC
[t,x]=ode45(@RLC, [0 0.01], [0 0]);

%Plot result
figure(1)
plot(t,x(:,1));
grid on;
title("Capacitor Volatge");
xlabel("Time");
ylabel("Voltage");

ทำการ RUN สคริปไฟล์ State_var_RLC.m จะได้ผลลัพธ์ดังนี้

ดาวน์โหลด matlab file ได้ที่นี่