สารบัญ:
- ขั้นตอนที่ 1: เครื่องมือและวัสดุ
- ขั้นตอนที่ 2: จำ PCB
- ขั้นตอนที่ 3: ประสานส่วนประกอบ
- ขั้นตอนที่ 4: ตั้งโปรแกรมไมโครคอนโทรลเลอร์
- ขั้นตอนที่ 5: การประกอบและการปรับเทียบ
- ขั้นตอนที่ 6: การปรับ PID
- ขั้นตอนที่ 7: แพ็คมัน
วีดีโอ: ตัวควบคุมอุณหภูมิ PID: 7 ขั้นตอน
2024 ผู้เขียน: John Day | [email protected]. แก้ไขล่าสุด: 2024-01-30 13:07
เพื่อนของฉันกำลังสร้างเครื่องอัดรีดพลาสติกเพื่อรีไซเคิลพลาสติก (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
ฉันใช้ 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
ฉันต้องพูดถึงว่าฉันไม่ใช่ผู้เชี่ยวชาญด้านการควบคุม ดังนั้นฉันจึงพบพารามิเตอร์บางอย่างที่เหมาะกับฉัน แต่ฉันไม่รับประกันว่าจะได้ผลสำหรับทุกคน
ก่อนอื่น ฉันต้องอธิบายว่าโปรแกรมทำอะไร ฉันใช้ซอฟต์แวร์ประเภทหนึ่ง 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 โอห์ม) แบบอนุกรม ฉันยังใช้ยาทาเล็บสำหรับฉนวนไฟฟ้า หลังจากการทดสอบครั้งสุดท้าย ฉันติดกล่อง แค่นั้นแหละ.
แนะนำ:
หุ่นยนต์ปรับสมดุลตนเอง - อัลกอริธึมการควบคุม PID: 3 ขั้นตอน
หุ่นยนต์ปรับสมดุลตนเอง - อัลกอริธึมการควบคุม PID: โครงการนี้เกิดขึ้นเพราะฉันสนใจที่จะเรียนรู้เพิ่มเติมเกี่ยวกับอัลกอริธึมการควบคุมและวิธีการใช้ลูป PID ที่ใช้งานได้อย่างมีประสิทธิภาพ โครงการยังอยู่ในขั้นตอนการพัฒนาเนื่องจากยังไม่ได้เพิ่มโมดูล Bluetooth ซึ่งจะทำให้
ผู้ติดตาม PID Line Atmega328P: 4 ขั้นตอน
PID Line Follower Atmega328P: บทนำ คำสั่งนี้เกี่ยวกับการสร้าง Line Follower ที่มีประสิทธิภาพและเชื่อถือได้ด้วย PID (proportional-integral-derivative) Control (Mathematical) ที่ทำงานอยู่ในสมอง (Atmega328P) ผู้ติดตาม Line เป็นหุ่นยนต์อิสระที่ติดตามข
PID Controller VHDL: 10 ขั้นตอน
PID Controller VHDL: โครงการนี้เป็นโครงการสุดท้ายของฉันในการสำเร็จการศึกษาระดับปริญญาตรีเกียรตินิยมจาก Cork Institute of Technology บทช่วยสอนนี้แบ่งออกเป็นสองส่วน ส่วนแรกจะครอบคลุมเนื้อหาหลักของรหัส PID ซึ่งเป็นจุดประสงค์หลักของโครงการและส่วนที่สอง
ควบคุมอุณหภูมิที่บ้านด้วย PID และ Labview: 4 ขั้นตอน
ควบคุมอุณหภูมิหน้าแรกด้วย PID และ Labview: PID merupakan suatu sistem pengontrolan yang biasa digunakan pada dunia indusri yang telah bukti keandalannya disini kita akan mengimplementasikan kontrolloer PID pada pengatur suhu ruangan menggunakan labview
ทาวเวอร์คอปเตอร์พร้อมตัวควบคุม PID: 4 ขั้นตอน
Tower Copter พร้อม PID Controller: สวัสดีทุกคน ฉันชื่อวชิด กุรเนียวัน ปุตรา วันนี้ฉันจะแชร์โปรเจ็กต์ไมโครคอนโทรลเลอร์กับทีมของฉัน ทีมของฉันมี 4 คนรวมฉันด้วย พวกเขาคือ: 1 ฮวน แอนดรูว์ (15/386462 / SV / 09848)2. วชิต กุรณิวรรณบุตร (17/416821 / SV / 14559)3.