สารบัญ:

ตัวควบคุมอุณหภูมิ PID: 7 ขั้นตอน
ตัวควบคุมอุณหภูมิ PID: 7 ขั้นตอน

วีดีโอ: ตัวควบคุมอุณหภูมิ PID: 7 ขั้นตอน

วีดีโอ: ตัวควบคุมอุณหภูมิ PID: 7 ขั้นตอน
วีดีโอ: การใช้งาน PLC Siemens S7-1200 ควบคุมอุณหภูมิแบบ PID 2024, พฤศจิกายน
Anonim
เครื่องควบคุมอุณหภูมิ PID
เครื่องควบคุมอุณหภูมิ PID

เพื่อนของฉันกำลังสร้างเครื่องอัดรีดพลาสติกเพื่อรีไซเคิลพลาสติก (https://preciousplastic.com) เขาต้องควบคุมอุณหภูมิการอัดขึ้นรูป เพื่อจุดประสงค์นั้น เขาจึงใช้แถบรัดหัวฉีด ในหัวฉีดนี้มีเทอร์โมคัปเปิลและชุดทำความร้อนซึ่งช่วยให้เราสามารถวัดอุณหภูมิและได้อุณหภูมิที่ต้องการในที่สุด (สร้างลูปย้อนหลัง)

เมื่อฉันได้ยินว่าเขาต้องใช้ตัวควบคุม PID หลายตัวเพื่อควบคุมแถบฮีทเตอร์ของหัวฉีดเหล่านี้ ทำให้ฉันปรารถนาที่จะลองทำของเราเองในทันที

ขั้นตอนที่ 1: เครื่องมือและวัสดุ

เครื่องมือ

  • หัวแร้ง ลวดบัดกรี และฟลักซ์
  • แหนบ
  • เครื่องกัด (การกัดด้วยสารเคมีสามารถทำได้สำหรับการสร้างต้นแบบ PCB) (คุณยังสามารถสั่งซื้อ PCB ด้วยไฟล์ Eagle ของฉันได้)
  • เทอร์โมมิเตอร์ (สำหรับสอบเทียบ)
  • Arduino (ประเภทใดก็ได้) หรือโปรแกรมเมอร์ AVR
  • FTDI serial TTL-232 สาย USB
  • เครื่องตัดเลเซอร์ (อุปกรณ์เสริม)
  • มัลติมิเตอร์ (โอห์มมิเตอร์และโวลต์มิเตอร์)

วัสดุ

  • แผ่นทองแดงด้านเดียว Bakelite (ขั้นต่ำ 60*35 มม.) (ฉันทำลายเลื่อยของฉันที่ซื้อไฟเบอร์กลาสดังนั้นระวัง: Bakelite)
  • ไมโครคอนโทรลเลอร์ Attiny45
  • LM2940IMP-5 ตัวควบคุมแรงดันไฟฟ้า
  • AD8605 เครื่องขยายเสียงปฏิบัติการ
  • ทรานซิสเตอร์ NDS356AP
  • ตัวต้านทานและตัวเก็บประจุจำนวนหนึ่ง (ฉันมีหนังสือ SMT 0603 adafruit)
  • หม้อแปลงไฟฟ้ากระแสสลับ 230V-9V
  • 1N4004 ไดโอด
  • โซลิดสเตตรีเลย์
  • ยาทาเล็บ (ไม่จำเป็น)

ขั้นตอนที่ 2: จำ PCB

จำหลัก PCB
จำหลัก PCB
จำหลัก PCB
จำหลัก PCB
จำหลัก PCB
จำหลัก PCB

ฉันใช้ Proxxon MF70 CNC ที่แปลงแล้วและบิตปลายทรงกรวยเพื่อกัด PCB ฉันคิดว่าบิตสิ้นสุดการแกะสลักจะใช้งานได้ ไฟล์ Gcode ถูกสร้างขึ้นโดยตรงโดย eagle และปลั๊กอิน pcb-gcode ผ่านเพียงสามรอบเท่านั้นเพื่อให้แน่ใจว่ามีการแยกเส้นทางที่ดี แต่ไม่ต้องเสียเวลาหลายชั่วโมงในการกัดทองแดงทั้งหมด เมื่อ PCB ออกจากเครื่อง CNC ฉันทำความสะอาดเส้นทางด้วยเครื่องตัดและทดสอบด้วยมัลติมิเตอร์

พารามิเตอร์: อัตราป้อน 150 มม./นาที ความลึก 0.2 มม. ความเร็วในการหมุน 20'000 ตัน/นาที

ขั้นตอนที่ 3: ประสานส่วนประกอบ

ประสานส่วนประกอบ
ประสานส่วนประกอบ

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

คุณสามารถเลือกเกนของแอมพลิฟายเออร์ได้โดยเลือกตัวต้านทานที่คุณต้องการ (เกน=(R3+R4)/R4) ฉันเอา 1M และ 2.7k ดังนั้นในกรณีของฉัน ค่าเกนจะเท่ากับประมาณ 371 ฉันไม่ทราบค่าที่แน่นอนเพราะฉันใช้ตัวต้านทานความทนทาน 5%

เทอร์โมคัปเปิลของฉันเป็นแบบ J หมายความว่าจะให้ 0.05mV สำหรับแต่ละองศา ด้วยอัตราขยาย 371 ฉันได้รับ 18.5mV ต่อองศาจากเอาต์พุตเครื่องขยายเสียง (0.05*371) ฉันต้องการวัดประมาณ 200°C ดังนั้นเอาต์พุตของเครื่องขยายเสียงควรอยู่ที่ประมาณ 3.7V (0.0185*200) ผลลัพธ์ไม่ควรเกิน 5V เพราะผมใช้แรงดันอ้างอิง 5V (ภายนอก)

รูปภาพสอดคล้องกับเวอร์ชันแรก (ไม่ทำงาน) ที่ฉันทำ แต่หลักการเหมือนกัน ในรุ่นแรกนี้ ผมใช้รีเลย์และวางไว้ตรงกลางกระดาน ทันทีที่ฉันเปลี่ยนด้วยไฟฟ้าแรงสูงฉันมีเดือยที่ทำให้คอนโทรลเลอร์รีบูท

ขั้นตอนที่ 4: ตั้งโปรแกรมไมโครคอนโทรลเลอร์

โปรแกรมไมโครคอนโทรลเลอร์
โปรแกรมไมโครคอนโทรลเลอร์

การใช้ Arduino เช่นในคำแนะนำนี้: https://www.instructables.com/id/How-to-Program-a… คุณสามารถโหลดโค้ดได้

ฉันใช้อุปกรณ์เสริมระดับมืออาชีพกับสาย FTDI-USB เพื่อตั้งโปรแกรม Attiny 45 แต่วิธีนี้เทียบเท่ากัน จากนั้นฉันเสียบพิน PB1 และ GDN เข้ากับ RX และ GND ของสายเคเบิล FTDI-USB โดยตรงเพื่อรับข้อมูลอนุกรมและสามารถดีบักได้

คุณควรใส่พารามิเตอร์ทั้งหมดให้เป็นศูนย์ (P=0, I=0, D=0, K=0) ในแบบร่าง Arduino พวกมันจะถูกตั้งค่าระหว่างขั้นตอนการปรับแต่ง

ถ้าไม่เห็นควันหรือกลิ่นไหม้ ก็ข้ามไปขั้นตอนต่อไปได้เลย!

ขั้นตอนที่ 5: การประกอบและการปรับเทียบ

การประกอบและการปรับเทียบ
การประกอบและการปรับเทียบ
การประกอบและการปรับเทียบ
การประกอบและการปรับเทียบ

ข้อควรระวัง: ห้ามเสียบปลั๊กไฟและ 5V จากโปรแกรมเมอร์พร้อมกัน! มิฉะนั้นคุณจะเห็นควันที่ฉันทำในขั้นตอนก่อนหน้านี้ หากคุณไม่มั่นใจว่าจะสามารถเคารพสิ่งนั้นได้ คุณสามารถถอดพิน 5v ของโปรแกรมเมอร์ออกได้ ฉันปล่อยมันไปเพราะมันสะดวกกว่าสำหรับฉันที่จะตั้งโปรแกรมคอนโทรลเลอร์โดยไม่ใช้แหล่งจ่ายไฟและเพื่อทดสอบคอนโทรลเลอร์โดยไม่ต้องให้ฮีตเตอร์ทำความร้อนอย่างบ้าคลั่งต่อหน้าฉัน

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

จะอ่านค่าเหล่านี้ได้อย่างไร? เพียงเสียบหมุด PB1 และ GDN เข้ากับ RX และ GND ของสายเคเบิล FTDI-USB โดยตรง แล้วเปิดจอภาพอนุกรมของ Arduino

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

ก่อนเชื่อมต่อโซลิดสเตตรีเลย์ ให้ตรวจสอบว่าเอาต์พุตแรงดันไฟฟ้าอยู่ในช่วงที่รีเลย์ของคุณรองรับ (3V ถึง 25V ในกรณีของฉัน วงจรสร้างประมาณ 11V) (เคารพขั้ว)

ค่าเหล่านี้ไม่ใช่อุณหภูมิในหน่วยองศาหรือฟาเรนไฮต์ แต่เป็นผลจากการแปลงแอนะล็อกเป็นดิจิทัล ดังนั้นจึงแตกต่างกันระหว่าง 0 ถึง 1024 ฉันใช้แรงดันอ้างอิง 5V ดังนั้นเมื่อเอาต์พุตของแอมพลิฟายเออร์อยู่ใกล้ 5V ผลการแปลงจะอยู่ใกล้ 1024

ขั้นตอนที่ 6: การปรับ PID

การปรับ PID
การปรับ PID

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

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

ตัวควบคุม PID คืออะไร?

เมื่อคุณต้องการควบคุมกระบวนการ คุณมีค่าที่คุณวัดได้ (analogData) ค่าที่คุณต้องการเข้าถึง (tempCommand) และวิธีแก้ไขสถานะของกระบวนการนั้น (seuil) ในกรณีของฉันมันทำด้วยธรณีประตู ("seuil" ในภาษาฝรั่งเศส แต่เขียนและออกเสียงง่ายกว่ามาก (ออกเสียงว่า "เซ") ซึ่งกำหนดระยะเวลาในการเปิดและปิดสวิตช์ (รอบการทำงาน) ดังนั้นปริมาณพลังงาน ใส่ในระบบ.

ทุกคนเห็นพ้องต้องกันว่าหากคุณอยู่ไกลจากจุดที่คุณต้องการไปให้ถึง คุณสามารถแก้ไขครั้งใหญ่ได้ และหากคุณอยู่ใกล้ ก็จำเป็นต้องแก้ไขเล็กน้อย หมายความว่าการแก้ไขเป็นฟังก์ชันของข้อผิดพลาด (error=analogData-tempComand) ใช่ แต่เท่าไหร่? สมมุติว่าเราคูณข้อผิดพลาดด้วยตัวประกอบ (P) นี่คือตัวควบคุมตามสัดส่วน สปริงจะทำการแก้ไขตามสัดส่วนเนื่องจากแรงสปริงเป็นสัดส่วนกับการอัดสปริง

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

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

ทั้งหมดนี้สรุปไว้ในสูตร: correction=P*e(t)+I*(de(t)/dt)+D*integral(e(t)dt), P, I และ D เป็นพารามิเตอร์สามตัวที่มี ที่จะปรับแต่ง

ในเวอร์ชันของฉัน ฉันได้เพิ่มคำที่สี่ซึ่งเป็นคำสั่ง "a priori" (ป้อนไปข้างหน้า) ที่จำเป็นเพื่อรักษาอุณหภูมิให้คงที่ ฉันเลือกคำสั่งตามสัดส่วนกับอุณหภูมิ (เป็นการประมาณที่ดีของการสูญเสียความร้อน ซึ่งจะเป็นจริงหากเราละเลยการสูญเสียรังสี (T^4)) ด้วยคำนี้ ผู้รวมระบบจะเบาลง

จะค้นหาพารามิเตอร์เหล่านี้ได้อย่างไร

ฉันได้ลองใช้วิธีการทั่วไปที่คุณสามารถหาได้โดย googling "ตัวควบคุมอุณหภูมิ pid tuning" แต่ฉันพบว่าใช้ยากและลงเอยด้วยวิธีการของฉันเอง

วิธีการของฉัน

อันดับแรก ให้ใส่ P, I, D เป็นศูนย์ แล้วใส่ "K" และ "tempCommand" เป็นค่าเล็กน้อย (เช่น K=1 และ tempCommand=100) เปิดระบบแล้วรอ รอ รอ… จนกว่าอุณหภูมิจะคงที่ ณ จุดนี้ คุณรู้ว่าด้วย "ซึล" ที่ 1*100=100 อุณหภูมิมีแนวโน้มเป็น X ดังนั้นคุณจึงรู้ว่าด้วยคำสั่ง 100/20000=5% คุณสามารถเข้าถึง X ได้ แต่เป้าหมายคือไปให้ถึง 100 เพราะมันคือ "tempCommand" การใช้สัดส่วนคุณสามารถคำนวณ K เพื่อให้ถึง 100 (tempCommand) ด้วยความระมัดระวัง ฉันใช้ค่าที่น้อยกว่าค่าที่คำนวณได้ อันที่จริงการทำให้ร้อนง่ายกว่าการทำให้เย็นลง ในที่สุด

Kfinal=K*tempCommand*0.9/X

ตอนนี้เมื่อคุณเริ่มตัวควบคุม อุณหภูมิควรมีแนวโน้มตามที่คุณต้องการ แต่มันเป็นกระบวนการที่ช้ามากเพราะคุณชดเชยการสูญเสียความร้อนเท่านั้น หากคุณต้องการเปลี่ยนจากอุณหภูมิหนึ่งไปอีกอุณหภูมิหนึ่ง จะต้องเพิ่มปริมาณพลังงานความร้อนในระบบ P กำหนดอัตราที่คุณใส่พลังงานเข้าสู่ระบบ ตั้งค่า P เป็นค่าเล็กน้อย (สำหรับตัวอย่าง P=10) ลองสตาร์ทเครื่อง (เกือบ) เย็น หากคุณไม่มีโอเวอร์ชู้ตมาก ให้ลองแบบดับเบิ้ล (P=20) ถ้าตอนนี้คุณมีอันใดอันหนึ่งให้ลองทำบางอย่างในระหว่างนั้น หากคุณมี เกิน 5% ก็ดี

ตอนนี้เพิ่ม D จนกว่าคุณจะไม่มีการโอเวอร์โหลด (ทดลองอยู่เสมอฉันรู้ว่านี่ไม่ใช่วิทยาศาสตร์) (ฉันเอา D=100)

จากนั้นเพิ่ม I=P^2/(4*D) (ตามวิธี Ziegler-Nicholts ควรรับประกันความเสถียร)(สำหรับฉัน I=1)

ทำไมการทดลองทั้งหมดนี้ ทำไมไม่วิทยาศาสตร์?

ฉันรู้ว่าฉันรู้ว่า! มีทฤษฎีมากมายที่คุณสามารถคำนวณฟังก์ชันการถ่ายโอนและการแปลง Z และ blablabla ฉันต้องการสร้างการกระโดดรวมกันแล้วบันทึกปฏิกิริยาเป็นเวลา 10 นาทีและเขียนฟังก์ชันการถ่ายโอนแล้วจะเป็นอย่างไร ฉันไม่อยากคิดเลขด้วย 200 เทอม ดังนั้นหากใครมีไอเดีย ผมก็ยินดีที่จะเรียนรู้วิธีการทำอย่างถูกต้อง

ฉันยังคิดถึงเพื่อนสนิทของฉัน Ziegler และ Nichols พวกเขาบอกให้ฉันหา P ที่สร้างความผันผวนแล้วใช้วิธีของพวกเขา ฉันไม่เคยพบการสั่นเหล่านี้ สิ่งเดียวที่ฉันพบคือการโหมโรงขึ้นฟ้า

และจะจำลองความจริงที่ว่าการให้ความร้อนไม่ใช่กระบวนการเดียวกับการทำความเย็นได้อย่างไร

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

ขั้นตอนที่ 7: แพ็คมัน

แพ็คมัน
แพ็คมัน
แพ็คมัน
แพ็คมัน
แพ็คมัน
แพ็คมัน
แพ็คมัน
แพ็คมัน

ฉันสามารถเข้าถึงมอสโก fablab (fablab77.ru) และเครื่องตัดเลเซอร์ของพวกเขาและฉันรู้สึกขอบคุณ โอกาสนี้ทำให้ฉันสามารถสร้างแพ็คเกจที่ดีที่สร้างขึ้นในคลิกเดียวโดยปลั๊กอินที่สร้างกล่องตามขนาดที่ต้องการ (h=69 l=66 d=42 mm) มีรูสองรู (เส้นผ่านศูนย์กลาง = 5 มม.) ที่ด้านบนสำหรับไฟ LED และสวิตช์ และอีกช่องหนึ่งที่ด้านข้างสำหรับพินการเขียนโปรแกรม ฉันยึดหม้อแปลงด้วยไม้สองชิ้นและ PCB ด้วยสกรูสองตัว ฉันบัดกรีเทอร์มินัลบล็อกเข้ากับสายไฟและกับ PCB เพิ่มสวิตช์ระหว่างหม้อแปลงและอินพุตไฟ PCB เชื่อมต่อ led กับ PBO ด้วยตัวต้านทาน (300 โอห์ม) แบบอนุกรม ฉันยังใช้ยาทาเล็บสำหรับฉนวนไฟฟ้า หลังจากการทดสอบครั้งสุดท้าย ฉันติดกล่อง แค่นั้นแหละ.

แนะนำ: