Πίνακας περιεχομένων:
2025 Συγγραφέας: John Day | [email protected]. Τελευταία τροποποίηση: 2025-01-13 06:57
Σε αυτό το σεμινάριο, πρόκειται να γράψουμε κώδικα Verilog για τον έλεγχο του σερβοκινητήρα. Ο σερβο SG-90 κατασκευάζεται από την Waveshare. Όταν αγοράζετε τον σερβοκινητήρα, ενδέχεται να λάβετε ένα φύλλο δεδομένων που αναφέρει την τάση λειτουργίας, τη μέγιστη ροπή και την προτεινόμενη διαμόρφωση πλάτους παλμού (PWM)… κλπ. Ωστόσο, το FPGA DuePrologic παρέχει τάση εισόδου 3,3V όπου η τάση λειτουργίας του servo SG -90 είναι 5V - 7V. Λόγω έλλειψης ηλεκτρικής ενέργειας, θα απαριθμήσω το βαθμονομημένο PWM μου για να περιστρέψω με επιτυχία τον σερβοκινητήρα.
Καθήκον μας: Ο σερβοκινητήρας περιστρέφεται μπρος -πίσω με την περίοδο των 5 δευτερολέπτων
Πλήρες μενού:
Βήμα 1: Δημιουργία ηλεκτρονικού κυκλώματος
Βήμα 2: Ρύθμιση Pin Planner
Κάντε κλικ στην επιλογή "Έναρξη ανάλυσης εκχώρησης εισόδου/εξόδου" για να ελέγξετε εάν ο προγραμματιστής pin έχει ρυθμιστεί σωστά. Διαφορετικά, πρέπει να εισαγάγετε μόνοι σας όλα τα ονόματα θυρών.
Βήμα 3: Κώδικας Verilog
Δημιουργούμε ένα χρονόμετρο "servo_count". Όταν το "servo_A" είναι Υ HIGHΗΛΟ, το PWM είναι 1,5ms και συνεπώς το σερβο βρίσκεται στους 120 βαθμούς. Αντίθετα, όταν το "servo_A" είναι ΧΑΜΗΛΟ, το PWM είναι 0,15ms και συνεπώς το σερβο παραμένει σε 0 μοίρα.
εκχώρηση XIO_2 [3] = σερβο_παλμός; // για V '
reg [31: 0] servo_count;
αρχική έναρξη
servo_count <= 32'b0;
servo_A <= 1'b0;
τέλος
πάντα @(posedge CLK_66)
να αρχίσει
servo_count <= servo_count + 1'b1;
εάν (servo_count> 400000000) // Κύκλος ρολογιού 66MHz, 1/66M * 400000000 ~ 5 δευτερόλεπτα
να αρχίσει
servo_A <=! servo_A;
servo_count <= 32'b0;
τέλος
τέλος
reg [31: 0] ex_auto;
αρχική έναρξη
ex_auto <= 32'b0;
servo_auto <= 1'b0;
τέλος
πάντα @(posedge CLK_66)
να αρχίσει
εάν (servo_A == 1'b1)
να αρχίσει
ex_auto <= ex_auto + 1'b1;
εάν (ex_auto> 100000) // Κύκλος ρολογιού 66MHz, αυτό το PWM είναι ms 1.5ms, το σερβο στρέφεται στους 120 βαθμούς
να αρχίσει
servo_auto <=! servo_auto;
ex_auto <= 32'b0;
τέλος
τέλος
εάν (servo_A == 1'b0)
να αρχίσει
ex_auto <= ex_auto + 1'b1;
εάν (ex_auto> 10000) // Κύκλος ρολογιού 66MHz, αυτό το PWM είναι ~ 0.15ms, ο σερβο περιστρέφεται στους 0 βαθμούς
να αρχίσει
servo_auto <=! servo_auto;
ex_auto <= 32'b0;
τέλος
τέλος
τέλος
Βήμα 4: Μεταφόρτωση κώδικα Verilog
Κάντε κλικ στην επιλογή "Έναρξη σύνταξης". Εάν δεν εμφανίζεται κανένα μήνυμα σφάλματος, μεταβείτε στο "Προγραμματιστής" για να ολοκληρώσετε τη ρύθμιση υλικού. Θυμηθείτε να ενημερώσετε το αρχείο pof στο "Αλλαγή αρχείου" εάν είναι απαραίτητο. Κάντε κλικ στο "Έναρξη" για να ανεβάσετε τον κώδικα.
Μετά από όλα, θα πρέπει να δείτε ότι ο σερβοκινητήρας περιστρέφεται περιοδικά.