ระบบที่เราจะควบคุมจะมีตัวแปรเสตท \(x\) ที่ต้องนำมาใช้เป็นสัญญาณป้อนกลับ แต่บ่อยครั้งไม่สามารถวัดค่าได้ด้วยเครื่องมือวัดจึงจำเป็นที่จะต้องใช้การคำนวณเสตท \(\hat{x}\) จากแบบจำลองทางพลศาสตร์ แนวคิด State observer แสดงได้ดังภาพ
State observer ก็คือการสร้างแบบจำลองคู่ขนานกับระบบพลศาสตร์จริง เพื่อประมาณค่าตัวแปรเสตทของระบบจริงนั้นเอง ตัวสังเกตุ(Observer) มีวิธีการออกแบบหลายวิธี บล๊อกนี้จะขอใช้วิธีตามหนังสือ Modern Control Engineering เขียนโดย Prof. Mitsuhiko Ogata
จะขอใช้ตัวอย่างจากบล๊อก แบบจำลองเสตท การลอยตัวด้วยแรงแม่เหล็ก (State model of magnet levitation) มาเป็นตัวอย่างในการศึกษา
การออกแบบตัวสังเกตุแบบเต็มเสตท มีขั้นตอนดังนี้
1) คำนวณหาค่า K ซึ่งจะใช้วิธีการ pole placement ศึกษาได้จากบล๊อก เลือกผลตอบสนองของ DC Motor ตามใจต้องการ ด้วยวิธี Pole Placement
2) คำนวณค่า Nbar เพื่อปรับสัญญาณอ้างอิง r ให้มีขนาดเสกลเดียวกับ y=Cx เช่นถ้าลู่เข้าหา 0.6 ( y=0.6) และ r เป็น unit step แสดงได้ดังรูป
การคำนวณหา \(\bar{N}\) เขียนเป็นสมการอย่างง่ายได้ว่า
(1)
3)คำนวณหาค่า L โดยคำนวณตาม Ogata
จากรูปที่ 1 จะเห็นว่า system state matrix คือ (A-BK) และ observer state matrix คือ (A-LC) โครงสร้างของทั้งสองเมทริคมีความเหมือนกัน จะแตกต่างกันที่ลำดับการวางตำแหน่งของเมทริคไม่ทราบค่า BK และ LC
จากทฤษฎีเราทราบว่า Eigen value ของ (A-LC) และ (A-LC)T เหมือนกัน จึงสามารถเขียน observer state matrix ให้มีลำดับการวางของตำแหน่งเช่นเดียวกัน system state matrix ดังนี้
(2)
สมการ Full state observer แสดงได้ดังนี้
(3)
เราจึงสามารถใช้วิธีการ Pole placement กับสมการ (3) เช่นเดียวกับ system state matrix (A-BK)
(4)
โดยที่ \( \mu \) คือตำแหน่งโพลที่ต้องการ ปกติแล้วมักจะออกแบบให้ State Observer มีการตอบสนองเร็วกว่าระบบที่ถูกควบคุม
จากจะสมการ (4) เราพบว่า
(5)
ทั้งนี้หากระบบเป็นระบบที่สังเกตุได้(Observable) ค่า L จะคำนวณได้เสมอ
คำนวณ Matrix \(A_{o}\) ของ Observer ได้ดังนี้
(6)
นำสมการ (1) – (6) มาทำการจำลองการทำงานโดย Matlab Simulink โดยวางคอนโทรลบล๊อกไดอะแกรมดังภาพ
ทำการรันสคริป
syms s
% Define System
A = [0 1 0;245 -0.0814 24.47; 0 0 -250];
B = [0;0;5];
C = [1 0 0];
D = 0;
poles = eig(A)
system_rank=rank(obsv(A,C))
%Step 1. Pole Placement System
p11=-30;
p22=-35;
p33=-45;
K=place(A,B,[p11 p22 p33]);
% Step. 2 Nbar Calculation scale Nbar as y=cx
Nbar=(-C*(A-B*K)^-1*B)^-1;
% Step. 3 Calculation L for Observer
poles=[-5 -6 -7];
L=place(A',C',poles);
L=L'
Ao=A-L*C
open('FullObs.slx')
sim('FullObs.slx')
จะได้ผลลัพธ์ดังนี้
โหลดไฟล์ Matlab/Simulink ได้ที่นี่