ตัวอย่างการควบคุม DC มอเตอร์โดยใช้ PID Control
ด้วยโปรแกรม Matlab


จาก รูปแบบปัญหาการทำงานของมอเตอร์ สมการมีลักษณะดังนี้


และมีรูปแบบของระบบคือ

ข้อกำหนดในการควบคุมครั้งนี้คือ ด้วยอัตราขั้นละ 1 rad/sec

- settling time น้อยกว่า 2 วินาที
- overshoot น้อยกว่า 5 %
- steady-stage error น้อยกว่า 1 %

ขั้นแรก สร้าง m-file สำหรับโปรแกรม Matlab ต้วยคำสั่งต่อไปนี้ ซึ่งมีที่มาจากปัญหาที่กล่าวมาแล้ว

Proportional control

เราลองใช้ proportional controller ด้วย gain 100 โดยเพิ่มคำสั่งต่อไปนี้ใน m-file

และเพื่อกำหนด closed-loop transfer function ใช้คำสั่ง cloop ดังต่อไปนี้
เพื่อดูผลว่า step response เป็นอย่างไร เพิ่มคำสั่งต่อไปนี้และสั่ง run จะได้กราฟดังนี้

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 ก็สามารถออกแบบการควบคุมมอเตอร์ตามเงื่อนไขที่ให้มาได้


[ หน้าแรก] [ บทเรียน] [ 204471 ] [ รายวิชา ]
[ ภาควิชาวิศวกรรมคอมพิวเตอร์ ] [ คณะวิศวกรรมศาสตร์ ] [ มหาวิทยาลัยเกษตรศาสตร์ ]