- Διάγραμμα κυκλώματος
- Δημιουργία σημάτων PWM στον ακροδέκτη GPIO για Servo Motor Control
- Προγραμματισμός PIC16F8771A για ρομποτικό βραχίονα
- Προσομοίωση PIC Robotic Arm Code
- Σχεδιασμός PCB χρησιμοποιώντας το EasyEDA
- Υπολογισμός και παραγγελία δειγμάτων στο διαδίκτυο
- Εργασία του PIC Robotic Arm
Από τη γραμμή συναρμολόγησης των αυτοκινητοβιομηχανιών έως τα ρομπότ τηλεχειρουργικής στο διάστημα, τα Robotic Arms βρίσκονται παντού. Οι μηχανισμοί αυτών των ρομπότ είναι παρόμοιοι με έναν άνθρωπο που μπορεί να προγραμματιστεί για παρόμοια λειτουργία και αυξημένες δυνατότητες. Μπορούν να χρησιμοποιηθούν για να εκτελούν επαναλαμβανόμενες ενέργειες γρηγορότερα και ακριβέστερα από τους ανθρώπους ή μπορούν να χρησιμοποιηθούν σε σκληρά περιβάλλοντα χωρίς να διακινδυνεύσουν την ανθρώπινη ζωή. Έχουμε ήδη δημιουργήσει ένα Record and Play Robotic Arm χρησιμοποιώντας το Arduino, το οποίο θα μπορούσε να εκπαιδευτεί να κάνει μια συγκεκριμένη εργασία και να κάνει να επαναλαμβάνεται για πάντα.
Σε αυτό το σεμινάριο θα χρησιμοποιήσουμε τον βιομηχανικό τυποποιημένο μικροελεγκτή PIC16F877A 8-bit για τον έλεγχο του ίδιου ρομποτικού βραχίονα με ποτενσιόμετρα. Η πρόκληση με αυτό το έργο είναι ότι το PIC16F877A έχει μόνο δύο καρφίτσες με δυνατότητα PWN, αλλά πρέπει να ελέγξουμε περίπου 5 σερβοκινητήρες για το ρομπότ μας που απαιτεί 5 μεμονωμένους ακροδέκτες PWM. Πρέπει λοιπόν να χρησιμοποιήσουμε τους ακροδέκτες GPIO και να δημιουργήσουμε σήματα PWM στις ακίδες PIC GPIO χρησιμοποιώντας τις διακοπές του χρονοδιακόπτη. Τώρα, φυσικά, θα μπορούσαμε να αναβαθμίσουμε σε έναν καλύτερο μικροελεγκτή ή να χρησιμοποιήσουμε ένα απο-πολυπλέκτη IC για να κάνουμε τα πράγματα πολύ πιο εύκολα εδώ. Ωστόσο, αξίζει να δοκιμάσετε αυτό το έργο για τη μαθησιακή εμπειρία.
Η μηχανική δομή του ρομποτικού βραχίονα που χρησιμοποιώ σε αυτό το έργο ήταν πλήρως τρισδιάστατη για το προηγούμενο έργο μου. μπορείτε να βρείτε τα πλήρη αρχεία σχεδίασης και τη διαδικασία συναρμολόγησης εδώ. Εναλλακτικά, εάν δεν διαθέτετε εκτυπωτή 3D, μπορείτε επίσης να δημιουργήσετε έναν απλό Robotic Arm χρησιμοποιώντας χαρτόνια όπως φαίνεται στον σύνδεσμο. Υποθέτοντας ότι έχετε κατά κάποιο τρόπο κρατήσει το ρομποτικό σας χέρι, ας προχωρήσουμε στο έργο.
Διάγραμμα κυκλώματος
Το διάγραμμα πλήρους κυκλώματος για αυτό το ρομποτικό βραχίονα με βάση τον μικροελεγκτή PIC φαίνεται παρακάτω. Τα σχήματα σχεδιάστηκαν χρησιμοποιώντας το EasyEDA.
Το διάγραμμα κυκλώματος είναι αρκετά απλό. Το πλήρες έργο τροφοδοτείται από τον προσαρμογέα 12V. Αυτό το 12V στη συνέχεια μετατρέπεται σε + 5V χρησιμοποιώντας δύο ρυθμιστές τάσης 7805. Το ένα επισημαίνεται ως + 5V και το άλλο επισημαίνεται ως + 5V (2). Ο λόγος για την ύπαρξη δύο ρυθμιστών είναι ότι όταν το σερβο περιστρέφεται τραβάει πολύ ρεύμα που δημιουργεί πτώση τάσης. Αυτή η πτώση τάσης αναγκάζει το PIC να επανεκκινήσει τον εαυτό του, επομένως δεν μπορούμε να λειτουργήσουμε τόσο το PIC όσο και τους σερβοκινητήρες στην ίδια ράγα + 5V. Έτσι, αυτό με την ένδειξη +5V χρησιμοποιείται για την τροφοδοσία του PIC Microcontroller, LCD και Potentiometers και μια ξεχωριστή έξοδος ρυθμιστή που φέρει την ένδειξη + 5V (2) χρησιμοποιείται για την τροφοδοσία των σερβοκινητήρων.
Οι πέντε ακίδες εξόδου των ποτενσιόμετρων που παρέχουν μεταβλητή τάση από 0V έως 5V συνδέονται με τους αναλογικούς ακροδέκτες An0 έως AN4 του PIC. Δεδομένου ότι σκοπεύουμε να χρησιμοποιήσουμε χρονοδιακόπτες για την παραγωγή PWM, οι σερβοκινητήρες μπορούν να συνδεθούν με οποιονδήποτε ακροδέκτη GPIO. Έχω επιλέξει καρφίτσες από RD2 έως RD6 για τους σερβοκινητήρες, αλλά μπορεί να είναι οποιοδήποτε GPIO της επιλογής σας.
Δεδομένου ότι το πρόγραμμα περιλαμβάνει πολύ εντοπισμό σφαλμάτων, μια οθόνη LCD 16x2 συνδέεται επίσης με το portB του PIC. Αυτό θα εμφανίσει τον κύκλο λειτουργίας των σερβοκινητήρων που ελέγχονται. Εκτός από αυτό, έχω επεκτείνει επίσης συνδέσεις για όλους τους GPIO και αναλογικούς πείρους, σε περίπτωση που κάποιοι αισθητήρες πρέπει να διασυνδεθούν στο μέλλον. Τέλος, έχω συνδέσει επίσης τον πείρο προγραμματιστή H1 για να προγραμματίσω απευθείας το PIC με το pickit3 χρησιμοποιώντας την επιλογή προγραμματισμού ICSP.
Δημιουργία σημάτων PWM στον ακροδέκτη GPIO για Servo Motor Control
Μόλις το κύκλωμα είναι έτοιμο, πρέπει να καταλάβουμε πώς να παράγουμε σήματα PWN στον ακροδέκτη GPIO του PIC για τον έλεγχο του σερβοκινητήρα. Έχουμε ήδη κουραστεί κάτι παρόμοιο χρησιμοποιώντας τη μέθοδο διακοπής χρονοδιακόπτη και ήταν επιτυχημένα Εδώ πρόκειται απλώς να χτίσουμε πάνω από αυτό, οπότε αν είστε νέος εδώ, σας συνιστώ ανεπιφύλακτα να διαβάσετε αυτό το προηγούμενο σεμινάριο πριν προχωρήσετε περαιτέρω.
Όλοι οι σερβο κινητήρες χόμπι λειτουργούν με συχνότητα 50Hz. Αυτό σημαίνει ότι ένας πλήρης κύκλος παλμών για έναν σερβοκινητήρα θα είναι 1/50 (F = 1 / T) που είναι 20ms. Από αυτά τα 20ms το σήμα ελέγχου είναι μόνο από 0 έως 2ms ενώ το υπόλοιπο σήμα είναι πάντα απενεργοποιημένο. Το παρακάτω σχήμα δείχνει πώς ο χρόνος ON ποικίλει μόνο από 0 έως 2ms για να περιστρέψετε τον κινητήρα από 0 ° έως 180 μοίρες της συνολικής διάρκειας 20ms.
Έχοντας αυτό κατά νου, πρέπει να γράψουμε το πρόγραμμα με τέτοιο τρόπο ώστε το PIC να διαβάζει στο 0 έως το 1204 από το ποτενσιόμετρο και να το αντιστοιχίσει στο 0 έως το 100 που θα είναι ο κύκλος λειτουργίας του σερβο κινητήρα. Χρησιμοποιώντας αυτόν τον κύκλο λειτουργίας μπορούμε να υπολογίσουμε τον χρόνο ON του σερβο κινητήρα. Στη συνέχεια, μπορούμε να προετοιμάσουμε το χρονόμετρο διακοπής για υπερχείλιση σε κανονικό διάστημα έτσι ώστε να λειτουργεί παρόμοια με τη λειτουργία millis () στο Arduino. Με αυτό, μπορούμε να αλλάξουμε τον ακροδέκτη GPIO κατάστασης ώστε να είναι υψηλός για μια επιθυμητή διάρκεια και να τον απενεργοποιήσουμε μετά από 20ms (ένας πλήρης κύκλος) και στη συνέχεια να επαναλάβουμε την ίδια διαδικασία. Τώρα, που έχουμε κατανοήσει τη λογική ας μπείτε στο πρόγραμμα.
Προγραμματισμός PIC16F8771A για ρομποτικό βραχίονα
Όπως πάντα το πλήρες πρόγραμμα με ένα βίντεο μπορεί να βρεθεί στο τέλος αυτής της σελίδας, ο κώδικας μπορεί επίσης να ληφθεί από εδώ με όλα τα απαραίτητα αρχεία. Σε αυτήν την ενότητα θα συζητήσουμε τη λογική πίσω από το πρόγραμμα. Το πρόγραμμα χρησιμοποιεί το ADC module, Timer Module και LCD Module για τον έλεγχο του Robotic Arm. Εάν δεν γνωρίζετε πώς να χρησιμοποιήσετε τις δυνατότητες ADC ή τις λειτουργίες χρονοδιακόπτη ή να συνδέσετε μια οθόνη LCD με PIC, τότε μπορείτε να επιστρέψετε στους αντίστοιχους συνδέσμους για να τις μάθετε. Η παρακάτω εξήγηση δίνεται υπό την προϋπόθεση ότι ο αναγνώστης είναι εξοικειωμένος με αυτές τις έννοιες.
Διαμόρφωση χρονοδιακόπτη 0 θύρας
Η πιο σημαντική ενότητα στον κώδικα είναι η ρύθμιση του χρονοδιακόπτη 0 προς υπερχείλιση για κάθε συγκεκριμένη καθυστέρηση. Οι τύποι για τον υπολογισμό αυτής της καθυστέρησης μπορούν να δοθούν ως
Καθυστέρηση = ((256-REG_val) * (Prescal * 4)) / Fosc
Χρησιμοποιώντας τον καταχωρητή OPTION_REG και TMR0 έχουμε ρυθμίσει το Timer 0 να λειτουργεί με μια προκαθορισμένη τιμή 32 και το REG val είναι 248. Η κρυσταλλική συχνότητα (Fosc) που χρησιμοποιείται στο υλικό μας είναι 20Mhz. Με αυτές τις τιμές η καθυστέρηση μπορεί να υπολογιστεί ως
Καθυστέρηση = ((256-248) * (32 * 4)) / (20000000) = 0,0000512 δευτερόλεπτα (ή) = 0,05 msec
Τώρα έχουμε ρυθμίσει το χρονόμετρο να ξεχειλίζει σε κάθε 0,05 ms. Ο κώδικας για να κάνετε το ίδιο δίνεται παρακάτω
/ ***** Διαμόρφωση θύρας για χρονοδιακόπτη ****** / OPTION_REG = 0b00000100; // Timer0 με εξωτερικό freq και 32 ως prescalar // Επιτρέπει επίσης PULL UPs TMR0 = 248; // Φορτώστε την τιμή χρόνου για 0,0001s. delayValue μπορεί να είναι μεταξύ 0-256 μόνο TMR0IE = 1; // Ενεργοποίηση bit διακοπής χρονοδιακόπτη στο μητρώο PIE1 GIE = 1; // Ενεργοποίηση καθολικής διακοπής PEIE = 1; // Ενεργοποίηση της περιφερειακής διακοπής / *********** ______ *********** /
Από το συνολικό παράθυρο ελέγχου 0ms έως 2ms του σερβοκινητήρα μπορούμε να το ελέγξουμε με ανάλυση 0,05msec, η οποία μας επιτρέπει να έχουμε (2 / 0,05) 40 διαφορετικές θέσεις για τον κινητήρα μεταξύ 0 μοιρών και 180 μοιρών. Μπορείτε να μειώσετε περαιτέρω αυτήν την τιμή εάν το MCU σας μπορεί να το υποστηρίξει για να αποκτήσει περισσότερες θέσεις και ακριβή έλεγχο.
Ρουτίνα διακοπής υπηρεσίας (ISR)
Τώρα που έχουμε το χρονοδιακόπτη 0 να υπερβαίνει τη ροή για κάθε 0,05 ms, θα έχουμε το σήμα διακοπής TMR0IF για 0,05 ms. Έτσι μέσα στη συνάρτηση ISR μπορούμε να επαναφέρουμε αυτήν τη σημαία και να αυξήσουμε μια μεταβλητή που ονομάζεται count by one. Τώρα λοιπόν αυτή η μεταβλητή θα αυξάνεται κατά 1 για κάθε 0,05 ms.
void interrupt timer_isr () { if (TMR0IF == 1) // Η σημαία χρονοδιακόπτη ενεργοποιήθηκε λόγω υπερχείλισης χρονοδιακόπτη -> ρυθμίστηκε σε υπερχείλιση για κάθε 0,05 ms { TMR0 = 248; // Φορτώστε το χρονόμετρο Τιμή TMR0IF = 0; // Εκκαθάριση πλήθους σημαίας διακοπής χρονοδιακόπτη ++; // Μετρήστε τις αυξήσεις κατά 1 για κάθε 0,05 ms }
Υπολογισμός κύκλου εργασίας και εγκαίρως
Στη συνέχεια πρέπει να υπολογίσουμε τον κύκλο λειτουργίας και εγκαίρως και για τους πέντε σερβο κινητήρες. Έχουμε πέντε σερβοκινητήρες, καθένας από τους οποίους χρησιμοποιείται για τον έλεγχο μεμονωμένου τμήματος του βραχίονα. Πρέπει λοιπόν να διαβάσουμε την τιμή ADC και των πέντε και να υπολογίσουμε τον κύκλο λειτουργίας και την ώρα για κάθε ένα.
Η τιμή ADC θα κυμαίνεται από 0 έως 1024, η οποία μπορεί να μετατραπεί σε 0% έως 100% κύκλο λειτουργίας πολλαπλασιάζοντας απλώς 0,0976 (100/1024 = 0,0976) στην τιμή που λήφθηκε. Αυτός ο κύκλος λειτουργίας 0 έως 100% πρέπει στη συνέχεια να μετατραπεί σε ON. Γνωρίζουμε ότι στον κύκλο λειτουργίας 100% ο χρόνος ON πρέπει να είναι 2ms (για 180 μοίρες) οπότε ο πολλαπλασιασμός 0,02 (2/100 = 0,02) θα μετατρέψει 0 έως 100 κύκλος λειτουργίας σε 0 έως 2ms. Αλλά τότε ο αριθμός των μεταβλητών του χρονοδιακόπτη έχει οριστεί να αυξάνεται μία φορά για κάθε 0,05 ms. Αυτό σημαίνει ότι η τιμή μέτρησης θα είναι 20 (1 / 0,05 = 20) για κάθε 1ms. Πρέπει λοιπόν να πολλαπλασιάσουμε 20 με 0,02 για να υπολογίσουμε την ακριβή ώρα για το πρόγραμμά μας που θα μας δώσει την τιμή 0,4 (0,02 * 20 = 0,4). Ο κωδικός για το ίδιο εμφανίζεται παρακάτω, μπορείτε να τον δείτε να επαναλαμβάνεται για 5 φορές και για τα 5 pot χρησιμοποιώντας ένα loop για. Οι προκύπτουσες τιμές αποθηκεύονται στη συστοιχία T_ON.
για (int pot_num = 0; pot_num <= 3; pot_num ++) { int Pev_val = T_ON; POT_val = (ADC_Read (pot_num)); // Διαβάστε την τιμή του POT χρησιμοποιώντας ADC Duty_cycle = (POT_val * 0,0976). // Χάρτης 0 έως 1024 έως 0 έως 100 T_ON = Duty_cycle * 0,4; // 20 * 0,02
Επιλέγοντας ποιον κινητήρα θα περιστραφεί
Δεν μπορούμε να ελέγξουμε και τους πέντε κινητήρες μαζί, καθώς θα κάνει τον κώδικα ISR βαρύ επιβραδύνοντας ολόκληρο τον μικροελεγκτή. Πρέπει λοιπόν να περιστρέψουμε μόνο έναν σερβοκινητήρα κάθε φορά. Για να επιλέξετε το σερβο που θα περιστραφεί, ο μικροελεγκτής παρακολουθεί την ώρα ON και των πέντε σερβο κινητήρων και συγκρίνει με τον προηγούμενο χρόνο. Εάν υπάρχει αλλαγή στον χρόνο ON, μπορούμε να συμπεράνουμε ότι το συγκεκριμένο servo πρέπει να μετακινηθεί. Ο κωδικός για το ίδιο φαίνεται παρακάτω.
εάν (T_ON! = Pev_val) { Lcd_Clear (); σερβο = pot_num; Lcd_Set_Cursor (2,11); Lcd_Print_String ("S:"); Lcd_Print_Char (servo + '0'); εάν (pot_num == 0) {Lcd_Set_Cursor (1,1); Lcd_Print_String ("A:");} αλλιώς εάν (pot_num == 1) {Lcd_Set_Cursor (1,6); Lcd_Print_String ("B:");} αλλιώς εάν (pot_num == 2) {Lcd_Set_Cursor (1,11); Lcd_Print_String ("C:");} αλλιώς εάν (pot_num == 3) {Lcd_Set_Cursor (2,1); Lcd_Print_String ("D:");} αλλιώς εάν (pot_num == 4) {Lcd_Set_Cursor (2,6); Lcd_Print_String ("E:");} char d2 = (Duty_cycle)% 10; char d1 = (Duty_cycle / 10)% 10; Lcd_Print_Char (d1 + '0'); Lcd_Print_Char (d2 + '0');
Εκτυπώνουμε επίσης τον servo duty cycle στην οθόνη LCD, ώστε ο χρήστης να μπορεί να γνωρίζει την τρέχουσα θέση του. Με βάση την αλλαγή στο χρόνο ON, η μεταβλητή σερβο ενημερώνεται με αριθμούς από 0 έως 4 το καθένα που αντιπροσωπεύει μεμονωμένους κινητήρες.
Έλεγχος του σερβοκινητήρα μέσα στο ISR
Μέσα στο ISR έχουμε τον αριθμό μεταβλητών να αυξάνεται για κάθε 0,05 ms, αυτό σημαίνει ότι για κάθε 1 mms η μεταβλητή θα αυξάνεται κατά 20. Χρησιμοποιώντας αυτό πρέπει να ελέγξουμε τις ακίδες για να παράγουμε σήμα PWM. Εάν η τιμή μέτρησης είναι μικρότερη από την ώρα, τότε το GPIO αυτού του κινητήρα είναι ενεργοποιημένο χρησιμοποιώντας την παρακάτω γραμμή
PORTD = PORTD - servo_code;
Εδώ ο πίνακας servo_code έχει τη λεπτομέρεια ακίδων και των πέντε σερβο κινητήρων και με βάση την τιμή σε μεταβλητό σερβο, θα χρησιμοποιηθεί ο κωδικός για το συγκεκριμένο σερβο κινητήρα. Στη συνέχεια, είναι λογικά Ή (-) με υπάρχοντα bit PORTD, έτσι ώστε να μην ενοχλούμε τις τιμές άλλων κινητήρων και να ενημερώνουμε μόνο αυτόν τον συγκεκριμένο κινητήρα. Ομοίως για απενεργοποίηση του πείρου
PORTD = PORTD & ~ (servo_code);
Αντιστρέψαμε την τιμή bit χρησιμοποιώντας τον λογικό αντίστροφο τελεστή (~) και στη συνέχεια πραγματοποιήσαμε μια λειτουργία AND (&) στο PORTD για να απενεργοποιήσουμε μόνο τον επιθυμητό πείρο αφήνοντας τους άλλους ακροδέκτες στην προηγούμενη κατάσταση. Το πλήρες απόσπασμα κώδικα εμφανίζεται παρακάτω.
void interrupt timer_isr () { if (TMR0IF == 1) // Η σημαία χρονοδιακόπτη ενεργοποιήθηκε λόγω υπερχείλισης χρονοδιακόπτη -> ρυθμίστηκε σε υπερχείλιση για κάθε 0,05 ms { TMR0 = 248; // Φορτώστε το χρονόμετρο Τιμή TMR0IF = 0; // Εκκαθάριση πλήθους σημαίας διακοπής χρονοδιακόπτη ++; // Προσαυξήσεις κατά 1 για κάθε 0,05 ms -> η μέτρηση θα είναι 20 για κάθε 1 ms (0,05 / 1 = 20)) } int servo_code = {0b01000000, 0b00100000, 0b00010000, 0b00001000, 0b00000100}; αν (μέτρηση> = 20 * 20) μέτρηση = 0; εάν (πλήθος <= (T_ON)) PORTD = PORTD - servo_code; αλλιώς PORTD = PORTD & ~ (servo_code); }
Γνωρίζουμε ότι ο συνολικός κύκλος πρέπει να διαρκέσει 20 ms προτού ενεργοποιηθεί ξανά ο πείρος GPIO. Γι 'αυτό ελέγξουμε εάν η μέτρηση έχει ξεπεράσει τα 20ms συγκρίνοντας την τιμή της μέτρησης με 400 (ίδιος υπολογισμός που συζητήθηκε παραπάνω) και αν ναι πρέπει να αρχίσουμε να μετρήσουμε ξανά το μηδέν.
Προσομοίωση PIC Robotic Arm Code
Είναι πάντα καλύτερο να προσομοιώνετε τον κωδικό πριν τον μεταφέρετε στο πραγματικό υλικό. Έτσι, χρησιμοποίησα το Proteus για να προσομοιώσω τον κωδικό μου και το επαλήθευσα για να λειτουργεί σωστά. Το κύκλωμα που χρησιμοποιείται για προσομοίωση φαίνεται παρακάτω. Έχουμε χρησιμοποιήσει έναν παλμογράφο για να ελέγξουμε εάν τα σήματα PWM δημιουργούνται όπως απαιτείται. Επίσης μπορούμε να επαληθεύσουμε εάν οι κινητήρες LCD και Servo περιστρέφονται όπως αναμενόταν.
Όπως μπορείτε να δείτε, η οθόνη LCD δείχνει τον κύκλο λειτουργίας του κινητήρα D να είναι 07 με βάση την τιμή του δοχείου που είναι ο 3ος κινητήρας. Παρόμοια εάν μετακινηθεί ένα άλλο δοχείο, ο κύκλος λειτουργίας αυτού του ποτ και ο αριθμός κινητήρα του θα εμφανίζεται στην οθόνη LCD. Το σήμα PWM που εμφανίζεται στον παλμογράφο φαίνεται παρακάτω.
Η συνολική περίοδος κύκλου μετράται στα 22,2 ms χρησιμοποιώντας την επιλογή δρομέα στον παλμογράφο, η οποία είναι πολύ κοντά στα επιθυμητά 20ms. Τέλος, είμαστε σίγουροι ότι ο κώδικας λειτουργεί, οπότε για να συνεχίσουμε με το κύκλωμα μπορούμε είτε να το κολλήσουμε σε έναν πίνακα επιδόσεων είτε να χρησιμοποιήσουμε ένα PCB. Δεν θα λειτουργήσει εύκολα στο breadboard επειδή το POT τείνει πάντα να δίνει κάποια προβλήματα λόγω κακών συνδέσεων.
Σχεδιασμός PCB χρησιμοποιώντας το EasyEDA
Για να σχεδιάσουμε αυτό το PIC Robotic Arm, έχουμε επιλέξει το ηλεκτρονικό εργαλείο EDA που ονομάζεται EasyEDA. Το χρησιμοποιώ εδώ και πολύ καιρό και το βρίσκω πολύ βολικό λόγω της τεράστιας διαθεσιμότητας του αποτυπώματος και της εύχρηστης φύσης. Αφού σχεδιάσουμε το PCB, μπορούμε να παραγγείλουμε τα δείγματα PCB από τις υπηρεσίες κατασκευής PCB χαμηλού κόστους. Προσφέρουν επίσης υπηρεσία προμήθειας συστατικών όπου διαθέτουν μεγάλο απόθεμα ηλεκτρονικών εξαρτημάτων και οι χρήστες μπορούν να παραγγείλουν τα απαιτούμενα συστατικά τους μαζί με την παραγγελία PCB.
Ενώ σχεδιάζετε τα κυκλώματα και τα PCB σας, μπορείτε επίσης να κάνετε τα σχέδια κυκλωμάτων και PCB σας δημόσια, ώστε άλλοι χρήστες να μπορούν να τα αντιγράψουν ή να τα επεξεργαστούν και να επωφεληθούν από την εργασία σας, έχουμε επίσης δημοσιοποιήσει ολόκληρες τις διατάξεις κυκλωμάτων και PCB για αυτό το κύκλωμα, ελέγξτε ο παρακάτω σύνδεσμος:
easyeda.com/circuitdigest/pic-development-board-for-robotic-arm
Χρησιμοποιώντας αυτόν τον σύνδεσμο μπορείτε να παραγγείλετε απευθείας το ίδιο PCB που χρησιμοποιούμε σε αυτό το έργο και να το χρησιμοποιήσουμε. Μόλις ολοκληρωθεί ο σχεδιασμός, ο πίνακας μπορεί να θεωρηθεί ως μοντέλο 3D που θα είναι πολύ χρήσιμο στην απεικόνιση του τρόπου εμφάνισης του πίνακα μετά την κατασκευή. Το τρισδιάστατο μοντέλο του πίνακα που χρησιμοποιούμε φαίνεται παρακάτω. Εκτός από αυτό μπορείτε επίσης να δείτε το πάνω και το κάτω στρώμα του πίνακα για να ελέγξετε αν η λεία οθόνη είναι όπως αναμένεται.
Υπολογισμός και παραγγελία δειγμάτων στο διαδίκτυο
Μετά την ολοκλήρωση του σχεδιασμού αυτού του PIC Robot PCB, μπορείτε να παραγγείλετε το PCB μέσω του JLCPCB.com. Για να παραγγείλετε το PCB από το JLCPCB, χρειάζεστε το Gerber File. Για να κατεβάσετε αρχεία Gerber του PCB σας, απλώς κάντε κλικ στο κουμπί Δημιουργία αρχείου επεξεργασίας στη σελίδα επεξεργασίας EasyEDA και, στη συνέχεια, κατεβάστε το αρχείο Gerber από εκεί ή μπορείτε να κάνετε κλικ στην παραγγελία στο JLCPCB, όπως φαίνεται στην παρακάτω εικόνα. Αυτό θα σας ανακατευθύνει στο JLCPCB.com, όπου μπορείτε να επιλέξετε τον αριθμό των PCB που θέλετε να παραγγείλετε, πόσα στρώματα χαλκού χρειάζεστε, το πάχος PCB, το βάρος του χαλκού και ακόμη και το χρώμα PCB, όπως το στιγμιότυπο που φαίνεται παρακάτω:
Αφού ορίσετε όλες τις επιλογές, κάντε κλικ στο "Αποθήκευση στο καλάθι" και στη συνέχεια θα μεταφερθείτε στη σελίδα όπου μπορείτε να ανεβάσετε το αρχείο Gerber που έχουμε κατεβάσει από το EasyEDA. Ανεβάστε το αρχείο Gerber και κάντε κλικ στο "Αποθήκευση στο καλάθι". Και τέλος κάντε κλικ στο Checkout Securely για να ολοκληρώσετε την παραγγελία σας, τότε θα λάβετε τα PCB σας λίγες μέρες αργότερα. Κατασκευάζουν το PCB με πολύ χαμηλό ρυθμό που είναι 2 $. Ο χρόνος κατασκευής τους είναι επίσης πολύ μικρότερος, δηλαδή 48 ώρες με παράδοση DHL 3-5 ημερών, βασικά θα λάβετε τα PCB σας εντός μιας εβδομάδας από την παραγγελία.
Αφού παραγγείλετε το PCB, μπορείτε να ελέγξετε την πρόοδο παραγωγής του PCB σας με ημερομηνία και ώρα. Το ελέγχετε μεταβαίνοντας στη σελίδα Λογαριασμός και κάντε κλικ στο "Πρόοδος παραγωγής".
Μετά από μερικές ημέρες παραγγελίας PCB, πήρα τα δείγματα PCB σε ωραία συσκευασία, όπως φαίνεται στις παρακάτω εικόνες.
Και αφού πήρα αυτά τα κομμάτια έχω κολλήσει όλα τα απαιτούμενα στοιχεία πάνω από το PCB. Κολλήσαμε επίσης απευθείας το POT απευθείας αντί να χρησιμοποιώ καλώδια σύνδεσης, γιατί τα θηλυκά με τα θηλυκά καλώδια που χρησιμοποίησα αρχικά όταν δίνω παράξενες αναλογικές τάσεις εξόδου πιθανώς λόγω χαλαρών επαφών Μόλις συναρμολογήθηκαν όλα τα στοιχεία, το PCB μου έμοιαζε κάπως έτσι.
Ίσως έχετε παρατηρήσει ότι υπάρχει μόνο ένα 7805 σε αυτόν τον πίνακα. Αυτό συμβαίνει γιατί αρχικά σκέφτηκα ότι θα μπορούσα να ξεφύγω μόνο με ρυθμιστή για την τροφοδοσία τόσο του PIC όσο και του σερβο κινητήρα και αργότερα συνειδητοποίησα ότι χρειάζομαι δύο. Έχω χρησιμοποιήσει ένα εξωτερικό κύκλωμα για να τροφοδοτήσω τους σερβοκινητήρες μέσω των πράσινων καλωδίων που βλέπετε εδώ.
Ωστόσο, δεν χρειάζεται να ανησυχείτε πολύ για αυτό γιατί; Έχω κάνει τις αλλαγές στο PCB τώρα. Μπορείτε να χρησιμοποιήσετε το τροποποιημένο PCB και να κολλήσετε και τους δύο ρυθμιστές του πλοίου.
Εργασία του PIC Robotic Arm
Μετά από όλη την κουραστική δουλειά ήρθε η ώρα να πληρώσετε. Κολλήστε όλα τα στοιχεία του πίνακα και ανεβάστε το πρόγραμμα στον ελεγκτή PIC. Ο πλήρης κωδικός δίνεται παρακάτω ή μπορείτε να τον κατεβάσετε από εδώ. Η υποδοχή προγραμματισμού που παρέχεται στον πίνακα θα σας βοηθήσει να ανεβάσετε το πρόγραμμα απευθείας χρησιμοποιώντας το Pickit 3 χωρίς πολύ ταλαιπωρία. Μόλις ανεβάσετε το πρόγραμμα, θα πρέπει να δείτε την οθόνη LCD να εμφανίζει το σερβο που ελέγχεται. Για να μάθετε περισσότερα σχετικά με τον προγραμματισμό του μικροελεγκτή PIC, απλώς ακολουθήστε το προηγούμενο σεμινάριο.
Από εκεί μπορείτε απλά να γυρίσετε το δοχείο και να ελέγξετε πώς οι σερβοκινητήρες ανταποκρίνονται σε κάθε ποτενσιόμετρο. Μόλις καταλάβετε τη μορφή, μπορείτε να ελέγξετε το ρομποτικό βραχίονα για να εκτελέσετε οποιαδήποτε ενέργεια χρειάζεστε για να εκτελέσετε και να διασκεδάσετε. Μπορείτε να βρείτε την πλήρη εργασία του έργου στο παρακάτω βίντεο.
Αυτό είναι, ελπίζουμε ότι καταλάβατε το έργο και μάθατε κάτι νέο από αυτό. Εάν έχετε οποιεσδήποτε ερωτήσεις αφήστε τις στην ενότητα σχολίων ή χρησιμοποιήστε τα φόρουμ για άλλες τεχνικές συζητήσεις.