Ελεγκτής PID
Ο Ελεγκτής PID είναι ένας αναλογικός-ολοκληρωτικός-παράγωγος (Proportional–Integral–Derivative ) ελεγκτής ή αλλιώς ελεγκτής τριών όρων. Είναι ένας μηχανισμός βρόχου ελέγχου που χρησιμοποιεί ανάδραση και χρησιμοποιείται ευρέως σε βιομηχανικά συστήματα ελέγχου και σε μια ποικιλία άλλων εφαρμογών που απαιτούν συνεχώς διαμορφωμένο έλεγχο. Ένας ελεγκτής PID υπολογίζει συνεχώς μια τιμή σφάλματος e(t) ως τη διαφορά μεταξύ ενός επιθυμητού σημείου ρύθμισης (SetPoint -SP) και της τρέχουσας τιμής μιας μετρούμενης μεταβλητής διεργασίας (Process Variable PV) και εφαρμόζει μια διόρθωση που βασίζεται σε αναλογικό, ολοκληρωτικό και παράγωγο όρο (που συμβολίζονται με P, I και D αντίστοιχα), εξ ου και το όνομα.
Πρακτικά, εφαρμόζει αυτόματα μια ακριβή και ανταποκρινόμενη διόρθωση σε μια λειτουργία ελέγχου. Ένα καθημερινό παράδειγμα είναι το cruise control σε ένα αυτοκίνητο, όπου η ανάβαση σε ένα λόφο θα μείωνε την ταχύτητα εάν υπήρχε μόνο σταθερή ισχύς κινητήρα. Ο αλγόριθμος PID του ελεγκτή επαναφέρει τη μετρούμενη ταχύτητα στην επιθυμητή ταχύτητα με ελάχιστη καθυστέρηση και υπέρβαση αυξάνοντας την ισχύ εξόδου του κινητήρα με ελεγχόμενο τρόπο.
Λειτουργία του ελεγκτή
Το χαρακτηριστικό γνώρισμα του ελεγκτή PID είναι η δυνατότητα χρήσης των τριών όρων ελέγχου της αναλογικής, της ολοκληρωτικής και της παράγωγης επιρροής στην έξοδο του ελεγκτή για την εφαρμογή ακριβούς και βέλτιστου ελέγχου. Το μπλοκ διάγραμμα του ελεγκτή που φαίνεται πιο κάτω, δείχνει τις αρχές του τρόπου με τον οποίο δημιουργούνται και εφαρμόζονται αυτοί οι όροι. Εμφανίζει έναν ελεγκτή PID, ο οποίος υπολογίζει συνεχώς μια τιμή σφάλματος e(t) ως τη διαφορά μεταξύ ενός επιθυμητού σημείου ρύθμισης SP=r(t) και μια μετρημένη μεταβλητή διαδικασίας PV=y(t) e(t)=r(t)-y(t) και εφαρμόζει μια διόρθωση που βασίζεται σε αναλογικό, ολοκληρωτικό και παράγωγο όρο. Ο ελεγκτής προσπαθεί να ελαχιστοποιήσει το σφάλμα με την πάροδο του χρόνου προσαρμόζοντας μια μεταβλητή ελέγχου u(t), όπως π.χ. το άνοιγμα μιας βαλβίδας ελέγχου, σε μια νέα τιμή που καθορίζεται από ένα σταθμισμένο άθροισμα των όρων ελέγχου .
Σε αυτό το μοντέλο:
Ο όρος P είναι ανάλογος με την τρέχουσα τιμή του σφάλματος SP−PV = e(t).

Για παράδειγμα, εάν το σφάλμα είναι μεγάλο και θετικό, η έξοδος ελέγχου θα είναι αναλογικά μεγάλη και θετική, λαμβάνοντας υπόψη τον παράγοντα απολαβής Kp. Η χρήση μόνο του αναλογικού ελέγχου θα οδηγήσει σε σφάλμα μεταξύ του σημείου ρύθμισης και της πραγματικής τιμής διεργασίας, επειδή απαιτεί σφάλμα για τη δημιουργία της αναλογικής απόκρισης. Εάν δεν υπάρχει σφάλμα, δεν υπάρχει διορθωτική απάντηση.
Ο όρος I λαμβάνει υπόψη τις προηγούμενες τιμές του σφάλματος SP−PV

και τις ενσωματώνει με την πάροδο του χρόνου για να παράγει τον όρο I. Για παράδειγμα, εάν υπάρχει ένα υπολειπόμενο σφάλμα SP−PV μετά την εφαρμογή του αναλογικού ελέγχου, ο ολοκληρωτικός όρος επιδιώκει να εξαλείψει το υπολειπόμενο σφάλμα προσθέτοντας ένα αποτέλεσμα ελέγχου, με βαρύτητα Ki , λόγω της ιστορικής αθροιστικής τιμής του σφάλματος. Όταν εξαλειφθεί το σφάλμα, ο ολοκληρωτικός όρος θα πάψει να αυξάνεται. Αυτό θα έχει ως αποτέλεσμα τη μείωση του αναλογικού αποτελέσματος καθώς μειώνεται το σφάλμα, αλλά αυτό αντισταθμίζεται από το αυξανόμενο ολοκληρωτικό αποτέλεσμα.
Ο όρος D είναι η καλύτερη εκτίμηση της μελλοντικής τάσης του σφάλματος SP−PV,

με βάση τον τρέχοντα ρυθμό μεταβολής του. Μερικές φορές αποκαλείται «προληπτικός έλεγχος», καθώς επιδιώκει ουσιαστικά να μειώσει την επίδραση του σφάλματος SP−PV ασκώντας μια επιρροή ελέγχου που δημιουργείται από τον ρυθμό μεταβολής του σφάλματος. Όσο πιο γρήγορη είναι η αλλαγή, τόσο μεγαλύτερο είναι το αποτέλεσμα ελέγχου ή απόσβεσης. Σημαντικός είναι ο ρόλος της σταθεράς Kd στον υπολογισμό της διόρθωσης D.
Εφαρμογή ελεγκτή PID στον Κώδικα
Για να εφαρμόσετε έναν ελεγκτή PID σε κώδικα ή σε ένα πρόγραμμα Arduino, πρέπει να είναι γνωστές πέντε παράμετροι:
- αναλογική σταθερά Kp
- ολοκληρωτική σταθερά Ki
- και παράγωγη σταθερά Kd
- τιμή εισόδου (PV)
- και τιμή σημείου ρύθμισης (SP)
Ο υπολογισμός PID πρέπει να βρίσκεται μέσα σε μια συνάρτηση βρόχου. Το πρώτο μέρος της συνάρτησης θα πρέπει να είναι ο καθορισμός του χρόνου που έχει παρέλθει.
Στο Arduino, η τρέχουσα ώρα μπορεί να προσδιοριστεί με τη συνάρτηση millis() και ο χρόνος που έχει παρέλθει είναι απλώς:
currentTime = millis();
elapsedTime = currentTime - previousTime;
Στη συνέχεια, πρέπει να προσδιοριστεί το σφάλμα:
error = setPoint – input;
Προγραμματίζοντας σε Arduino οι υπολογισμοί απλοποιούνται πάρα πολύ με τη χρήση της βιβλιοθήκης PID_v1. Στο παράδειγμα που σας παραθέτω έκανα χρήση της βιβλιοθήκης PID_v1.
Σε κάθε περίπτωση είναι αναγκαίος ο προσδιορισμός για τις τρεις σταθερές P, I, D. Αυτός ο προσδιορισμός γίνεται συνήθως πειραματικά και είναι μια επίπονη διαδικασία.
Κατασκευή
Η κατασκευή είναι συνέχεια της προηγούμενης που έκανα με τους δύο σερβοκινητήρες. Αφού σε αυτή έχουμε προσθέσει τον αισθητήρα MPU-9250. Βλέπε σχετικά εδώ.
Το σημαντικότερο για την κατασκευή είναι το λογισμικό που θα γράψουμε έτσι ώστε η κίνηση στους σερβοκινητήρες να ελέγχεται πλέον από τον αισθητήρα και να γίνεται ομαλά, χωρίς ταλαντώσεις και να φέρνει το σύστημα στην επιθυμητή (οριζόντια) θέση.
Το πρόγραμμα της κατασκευής για Arduino UNO θα το κατεβάσετε από εδώ.