จาก รูปแบบปัญหาการทำงานของมอเตอร์ สมการมี ลักษณะ ดัง นี้
และมี รูป แบบ ของ ระบบ คือ
ข้อ
กำหนด ใน การ ควบ คุม ครั้ง นี้ คือ ด้วย อัตรา ขั้น ละ 1 rad/sec
- settling time น้อย กว่า 2 วินาที - overshoot น้อย กว่า 5 % - steady-stage error น้อย กว่า 1 % ขั้น
แรก สร้าง m-file สำหรับ โปรแกรม Matlab ต้วยคำ สั่ง ต่อ ไป นี้ ซึ่ง มี ที่ มา จาก ปัญหาที่กล่าวมาแล้ว
J=0.01; b=0.1; K=0.01; R=1; L=0.5; A=[-b/J K/J -K/L -R/L]; B=[0 1/L]; C=[1 0]; D=0; [num,den]=ss2tf(A, B, C, D); num=num(3);Proportional control
เรา
ลอง ใช้ proportional controller ด้วย gain 100 โดย เพิ่ม คำ สั่ง ต่อ ไป นี้ ใน m-file
Kp=100; numa=Kp*num; dena=den;และเพื่อ กำหนด closed-loop transfer function ใช้ คำ สั่ง cloop ดัง ต่อ ไป นี้
[numac,denac]=cloop(numa,dena);เพื่อดู ผล ว่า step response เป็น อย่าง ไร เพิ่ม คำ สั่ง ต่อ ไป นี้ และ สั่ง run t=0:0.01:5; step(numac,denac,t)จะได้ กราฟ ดัง นี้
PID control
จากกราฟ จะ เห็น ว่า steady-state error และ overshoot มี ค่า สูง เกิน ไป การ เพิ่ม ส่วน ที่ เป็น integral จะ กำจัด steady-state error และ ส่วน ของ derivative จะ ลด ค่า ของ overshoot ทด ลอง ใช้ PID controller ด้วย Ki และ Kd ที่ มี ค่า น้อยๆ โดย การ เปลี่ยน m-file เป็น ดัง นี้ J=0.01; b=0.1; K=0.01; R=1; L=0.5; A=[-b/J K/J -K/L -R/L]; B=[0 1/L]; C=[1 0]; D=0; [num,den]=ss2tf(A, B, C, D); num=num(3); Kp=100; Ki=1; Kd=1; numc=[Kd, Kp, Ki]; denc=[1 0]; numa=conv(num,numc); dena=conv(den,denc); [numac,denac]=cloop(numa,dena); step(numac,denac)
ได้กราฟ ดัง นี้
จาก
กราฟ จะ เห็น ว่า settling time มี ค่า มาก เกิน ไป เพิ่ม ค่า Ki เป็น 200 จะ ได้ กราฟ ดัง นี้
ตอน
นี้ สังเกต ได้ ว่า การ ตอบ สนอง เร็ว ขึ้น กว่าเดิมมาก แต่ ค่า Ki ที่ มาก มี ผล ต่อ transient response (overshoot มาก) ดัง นั้น ควร เพิ่ม ค่า Kd ให้ มาก ขึ้น ลอง แก้ m-file ให้ Kd มี ค่า เป็น 10 จะ ได้ กราฟ ดัง นี้
ดัง
นั้น เรา ควร ใช้ PID controller ที่ มี ค่า Kp=100 , Ki=200 , Kd=10 ก็ สามารถ ออก แบบ การ ควบ คุม มอเตอร์ ตาม เงื่อน ไข ที่ ให้ มา ได้