Free body diagram ของลูกตุ้มกลับหัวสามารถเขียนได้หลายแบบ ผู้เขียนขอยกแบบที่นิยมที่สุด โดยสามารถแยกออกได้ 2 ส่วน คือ ส่วนของรถ และส่วนของ Pendulum ดังแสดงได้ดังภาพด่านล่าง
x ตำแหน่งของรถ
m มวลของ Pendulum
M มวลของรถ
b สัมประสิทธิ์แรงเสียดทานของรถ
I โมเม้นความเฉื่อยของ Pendulum
l ระยะจากจุดหมุนถึงศูนย์กลางมวลของ Pendulum
F แรงที่กระทำต่อรถ
\(\theta\) มุมของ Pendulum
(1)
และ Pendulum ในแนวการเคลื่อนที่ติดไปกับตัวรถใน ในแกน x จะได้
(2)
แทนค่าสมการ (2) ลงใน สมการ (1) จะได้
(3)
พิจารณาผลรวมของแรงที่ตั้งฉากกับ Pendulum จะได้
(4)
พิจารณาผลรวมโมเม้นที่กระทำกับ Pendulum รอบจุดศูนย์กลางมวล จะได้
(5)
แทนสมการ (5) ลงใน (4) จะได้
(6)
สมการ (3) และ (6) เป็นสมการพลศาสตร์ไม่เชิงเส้นของระบบอินเวิร์สเพนดูลัม ที่เราจะนำไปใช้งานต่อไป
จากรูปที่ 1 สมการพลศาสตร์ (3) และ (6) พบว่ามุม \(\theta \) ให้คำตอบที่เป็นจริงทั้งตำแหน่ง pendulum ทิ้งตัวคว่ำลงในแนงดิ่ง และหงายขึ้นตั้งฉากกับรถ จึงสามารถกำหนด มุม \(\theta \) ได้ตามรูปที่ 3
กำหนดให้ \(\theta =\pi +\phi\) โดยที่ \(\phi\) คือมุมแกว่งแคบๆ ของปลาย Pendulum เราจะได้ \(cos(\pi +\phi )\approx -1\) และ \(sin(\pi +\phi )\approx -\phi\) ดังสามารถทำ Linearization ให้สมการ (3) และ (7) เป็นเชิงเส้นรอบๆ จุด \(\theta=\pi\)
(7)
(8)
ทำการ Take Laplace สมการ (7) และ (8)
(9)
(10)
จัดรูปสมการ (12) จะได้
(11)
แทนค่าสมการ (11) กลับลงใน (9) จะได้
(12)
จัดรูปสมการ (14) จะได้ Transfer function ของ Pendulum
(13)
โดยที่ \( q=(M+m)(I+ml^{2})-ml^{2}\)
แทนสมการ (13) กลับเข้าไปใน สมการ (10) จะได้ Transfer function ของรถ
(14)
ต่อไปเราจะหา สมการ State โดยกำหนดให้
สามารถเขียนสมการ (7) และ (8) ใหม่ได้เป็น
(15)
(16)
แทน (16) ลงใน (15)
(18)
แทน (18) ลงใน (16)
(19)
จาก สมการ (18) และ (19) จะได้ว่า
ทดลองใช้ Matlab หา Transfer function ดังนี้
M = 0.5;
m = 0.2;
b = 0.1;
I = 0.006;
g = 9.8;
l = 0.3;
q = (M+m)*(I+m*l^2)-(m*l)^2;
s = tf('s');
P_cart = (((I+m*l^2)/q)*s^2 - (m*g*l/q))/(s^4 + (b*(I + m*l^2))*s^3/q - ((M + m)*m*g*l)*s^2/q - b*m*g*l*s/q);
P_pend = (m*l*s/q)/(s^3 + (b*(I + m*l^2))*s^2/q - ((M + m)*m*g*l)*s/q - b*m*g*l/q);
sys_tf = [P_cart ; P_pend];
inputs = {'u'};
outputs = {'x'; 'phi'};
set(sys_tf,'InputName',inputs)
set(sys_tf,'OutputName',outputs)
sys_tf
ทดลองใช้ Matlab หา State model ดังนี้
M = .5;
m = 0.2;
b = 0.1;
I = 0.006;
g = 9.8;
l = 0.3;
p = I*(M+m)+M*m*l^2; %denominator for the A and B matrices
A = [0 1 0 0;
0 -(I+m*l^2)*b/p (m^2*g*l^2)/p 0;
0 0 0 1;
0 -(m*l*b)/p m*g*l*(M+m)/p 0];
B = [ 0;
(I+m*l^2)/p;
0;
m*l/p];
C = [1 0 0 0;
0 0 1 0];
D = [0;
0];
states = {'x' 'x_dot' 'phi' 'phi_dot'};
inputs = {'u'};
outputs = {'x'; 'phi'};
sys_ss = ss(A,B,C,D,'statename',states,'inputname',inputs,'outputname',outputs)
ดาวน์โหลด Matlab file ได้ที่นี้