หน่วย 5 / 9

อัลกอริธึมควบคุม: การปรับแต่งที่รองรับ PID และ AI

กำไร:

  • ความสามารถในการอธิบายและใช้ข้อกำหนด 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 กับผลกำไรที่คุณค้นพบด้วยตัวเอง