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

Ελεγκτής PID VHDL: 10 βήματα
Ελεγκτής PID VHDL: 10 βήματα

Βίντεο: Ελεγκτής PID VHDL: 10 βήματα

Βίντεο: Ελεγκτής PID VHDL: 10 βήματα
Βίντεο: Ελεγκτής PID 2024, Ιούλιος
Anonim
Ελεγκτής PID VHDL
Ελεγκτής PID VHDL
Ελεγκτής PID VHDL
Ελεγκτής PID VHDL

Αυτό το έργο ήταν το τελευταίο μου έργο για την ολοκλήρωση του πτυχίου μου από το Ινστιτούτο Τεχνολογίας του Κορκ. Αυτό το σεμινάριο χωρίζεται σε δύο ενότητες, το πρώτο θα καλύψει το κύριο σώμα του κώδικα PID που είναι ο κύριος σκοπός του έργου και το δεύτερο τμήμα καλύπτει τη διασύνδεση του κώδικα που εφαρμόστηκε σε έναν πίνακα ανάπτυξης του Basys 3 και στη συνέχεια διασυνδέθηκε με μια μπάλα πινγκ πονγκ εξέδρα εξέλιξης. Η θεωρητική και κατασκευασμένη εξέδρα εμφανίζεται στις συνημμένες εικόνες.

Προμήθειες

Προσομοίωση

Vivado Design Σουίτα

Εφαρμογή (στις αγκύλες είναι αυτό που χρησιμοποιήθηκε για το έργο μου)

  • Πίνακας FPGA που μπορεί να εισάγει και να εξάγει ψηφιακά/αναλογικά σήματα (Basys 3)
  • ένα σύστημα το οποίο μπορεί να ελεγχθεί με μία μόνο πηγή ανατροφοδότησης (Piv Pong Ball Levitation Rig)

Ενδύω

  • Πολυανθρακικός σωλήνας
  • Ανεμιστήρας 5V
  • Αισθητήρας IR
  • Τρισδιάστατη εκτυπωμένη βάση (Αυτό το σεμινάριο τεκμηριώνει την κατασκευή της εξέδρας που ο αισθητήρας προστέθηκε για να παρέχει ανατροφοδότηση, αλλά η εξέδρα ήταν γενικά η ίδια)
  • Αντιστάσεις 1k
  • Breadboard με 5V και GND Rail

Βήμα 1: Βασική θεωρία ελέγχου

Θεωρία Βασικού Ελέγχου
Θεωρία Βασικού Ελέγχου

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

Το συνημμένο διάγραμμα είναι η διάταξη ενός ελεγκτή βρόχου.

r- Είναι η αναφορά. Αυτό καθορίζει πού θέλει να πάει ο ελεγκτής.

e-Είναι το σφάλμα. Αυτή είναι η διαφορά μεταξύ της τιμής στον αισθητήρα σας και της αναφοράς σας. π.χ. e = r- (d+έξοδος αισθητήρα).

K-Αυτός είναι ο ελεγκτής. Ένας ελεγκτής μπορεί να αποτελείται από τρεις όρους. Αυτοί οι όροι είναι P, I και D. Και οι τρεις όροι έχουν πολλαπλασιαστές που ονομάζονται Kp, Ki και Kd. Αυτές οι τιμές καθορίζουν την απόκριση του ελεγκτή.

  • Ρ-Αναλογικό. Ένας αυστηρά ελεγκτής P θα έχει έξοδο ανάλογο με το τρέχον σφάλμα. Ο χειριστής P είναι απλός στην εφαρμογή και λειτουργεί γρήγορα, αλλά δεν θα φτάσει ποτέ την τιμή που έχετε ορίσει (αναφορά).
  • I-Integral. Ένας αυστηρά ολοκληρωμένος ελεγκτής θα συνοψίσει το προηγούμενο σφάλμα το οποίο θα φτάσει τελικά στην επιθυμητή αναφορά. Αυτός ο ελεγκτής είναι γενικά πολύ αργός για εφαρμογή. Η προσθήκη ενός όρου Ρ θα μειώσει τον χρόνο που απαιτείται για την επίτευξη της αναφοράς. Ο χρόνος δειγματοληψίας της εισόδου πρέπει να ληφθεί υπόψη, όταν ο ολοκληρωμένος όρος ενσωματώνεται σε σχέση με το χρόνο.
  • Δ-Παράγωγο. Ο παράγωγος όρος θα έχει μια έξοδο που εξαρτάται από το ρυθμό αλλαγής σφάλματος. Αυτός ο όρος χρησιμοποιείται γενικά με έναν όρο Ρ ή με έναν όρο ΡΙ. Δεδομένου ότι αυτό είναι αναλογικά με τον ρυθμό αλλαγής σφάλματος, τότε ένα θορυβώδες single θα ενισχυθεί ο θόρυβός του, γεγονός που μπορεί να προκαλέσει ασταθές σύστημα. Ο χρόνος πρέπει επίσης να λαμβάνεται υπόψη καθώς ο παράγωγος όρος αφορά και τον χρόνο.

U- Αυτό είναι το σήμα ελέγχου. Αυτό το σήμα είναι μια είσοδος στην εξέδρα. Στην περίπτωση αυτού του έργου, το u είναι μια είσοδος σήματος PWM στον ανεμιστήρα για να αλλάξετε την ταχύτητα.

Ζ- Αυτό είναι το σύστημα που ελέγχεται. Αυτό το σύστημα μπορεί να μοντελοποιηθεί μαθηματικά στον τομέα S ή Z. Τα συστήματα μπορεί να είναι στην ένατη τάξη, αλλά για κάποιον που ξεκινά με τον έλεγχο, ένα σύστημα πρώτης τάξης θα πρέπει πιθανώς να υποτεθεί, καθώς αυτό είναι πολύ πιο εύκολο να υπολογιστεί. Είναι μια πληθώρα πληροφοριών σχετικά με το σύστημα μοντελοποίησης που μπορείτε να βρείτε στο διαδίκτυο. Ανάλογα με το χρόνο δειγματοληψίας του αισθητήρα, το μοντέλο του συστήματος είναι είτε διακριτό είτε συνεχές. Αυτό έχει δραστική επίδραση στον ελεγκτή, επομένως συνιστάται η έρευνα και στα δύο.

δ- Πρόκειται για διαταραχή που προστίθεται στο σύστημα. Η διαταραχή είναι εξωτερικές δυνάμεις τις οποίες το μοντέλο του συστήματος δεν λαμβάνει υπόψη. Ένα εύκολο παράδειγμα για αυτό θα ήταν ένα drone στο οποίο θα θέλατε να αιωρηθείτε στα 5 μέτρα, μια ριπή ανέμου έρχεται και ρίχνει το drone 1 μέτρο, ο ελεγκτής θα επανατοποθετήσει το drone μετά την αναστάτωση. Αυτό είναι γνωστό ως διαταραχή καθώς ο άνεμος δεν μπορεί να επαναληφθεί, οπότε δεν μπορεί να μοντελοποιηθεί.

Για να συντονίσετε το χειριστήριο υπάρχουν πάρα πολλοί κανόνες για να κατονομάσετε, αλλά μερικοί καλοί από τους οποίους ξεκίνησα είναι οι Cohen Coon και Zieger Nichols.

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

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

Βήμα 2: Γράψιμο κωδικού PID

Γράφοντας κωδικό PID
Γράφοντας κωδικό PID

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

  • Συνεχής λειτουργία - ο ελεγκτής είναι κληρονομικά διακριτός, οπότε ο ελεγκτής έπρεπε να ρυθμιστεί για να υπολογίζει μόνο τους τρεις όρους όταν ήταν διαθέσιμη μια νέα είσοδος. Η εργασία για αυτήν την προσομοίωση ήταν να ελέγξουμε αν η εισαγωγή είχε αλλάξει από την τελευταία φορά. Αυτό λειτουργεί μόνο για να προσομοιώσει τον κώδικα που λειτουργεί σωστά.
  • Ο χρόνος δειγματοληψίας δεν είχε καμία επίδραση στον ακέραιο και τον παράγωγο όρο. διάστημα.
  • Το σφάλμα θα μπορούσε να είναι μόνο θετικό - κατά τον υπολογισμό του σφάλματος υπήρχε επίσης ένα πρόβλημα καθώς το σφάλμα δεν θα μπορούσε ποτέ να έχει αρνητικό νόημα όταν το σήμα ανάδρασης είχε ξεπεράσει την τιμή αναφοράς που ο ελεγκτής θα συνέχιζε να αυξάνει την έξοδο όταν θα έπρεπε να μειώνεται.
  • Οι τιμές κέρδους για τους 3 όρους ήταν ακέραιοι - στην εμπειρία μου πάντα έβρισκα ότι οι τιμές για τους 3 όρους του ελεγκτή να είναι πάντα αριθμοί κυμαινόμενων σημείων λόγω του ότι το Basys 3 δεν έχει αριθμό κυμαινόμενου σημείου, στις τιμές έπρεπε να δοθεί αριθμητική τιμή και παρονομαστή αξία που θα χρησίμευε ως έργο για να ξεπεράσει αυτό το πρόβλημα.

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

Βήμα 3: Πώς να τροποποιήσετε το σύστημά σας

Πρώτον, δεν είναι όλα τα συστήματα ίδια, πρέπει να αναλύσουμε τις εισόδους και τις εξόδους του συστήματος. Στην περίπτωσή μου, η έξοδος του εξοπλισμού μου που μου έδωσε μια τιμή για τη θέση ήταν ένα αναλογικό σήμα και η είσοδος από το σύστημα ήταν ένα σήμα PWM. Αυτό σημαίνει ότι χρειαζόταν μια μετατροπή ADC. Ευτυχώς το Basys 3 διαθέτει ενσωματωμένο ADC, οπότε αυτό δεν ήταν πρόβλημα, η έξοδος του αισθητήρα IR έπρεπε να μειωθεί σε 0V-1V, καθώς αυτό είναι το μέγιστο εύρος του ενσωματωμένου ADC. Αυτό έγινε χρησιμοποιώντας ένα κύκλωμα διαίρεσης τάσης το οποίο κατασκευάστηκε από αντιστάσεις 1k που δημιουργήθηκαν ως αντίσταση 3k σε σειρά με αντίσταση 1k. Το αναλογικό σήμα ήταν τώρα εντός εμβέλειας του ADC. Η είσοδος PWM στον ανεμιστήρα μπορεί να οδηγηθεί απευθείας από την έξοδο μιας θύρας PMOD στο Basys 3.

Βήμα 4: Αξιοποίηση της εισόδου/εξόδου στο Basys 3

Υπάρχει ένας αριθμός I/O στο Basys 3 που επέτρεψε ευκολότερη εντοπισμό σφαλμάτων κατά την εκτέλεση του κώδικα. το I/O ρυθμίστηκε ως εξής.

  • Επίδειξη επτά τμημάτων - Χρησιμοποιήθηκε για να δείξει την τιμή αναφοράς και τιμής στο ADC σε βολτ. Τα δύο πρώτα ψηφία της οθόνης των επτά τμημάτων δείχνουν τα δύο ψηφία μετά το δεκαδικό ψηφίο της τιμής ADC καθώς η τιμή είναι μεταξύ 0-1V. Τα ψηφία τρία και τέσσερα στην οθόνη των επτά τμημάτων δείχνουν την τιμή αναφοράς σε βολτ, καθώς επίσης και τα δύο πρώτα ψηφία μετά το δεκαδικό ψηφίο, καθώς το εύρος είναι επίσης μεταξύ 0-1V.
  • 16 LED - Οι λυχνίες LED χρησιμοποιήθηκαν για να δείξουν την τιμή της εξόδου για να διασφαλιστεί ότι η έξοδος κορεσμού και η έξοδος αλλάζει σωστά.

Βήμα 5: Θόρυβος στην έξοδο αισθητήρα IR

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

Βήμα 6: Γενική διάταξη κώδικα

Συνολική διάταξη κώδικα
Συνολική διάταξη κώδικα

Υπάρχει ένα κομμάτι κώδικα για το οποίο δεν έχει συζητηθεί ακόμα. Αυτός ο κωδικός είναι ένας διαχωριστής ρολογιού που ονομάζεται σκανδάλη. αυτό το κομμάτι κώδικα ενεργοποιεί το δείγμα του κωδικού ADC. ο κωδικός ADC χρειάζεται έως 2us για να ολοκληρωθεί, οπότε ο μέσος όρος είναι η τρέχουσα είσοδος και η προηγούμενη είσοδος. Μετά από αυτό το μέσο όρο, ο ελεγκτής υπολογίζει τους όρους P, I και D. Η γενική διάταξη του κώδικα και η διασύνδεση εμφανίζονται στο αυτοσχέδιο διάγραμμα σύνδεσης.

Βήμα 7: Δοκιμή

Δοκιμές
Δοκιμές

Ο κώδικας αναπτύχθηκε στο Basys 3 και καταγράφηκε η ακόλουθη απάντηση. η αναφορά άλλαξε μεταξύ 2 τιμών. που συμβαίνει στον συνημμένο κωδικό ολοκληρωμένου έργου. Το συνημμένο βίντεο δείχνει αυτήν την απάντηση σε πραγματικό χρόνο. Οι ταλαντώσεις διασπώνται γρηγορότερα στο πάνω μέρος του σωλήνα καθώς ο ελεγκτής σχεδιάστηκε για αυτήν την περιοχή, αλλά ο ελεγκτής δεν λειτουργεί τόσο κάτω στον σωλήνα καθώς το σύστημα είναι μη γραμμικό.

Βήμα 8: Τροποποιήσεις για τη βελτίωση του έργου

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

  • Εφαρμόστε ψηφιακό φίλτρο για πλήρη μείωση του θορύβου
  • ρυθμίστε τον κωδικό ADC, τον μέσο κώδικα και τον κωδικό ενσωμάτωσης για να ενεργοποιήσετε διαδοχικά.
  • χρησιμοποιήστε έναν διαφορετικό αισθητήρα για ανατροφοδότηση καθώς η μη γραμμική απόκριση αυτού του αισθητήρα προκάλεσε μεγάλη ποικιλία προβλημάτων με αυτό το έργο, αλλά αυτό είναι περισσότερο από την πλευρά ελέγχου και όχι από την πλευρά κωδικοποίησης.

Βήμα 9: Επιπλέον εργασία

Κατά τη διάρκεια του καλοκαιριού έγραψα κώδικα για έναν ελεγκτή καταρράκτη και εφάρμοσα τις τροποποιήσεις που πρότεινα για τον ελεγκτή PID ενός βρόχου.

Τροποποιήσεις στον κανονικό ελεγκτή PID

· Το πρότυπο φίλτρου FIR που εφαρμόστηκε πρέπει να αλλάξουν οι συντελεστές για να επιτευχθεί η επιθυμητή συχνότητα διακοπής. Η τρέχουσα υλοποίηση είναι ένα φίλτρο έλατου 5 βρύσεων.

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

· Ο κύριος βρόχος που οδηγεί το πρόγραμμα έχει επίσης μειωθεί καθώς αυτός για τον βρόχο πήρε 7 κύκλους προηγουμένως αυτό επιβράδυνε τη μέγιστη ταχύτητα λειτουργίας του ελεγκτή, αλλά μειώνοντας τις καταστάσεις βρόχου t 4 αυτό σημαίνει ότι μπορεί να λειτουργήσει το κύριο μπλοκ κώδικα μέσα σε 4 κύκλους ρολογιού.

Δοκιμές

Αυτός ο ελεγκτής δοκιμάστηκε και εκτελέστηκε όπως έπρεπε, δεν έβγαλα φωτογραφίες από αυτήν την απόδειξη, καθώς αυτό το μέρος του έργου ήταν μόνο για να κρατήσει το μυαλό ενεργό. Ο κωδικός για τη δοκιμή καθώς και ο πάγκος δοκιμών θα είναι διαθέσιμος εδώ, ώστε να μπορείτε να δοκιμάσετε το πρόγραμμα πριν από την εφαρμογή.

Γιατί να χρησιμοποιήσετε έναν καταρράκτη ελεγκτή

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

Πώς λειτουργεί ο ελεγκτής καταρράκτη;

Ο εξωτερικός βρόχος του ελεγκτή θα τροφοδοτήσει μια τιμή για το χρονικό διάστημα μεταξύ των ποντίκων στον ελεγκτή εσωτερικού βρόχου. Αυτός ο ελεγκτής θα αυξήσει ή θα μειώσει τον κύκλο λειτουργίας για να επιτύχει τον επιθυμητό χρόνο μεταξύ των παλμών.

Εφαρμογή τροποποιήσεων στην εξέδρα

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

Δοκιμές

Δεν μπόρεσα να δοκιμάσω τον ελεγκτή καθώς ήταν δύσκολο να προσομοιώσω δύο πηγές εισόδου. Το μόνο πρόβλημα που μπορώ να δω με τον ελεγκτή καταρράκτη είναι ότι καθώς ο εξωτερικός βρόχος προσπαθεί να αυξήσει το σημείο ρύθμισης που παρέχεται στον εσωτερικό βρόχο ότι ένα μεγαλύτερο σημείο ρύθμισης είναι στην πραγματικότητα ένα χαμηλότερο RPS για τον ανεμιστήρα, αλλά αυτό μπορεί να διορθωθεί εύκολα. πάρτε το σημείο ρύθμισης από τη μέγιστη τιμή του σήματος σημείου ρύθμισης (4095 - setpoint - tacho_result).

Βήμα 10: Συμπέρασμα

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

Συνιστάται: