กำไร:
- ความสามารถในการอธิบายและใช้ข้อกำหนด P, I, D และผลกระทบของตัวควบคุม PID กับ AI ด้วยบริบทที่ถูกต้อง
- ความสามารถในการดำเนินการ Ziegler-Nichols และวิธีการปรับแต่งแบบทดลองทีละขั้นตอนด้วยความช่วยเหลือของ AI
- ความสามารถในการจดจำและกำจัด PID trap เช่น การไขลานแบบรวม สัญญาณรบกวนอนุพันธ์ในคำแนะนำของ AI
รักษาอุณหภูมิของเตาอบให้คงที่ ขับเคลื่อนความเร็วของมอเตอร์ตามค่าที่ต้องการ ปรับมุมของโดรนให้สมดุล หัวใจสำคัญของทั้งหมดคืออัลกอริธึมการควบคุม สิ่งที่พบบ่อยที่สุดคือตัวควบคุม PID ซึ่งเป็นแกนหลักของอุตสาหกรรม พีไอดี; มันเรียบง่าย ทนทาน และใช้ได้กับปัญหาที่หลากหลาย แต่ "เรียบง่าย" ไม่ได้หมายความว่า "ปรับแต่งได้ง่าย": PID ที่ตั้งค่าไว้ไม่ถูกต้องจะแกว่ง เคลื่อนเกิน นั่งสาย หรือไม่เสถียรโดยสิ้นเชิง ปัญญาประดิษฐ์เป็นผู้ช่วยอันทรงคุณค่าที่นี่ โดยจะอธิบายคำศัพท์ PID แนะนำวิธีการปรับแต่ง วินิจฉัยข้อผิดพลาดทั่วไป และเขียนโค้ดการปรับแต่ง อย่างไรก็ตาม การปรับเปลี่ยนขั้นสุดท้ายทำได้โดยการดูพฤติกรรมทางกายภาพของระบบของคุณและการตัดสินใจด้านความเสถียรเป็นของวิศวกร ในหน่วยนี้ เราจะกล่าวถึงวิธีการติดตั้ง ปรับแต่ง และตรวจสอบกับดัก PID ด้วย AI
เงื่อนไขสามประการของ PID
PID ตอบสนองต่อสัญญาณข้อผิดพลาด (e = เป้าหมาย - วัดได้) ในสามวิธี:
ระยะ
เขามองอะไร?
เอฟเฟกต์
ในสุดขีด
P (สัดส่วน)
ข้อผิดพลาดปัจจุบัน
ตอบสนองอย่างรวดเร็ว
การสั่น ข้อผิดพลาดถาวร
ฉัน (อินทิกรัล)
ข้อผิดพลาดที่ผ่านมาสะสม
รีเซ็ตข้อผิดพลาดถาวร
เกินกำหนด, การสิ้นสุด, การสั่น
D (อนุพันธ์)
อัตราการเปลี่ยนแปลงข้อผิดพลาด
การทำให้หมาด ๆ ช่วยลดการโอเวอร์โหลด
ขยายสัญญาณรบกวน
สรุปด้วยวาจา: P ตอบคำถาม "ตอนนี้ฉันอยู่ไกลแค่ไหน" ฉัน "ฉันจากไปนานแค่ไหน" D "ฉันจะเข้าใกล้เร็วแค่ไหน" ผู้ควบคุมที่ดีจะรักษาสมดุลทั้งสามอย่าง
คลาส PID: def __init__ (ตนเอง, Kp, Ki, Kd, output_min = -100, output_max = 100): self.Kp, self.Ki, self.Kd = Kp, Ki, Kd self.out_min, self.out_max = output_min, output_max self.integral = 0.0 self.previous_error = 0.0 def คำนวณ (ตนเอง, เป้าหมาย, วัด, dt): ข้อผิดพลาด = เป้าหมาย - วัดได้ # P p = self.Kp * ข้อผิดพลาด # I - self.integral พร้อมการป้องกัน windup += ข้อผิดพลาด * dt i = self.Ki * self.integral # D - ไวต่อสัญญาณรบกวนอนุพันธ์ d = self.Kd * (ข้อผิดพลาด - self.previous_error) / dt self.previous_error = ข้อผิดพลาดออก = p + i + d # ทำให้เอาต์พุตอิ่มตัวและ จำกัด การสิ้นสุดหากเอาต์พุต > self.output_max: เอาต์พุต = self.out_max self.integral -= ข้อผิดพลาด * dt # anti-windup: เลิกทำอินทิกรัล elif เอาต์พุต < self.output_min: เอาต์พุต = self.output_min self.integral -= ข้อผิดพลาด * dt ส่งคืนเอาต์พุต
รหัสนี้ไม่ใช่ "การฝึกอบรม PID" แต่เป็นโครงกระดูกที่ใกล้เคียงกับตรรกะการผลิต: ประกอบด้วยความอิ่มตัวของเอาต์พุตและการป้องกันการหมุนวน PID แบบง่าย ๆ จำนวนมากที่ AI มอบให้จะข้ามการป้องกันทั้งสองนี้ หากไม่มีพวกมัน เมื่อแอคชูเอเตอร์ถึงขีดจำกัด อินทิกรัลจะขยายตัวและระบบจะโอเวอร์เกินอย่างไม่คาดคิด
เคล็ดลับ: เมื่อถาม AI สำหรับ PID ให้พูดว่า "เพิ่มความอิ่มตัวของเอาต์พุตและการป้องกันการหมุนวน ให้ใช้อนุพันธ์ในการวัดกับเทอมอนุพันธ์" ส่วนเพิ่มเติมทั้งสามนี้จะแปลง PID ของตำราเรียนไปเป็น PID ของช่อง
การไขลานแบบอินทิกรัลและสัญญาณรบกวนอนุพันธ์
ข้อผิดพลาดแบบคลาสสิกสองประการเป็นสาเหตุที่พบบ่อยที่สุดของความล้มเหลวของ PID:
การสิ้นสุดอินทิกรัล: เมื่อแอคทูเอเตอร์อิ่มตัว (เช่น มอเตอร์มีกำลังเต็มที่อยู่แล้ว) ข้อผิดพลาดยังคงอยู่และระยะอินทิกรัลยังคงเพิ่มขึ้นต่อไป อินทิกรัลที่สูงเกินจริงนี้นำไปสู่การเกินขอบเขตอย่างมากเมื่อระบบไปถึงเป้าหมาย วิธีแก้ไข: หยุดหรือย้อนกลับอินทิกรัลเมื่อเอาต์พุตอิ่มตัว (ป้องกันการม้วนตัว แสดงในโค้ดด้านบน)
สัญญาณรบกวนอนุพันธ์: คำว่า D ใช้อนุพันธ์ของข้อผิดพลาด อนุพันธ์ของการวัดที่มีเสียงดังจะมีเสียงดังกว่ามากและจะทำให้แอคชูเอเตอร์สั่นสะเทือน วิธีแก้ไข: นำอนุพันธ์จากการวัด (อนุพันธ์ของการวัดแทนข้อผิดพลาด) เพิ่มตัวกรองความถี่ต่ำผ่านไปยังเทอมอนุพันธ์
# การลดสัญญาณรบกวนอนุพันธ์: อนุพันธ์การวัด + filterd_raw = -(วัด - self.previous_measured) / dt แทนข้อผิดพลาด
AI สามารถระบุข้อผิดพลาดเหล่านี้ได้ดี หากคุณพูดว่า "PID ของฉันเกินกำลังอย่างมากเมื่อถึงเป้าหมาย" แนะนำให้เลิกใช้งาน แต่คุณตรวจสอบโดยการวัดว่าโปรแกรมแก้ไขทำงานบนระบบของคุณหรือไม่
การตั้งค่ากับ Ziegler-Nichols
วิธีการคลาสสิกในการค้นหากำไร (Kp, Ki, Kd) ตั้งแต่เริ่มต้นคือ Ziegler-Nichols สาระสำคัญของมัน: เริ่มต้นด้วย P เท่านั้นและเพิ่ม Kp จนกระทั่งระบบเข้าสู่การแกว่งอย่างต่อเนื่อง คำนวณ Kp, Ki, Kd จากตารางโดยมีค่าเกนวิกฤต Ku และคาบการแกว่ง Tu ณ จุดนี้
ตัวควบคุม
เคพี
ติ
ทีดี
ป.
0.5·กู
–
–
พี.ไอ.
0.45·ก
ตู/1.2
–
พีไอดี
0.6·กู
ตู่/2
ตู/8
ขั้นตอนของ Ziegler-Nichols (วางแผนโดย AI):1. ให้ Ki=0,Kd=0 เพียงแค่เรียกใช้ P.2 เพิ่ม Kp ช้าๆ จนกระทั่งการแกว่งคงที่และต่อเนื่องเริ่มขึ้น3. Kp นี้ = Ku (อัตราขยายวิกฤต) ระยะเวลาของการแกว่ง = Tu.4 คำนวณ Kp, Ti, Td จากตาราง Ki = Kp/Ti, Kd = Kp*Td.5 เริ่มต้นด้วยค่าเหล่านี้ จากนั้นทำการปรับแต่งแบบทดลอง
ข้อควรระวัง: Ziegler-Nichols จงใจทำให้ระบบถึงขีดจำกัดความเสถียร (การแกว่งอย่างต่อเนื่อง) มีความเสี่ยงที่จะเกิดความเครียดทางกลไก กระแสไฟเกิน และอันตรายเมื่อทำเช่นนี้กับฮาร์ดแวร์จริง หากเป็นไปได้ ให้ทำในการจำลองก่อน จากนั้นจึงทำงานโดยใช้ขีดจำกัดพลังงานต่ำและ E-stop ในฮาร์ดแวร์ Ku ที่ AI แนะนำเป็นจุดเริ่มต้น มีการวัดและตรวจสอบในระบบของคุณ
การวินิจฉัยโดยใช้ AI
คุณสามารถวินิจฉัยพฤติกรรม PID ได้โดยการอธิบายให้ AI ทราบ อาการ → การแมปสาเหตุที่เป็นไปได้:
อาการ
สาเหตุที่เป็นไปได้
ทิศทางที่ AI จะแนะนำ
นั่งช้า
Kp/กิต่ำ
เพิ่มกิโลวัตต์
ข้อผิดพลาดถาวร
ฉันขาดหรือต่ำมาก
Ki เพิ่ม/เพิ่มขึ้น
โอเวอร์ชูต + การสั่น
Kp/Ki สูง ไม่มี D
เพิ่ม Kd ลด Ki
แอคชูเอเตอร์กำลังสั่น
เสียงอนุพันธ์
กรอง/ลด D
เมื่อถึงขีดสุดแล้ว
การสิ้นสุดที่สมบูรณ์
เพิ่มการป้องกันการม้วนงอ
พรอมต์ที่อ่อนแอ / พรอมต์ที่แข็งแกร่ง
อ่อนแอ:"ให้ PID เพิ่มขึ้น"(ระบบไหน พฤติกรรมเป็นอย่างไรบ้าง มีการตรวจวัดหรือไม่ ตัวเลขสุ่มมา) แข็งแกร่ง:"ฉันกำลังปรับ PID สำหรับการควบคุมความเร็วมอเตอร์กระแสตรง ปัจจุบัน Kp=2, Ki=0.5, Kd=0 มันเกิน 35% ในอินพุตขั้นตอน และเมื่อถึงเป้าหมาย จะมีการเกินวินาทีขนาดใหญ่ มันใช้เวลานานในการตั้งค่า การสุ่มตัวอย่างคือ 100 Hz รายการที่เป็นไปได้ สาเหตุจากอาการเหล่านี้ ซึ่งได้รับ "แนะนำว่าควรเปลี่ยนทิศทางไหน และบอกวิธีทดสอบว่าการเกินกำลังถือเป็นการสิ้นสุดที่สำคัญหรือไม่"
มินิเคส
วิศวกรควบคุม Kerem ปรับการควบคุมอุณหภูมิของเครื่องอัดรีด ด้วยข้อดีที่แนะนำโดย AI ระบบจะไปถึงเป้าหมายอย่างรวดเร็ว แต่ในแต่ละเซ็ตที่เปลี่ยนแปลง ระบบจะทำให้เกิดการทำงานเกินขอบเขตและค่อยๆ สงบลง Kerem อธิบายอาการให้ AI ฟัง AI สงสัยว่าจะหมดการทำงานเนื่องจากฮีตเตอร์ยังคงมีกำลังไฟเต็ม (อิ่มตัว) อยู่ระยะหนึ่ง Kerem เพิ่มการป้องกันการไขลานให้กับโค้ด PID และการโอเวอร์โหลดจะลดลงอย่างมาก แต่ตอนนี้มีการกะพริบเล็กน้อยที่ช่องจ่ายไฟของเครื่องทำความร้อน เขาถือว่าสิ่งนี้เป็นคำ D ที่ขยายสัญญาณรบกวนของเซ็นเซอร์อุณหภูมิและเพิ่มตัวกรองความถี่ต่ำผ่านให้กับอนุพันธ์ ในที่สุด มันจะตรวจสอบความถูกต้องโดยประมาณกับ Ziegler-Nichols และทำการทดลองปรับแต่งอย่างละเอียด AI มีการวินิจฉัยที่รวดเร็ว แต่ Kerem ยืนยันการแก้ไขแต่ละครั้งด้วยการวัดการตอบสนองของขั้นตอนจริง ไม่ว่าการสิ้นสุดจะได้รับการแก้ไขหรือการกะพริบหายไป ก็สามารถเห็นได้ในรูปแบบกราฟิกเท่านั้น
ข้อผิดพลาดทั่วไป
- ไม่สามารถเพิ่มความอิ่มตัวของเอาท์พุตและป้องกันการม้วนกลับให้กับ PID และประสบปัญหาโอเวอร์ช็อตขนาดใหญ่ในขีดจำกัดของแอคชูเอเตอร์
- การหาอนุพันธ์จากอนุพันธ์ของการวัดเสียงรบกวนและการสั่นของแอคชูเอเตอร์
- สมมติว่า dt มีค่าคงที่ ในขณะที่ระยะเวลาสุ่มตัวอย่างจะแตกต่างกันไป
- ทำการทดสอบการสั่นของ Ziegler-Nichols บนฮาร์ดแวร์โดยไม่มีข้อควรระวังด้านความปลอดภัย
- การยอมรับรายได้ที่สร้างโดย AI ถือเป็น "ขั้นสุดท้าย" โดยไม่มีการตรวจสอบเฉพาะระบบ
- การเปลี่ยนแปลงกำไรเพียงครั้งเดียวด้วยขั้นตอนที่ใหญ่มากและทำให้ระบบเข้าสู่ความไม่เสถียร
โดยสรุป
- พีไอดี; มันทำปฏิกิริยากับ P (ข้อผิดพลาดปัจจุบัน), I (ข้อผิดพลาดสะสม), D (อัตราการเปลี่ยนแปลงข้อผิดพลาด)
- PID ของฟิลด์ควรรวมความอิ่มตัวของเอาต์พุต ตัวกรองป้องกันการม้วนตัว และตัวกรองอนุพันธ์
- การโอเวอร์โหลดขนาดใหญ่แบบอินทิกรัล เสียงอนุพันธ์ทำให้เกิดการสั่นสะเทือนของแอคชูเอเตอร์
- Ziegler-Nichols ออกสตาร์ตได้; มันถูกนำไปใช้กับมาตรการรักษาความปลอดภัยในฮาร์ดแวร์
- AI รวดเร็วในการวินิจฉัยจากอาการถึงสาเหตุ การแก้ไขได้รับการตรวจสอบโดยการวัด
- dt วัดจริง; การเปลี่ยนแปลงรายได้เกิดขึ้นในขั้นตอนเล็กๆ และการสังเกต
งานสมัคร
เลือกระบบ (มอเตอร์/ฮีตเตอร์จริงหรือโมเดลลำดับแรก/วินาทีอย่างง่ายใน Python) และให้ AI สร้างคลาส PID ที่มีความอิ่มตัว + ป้องกันการม้วนตัว จากนั้น: (1) สังเกตพฤติกรรมการแกว่งโดยเริ่มจาก P เท่านั้น และเพิ่ม Kp (2) เพิ่ม Ki เพื่อกำจัดข้อผิดพลาดถาวร และดูว่า Overshoot เพิ่มขึ้นอย่างไร (3) เปรียบเทียบผลกระทบของ Overshoot ขนาดใหญ่โดยการเปิดและปิด Anti-Windup พล็อตการตอบสนองขั้นตอนในแต่ละขั้นตอนและจดบันทึกว่าพฤติกรรมใดจะเปลี่ยนไป เปรียบเทียบผลประโยชน์ที่ได้รับจาก Ziegler-Nichols กับผลกำไรที่คุณค้นพบด้วยตัวเอง