- Τι είναι το Servo Motor;
- Διασύνδεση Servo Motors με μικροελεγκτές:
- Προγραμματισμός σερβοκινητήρα με μικροελεγκτή PICF877A PIC:
- Διάγραμμα κυκλώματος:
- Ρύθμιση προσομοίωσης και υλικού:
Αυτό είναι το 11ο σεμινάριό μας για την εκμάθηση μικροελεγκτών PIC χρησιμοποιώντας MPLAB και XC8. Σε αυτό το σεμινάριο θα μάθουμε πώς να ελέγχουμε το Servo Motor με τον PIC Microcontroller. Εάν έχετε ήδη δουλέψει με Servo motors μπορείτε να παραλείψετε το πρώτο μισό αυτού του σεμιναρίου, αλλά εάν είστε νέοι στο servo motor τότε συνεχίστε να διαβάζετε.
Μέχρι τώρα, έχουμε καλύψει πολλά βασικά σεμινάρια όπως LED που αναβοσβήνει με PIC, Timers in PIC, interfacing LCD, interfacing 7-segment, ADC using PIC κ.λπ. Εάν είστε απόλυτος αρχάριος, τότε επισκεφθείτε την πλήρη λίστα των PIC tutorials εδώ και αρχίστε να μαθαίνετε.
Στο προηγούμενο σεμινάριό μας μάθαμε πώς να δημιουργούμε σήματα PWM χρησιμοποιώντας PIC Microcontroller, τα σήματα δημιουργήθηκαν με βάση την τιμή που διαβάζεται από το ποτενσιόμετρο. Αν έχετε καταλάβει όλα τα προγράμματα τότε, Συγχαρητήρια έχετε ήδη κωδικοποιήσει και έναν Servo motor. ΝΑΙ, οι σερβοκινητήρες ανταποκρίνονται στα σήματα PWM (τα οποία δημιουργούμε χρησιμοποιώντας χρονοδιακόπτες εδώ) θα μάθουμε γιατί και πώς σε αυτό το σεμινάριο. Θα προσομοιώσουμε και θα δημιουργήσουμε τη ρύθμιση υλικού για αυτό το έργο και μπορείτε να βρείτε το λεπτομερές βίντεο στο τέλος αυτού του Οδηγού.
Τι είναι το Servo Motor;
Το Servo Motor είναι ένας τύπος ενεργοποιητή (κυρίως κυκλικός) που επιτρέπει τον έλεγχο της γωνίας. Υπάρχουν πολλοί τύποι σερβο κινητήρων, αλλά σε αυτό το σεμινάριο ας επικεντρωθούμε στους χόμπι σερβο κινητήρες που φαίνονται παρακάτω.
Τα σέρβο χόμπι είναι δημοφιλή επειδή είναι η φθηνή μέθοδος ελέγχου κίνησης. Παρέχουν μια λύση εκτός ραφιού για τις περισσότερες από τις ανάγκες του R / C και του ρομποτικού χόμπι. Εξαλείφουν επίσης την ανάγκη προσαρμογής ενός συστήματος ελέγχου για κάθε εφαρμογή.
Οι περισσότεροι σερβο κινητήρες χόμπι έχουν περιστροφικό άγγελο 0- 180 °, αλλά μπορείτε επίσης να αποκτήσετε σέρβο κινητήρα 360 ° αν σας ενδιαφέρει. Αυτό το σεμινάριο χρησιμοποιεί έναν σερβοκινητήρα 0- 180 °. Υπάρχουν δύο τύποι σερβο κινητήρων που βασίζονται στο γρανάζι, ο ένας είναι ο πλαστικός κινητήρας Gear Servo και ο άλλος είναι ο μεταλλικός σέρβο κινητήρας. Το μεταλλικό γρανάζι χρησιμοποιείται σε μέρη όπου ο κινητήρας υπόκειται σε μεγαλύτερη φθορά, αλλά διατίθεται μόνο σε υψηλή τιμή.
Οι σερβοκινητήρες βαθμολογούνται σε kg / cm (χιλιόγραμμο ανά εκατοστόμετρο) οι περισσότεροι σερβο κινητήρες βαθμολογούνται σε 3kg / cm ή 6kg / cm ή 12kg / cm. Αυτό το kg / cm σας λέει πόσο βάρος μπορεί να ανυψώσει ο σερβοκινητήρας σας σε μια συγκεκριμένη απόσταση. Για παράδειγμα: Ένας σερβοκινητήρας 6kg / cm θα πρέπει να μπορεί να ανυψώσει 6 κιλά αν το φορτίο είναι αναρτημένο 1cm μακριά από τον άξονα του κινητήρα, τόσο μεγαλύτερη είναι η απόσταση τόσο μικρότερη είναι η ικανότητα μεταφοράς βάρους. Μάθετε εδώ τα βασικά του σερβο κινητήρα.
Διασύνδεση Servo Motors με μικροελεγκτές:
Η διασύνδεση των κινητήρων χόμπι Servo με MCU είναι πολύ εύκολη. Σέρβο έχουν τρία καλώδια που βγαίνουν από αυτά. Από τα οποία δύο θα χρησιμοποιηθούν για προμήθεια (θετικό και αρνητικό) και ένα θα χρησιμοποιηθεί για το σήμα που πρόκειται να σταλεί από το MCU. Σε αυτό το σεμινάριο θα χρησιμοποιήσουμε ένα MG995 Metal Gear Servo Motor που χρησιμοποιείται πιο συχνά για αυτοκίνητα RC ανθρωποειδείς bots κλπ. Η εικόνα του MG995 φαίνεται παρακάτω:
Η χρωματική κωδικοποίηση του σερβοκινητήρα σας ενδέχεται να διαφέρει, επομένως ελέγξτε για το αντίστοιχο δελτίο δεδομένων σας.
Όλοι οι σερβοκινητήρες λειτουργούν απευθείας με τις ράγες τροφοδοσίας + 5V σας, αλλά πρέπει να είμαστε προσεκτικοί σχετικά με την ποσότητα ρεύματος που θα καταναλώσει ο κινητήρας, εάν σκοπεύετε να χρησιμοποιήσετε περισσότερους από δύο σέρβο κινητήρες θα πρέπει να σχεδιαστεί μια κατάλληλη σερβο ασπίδα. Σε αυτό το σεμινάριο θα χρησιμοποιήσουμε απλά έναν σερβοκινητήρα για να δείξουμε πώς να προγραμματίσουμε το PIC MCU για τον έλεγχο του κινητήρα. Ελέγξτε τους παρακάτω συνδέσμους για διασύνδεση του Servo Motor με άλλους μικροελεγκτές:
- Σερβο κινητήρας διασύνδεση με 8051 μικροελεγκτή
- Σερβο έλεγχος κινητήρα με χρήση Arduino
- Tutorial Motor Raspberry Pi Servo
- Servo Motor με μικροελεγκτή AVR
Προγραμματισμός σερβοκινητήρα με μικροελεγκτή PICF877A PIC:
Για να μπορέσουμε να ξεκινήσουμε τον προγραμματισμό για τον κινητήρα Servo πρέπει να γνωρίζουμε τι είδους σήμα πρέπει να σταλεί για τον έλεγχο του κινητήρα Servo. Πρέπει να προγραμματίσουμε το MCU για να στείλουμε σήματα PWM στο καλώδιο σήματος του κινητήρα Servo. Υπάρχει ένα κύκλωμα ελέγχου στο εσωτερικό του σερβοκινητήρα που διαβάζει τον κύκλο λειτουργίας του σήματος PWM και τοποθετεί τον άξονα σερβοκινητήρων στην αντίστοιχη θέση όπως φαίνεται στην παρακάτω εικόνα
Κάθε σερβο κινητήρας λειτουργεί σε διαφορετικές συχνότητες PWM (η πιο συνηθισμένη συχνότητα είναι 50HZ που χρησιμοποιείται σε αυτό το σεμινάριο), οπότε λάβετε το δελτίο δεδομένων του κινητήρα σας για να ελέγξετε την περίοδο PWM που λειτουργεί ο σερβο κινητήρας σας.
Οι λεπτομέρειες σχετικά με το σήμα PWM για το Tower pro MG995 παρουσιάζονται παρακάτω.
Από αυτό μπορούμε να συμπεράνουμε ότι ο κινητήρας μας λειτουργεί με μια περίοδο PWM 20ms (50Hz). Έτσι, η συχνότητα του σήματος PWM πρέπει να ρυθμιστεί στα 50Hz. Η συχνότητα του PWM που είχαμε θέσει στο προηγούμενο σεμινάριό μας ήταν 5 KHz, χρησιμοποιώντας το ίδιο δεν θα μας βοηθήσει εδώ.
Όμως, έχουμε ένα πρόβλημα εδώ. Το PIC16F877A δεν μπορεί να δημιουργήσει σήματα PWM χαμηλής συχνότητας χρησιμοποιώντας τη μονάδα CCP. Σύμφωνα με το φύλλο δεδομένων, η χαμηλότερη δυνατή τιμή που μπορεί να ρυθμιστεί για τη συχνότητα PWM είναι 1,2 KHz. Επομένως, πρέπει να αφήσουμε την ιδέα της χρήσης της μονάδας CCP και να βρούμε έναν τρόπο να φτιάξουμε τα δικά μας σήματα PWM.
Ως εκ τούτου, σε αυτό το σεμινάριο θα χρησιμοποιήσουμε τη μονάδα χρονοδιακόπτη για να δημιουργήσουμε τα σήματα PWM με συχνότητα 50Hz και να αλλάξουμε τον κύκλο λειτουργίας τους για τον έλεγχο του αγγέλου του σερβο κινητήρα. Εάν είστε νέοι στους χρονοδιακόπτες ή στο ADC με PIC, παρακαλώ επιστρέψτε σε αυτό το σεμινάριο, γιατί θα παραλείψω τα περισσότερα πράγματα αφού τα έχουμε ήδη καλύψει εκεί.
Αρχικοποιούμε τη μονάδα χρονοδιακόπτη μας με ένα prescaler 32 και το κάνουμε υπερχείλιση για κάθε 1us. Σύμφωνα με το δελτίο δεδομένων μας, το PWM θα πρέπει να έχει μόνο 20ms. Επομένως, ο χρόνος μαζί και ο χρόνος εκτός λειτουργίας πρέπει να είναι ακριβώς ίσοι με 20ms.
OPTION_REG = 0b00000100; // Timer0 με εξωτερικό freq και 32 ως prescaler TMR0 = 251; // Φορτώστε την τιμή χρόνου για καθυστέρηση 1us Η τιμή μπορεί να είναι μεταξύ 0-256 μόνο TMR0IE = 1; // Ενεργοποίηση bit διακοπής χρονοδιακόπτη στο μητρώο PIE1 GIE = 1; // Ενεργοποίηση καθολικής διακοπής PEIE = 1; // Ενεργοποιήστε την περιφερειακή διακοπή
Έτσι, μέσα στη λειτουργία ρουτίνας διακοπής, ενεργοποιούμε τον πείρο RB0 για τον καθορισμένο χρόνο και τον απενεργοποιούμε για τον χρόνο αναπαραγωγής (20ms - on_time). Η τιμή της ώρας μπορεί να καθοριστεί χρησιμοποιώντας τη μονάδα Ποτενσιόμετρο και ADC. Η διακοπή φαίνεται παρακάτω.
oid interrupt timer_isr () {if (TMR0IF == 1) // Ο χρονοδιακόπτης έχει υπερχειλίσει {TMR0 = 252; / * Φορτώστε την τιμή χρονοδιακόπτη, (Σημείωση: Η τιμή Timervalue είναι 101 εγκατεστημένη από 100 καθώς το TImer0 χρειάζεται δύο οδηγίες Κύκλοι για να αρχίσει να αυξάνει το TMR0 * / TMR0IF = 0; // Εκκαθάριση πλήθους σημαίας διακοπής χρονοδιακόπτη ++;} εάν (count> = on_time) { RB0 = 1; // συμπληρώστε την τιμή για το LED που αναβοσβήνει} εάν (count> = (on_time + (200-on_time))) {RB0 = 0; count = 0;}}
Μέσα μας, ενώ βρόχου που μόλις διαβάσει την τιμή του ποτενσιόμετρου χρησιμοποιώντας τη μονάδα ADC και να ενημερώσετε το για την ώρα της PWM χρησιμοποιώντας την τιμή ανάγνωσης.
ενώ (1) {pot_value = (ADC_Read (4)) * 0,039; on_time = (170-pot_value); }
Με αυτόν τον τρόπο έχουμε δημιουργήσει ένα σήμα PWM ποιος είναι η Περίοδος είναι 20ms και έχει έναν μεταβλητό κύκλο λειτουργίας που μπορεί να ρυθμιστεί χρησιμοποιώντας ένα Ποτενσιόμετρο. Ο πλήρης κώδικας έχει δοθεί παρακάτω στην ενότητα κώδικα.
Τώρα, ας επαληθεύσουμε την έξοδο χρησιμοποιώντας προσομοίωση πρωτεϊνών και προχωρήσουμε στο υλικό μας
Διάγραμμα κυκλώματος:
Εάν έχετε ήδη συναντήσει το σεμινάριο PWM, τότε τα σχήματα αυτού του σεμιναρίου θα είναι ίδια εκτός από τα οποία θα προσθέσουμε έναν σερβο κινητήρα στη θέση του φωτός LED.
Ρύθμιση προσομοίωσης και υλικού:
Με τη βοήθεια της προσομοίωσης Proteus μπορούμε να επαληθεύσουμε το σήμα PWM χρησιμοποιώντας παλμογράφο και επίσης να ελέγξουμε τον περιστρεφόμενο άγγελο του κινητήρα Servo. Λίγα στιγμιότυπα της προσομοίωσης παρουσιάζονται παρακάτω, όπου ο περιστρεφόμενος άγγελος του σερβο κινητήρα και ο κύκλος λειτουργίας PWM μπορεί να παρατηρηθεί ότι αλλάζουν με βάση το ποτενσιόμετρο. Περαιτέρω ελέγξτε το πλήρες βίντεο, περιστροφής σε διαφορετικά PWM, στο τέλος
Όπως μπορούμε να δούμε, ο σερβο περιστροφικός άγγελος αλλάζει με βάση την τιμή του ποτενσιόμετρου. Τώρα ας προχωρήσουμε στη ρύθμιση του υλικού μας.
Στην εγκατάσταση υλικού, μόλις αφαιρέσαμε την πλακέτα LED και προσθέσαμε τον κινητήρα Servo όπως φαίνεται στα παραπάνω σχήματα.
Το υλικό φαίνεται στην παρακάτω εικόνα:
Το παρακάτω βίντεο δείχνει πώς αντιδρά ο σερβοκινητήρας στις διάφορες θέσεις του ποτενσιόμετρου.
Αυτό είναι!! Έχουμε συνδέσει έναν σερβο κινητήρα με έναν μικροελεγκτή PIC, τώρα μπορείτε να χρησιμοποιήσετε τη δική σας δημιουργικότητα και να μάθετε εφαρμογές για αυτό. Υπάρχουν πολλά έργα εκεί έξω που χρησιμοποιούν ένα σερβοκινητήρα.