來源:曾傳蘆老師<控制器設計與應用>


1.matlab解法

1.1 解題步驟

Step1.設定取樣時間

上升時間/10  or  上升時間/6  


Step2.設定所有值的初始值設為0

時間等於0時,系統是靜態的,所以所有值的初始值設為0。


Step3.設定參考輸入 (reference input)與迭代次數

本例設 1.0


Step4.使用差分方程求解

要留意的地方為,matlab是從1開始算,因此最後要繪製時間為0時,要記得減一。


Step5.畫出響應圖

使用差分方程求解出的響應圖


使用轉移函數求解出的響應圖


1.2 m檔案





clear


% Step1 設定取樣時間

% Sampling period

ts=0.05;


% Step2.設定所有值的初始值設為0

% Initial Values

u_1=0.0;u_2=0.0;y_1=0.0;y_2=0.0;

e_1=0.0;


% Step3.設定參考輸入 (reference input)與迭代次數

% Reference Input

rin=1.0;


% Epoch

 P=150;


% Step4.使用差分方程求解 

 %使用差方方程求解

 for k=1:1:P

   time(k)=k*ts;

   r(k)=rin;

 

% Calculate plant output。計算受控體輸出

 y(k)=1.98*y_1-0.9802*y_2+0.001987*u_1+0.001974*u_2;

 %此處為模擬信號。實務上可依據需求,使用 inport()指令將裝置蒐集的信號輸入

 

 %y_1 for y(k-1), y_2 for y(k-2)

 %u_1 for u(k-1), u_2 for u(k-2)

     

% Calculate Error 

   e=r(k)-y(k); 

   

% Calculate the Control signal

   u(k)=0.8187*u_1+10*e-9.819*e_1; 

   

   % u_1 for u(k-1), u_2 for u(k-2)

   % e for e(k)

   

% Update errors, inputs, and 

% outputs

    e_1=e;

    u_2=u_1;u_1=u(k);

    y_2=y_1;y_1=y(k);

 end


% Step5.畫出響應圖

   time = time-ts;

   t=time'; %time為行向量,轉至成列向量

    figure(1);

    subplot(2, 1, 1); stairs([t t],[r' y']);

    xlabel('time(sec)'); ylabel('y');

    % axis tight;

    subplot(2, 1, 2); stairs(time, u);

    xlabel('time(sec)'); ylabel('u');

    % axis tight;


% Extra Step.使用matlab轉移函數求解    

% Z-transform step response

    num=[0 0.001987 0.001974];

    den=[1 -1.98 0.9802];

    G_d=tf(num,den,ts);

    num_d=[10  -9.819];

    den_d=[1 -0.8187];

    D_d=tf(num_d,den_d,ts);

    figure(2)

    plot(t, y,'o');

    hold on

    step((D_d*G_d)/(1+D_d*G_d),ts*(P-1));

    hold off

---

#差分方程 #轉移函數 #離散系統

0 留言