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

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

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

การประยุกต์ใช้งานบางครั้งอาจใช้เพียงหนึ่งถึงสองรูปแบบ ขึ้นอยู่กับกระบวนการเป็นสำคัญ พีไอดีบางครั้งจะถูกเรียกว่าการควบคุมแบบ PI, PD, P หรือ I ขึ้นอยู่กับว่าใช้รูปแบบใดบ้าง

 ทฤษฎี 
การควบคุมแบบ PID ได้ชื่อตามการรวมกันของเทอมของตัวแปรทั้งสามตามสมการ:

เมื่อ
, , และ  เป็นผลของสัญญาณขาออกจากระบบควบคุม PID จากแต่ละเทอมซึ่งนิยามตามรายละเอียดด้านล่าง

 สัดส่วน 
right|thumb|320px|กราฟ PV ต่อเวลา, Kp กำหนดเป็น 3 ค่า (Ki และ Kd คงที่)

เทอมของสัดส่วน (บางครั้งเรียก อัตราขยาย) จะเปลี่ยนแปลงเป็นสัดส่วนของค่าความผิดพลาด การตอบสนองของสัดส่วนสามารถทำได้โดยการคูณค่าความผิดพลาดด้วยค่าคงที่ Kp, หรือที่เรียกว่าอัตราขยายสัดส่วน

เทอมของสัดส่วนจะเป็นไปตามสมการ:

เมื่อ
 : สัญญาณขาออกของเทอมสัดส่วน
 : อัตราขยายสัดส่วน, ตัวแปรปรับค่าได้
 : ค่าความผิดพลาด  
 : เวลา

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

 ปริพันธ์ 
right|thumb|320px|กราฟ PV ต่อเวลา, Ki กำหนดเป็นสามค่า (Kp และ Kd คงที่)

ผลจากเทอมปริพันธ์ (บางครั้งเรียก reset) เป็นสัดส่วนของขนาดความผิดพลาดและระยะเวลาของความผิดพลาด ผลรวมของความผิดพลาดในทุกช่วงเวลา (ปริพันธ์ของความผิดพลาด) จะให้ออฟเซตสะสมที่ควรจะเป็นในก่อนหน้า ความผิดพลาดสะสมจะถูกคูณโดยอัตราขยายปริพันธ์ ขนาดของผลของเทอมปริพันธ์จะกำหนดโดยอัตราขยายปริพันธ์, .

เทอมปริพันธ์จะเป็นไปตามสมการ:

เมื่อ
 : สัญญาณขาออกของเทอมปริพันธ์
 : อัตราขยายปริพันธ์, ตัวแปรปรับค่าได้
 : ความผิดพลาด 
 : เวลา
 : ตัวแปรปริพันธ์หุ่น

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

 อนุพันธ์ 

right|thumb|320px|กราฟ PV ต่อเวลา, สำหรับ Kd 3 ค่า (Kp และ Ki คงที่)

อัตราการเปลี่ยนแปลงของความผิดพลาดจากกระบวนการนั้นคำนวณหาจากความชันของความผิดพลาดทุก ๆ เวลา (นั่นคือ เป็นอนุพันธ์อันดับหนึ่งสัมพันธ์กับเวลา) และคูณด้วยอัตราขยายอนุพันธ์  ขนาดของผลของเทอมอนุพันธ์ (บางครั้งเรียก อัตรา) ขึ้นกับ อัตราขยายอนุพันธ์ 

เทอมอนุพันธ์เป็นไปตามสมการ:

เมื่อ
 : สัญญาณขาออกของเทอมอนุพันธ์
 : อัตราขยายอนุพันธ์, ตัวแปรปรับค่าได้
 : ความผิดพลาด 
 : เวลา

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

 ผลรวม 

เทอมสัดส่วน, ปริพันธ์, และอนุพันธ์ จะนำมารวมกันเป็นสัญญาณขาออกของการควบคุมแบบ PID กำหนดให้  เป็นสัญญาณขาออก สมการสุดท้ายของวิธี PID คือ:

 รหัสเทียม 

รหัสเทียม  ของ ขั้นตอนวิธีระบบควบคุมพีไอดี โดยอยู่บนสมมุติฐานว่าตัวประมวลผลประมวลผลแบบขนานอย่างสมบูรณ์แบบ เป็นดังต่อไปนี้

 previous_error = setpoint - actual_position
 integral = 0
 start:
   error = setpoint - actual_position
   integral = integral + (error*dt)
   derivative = (error - previous_error)/dt
   output = (Kp*error) + (Ki*integral) + (Kd*derivative)
   previous_error = error
   wait(dt)
   goto start

 การปรับจูน 
 การปรับจูนด้วยมือ 

ถ้าระบบยังคงทำงาน ขั้นแรกให้ตั้งค่า  และ  เป็นศูนย์ เพิ่มค่า  จนกระทั่งสัญญาณขาออกเกิดการแกว่ง (oscillate) แล้วตั้งค่า  ให้เหลือครึ่งหนึ่งของค่าที่ทำให้เกิดการแกว่งสำหรับการตอบสนองชนิด "quarter amplitude decay" แล้วเพิ่ม  จนกระทั่งออฟเซตถูกต้องในเวลาที่พอเพียงของกระบวนการ แต่ถ้า  มากไปจะทำให้ไม่เสถียร สุดท้ายถ้าต้องการ ให้เพิ่มค่า  จนกระทั่งลูปอยู่ในระดับที่ยอมรับได้ แต่ถ้า  มากเกินไปจะเป็นเหตุให้การตอบสนองและโอเวอร์ชูตเกินยอมรับได้ ปกติการปรับจูน PID ถ้าเกิดโอเวอร์ชูตเล็กน้อยจะช่วยให้เข้าสู่จุดที่ต้องการเร็วขึ้น แต่ในบางระบบไม่สามารถยอมให้เกิดโอเวอร์ชูตได้ และถ้าค่า  น้อยเกินไปก็จะทำให้เกิดการแกว่ง

right|thumb|400px|ผลของการเปลี่ยนพารามิเตอร์ของ PID (Kp,Ki,Kd) บนขั้นของการตอบสนองของระบบ

+ ผลของการเพิ่มค่าตัวแปรอย่างอิสระ ตัวแปร ช่วงเวลาขึ้น (Rise time) โอเวอร์ชูต (Overshoot) เวลาสู่สมดุล (Settling time) ความผิดพลาดสถานะคงตัว (Steady-state error) เสถียรภาพ  ลด เพิ่ม เปลี่ยนแปลงเล็กน้อย ลด ลด  ลด เพิ่ม เพิ่ม ลดลงอย่างมีนัยสำคัญ ลด  เปลี่ยนแปลงเล็กน้อย ลดลง ลดลง ตามทฤษฏีไม่มีผล ดีขึ้นถ้า  มีค่าน้อย

 วิธีการ 
วิธีการนี้นำเสนอโดย John G. Ziegler และ Nathaniel B. Nichols ในคริสต์ทศวรรษที่ 1940 ขั้นแรกให้ตั้งค่า  และ  เป็นศูนย์ เพิ่มอัตราขยาย P สูงที่สุด, , จนกระทั่งเริ่มเกิดการแกว่ง นำค่า  และค่าช่วงการแกว่ง  มาหาค่าตัวแปรที่เหลือดังตาราง:

+ Ziegler–Nichols method Control Type    P  - - PI   - PID