การประมาณ Transfer function ของระบบที่เราไม่ทราบสมการพลศาสตร์ (System Indentification) ด้วยสมการอนุพันธ์อันดับสอง

Sim

ในกรณีที่เราไม่ทราบสมการพลศาสตร์ของระบบ แต่เราสามารถทดสอบระบบโดยการป้อนอินพุตแบบ Unit Step และทำการบันทึกผลตอบสนอง เราก็สามารถใช้ Transfer function ของระบบพลศาสตร์ที่มีอนพันธ์อันดับสองในการประมาณ Transfer function ของระบบที่เราสนใจได้

ระบบที่เราจะประมาณการ ควรให้ผลตอบสนองออกมาในแนวโน้มเดียวกับระบบพลศาสตร์ที่มีอนุพันธ์อันดับสอง

ระบบพลศาสตร์ที่มีอนุพันธ์อันดับสอง สามารถเขียนในรูปทั่วไปได้ดังนี้

\(G(s)=\frac{\omega _{n}^{2}}{s^{2}+2\delta \omega _{n}s+\omega _{n}^{2}}\)

(1)

\(\delta\) คือ dampling ratio
\(\omega_{n}\) คือความถี่ธรรมชาติของระบบ (Natural frequency)

ตัวอย่างการคำนวณ จะขอยกมาจากหนังสือของ Nise ดังภาพนี้

มีเรือล่องไปในแม่น้ำที่สงบ แล้วเกินคลื่นขึ้นมาหนึ่งลูกวิ่งเข้าปะทะกับตัวเรือ ทำให้หน้าเรือมีการหมุนรอบแกน Roll โดยเราจะสมมติให้เคลื่อนที่เข้ามาปะทะมีลักษณะเป็น Unit step และ มุมของหัวเรือที่มีการมุมรอบแกน Roll คือผลตอบของระบบ

กับตันได้ตรวจสอบระบบบันทึกค่ามุม Roll ของหัวเรือในช่วงขณะเวลาหนึ่งพบว่าเป็นดังนี้

รูปที่ 1. บันทึกมุม Roll ของหัวเรือ

จากบันทึกของกับตันเรือเราพบว่า มุมของหัวเรือรอบแกน Roll มีลักษณะที่จะใช้ Transfer function ของระบบพลศาสตร์ที่มีอนุพันธ์อันดับสองประมาณค่าได้ ดังนี้

คำนวณหา เปอเซนต์ % Over shoot ได้โดยสมการ

\(PO=\frac{\theta _{max \, value}-\theta _{final \, value}}{\theta _{final\, value}}\)

(2)

Dampling ratio คำนวณได้จากสมการ

\(\delta =\frac{-ln\left ( \frac{PO}{100} \right )}{\sqrt{\pi ^{2}+ln^{2}\left ( \frac{PO}{100} \right )}}\)

(3)

Settling Time \(T_{s}\) จะประมาณการจากรูปที่ 1. เมื่อเวลาผลตอบสนองของระบบ อยู่ในระดับ \(\pm 2%\)

ความถี่ธรรมชาติของระบบคำนวณได้จากสมการ

\(\omega _{n}=\frac{-ln\left ( 0.02\sqrt{1-\delta ^{2}} \right )}{\delta T_{s}}\)

(4)

ค่า Time constant หาได้จาก

\(\tau =\frac{1}{\delta \omega _{n}}\)

(5)

ค่า Settling time นอกจากจะประมาณจากผลตอบสนองของระบบดังปรากฎในรูปที่ 1 แล้ว ยังพบว่าระบบพลศาสตร์อนุพันธ์อันดับสอง จะลู่เข้าหา 98% ของค่าสุดท้าย (Final value) ที่ประมาณ 4 เท่าของค่า Time Contstant เขียนเป็นสมการได้ดังนี้

\(T_{s} =\frac{4}{\delta \omega _{n}}\)

(6)

จากรูปที่ 1 และ สมการ (2) จะได้ %Over Shoot = 58%
จากสมการ (3) จะได้ค่า \(\delta\) = 0.1708
จากรูปที่ 1 จะได้ค่า \(T_{s}\)= 15.4 Sec.
จากสมการ (4) จะได้ค่า \( \omega_{n} \)= 1.4925 rad/s

นำพารามิเตอร์ที่ได้จากการประมาณการ ไปทดสอบในโปรแกรม Matlab โดย Script ดังนี้

clc
    clear

    % Declaration of Omega_n Value
    wn = 1.4925;   %***** Our system **** %

    % Zeta Values for Each Variation
    z1 = 1;
    z2 = 2;
    z3 = 0.1708;   %***** Our system **** %
    z4 = 0.5;
    z5 = 0;

    % Numerator and Denominator Values for Each Variation
    num1 = wn^2;
    den1 = [1 2*z1*wn wn^2];

    num2 = wn^2;
    den2 = [1 2*z2*wn wn^2];

    num3 = wn^2;
    den3 = [1 2*z3*wn wn^2];

    num4 = wn^2;
    den4 = [1 2*z4*wn wn^2];

    num5 = wn^2;
    den5 = [1 2*z5*wn wn^2];

    figure;

    % When Zeta = 1
    sys_tf1 = tf(num1, den1);

    % Pole Zero Map
    subplot(2,5,1)
    pzmap(sys_tf1);
    title(['Pole Zero Map (Zeta = ', num2str(z1), ')'])

    % Step Response
    subplot(2,5,6)
    step(sys_tf1);
    title(['Step Response (Zeta = ', num2str(z1), ')'])

    % When Zeta = 2
    sys_tf2 = tf(num2, den2);

    % Pole Zero Map
    subplot(2,5,2)
    pzmap(sys_tf2);
    title(['Pole Zero Map (Zeta = ', num2str(z2), ')'])

    % Step Response
    subplot(2,5,7)
    step(sys_tf2);
    title(['Step Response (Zeta = ', num2str(z2), ')'])

    % When Zeta = 0.1
    sys_tf3 = tf(num3, den3);

    % Pole Zero Map
    subplot(2,5,3)
    pzmap(sys_tf3);
    title(['Pole Zero Map (Zeta = ', num2str(z3), ')'])

    % Step Response
    subplot(2,5,8)
    step(sys_tf3);
    title(['Step Response (Zeta = ', num2str(z3), ')'])

    % When Zeta = 0.5
    sys_tf4 = tf(num4, den4);

    % Pole Zero Map
    subplot(2,5,4)
    pzmap(sys_tf4);
    title(['Pole Zero Map (Zeta = ', num2str(z4), ')'])

    % Step Response
    subplot(2,5,9)
    step(sys_tf4);
    title(['Step Response (Zeta = ', num2str(z4), ')'])

    % When Zeta = 0
    sys_tf5 = tf(num5, den5);

    % Pole Zero Map
    subplot(2,5,5)
    pzmap(sys_tf5);
    title(['Pole Zero Map (Zeta = ', num2str(z5), ')'])

    % Step Response
    subplot(2,5,10)
    step(sys_tf5,5);
    title(['Step Response (Zeta = ', num2str(z5), ')'])

    % Displaying damping mode information and time domain specifications
    for z = [z1, z2, z3, z4, z5]
        if z == 0
            disp(['Mode of damping for Zeta = ', num2str(z), ': Undamped']);
        elseif 0 < z && z < 1
            % Displaying damping mode information
            disp(['Mode of damping for Zeta = ', num2str(z), ': Underdamped']);
            
            % Calculating and displaying time domain specifications
            % Rise Time
            tr = pi / (wn * sqrt(1 - z^2));
            disp(['Rise Time: ', num2str(tr)]);
            
            % Settling Time
            ts = 4 / (z * wn);
            disp(['Settling Time: ', num2str(ts)]);
            
            % Natural Frequency of Oscillation
            fn = wn * sqrt(1 - z^2);
            disp(['Natural Frequency of Oscillation: ', num2str(fn)]);
        elseif z == 1
            disp(['Mode of damping for Zeta = ', num2str(z), ': Critically Damped']);
        elseif z > 1
            disp(['Mode of damping for Zeta = ', num2str(z), ': Overdamped']);
        end
        disp(' '); % Empty line break
    end

figure(2);
bode(sys_tf1,sys_tf2,sys_tf3,sys_tf4,sys_tf5)
title('Bode Plot')
grid on;

figure(3)
step(sys_tf3);
title(['Step Response (Zeta = ', num2str(z3), ')'])
grid on;

จะได้ผลลัพธ์ดังนี้


ดาวน์โหลด Matlab Script ได้ที่นี่