ควบคุมแกนใบพัดด้วย PID และฟัซซี่ลอจิก ตอน 1

 

ควบคุมแกนใบพัดด้วย PID และฟัซซี่ลอจิก

โดยใช้LabVIEW ตอน 1 สร้างฮาร์ดแวร์และทดสอบ PID

สุธีโสมาเกตุ

โกวิทโซวสุวรรณ

งบประมาณ990บาท

 

คู่มือนี้จะแสดงตัวอย่างการเขียนโปรแกรมควบคุมชุดทดลองแกนใบพัดโดยจะแสดงวิธีการควบคุมทั้งแบบ Open loop และ Colse loop ด้วยชุดทดลองควบคุมแกนใบพัด

ชุดทดลองนี้จะช่วยให้ผู้ทดลองได้เข้าใจการควบคุม PID สำหรับการควบคุมตำแหน่งของแกนใบพัดหมุนโปรแกรมควบคุมจะทำผ่านโปรแกรม Arduino และสามารถแสดงผลเป็นกราฟเพื่อใช้ดูผลตอบสนองของระบบซึ่งจะช่วยให้ผู้ทดลองสามารถปรับปรุงตัวควบคุม PID ให้เหมาะสมและลู่เข้าสู่ค่าที่ต้องการโดยทดลองจะแบ่งเป็นส่วนๆดังนี้

1

รูปที่ 1 วงจรสมบูรณ์ของชุดทดลองควบคุมแกนใบพัด

2

รูปที่ 2 ลายวงจรพิมพ์ขนาดเท่าแบบ

3

 

รูปที่ 3 ตำแหน่งการลงอุปกรณ์

  • การควบคุม Open loop

  • การควบคุมแบบ P

  • การควบคุมแบบ PI

  • การควบคุมแบบ PID

  • การควบคุมแบบ PID โดยใช้ไลเบอรี่

 

รูปที่ 4

รูปที่ 4 ตัวอย่างการต่อวงจรเข้ากับ Arduino Uno

รูปที่ 5

รูปที่ 5 โครงสร้างโดยรวมของชุดควบคุมแกนใบพัด

รูปที่ 6

รูปที่ 6 โปรแกรมควบคุมแกนใบพัดแบบ Open loop

1. การควบคุม Open loop

รูปที่ 5 เป็นไดอะแกรมการควบคุมแบบ Open loop ที่ผู้ใช้งานสามารถปรับค่าแรงดันไฟฟ้าที่จะจ่ายให้กับมอเตอร์โดยตรงซึ่งค่าแรงดันไฟฟ้านี้คือสัญญาณ PWM นั่นเองการควบคุมลักษณะนี้ตัวควบคุมจะไม่รับรู้ตำแหน่งของแกนใบพัดไม่ว่าจะขึ้นลงมากหรือน้อยสัญญาณ PWM ก็จะยังคงเดิมไม่เปลี่ยนจนกว่าผู้ใช้งานจะปรับเปลี่ยนค่าเอง

การควบคุมลักษณะนี้เรียบง่ายไม่ซับซ้อนแต่ข้อเสียสำคัญคือระบบจะไม่ตอบสนองต่อการเปลี่ยนแปลงของระบบกล่าวคือไม่ว่าระบบจะเป็นอย่างไรสัญญาณเอาต์พุตก็ยังคงเดิม

รูปที่ 7

รูปที่ 7 ไดอะแกรมการควบคุมแบบOpen loop

รูปที่ 8

รูปที่ 8 การต่อใช้งานและลักษณะสัญญาณอินพุตและเอาต์พุต

2. การควบคุมแบบ P

การควบคุมแบบ P ย่อมาจากคำว่า Proportional เป็นหนึ่งในเทอมของการควบคุมแบบ PID ในหัวข้อนี้จะได้เรียนรู้พฤติกรรมข้อดีข้อเสียของ P control

การควบคุมแบบ PID เป็นการพิจารณาจากค่า Error ที่เกิดขึ้นจากความแตกต่างระหว่างสัญญาณ set point กับสัญญาณอินพุตป้อนกลับ (feed back) โดยมีการคูณด้วยอัตราการขยายหรือเกนเข้ากับค่า Error ที่ได้เรียกว่าค่า K สำหรับการควบคุม P ก็จะเรียกค่าเกนว่า Kp (อ่านว่าเคพี)

รูปที่ 9

รูปที่ 9 สมการการควบคุมแบบ P

รูปที่ 10

รูปที่ 10 ไดอะแกรมการควบคุมแบบ P

รูปที่ 11

รูปที่ 11โปรแกรมควบคุมแกนใบพัดแบบ P

รูปที่ 12

รูปที่ 12 กราฟผลลัพธ์ของการควบคุมแบบ P

ผลการควบคุมแบบ P แสดงดังรูปที่12 จะเห็นว่าเมื่อเปลี่ยนset point จากค่า 600 เป็นค่า 700 (หน่วยADC มีค่าอยู่ในช่วง0 ถึง1023) โดยมีค่าเกนเท่ากับ 1.5 หลังจากนั้นทันทีที่มีการเปลี่ยนค่า set point สัญญาณPWM จะเพิ่มขึ้นเป็น 100% แทบจะในทันทีส่งผลให้มอเตอร์ตอบสนองด้วยการหมุนใบพัดเร็วขึ้นทำให้เกิดแรงยกให้ตำแหน่งของแกนใบพัดลู่เข้าสู่ค่าset point แต่ขณะเดียวกันเมื่อตำแหน่งแกนใบพัดเข้าใกล้set point ก็ทำให้ค่า Error เข้าใกล้ศูนย์ทำให้เอาต์พุต PWM ลดลงเป็นศูนย์มอเตอร์หมุนช้าลงสูญเสียแรงยกทำให้ตำแหน่งแกนตกต่ำกว่าค่า set point แต่ในรอบนี้ตัวควบคุมที่เป็นสมการจะคำนวณค่าให้เอาต์พุตให้สามารถเลี้ยงแกนใบพัดให้อยู่ในตำแหน่งที่สมดุลระหว่างแรงยก และน้ำหนักแกนแต่ไม่สามารถทำให้เข้าใกล้ set point ได้มากกว่านี้เกิดเป็นความแตกต่างระหว่างตำแหน่ง set point กับตำแหน่งของแกนเรียกว่าค่าออฟเซตซึ่งเป็นพฤติกรรมปกติของการควบคุมแบบ P หากผู้ใช้ทดลองต้องการออฟเซตน้อยกว่านี้ก็ต้องเพิ่มค่าเกนแต่ค่าเกนที่มากเกินไปจะทำให้เกิดการแกว่งของระบบได้นั่นคือแกนใบพัดจะขยับขึ้นลงตลอดเวลาไม่นิ่ง

3. การควบคุมแบบ PI

การควบคุมแบบ PI ย่อมาจากคำว่า Proportional Integral เป็นสองในสามเทอมของการควบคุมแบบ PID ในหัวข้อนี้จะได้เรียนรู้พฤติกรรมข้อดีข้อเสียของ PI control

การควบคุมแบบ PI เป็นการปรับปรุงการควบคุมแบบ P โดยเพิ่มเทอมI เข้าไปเพื่อแก้ปัญหาออฟเซตระหว่าง set point และสัญญาณ feed back ในช่วงแรกกลไกของเทอม P จะทำงานเพื่อให้ตำแหน่งfeed back เข้าใกล้set point ต่อจากนั้นค่าออฟเซตที่เกิดขึ้นจะถูกแก้ด้วยเทอมI ที่จะค่อยๆ ขยับค่าเพื่อลดค่าออฟเซตให้น้อยลงจนเข้าใกล้ศูนย์ในทางทฤษฏีแล้วการควบคุมแบบ PI จะมีค่า Error เป็นศูนย์แต่ในโลกแห่งความจริงแล้วจะมีการแกว่งเล็กๆเกิดขึ้นอยู่โดยระบบจะแกว่งอยู่รอบๆค่า set point กลไกการทำงานของ PI control เป็นตามสมการในรูปที่ 11

รูปที่ 13

รูปที่ 13 สมการการควบคุม PI

รูปที่ 14

รูปที่ 14 ไดอะแกรมการควบคุมแบบ PI

รูปที่ 15

รูปที่ 15 โปรแกรม PI

รูปที่ 16

รูปที่ 16 ผลตอบสนองของตัวควบคุม PI ช่วงขาขึ้น

ผลการควบคุมแบบ PI แสดงดังรูปที่ 16 จะเห็นว่าเมื่อเปลี่ยน set point จากค่า 500 เป็นค่า 600 (หน่วย ADC มีค่าอยู่ในช่วง 0 ถึง1023) โดยมีค่าเกน Kp = 1.2 และ Ki = 0.0005 ทันทีที่มีการเปลี่ยนค่า set point สัญญาณPWM จะเพิ่มขึ้นเป็น 100% แทบจะในทันทีส่งผลให้มอเตอร์ตอบสนองด้วยการหมุนใบพัดเร็วขึ้นทำให้เกิดแรงยกส่งให้ตำแหน่งของแกนใบพัดลู่เข้าสู่ค่า set point แต่เนื่องจากหลังเกิดโอเวอร์ชู๊ตแล้วค่าตำแหน่งป้อนกลับตกลงมาต่ำกว่าค่าที่ต้องการตรงจุดนี้เองกลไกการสะสมค่า Error ของเทอม I หรืออินทิกรัลเริ่มส่งผลให้เห็นโดยตัวแปร errSum จะมีค่าเพิ่มขึ้นเรื่อยๆเมื่อคูณกับค่าเกน Ki ก็ส่งผลให้ค่าเอาต์พุต PWM ค่อยๆเพิ่มขึ้นอย่างช้าๆสร้างแรงยกดันให้ตำแหน่งแกนใบพัดเคลื่อนเข้าสู่ตำแหน่งที่ต้องการ

อย่างไรก็ตามเนื่องจากตัวอย่างนี้ต้องการให้เห็นกลไกการทำงานของเทอม I หรืออินทิกรัลทำให้ผู้เขียนตั้งค่าเกน Ki น้อยๆเป็นผลให้ค่าเวลาที่ใช้เพื่อลู่เข้าตำแหน่งที่ต้องการนั้นนานกว่าปกติซึ่งในทางปฏิบัติแล้วต้องใช้เวลาเข้า setting time ให้น้อยกว่านี้จึงจะดี

รูปที่ 17

รูปที่ 17 ผลตอบสนองของตัวควบคุม PI ช่วงขาลง

ผลการควบคุม PI แสดงดังรูปที่ 17 จะเห็นว่าเมื่อเปลี่ยน set point จากค่า 600 เป็น 500 คือเป็นช่วงขาลงจะสังเกตเห็นว่าเมื่อค่า set point เปลี่ยนค่าทำให้ค่าเอาต์พุต PWM ลดลงเป็น 0 ทันทีทำให้แกนใบพัดสูญเสียแรงยกทำให้แกนใบพัดเคลื่อนตกลงมาด้วยแรงโน้มถ่วงช่วงเวลาต่อมาเมื่อตำแหน่งแกนใบพัดเคลื่อนลงเข้าใกล้ค่า set point สมการที่อยู่ในโปรแกรมจะเริ่มส่งค่าเอาต์พุตออกมาขับให้มอเตอร์หมุนได้เป็นแรงยกดันให้แกนใบพัดยกตัวขึ้นกลับเข้าสู่ค่า set point อย่างสวยงาม

ซึ่งจะสังเกตว่าการควบคุมแบบ PI ในระยะยาวนั้นค่าความแตกต่างระหว่างset point และสัญญาณ Feed back นั้นเข้าใกล้ศูนย์และอีกเช่นเดียวกันที่พฤติกรรมของระบบตามกราฟที่เห็นนี้อาจยังไม่ใช่ค่าที่ดีที่สุดแต่ผู้เขียนเลือกที่จะให้ผู้ทดลองได้เห็นกลไกการทำงานของเทอม I เพิ่มเข้ามาซึ่งผู้ทดลองสามารถทดลองเปลี่ยนค่าเกนเพื่อให้ช่วงการเข้า setting time น้อยลงกว่านี้ได้

4. การควบคุมแบบ PID

การควบคุม PID เป็นการรวมเอาสามเทอมมาทำงานร่วมกันโดยแต่ละเทอมจะทำงานเพื่อแก้ปัญหาในแบบของตัวเอง

สมการโดยรวมของ PID เป็นดังรูปที่ 18 จะเห็นว่าเป็นผลรวมของสามเทอมที่ประกอบด้วยเทอม P เทอม I และเทอม D อิทธิพลของแต่ละเทอมจะทำงานในแต่ละสถานการณ์ของระบบตัวอย่างเช่นเทอม P จะมีอิทธิพลสูงเมื่อค่าความต่างระหว่าง set point กับสัญญาณFeed back มีค่ามากอยู่ห่างกันมากขณะที่เทอม I จะมีอิทธิพลสูงเมื่อค่า Feed back อยู่ใกล้ๆค่า set point เทอมI นี้จะเริ่มทำงานเพื่อทำให้ค่า Error ลดลงจนเป็นศูนย์

และสุดท้ายอิทธิพลของเทอม D จะคอยต้านทานการเปลี่ยนแปลงขึ้นลงอย่างรวดเร็วของสัญญาณ feed back ที่จะส่งผลต่อสัญญาณเอาต์พุตอิทธิพลของเทอม D จะลดลงเมื่อสัญญาณ Feed back ของระบบในสถานะนิ่งๆ

รูปที่ 18

รูปที่ 18 สมการควบคุม PID

รูปที่ 19

รูปที่ 19 ไดอะแกรมการควบคุมแบบ PID

รูปที่ 20

รูปที่ 20 โปรแกรม PID

รูปที่ 21

รูปที่ 21 สัญญาณอินพุตเอาต์พุตของการควบคุม PID

ผลการควบคุมแบบ PID แสดงดังรูปที่21 จะเห็นว่าตำแหน่งของแกนใบพัดถูกควบคุมให้เปลี่ยนแปลงตามสัญญาณset point ได้เป็นอย่างดีโดยไม่มีการโอเวอร์ชู๊ตและอันเดอร์ชู๊ตโดยช่วงเวลาการไต่ขึ้นและไต่ลงของสัญญาณ feed back นั้นเกิดจากค่าเวลาคงตัวของระบบนี้เองซึ่งทันทีที่ผ่านช่วงเวลาคงตัวของระบแล้วตำแหน่งแกนใบพัดก็ลู่เข้าสู่ตำแหน่งที่กำหนดทันทีโดยไม่มีการแกว่งของระบบผลการควบคุมดังกล่าวเกิดจากการทำงานร่วมกันของสมการ PID ที่ประกอบด้วยสามเทอมนั่นคือ P I และ D

แนวคิดง่ายๆของทั้งสามเทอมนี้คือเทอม P จะทำหน้าที่สร้างเอาต์พุตเมื่อค่า set point ต่างจาก feed back มากๆส่วนเทอม I จะช่วยกำจัดค่า Error เป็นศูนย์ในตอน stated state และส่วนเทอม D จะคอยส่งเอาต์พุตเพื่อต้านทานการเปลี่ยนแปลงของระบบอย่างฉับพลัน

5 การควบคุมแบบ PID โดยใช้ไลเบอรี่ PID

ที่ผ่านมาเป็นการใช้ตัวควบคุม PID ที่เขียนขึ้นมาเองซึ่งจริงๆแล้วตัวควบคุมPID ที่ใช้งานในอุตสาหกรรมหรือในผลิตภัณฑ์ตัวควบคุม PID สำเร็จรูปได้เพิ่มขึ้นฟังชั่นตัวป้องกันและอัลกอริทึ่มใหม่ๆเข้าไปเพื่อแก้ปัญหาตัวควบคุม PID แบบพื้นฐาน

เพื่อเป็นการรับประกันว่าปัญหาของตัวควบคุม PID แบบพื้นฐานที่อาจเกิดขึ้นกับโค้ดที่เขียนขึ้นเองจะได้รับการแก้ไขและป้องกันไว้แล้วการเลือกใช้ไลเบอรี่ PID ก็เป็นทางเลือกหนึ่งทีน่าสนใจซึ่งช่วยให้ผู้ใช้งานสามารถมุ่งไปการจูนค่าเกน PID และดูผลตอบสนองของระบบให้ได้อย่างที่ต้องการโดยไม่ต้องกังวลกับปัญหาที่อาจเกิดกับโค้ดที่เขียนขึ้นเอง

สำหรับไลเบอรี PID ผู้ใช้งานสามารถไปโหลดมาใช้งานได้ตามรูปที่ 22 เมื่อโหลดไลเบอรี่มาแล้วติดตั้งให้เสร็จจากนั้นตรวจสอบโดยทำตามรูปที่ 23 ถ้าถูกต้องจะต้องเห็นตัวอย่างใน Examples 

รูปที่ 22

รูปที่ 22 ดาวน์โหลดไลเบอรี PID เวอร์ชัน V1.0.1

รูปที่ 23

รูปที่ 23 ตรวจสอบตัวอย่างโค้ด PID ที่มีมาให้หากติดตั้งไลเบอรี่เรียบร้อยแล้ว

รูปที่ 24

รูปที่ 24 ตัวอย่างโค้ดการใช้งานไลเบอรี่เพื่อควบคุมตำแหน่งแกนใบพัด

 

ขั้นตอนในการออกแบบการควบคุมPIDมีหลักการง่ายๆ4 ขั้นตอนดังนี้

1. ต้องมีค่าพารามิเตอร์เหล่านี้ของระบบในใจว่าต้องการมากน้อยขนาดไหนซึ่งแต่ละงานจะแตกต่างกันออกไป

  • Rise Time ช่วงเวลาขาขึ้นต้องการเร็วมากหรือไม่หรือยอมรับค่ามากๆได้รอได้

  • Overshoot ยอมให้มีโอเวอร์หรือไม่หรือยอมได้มากน้อยขนาดไหน

  • Settling Time ช่วงเวลาตั้งแต่มีการเปลี่ยนค่าตำแหน่งเก่าไปตำแหน่งใหม่ต้องเร็วขนาดไหนหรือรอได้ขอให้ได้ตรงตำแหน่งเป็นพอ

  • Steady-state Error ยอมให้มีค่า Error ตอนระบบนิ่งแล้วหรือไม่ยอมได้หรือยอมไม่ได้ต้องไม่เกินเท่าไร

2. ถ้าต้องการลด rise time ให้เพิ่มค่า Kp

3. ถ้าต้องการลด over shoot และ settling time ให้เพิ่มค่า Kd

4. ถ้าต้องการให้ค่า error เป็น 0 ให้เพิ่มค่า Ki มากกว่า 0 

รูปที่ 25

รูปที่ 25 กราฟความสัมพันธ์ระหว่างความเร็วกับเวลา

รูปที่ 26

รูปที่ 26 กราฟที่ได้จากการทดสอบ

การจูน PID โดยใช้วิธีการ Ziegler-Nichols แนวคิดง่ายๆของวิธีนี้คือเราจะหาค่าเกน Kp, Ki, Kd ด้วยการให้ step response แก่ระบบแล้วคำนวณจากกราฟที่ได้ซึ่งกราฟที่ได้นี้เกิดจากใช้ออสซิโลสโคปจับวัดสัญญาณ Feed back ในกรณีที่ระบบตอบสนองรวดเร็ว เช่น ความเร็วตำแหน่งแขนกลกลไกต่างๆส่วนระบบช้าๆเช่น อุณหภูมิความชื้นอาจต้องเก็บค่าด้วย Data logger แล้วนำมาพล็อตกราฟ

 

รายการอุปกรณ์

ตัวต้านทาน¼วัตต์ +/-5%

R1, R4     1k        2        ตัว

R2        330      1       ตัว

R3       10k     1        ตัว

ตัวเก็บประจุ

C1, C3-               10uF 16V อิเล็กทรอไลต์    2      ตัว

C2, C4- C8-         0.1uF 50V โพลีเอสเตอร์     6     ตัว 

อุปกรณ์สารกึ่งตัวนำ

IC1-   PC817        1       ตัว

IC2-   ULN2003     1       ตัว

IC3-   7805      1     ตัว

LED1-  แอลอีดีสีแดง 3 มม.       1      ตัว

LED2-    แอลอีดีสีแดง 5 มม.     1      ตัว 

อื่นๆ

J1    +5V            1   ตัว

J2       POWER       1     ตัว

J3      PWM            1       ตัว

J4     Motor          1        ตัว

J5, J7, J9     VR1          3     ตัว

J6, J8, J10      VR2       3       ตัว

หมายเหตุ ซอร์สโค้ดที่ใช้ร่วมกับโครงงานสามารถดาวน์โหลดได้ที่เว็บไซต์ http://electronics.se-ed.com/download, หากมีข้อสงสัยสามารถติดต่อได้ที่ E-mail:kowit_sosuwan@hotmail.com

 

 

Leave a Comment