- Απαιτούμενα στοιχεία
- Προετοιμασία του 3D τυπωμένου ρομποτικού ARM
- Διάγραμμα κυκλώματος
- Βήματα που εμπλέκονται στον προγραμματισμό LPC2148 για ρομποτικό βραχίονα
- Επεξήγηση κωδικοποίησης
- Επιλογή του σερβοκινητήρα για περιστροφή χρησιμοποιώντας τα κουμπιά
- Εργασία του Pick and Place Robotic Arm
Τα Robotic Arms, είναι μια από τις συναρπαστικές δημιουργικές μηχανικές και είναι πάντα συναρπαστικό να βλέπεις αυτά τα πράγματα να γέρνουν και να μετακινούνται για να γίνονται περίπλοκα πράγματα όπως θα έκανε ένα ανθρώπινο χέρι. Αυτοί οι ρομποτικοί βραχίονες βρίσκονται συνήθως σε βιομηχανίες της γραμμής συναρμολόγησης που εκτελούν έντονη μηχανική εργασία όπως συγκόλληση, διάτρηση, βαφή κλπ. Πρόσφατα προηγμένοι ρομποτικοί βραχίονες με υψηλή ακρίβεια αναπτύσσονται επίσης για την εκτέλεση πολύπλοκων χειρουργικών επεμβάσεων. Έτσι, σε αυτό το σεμινάριο ας φτιάξουμε έναν απλό Robotic Arm χρησιμοποιώντας τον μικροελεγκτή ARM7-LPC2148 για τη συλλογή και τοποθέτηση ενός αντικειμένου με μη αυτόματο έλεγχο λίγων ποτενσιόμετρων.
Σε αυτό το σεμινάριο θα χρησιμοποιήσουμε ένα 3D τυπωμένο ρομποτικό ARM που δημιουργήθηκε ακολουθώντας τη διαδικασία στο thingiverse. Το ARM χρησιμοποιεί 4 σερβοκινητήρες για ρομποτική κίνηση ARM. Εάν δεν διαθέτετε εκτυπωτή, μπορείτε επίσης να χτίσετε το χέρι σας με απλά χαρτόνια, όπως δημιουργήσαμε για το Arduino Robotic Arm Project. Για έμπνευση μπορείτε επίσης να ανατρέξετε στο Record and Play Robotic Arm που δημιουργήσαμε νωρίτερα χρησιμοποιώντας το Arduino.
Τώρα ας προετοιμάσουμε τα πράγματα για το έργο μας
Απαιτούμενα στοιχεία
- 3D Printer Robotic ARM
- ARM7-LPC2148
- SG-90 Servo Motor (4)
- Ποτενσιόμετρο 10k (4)
- Κουμπί πίεσης (4)
- LED (4)
- Προσαρμογέας ρεύματος 5V (1A) DC
- Αντίσταση (10k (4), 2.2k (4))
- Ψωμί
- Σύνδεση καλωδίων
Προετοιμασία του 3D τυπωμένου ρομποτικού ARM
Το τρισδιάστατο τυπωμένο ρομποτικό βραχίονα που χρησιμοποιήθηκε σε αυτό το σεμινάριο δημιουργήθηκε ακολουθώντας το σχέδιο που δόθηκε από το EEZYbotARM το οποίο είναι διαθέσιμο στο Thingiverse. Η πλήρης διαδικασία για την κατασκευή του τρισδιάστατου ρομποτικού βραχίονα και η λεπτομέρεια συναρμολόγησης με βίντεο υπάρχουν στον σύνδεσμο πραγμάτων, το οποίο μοιράζεται παραπάνω.
Αυτή είναι η εικόνα του τρισδιάστατου τυπωμένου ρομποτικού βραχίονα μετά τη συναρμολόγηση με 4 Servo Motors.
Διάγραμμα κυκλώματος
Η παρακάτω εικόνα δείχνει τις συνδέσεις κυκλώματος του ρομποτικού βραχίονα που βασίζεται σε ARM.
Οι συνδέσεις κυκλώματος για το έργο είναι απλές. Φροντίστε να τροφοδοτήσετε τους Servo Motors με ξεχωριστό τροφοδοτικό 5V DC. Για ποτενσιόμετρα και μπουτόν μπορούμε να χρησιμοποιήσουμε 3.3V διαθέσιμα από τον μικροελεγκτή LPC2148.
Εδώ χρησιμοποιούμε τους 4 πείρους ADC του LPC2148 με 4 ποτενσιόμετρα. Και επίσης 4 ακροδέκτες PWM του LPC2148 συνδεδεμένοι με τους ακροδέκτες PWM του σερβοκινητήρα. Έχουμε επίσης συνδέσει 4 κουμπιά για να επιλέξουμε ποιον κινητήρα θα λειτουργήσει. Έτσι, αφού πατήσετε το κουμπί το σεβαστό ποτενσιόμετρο ποικίλλει για να αλλάξετε τη θέση του σερβο κινητήρα.
Τα μπουτόν ενός άκρου που συνδέονται με το GPIO του LPC2148 είναι pull-down μέσω αντίστασης 10k και ένα άλλο άκρο συνδέεται με 3.3V. Επίσης, 4 LED συνδέονται για να υποδείξουν ποιος σερβοκινητήρας έχει επιλεγεί για αλλαγή της θέσης.
Συνδέσεις κυκλώματος μεταξύ 4 Servo Motor & LPC2148:
LPC2148 | Βοηθητικό μοτέρ |
Σ0.1 | SERVO1 (PWM-Πορτοκαλί) |
Σ0.7 | SERVO2 (PWM-Πορτοκαλί) |
P0.8 | SERVO3 (PWM-Πορτοκαλί) |
P0.21 | SERVO4 (PWM-Πορτοκαλί) |
Συνδέσεις κυκλώματος μεταξύ 4 ποτενσιόμετρο & LPC2148:
LPC2148 | Κεντρικό πείρο ποτενσιόμετρου αριστερό πείρο - 0V GND του LPC2148 δεξιού πείρου - 3.3V του LPC2148 |
P0.25 | Ποτενσιόμετρο |
P0.28 | Ποτενσιόμετρο2 |
P0.29 | Ποτενσιόμετρο |
P0.30 | Ποτενσιόμετρο4 |
Συνδέσεις κυκλώματος 4 LED με LPC2148:
LPC2148 | LED άνοδος (η καθόδου όλων των LED είναι GND) |
P1.28 | LED1 (άνοδος) |
P1.29 | LED2 (άνοδος) |
P1.30 | LED3 (άνοδος) |
Σ1.31 | LED4 (άνοδος) |
Συνδέσεις κυκλώματος 4 πλήκτρων με LPC2148:
LPC2148 | Κουμπί Push (Με αντίσταση Pull-Down 10k) |
P1.17 | Κουμπί1 |
P1.18 | Κουμπί2 |
P1.19 | Κουμπί |
Σ1.20 | Κουμπί |
Βήματα που εμπλέκονται στον προγραμματισμό LPC2148 για ρομποτικό βραχίονα
Πριν προγραμματίσουμε για αυτό το ρομποτικό βραχίονα, πρέπει να μάθουμε για τη δημιουργία PWM στο LPC2148 και τη χρήση ADC στο ARM7-LPC2148. Για αυτό, ανατρέξτε στα προηγούμενα έργα μας στο Interfacing Servo motor με LPC2148 και πώς να χρησιμοποιήσετε το ADC στο LPC2148.
Μετατροπή ADC με χρήση LPC2148
Καθώς πρέπει να παρέχουμε τιμές ADC για τον καθορισμό της τιμής κύκλου λειτουργίας για τη δημιουργία εξόδου PWM για τον έλεγχο της θέσης του σερβο κινητήρα. Πρέπει να βρούμε τιμές ADC του ποτενσιόμετρου. Καθώς έχουμε τέσσερα ποτενσιόμετρα για τον έλεγχο τεσσάρων σέρβο κινητήρα, χρειαζόμαστε 4 κανάλι ADC του LPC2148. Εδώ σε αυτό το σεμινάριο χρησιμοποιούμε καρφίτσες ADC (P0.25, P0.28, P0.29, P0.30) καναλιών ADC 4,1,2,3 αντίστοιχα που υπάρχουν στο LPC2148.
Δημιουργία σημάτων PWM για Servo Motor χρησιμοποιώντας το LPC2148
Καθώς πρέπει να δημιουργήσουμε σήματα PWM για τον έλεγχο της θέσης του σερβο κινητήρα. Πρέπει να ρυθμίσουμε τον κύκλο λειτουργίας του PWM. Έχουμε τέσσερις Servo κινητήρες συνδεδεμένους με το ρομποτικό βραχίονα, οπότε χρειαζόμαστε 4 PWM κανάλι LPC2148. Εδώ σε αυτό το σεμινάριο χρησιμοποιούμε καρφίτσες PWM (P0.1, P0.7, P0.8, P0.21) καναλιών PWM 3,2,4,5 αντίστοιχα που υπάρχουν στο LPC2148.
Προγραμματισμός και αναβοσβήνει αρχείο Hex στο LPC2148
Για να προγραμματίσουμε το ARM7-LPC2148 χρειαζόμαστε το keil uVision & για να αναβοσβήσουμε τον κώδικα HEX στο LPC2148 απαιτείται Flash Flash εργαλείο. Ένα καλώδιο USB χρησιμοποιείται εδώ για τον προγραμματισμό του ARM7 Stick μέσω θύρας micro USB. Γράφουμε τον κωδικό χρησιμοποιώντας Keil και να δημιουργήσει ένα hex αρχείο και, στη συνέχεια, το αρχείο HEX είναι έλαμψε με ARM7 ραβδί που χρησιμοποιούν Flash Magic. Για να μάθετε περισσότερα σχετικά με την εγκατάσταση του keil uVision και του Flash Magic και πώς να τα χρησιμοποιήσετε, ακολουθήστε τον σύνδεσμο Ξεκινώντας με τον μικροελεγκτή ARM7 LPC2148 και προγραμματίστε τον χρησιμοποιώντας το Keil uVision.
Επεξήγηση κωδικοποίησης
Πλήρες πρόγραμμα για αυτό το Robotic Arm Project δίνεται στο τέλος του σεμιναρίου. Τώρα ας δούμε τον προγραμματισμό λεπτομερώς.
Διαμόρφωση PORT του LPC2148 για χρήση GPIO, PWM και ADC:
Χρησιμοποιώντας τον καταχωρητή PINSEL1 για να ενεργοποιήσετε τα κανάλια ADC- ADC0.4, ADC0.1, ADC0.2, ADC0.3 για τις ακίδες P0.25, P0.28, P0.29, P0.30. Και επίσης, για PWM5 για τον πείρο P0.21 (1 << 10).
#define AD04 (1 << 18) // Επιλέξτε AD0.4 συνάρτηση για P0.25 #define AD01 (1 << 24) // Επιλέξτε AD0.1 συνάρτηση για P0.28 #define AD02 (1 << 26) / / Επιλέξτε συνάρτηση AD0.2 για P0.29 #define AD03 (1 << 28) // Επιλέξτε συνάρτηση AD0.3 για P0.30 PINSEL1 - = AD04 - AD01 - AD02 - AD03 - (1 << 10);
Χρησιμοποιώντας τον καταχωρητή PINSEL0 για να ενεργοποιήσετε τα κανάλια PWM PWM3, PWM2, PWM4 για καρφίτσες P0.1, P0.7, P0.8 του LPC2148.
PINSEL0 = 0x000A800A;
Χρησιμοποιώντας τον καταχωρητή PINSEL2 για να ενεργοποιήσετε τη λειτουργία καρφίτσας GPIO για όλες τις ακίδες του PORT1 που χρησιμοποιούνται για τη σύνδεση LED και κουμπιού.
PINSEL2 = 0x00000000;
Για να κάνετε τις καρφίτσες LED ως καρφίτσες εξόδου και κουμπιού ως είσοδος, χρησιμοποιείται ο καταχωρητής IODIR1 (0 για ΕΙΣΟΔΟΣ & 1 για ΕΞΟΔΟΣ)
IODIR1 = ((0 << 17) - (0 << 18) - (0 << 19) - (0 << 20) - (1 << 28) - (1 << 29) - (1 << 30)) - (1 << 31));
Ενώ οι αριθμοί ακίδων ορίζονται ως
#define SwitchPinNumber1 17 // (Connected with P1.17) #define SwitchPinNumber2 18 // (Connected with P1.18) #define SwitchPinNumber3 19 // (Συνδεδεμένο με P1.19) #define SwitchPinNumber4 20 // (Συνδέεται με P1. 20) #define LedPinNumber1 28 // (Συνδέεται με P1.28) #define LedPinNumber2 29 // (Connected with P1.29) #define LedPinNumber3 30 // (Connected with P1.30) #define LedPinNumber4 31 // (Συνδέεται με P1.31)
Διαμόρφωση ρύθμισης μετατροπής ADC
Στη συνέχεια ο τρόπος μετατροπής ADC και το ρολόι για ADC ρυθμίζονται χρησιμοποιώντας τον καταχωρητή AD0CR_setup
unsigned long AD0CR_setup = (CLKDIV << 8) - BURST_MODE_OFF - PowerUP; // Ρύθμιση λειτουργίας ADC
Ενώ το CLCKDIV, Burst Mode και PowerUP ορίζονται ως
#define CLKDIV (15-1) #define BURST_MODE_OFF (0 << 16) // 1 για on και 0 για off #define PowerUP (1 << 21)
Ρύθμιση του ρολογιού για μετατροπή ADC (CLKDIV)
Αυτό χρησιμοποιείται για την παραγωγή του ρολογιού για ADC. Ρολόι ADC 4Mhz (ADC_CLOCK = PCLK / CLKDIV) όπου χρησιμοποιείται πραγματικά το "CLKDIV-1", στην περίπτωσή μας PCLK = 60mhz
Λειτουργία Burst (Bit-16): Αυτό το bit χρησιμοποιείται για μετατροπή BURST. Εάν ρυθμιστεί αυτό το bit, η μονάδα ADC θα κάνει τη μετατροπή για όλα τα κανάλια που έχουν επιλεγεί (SET) σε SEL bit Η ρύθμιση 0 σε αυτό το bit θα απενεργοποιήσει τη μετατροπή BURST.
Λειτουργία απενεργοποίησης (Bit-21): Χρησιμοποιείται για την ενεργοποίηση ή απενεργοποίηση του ADC. Η ρύθμιση (1) σε αυτό το bit φέρνει το ADC από τη λειτουργία απενεργοποίησης και το καθιστά λειτουργικό. Η εκκαθάριση αυτού του bit θα απενεργοποιήσει το ADC.
Διαμόρφωση ρύθμισης μετατροπής PWM
Πρώτη επαναφορά και απενεργοποίηση του μετρητή για PWM χρησιμοποιώντας τον καταχωρητή PWMTCR και εγκατάσταση του PWM Timer Prescale Register με τιμή prescaler.
PWMTCR = 0x02; PWMPR = 0x1D;
Στη συνέχεια ορίστε τον μέγιστο αριθμό μετρήσεων σε έναν κύκλο. Αυτό γίνεται στο Μητρώο αγώνων 0 (PWMMR0). Δεδομένου ότι έχουμε 20000 καθώς είναι ένα κύμα PWM 20msecs
PWMMR0 = 20000;
Μετά από αυτό ορίστε την τιμή για τον κύκλο λειτουργίας στους καταχωρητές αγώνων, χρησιμοποιούμε PWMMR4, PWMMR2, PWMMR3, PWMMR5. Εδώ ορίζουμε αρχικές τιμές 0 msec (Toff)
PWMMR4 = 0; PWMMR2 = 0; PWMMR3 = 0; PWMMR5 = 0;
Μετά από αυτό, ορίστε το PWM Match Control Register ώστε να προκαλέσει επαναφορά μετρητή κατά την εμφάνιση του μητρώου αντιστοίχισης.
PWMMCR = 0x00000002; // Επαναφορά στο MR0 αγώνα
Μετά από αυτό, το PWM latch Enable Register για να επιτρέψει τη χρήση της τιμής αντιστοίχισης (PWMLER)
PWMLER = 0x7C; // Ενεργοποίηση Latch για PWM2, PWM4, PWM4 και PWM5
Επαναφέρετε τον μετρητή χρονοδιακόπτη χρησιμοποιώντας λίγο στο PWM Timer Control Register (PWMTCR) και επίσης επιτρέπει το PWM.
PWMTCR = 0x09; // Ενεργοποίηση PWM και μετρητή
Στη συνέχεια, ενεργοποιήστε τις εξόδους PWM και ρυθμίστε το PWM σε λειτουργία ελεγχόμενου άκρου σε καταχωρητή ελέγχου PWM (PWMPCR).
PWMPCR = 0x7C00; // Ενεργοποίηση PWM2, PWM4, PWM4 και PWM5, PWM ελεγχόμενης μίας άκρης
Επιλογή του σερβοκινητήρα για περιστροφή χρησιμοποιώντας τα κουμπιά
Έχουμε τέσσερα μπουτόν που χρησιμοποιούνται για την περιστροφή τεσσάρων διαφορετικών σερβοκινητήρων. Επιλέγοντας ένα μπουτόν και μεταβάλλοντας το αντίστοιχο ποτενσιόμετρο, η τιμή ADC ρυθμίζει τον κύκλο λειτουργίας και ο αντίστοιχος σερβοκινητήρας αλλάζει τη θέση του. Για να λάβετε την κατάσταση του διακόπτη μπουτόν
switchStatus1 = (IOPIN1 >> SwitchPinNumber1) & 0x01;
Έτσι, ανάλογα με την τιμή διακόπτη που είναι ΥΨΗΛΗ, λαμβάνει χώρα η μετατροπή ADC και μετά μετά την επιτυχή μετατροπή της τιμής ADC (0 έως 1023), χαρτογραφείται σε όρους (0 έως 2045) και στη συνέχεια γράφεται η τιμή του κύκλου λειτουργίας ο ακροδέκτης PWM (PWMMRx) συνδεδεμένος με σερβοκινητήρα. Επίσης, μια λυχνία LED περιστρέφεται ΥΨΗΛΗ για να δείξει ποιος διακόπτης είναι πατημένος. Το παρακάτω είναι ένα παράδειγμα για το πρώτο κουμπί
εάν (switchStatus1 == 1) { IOPIN1 = (1 <
Εργασία του Pick and Place Robotic Arm
Αφού ανεβάσετε τον κωδικό στο LPC2148, πατήστε οποιονδήποτε διακόπτη και αλλάξτε το αντίστοιχο ποτενσιόμετρο για να αλλάξετε τη θέση του ρομποτικού βραχίονα.
Κάθε διακόπτης και ποτενσιόμετρο ελέγχουν κάθε κίνηση σερβοκινητήρα που είναι βασική κίνηση αριστερά ή δεξιά, κίνηση προς τα πάνω ή προς τα κάτω, προς τα εμπρός ή προς τα πίσω και, στη συνέχεια, η λαβή για συγκράτηση και απελευθέρωση της κίνησης. Ο πλήρης κώδικας με ένα λεπτομερές βίντεο εργασίας δίνεται παρακάτω.