Πίνακας περιεχομένων:

Ελεγκτής θερμοκρασίας PID: 7 βήματα
Ελεγκτής θερμοκρασίας PID: 7 βήματα

Βίντεο: Ελεγκτής θερμοκρασίας PID: 7 βήματα

Βίντεο: Ελεγκτής θερμοκρασίας PID: 7 βήματα
Βίντεο: AI518 Intelligent Industrial PID Temperature Controller RS485 Big LED display 2024, Ιούλιος
Anonim
Ελεγκτής θερμοκρασίας PID
Ελεγκτής θερμοκρασίας PID

Ο φίλος μου χτίζει έναν πλαστικό εξωθητή για ανακύκλωση πλαστικών (https://preciousplastic.com). Πρέπει να ελέγξει τη θερμοκρασία εξώθησης. Για το σκοπό αυτό χρησιμοποιεί μια ταινία θερμαντήρα ακροφυσίων. Σε αυτό το ακροφύσιο, υπάρχει ένα θερμοστοιχείο και μια μονάδα θέρμανσης που μας επιτρέπουν να μετρήσουμε τη θερμοκρασία και τελικά να φτάσουμε στην επιθυμητή θερμοκρασία (κάντε έναν βρόχο αναδρομικής αντίδρασης).

Όταν άκουσα ότι χρειάστηκε από αρκετούς ελεγκτές PID για να ελέγξει όλες αυτές τις ζώνες θερμαντήρων ακροφυσίων, μου έδωσε αμέσως την επιθυμία να προσπαθήσουμε να φτιάξουμε τη δική μας.

Βήμα 1: Εργαλεία και υλικό

Εργαλεία

  • συγκολλητικό σίδερο, σύρμα συγκόλλησης και ροή
  • τσιμπιδάκι
  • φρέζα (η χημική χάραξη είναι επίσης δυνατή για πρωτότυπο PCB) (μπορείτε επίσης να παραγγείλετε το PCB με το αρχείο αετού μου)
  • θερμόμετρο (για βαθμονόμηση)
  • arduino (οποιουδήποτε τύπου) ή προγραμματιστής AVR
  • Σειριακό καλώδιο USB FTDI TTL-232
  • κόφτης λέιζερ (προαιρετικά)
  • πολύμετρο (ωμόμετρο και βολτόμετρο)

Υλικό

  • Μπακελίτης μονής πλευράς χάλκινη πλάκα (ελάχιστο 60*35 mm) (χάλασα το πριόνι μου αγοράζοντας το fiberglass, οπότε προσέξτε: Βακελίτης)
  • Μικροελεγκτής Attiny45
  • Ρυθμιστής τάσης LM2940IMP-5
  • Λειτουργικός ενισχυτής AD8605
  • Τρανζίστορ NDS356AP
  • μια δέσμη αντιστάσεων και πυκνωτών (έχω το βιβλίο adafruit SMT 0603)
  • Μετασχηματιστής 230V-9V ac-dc
  • Δίοδοι 1N4004
  • ρελέ στερεάς κατάστασης
  • βερνίκι νυχιών (προαιρετικά)

Βήμα 2: Χαράξτε το PCB

Χαράξτε το PCB
Χαράξτε το PCB
Χαράξτε το PCB
Χαράξτε το PCB
Χαράξτε το PCB
Χαράξτε το PCB

Χρησιμοποίησα το Proxxon MF70 CNC μετασχηματισμένο και ένα κωνικό άκρο για να αλέσω το PCB. Νομίζω ότι οποιοδήποτε τελικό κομμάτι χαρακτικής θα λειτουργούσε. Το αρχείο Gcode δημιουργήθηκε απευθείας από τον αετό και το πρόσθετο pcb-gcode. Μόνο τρία περάσματα έγιναν για να εξασφαλιστεί ένας καλός διαχωρισμός διαδρομής, χωρίς όμως να περάσουν ώρες αλέθοντας όλο τον χαλκό. Όταν το PCB βγήκε από το μηχάνημα CNC, καθάρισα τις διαδρομές με κόπτη και τις δοκίμασα με πολύμετρο.

Παράμετροι: ρυθμός τροφοδοσίας 150mm/min, βάθος 0,2mm, ταχύτητα περιστροφής 20'000 t/min

Βήμα 3: Συγκολλήστε τα εξαρτήματα

Συγκολλήστε τα εξαρτήματα
Συγκολλήστε τα εξαρτήματα

Με το τσιμπιδάκι και το συγκολλητικό σίδερο, τοποθετήστε τα εξαρτήματα στα σωστά σημεία και συγκολλήστε το χρησιμοποιώντας τη ροή (βοηθά) και ξεκινώντας από τα μικρότερα εξαρτήματα. Και πάλι, ελέγξτε με ένα πολύμετρο ότι δεν έχετε βραχυκύκλωμα ή μη συνδεδεμένα στοιχεία.

Μπορείτε να επιλέξετε το κέρδος ενισχυτή επιλέγοντας την αντίσταση που θέλετε (κέρδος = (R3+R4)/R4). Πήρα 1Μ και 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" στα γαλλικά, αλλά πολύ πιο εύκολο να γραφτεί και να προφερθεί (προφέρετε "sey")) που καθορίζει πόσο καιρό θα είναι ο διακόπτης ενεργοποιημένος και απενεργοποιημένος (ο κύκλος λειτουργίας) έτσι το ποσό της ενέργειας βάλτε στο σύστημα.

Όλοι συμφωνούν ότι αν είστε μακριά από το σημείο που θέλετε να φτάσετε, μπορείτε να κάνετε μια μεγάλη διόρθωση και αν είστε κοντά, χρειάζεται μια μικρή διόρθωση. Σημαίνει ότι η διόρθωση είναι συνάρτηση του σφάλματος (error = analogData-tempComand). Ναι αλλά πόσο; Ας πούμε ότι πολλαπλασιάζουμε το σφάλμα με έναν συντελεστή (P). Αυτός είναι ένας αναλογικός ελεγκτής. Μηχανικά ένα ελατήριο κάνει μια αναλογική διόρθωση επειδή η δύναμη του ελατηρίου είναι ανάλογη με τη συμπίεση του ελατηρίου.

Πιθανώς γνωρίζετε ότι οι αναρτήσεις του αυτοκινήτου σας αποτελούνται από ένα ελατήριο και ένα αμορτισέρ (αμορτισέρ). Ο ρόλος αυτού του αποσβεστήρα είναι να αποφύγετε το αυτοκίνητό σας να αναπηδήσει σαν τραμπολίνο. Αυτό ακριβώς κάνει ο παράγωγος όρος. Ως αποσβεστήρας, δημιουργεί μια αντίδραση ανάλογη της διακύμανσης του σφάλματος. Εάν το σφάλμα αλλάζει γρήγορα, η διόρθωση μειώνεται. Μειώνει τις ταλαντώσεις και τις υπερβάσεις.

Ο όρος ενσωματωτής είναι εδώ για να αποφευχθεί το μόνιμο σφάλμα (ενσωματώνει το σφάλμα). Συγκεκριμένα, είναι ένας μετρητής που αυξάνεται ή μειώνεται εάν το σφάλμα είναι θετικό ή αρνητικό. Στη συνέχεια, η διόρθωση αυξάνεται ή μειώνεται σύμφωνα με αυτόν τον μετρητή. Δεν έχει μηχανική ισοδυναμία (ή έχετε ιδέα;). Maybeσως υπάρχει ένα παρόμοιο αποτέλεσμα όταν φέρνετε το αυτοκίνητό σας στο σέρβις και ο μηχανικός παρατηρήσει ότι τα αμορτισέρ είναι συστηματικά πολύ χαμηλά και αποφασίζετε να προσθέσετε κάποια άλλη προφόρτιση.

Όλα αυτά συνοψίζονται στον τύπο: διόρθωση = P*e (t)+I*(de (t)/dt)+D*ολοκλήρωμα (e (t) dt), τα P, I και D είναι τρεις παράμετροι που έχουν να συντονιστείτε.

Στην έκδοση μου πρόσθεσα έναν τέταρτο όρο που είναι η εντολή "a priori" (feed forward) που απαιτείται για τη διατήρηση μιας συγκεκριμένης θερμοκρασίας. Επέλεξα μια αναλογική εντολή για τη θερμοκρασία (είναι μια καλή προσέγγιση των απωλειών θέρμανσης. Είναι αλήθεια αν παραμελήσουμε τις απώλειες ακτινοβολίας (Τ^4)). Με αυτόν τον όρο, ο ενσωματωτής φωτίζεται.

Πώς να βρείτε αυτές τις παραμέτρους;

Δοκίμασα μια συμβατική μέθοδο που μπορείτε να βρείτε κάνοντας googling "pid tuning temperature controller", αλλά δυσκολεύτηκα να την εφαρμόσω και κατέληξα στη δική μου μέθοδο.

Η μέθοδος μου

Βάλτε πρώτα το P, I, D στο μηδέν και βάλτε "K" και "tempCommand" σε μικρές τιμές (για παράδειγμα K = 1 και tempCommand = 100). Ενεργοποιήστε το σύστημα και περιμένετε, περιμένετε, περιμένετε… μέχρι να σταθεροποιηθεί η θερμοκρασία. Σε αυτό το σημείο γνωρίζετε ότι με "seuil" 1*100 = 100, η θερμοκρασία τείνει στο Χ. Έτσι γνωρίζετε ότι με εντολή 100/20000 = 5% μπορείτε να φτάσετε στο Χ. Αλλά ο στόχος είναι να φτάσετε το 100 επειδή είναι "tempCommand". Χρησιμοποιώντας ένα ποσοστό μπορείτε να υπολογίσετε το Κ για να φτάσετε το 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)

Γιατί όλες αυτές οι δοκιμές, γιατί όχι η επιστήμη;

Ξέρω ξέρω! Υπάρχει μια τεράστια θεωρία και μπορείτε να υπολογίσετε τη συνάρτηση μεταφοράς και τον μετασχηματισμό Ζ και blablabla. Wantedθελα να δημιουργήσω ένα ενιαίο άλμα και στη συνέχεια να καταγράψω για 10 λεπτά την αντίδραση και να γράψω τη συνάρτηση μεταφοράς και μετά τι; Δεν θέλω να κάνω αριθμητική με 200 όρους. Αν κάποιος έχει ιδέα, θα χαρώ να μάθω πώς να το κάνω σωστά.

Σκέφτηκα επίσης στους καλύτερους φίλους μου Ziegler και Nichols. Μου είπαν να βρω ένα Ρ που δημιουργεί ταλαντώσεις και στη συνέχεια να εφαρμόσω τη μέθοδό τους. Δεν βρήκα ποτέ αυτές τις ταλαντώσεις. Το μόνο που βρήκα ήταν ένα ωοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοσοσώτα το σηµαντικό βήµα προς τον ουρανό.

Και πώς να μοντελοποιήσουμε το γεγονός ότι η θέρμανση δεν είναι η ίδια διαδικασία με την ψύξη;

Θα συνεχίσω την έρευνά μου, αλλά τώρα ας συσκευάσουμε τον ελεγκτή σας εάν είστε ικανοποιημένοι με την απόδοση που έχετε.

Βήμα 7: Συσκευάστε το

Συσκευάστε το
Συσκευάστε το
Συσκευάστε το
Συσκευάστε το
Συσκευάστε το
Συσκευάστε το
Συσκευάστε το
Συσκευάστε το

Είχα πρόσβαση στο fablab της Μόσχας (fablab77.ru) και στον κόφτη λέιζερ τους και είμαι ευγνώμων. Αυτή η ευκαιρία μου επέτρεψε να φτιάξω ένα ωραίο πακέτο που δημιουργήθηκε με ένα κλικ από ένα πρόσθετο που κάνει κουτιά με τις επιθυμητές διαστάσεις (h = 69 l = 66 d = 42 mm). Υπάρχουν δύο οπές (διάμετρος = 5mm) στην κορυφή για το led και το διακόπτη και μία σχισμή στο πλάι για τις ακίδες προγραμματισμού. Ασφάλισα τον μετασχηματιστή με δύο κομμάτια ξύλου και το PCB με δύο βίδες. Συγκόλλησα το μπλοκ ακροδεκτών στα καλώδια και στο PCB, πρόσθεσα τον διακόπτη μεταξύ του μετασχηματιστή και της εισόδου ισχύος του PCB, συνέδεσα το led στο PBO με μια αντίσταση (300 Ohms) σε σειρά. Χρησιμοποίησα επίσης βερνίκι νυχιών για ηλεκτρική μόνωση. Μετά την τελευταία δοκιμή, κόλλησα το κουτί. Αυτό είναι.

Συνιστάται: