วิธีการปรับใช้ตัวควบคุมแบบคล้าย PID


15

ฉันพยายามเขียนโปรแกรมไมโครคอนโทรลเลอร์สำหรับควบคุมอุณหภูมิในระบบที่มีคุณสมบัติดังต่อไปนี้:

  • เอาต์พุตสามารถเป็นเปิดหรือปิดพร้อมความถี่รอบคงที่ (~ 2-10 ต่อชั่วโมง)
  • พืชตอบสนองช้า (การเปลี่ยนแปลงของอุณหภูมิใช้เวลานาน> 10 นาที)
  • พืชสูญเสียอุณหภูมิตามสภาพแวดล้อม
  • ชุดจุดสามารถแตกต่างกันไปในขั้นตอนขนาดใหญ่ตามความต้องการของผู้ใช้

ฉันกำลังเขียนตัวควบคุมที่มีจุดมุ่งหมายเพื่อลดข้อผิดพลาดรวมทั้งปฏิบัติตามอัตรารอบที่ให้ไว้เป็นอินพุต

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

การใช้ PI หรือ PID จริงไม่ใช่ข้อกำหนด ฉันเปิดให้ใช้ Fuzzy-Logic ถ้ามันช่วยได้ยังมีอัลกอริทึมการเรียนรู้ของเครื่องบนชิปที่จำลองการตอบสนองของระบบและการสูญเสียความร้อน (เชิงเส้นประมาณ) ซึ่งแสดงข้อมูลเกี่ยวกับการตอบสนองตามขั้นตอนที่วัดได้ แค่ไม่รู้ว่าจะทำอย่างไรกับข้อมูลนั้น

โพสต์สองสามข้อแนะนำว่าฉันสามารถใช้ข้อมูลการสร้างแบบจำลองเพื่อปรับแต่ง PI ออนไลน์และคู่มือการใช้งานแบบแล็บที่แนะนำฉันสามารถใช้ Fuzzy-Logic เพื่อปรับแต่ง PI

คำถามของฉันคืออะไรวิธีที่ดีที่สุดสำหรับสถานการณ์ประเภทนี้ (เช่น PID, fuzzy-pid, convolution, ฯลฯ ) และวิธีที่ฉันจะนำไปใช้จริงในซอฟต์แวร์ / การปฏิบัติ

ฉันไม่ใช่ EE ดังนั้นข้อมูลใด ๆ ที่จะได้รับการชื่นชมอย่างมาก


1
ฉันเขียนคำตอบเกี่ยวกับการใช้อัลกอริธึมเริมเพื่อปรับตัวควบคุม PID บนRobotics SEโดยอัตโนมัติที่อาจเป็นที่สนใจ
embedded.kyle

@ embedded.kyle ยอดเยี่ยมฉันเข้าใจ simplex / great-acent คุณบอกได้ไหมว่าเขาเคยเป็นอะไรสำหรับ x1, x2? ฉันมีปัญหาเกี่ยวกับค่าคงที่ PID
MandoMando

1
ไม่นานมานี้ แต่ฉันเชื่อว่าเราใช้บางอย่างเช่น x1 = P, x2 = I, x3 = D. x0 จุดศูนย์กลางของแรงโน้มถ่วงคืออะไรก็ตามที่การวัดความมั่นคงมีความสำคัญที่สุดสำหรับคุณ ในแอปพลิเคชันของฉันการควบคุมมอเตอร์เรามีสองลูป x0 ของหนึ่งคือความเร็วและ x0 สำหรับอื่น ๆ เป็นปัจจุบัน ดูที่นี่สำหรับข้อมูลเพิ่มเติม
embedded.kyle

@ embedded.kyle คุณคิดจะเปลี่ยนความคิดเห็นของคุณเป็นคำตอบหรือไม่? เพิ่มข้อมูลเพิ่มเติมใด ๆ หากคุณต้องการ -thx
MandoMando

เงินรางวัลหรือไม่? โอ้เด็ก! เสร็จแล้ว
embedded.kyle

คำตอบ:


7

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

วิธีปีนเขา Nelder-Mead

จากบทความนี้ :

ตัวอย่างเช่นในกรณีของเราในการปรับพารามิเตอร์ PID {K P , K I , K D } simplex คือจัตุรมุข Nelder – Mead สร้างตำแหน่งการทดสอบใหม่ของเริมโดยการคาดการณ์พฤติกรรมของฟังก์ชั่นวัตถุประสงค์ที่วัดได้ในแต่ละจุดทดสอบที่จัดเป็นเริม อัลกอริทึมนั้นเลือกที่จะแทนที่หนึ่งในจุดทดสอบเหล่านี้ด้วยจุดทดสอบใหม่และเทคนิคดำเนินไป

แอปพลิเคชันเฉพาะของฉันสำหรับการควบคุมมอเตอร์ เรามีสองลูปคือลูปควบคุมปัจจุบัน PID และลูปควบคุมความเร็ว PI เราตั้งจุดยอดของเราเป็น P, I และ D ตามลำดับและวิ่งสถิติเกี่ยวกับผลลัพธ์ของลูป จากนั้นเราก็ทำการสะท้อนการขยายการหดตัวและการลดลงเรื่อย ๆ จนกระทั่งเป้าหมายการควบคุมความเร็วหรือกระแสที่สร้างขึ้นนั้นอยู่ภายในค่าเบี่ยงเบนมาตรฐานเล็กน้อย

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

สิ่งนี้อาจไม่เหมาะสำหรับคุณเนื่องจากคุณระบุว่า "ทำให้ระบบอยู่ในอาการสั่นแม้ในขณะที่ส่วนหนึ่งของการปรับอัตโนมัติไม่เป็นที่ยอมรับของผู้ใช้" ระบบของเราจะแกว่งไปมาและทำสิ่งที่น่ากลัวอื่น ๆ ในขณะที่มันกำลังทำการจูนอัตโนมัติ

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


วิธีการ NM นั้นจำเป็นต้องเรียกใช้จุดที่เป็นธรรมชาติบนฟังก์ชันวัตถุประสงค์ (เช่นโลกแห่งความจริงของผู้ใช้) อย่างไรก็ตามฉันเชื่อว่าสามารถสร้างแบบจำลองน้ำมันดิบ (space-state?) บนไมโครคอนโทรลเลอร์ได้ตามการวัดเซ็นเซอร์ จากนั้นจะเรียกใช้ตัวควบคุม PI "เงา" ที่คุณเสนอตามที่ปรับให้เหมาะสม ฉันไม่แน่ใจเกี่ยวกับเรื่องนี้มากเกินไปเพราะอาจเป็นไปได้ที่จะปรับค่า PI เป็นค่าที่ทราบแล้วปรับขนาด Kp และ Ki ตามการอ่านเซ็นเซอร์และการตอบสนองของระบบ ทั้งสองวิธีท่านทำได้ดีมาก
MandoMando

@MandoMando ขอบคุณมาก! และฉันชอบคอนโทรลเลอร์ PI ของคำว่า "เงา"
embedded.kyle

3

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

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


1

ความสามารถในการเปลี่ยนสถานะของการควบคุม (เปิดหรือปิด) 2-10 ครั้งต่อชั่วโมงไม่ให้ยืมตัวเองเพื่อการควบคุมวงจรการปฏิบัติหน้าที่ เอาต์พุตของลูป PI จะเป็นสัญญาณควบคุมที่แตกต่างกันไปตามขนาดเป็นฟังก์ชั่นของข้อผิดพลาดและโรงงานของคุณสามารถ (แนบเนียน) เท่านั้นที่รับอินพุตไบนารี่ (ปิดหรือเปิด) เนื่องจาก 'ความถี่' ของการควบคุม รอบหน้าที่ที่สามารถยอมรับได้คือเศษส่วนของเฮิร์ตซ์

คุณอาจต้องการลดความซับซ้อนของสิ่งต่าง ๆ และไปกับการควบคุม hysteretic:

  • ระบบจะเปิดเมื่ออุณหภูมิสูงกว่าขีด จำกัด ล่าง
  • ระบบจะปิดเมื่ออุณหภูมิสูงเกินขีด จำกัด บน
  • มีระยะทางที่เพียงพอระหว่างขีด จำกัด บนและล่างเพื่อป้องกันการกระดอนของเอาต์พุตควบคุม

แนวคิดที่จะใช้เอาต์พุต PI พูดว่า: 60% และแปลงเป็นเวลา = 60% ของรอบ -> 0.6 x 30 นาที -> 18 นาทีและ 12 นาทีในรอบ 30 นาที ตัวควบคุม bang-bang ที่คุณแนะนำไม่รับประกันว่าจะรักษาตามรอบอัตราที่ต้องการ (พูดว่าเปิดไม่เกิน n ครั้งต่อชั่วโมง) และรักษาความผิดพลาดต่ำในเวลาเดียวกัน อาจเป็นสิ่งจำเป็นสำหรับระบบที่จะทำการ overhoot ชั่วคราวเป็นระยะเวลาหนึ่งเพื่อรักษาสมดุลของการสูญเสียในช่วงเวลานอก
MandoMando

1

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

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

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


0

คุณสามารถควบคุมเต็มกำลัง Recursive Least Squares, cf Astrom และ Wittenmark , Adaptive Control ได้ แต่ฉันไม่รู้ว่าไมโครคอนโทรลเลอร์จะมีอุบายเพียงพอหรือไม่

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.