Πίνακας περιεχομένων:

FPGA Cyclone IV DueProLogic Controls Servo Motor: 4 Βήματα
FPGA Cyclone IV DueProLogic Controls Servo Motor: 4 Βήματα

Βίντεο: FPGA Cyclone IV DueProLogic Controls Servo Motor: 4 Βήματα

Βίντεο: FPGA Cyclone IV DueProLogic Controls Servo Motor: 4 Βήματα
Βίντεο: Servomotor control on the FPGA Basys3 Board 2024, Νοέμβριος
Anonim
FPGA Cyclone IV DueProLogic Controls Servo Motor
FPGA Cyclone IV DueProLogic Controls Servo Motor

Σε αυτό το σεμινάριο, πρόκειται να γράψουμε κώδικα Verilog για τον έλεγχο του σερβοκινητήρα. Ο σερβο SG-90 κατασκευάζεται από την Waveshare. Όταν αγοράζετε τον σερβοκινητήρα, ενδέχεται να λάβετε ένα φύλλο δεδομένων που αναφέρει την τάση λειτουργίας, τη μέγιστη ροπή και την προτεινόμενη διαμόρφωση πλάτους παλμού (PWM)… κλπ. Ωστόσο, το FPGA DuePrologic παρέχει τάση εισόδου 3,3V όπου η τάση λειτουργίας του servo SG -90 είναι 5V - 7V. Λόγω έλλειψης ηλεκτρικής ενέργειας, θα απαριθμήσω το βαθμονομημένο PWM μου για να περιστρέψω με επιτυχία τον σερβοκινητήρα.

Καθήκον μας: Ο σερβοκινητήρας περιστρέφεται μπρος -πίσω με την περίοδο των 5 δευτερολέπτων

Πλήρες μενού:

Βήμα 1: Δημιουργία ηλεκτρονικού κυκλώματος

Κατασκευή ηλεκτρονικού κυκλώματος
Κατασκευή ηλεκτρονικού κυκλώματος

Βήμα 2: Ρύθμιση Pin Planner

Ρύθμιση Pin Planner
Ρύθμιση 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

Image
Image

Κάντε κλικ στην επιλογή "Έναρξη σύνταξης". Εάν δεν εμφανίζεται κανένα μήνυμα σφάλματος, μεταβείτε στο "Προγραμματιστής" για να ολοκληρώσετε τη ρύθμιση υλικού. Θυμηθείτε να ενημερώσετε το αρχείο pof στο "Αλλαγή αρχείου" εάν είναι απαραίτητο. Κάντε κλικ στο "Έναρξη" για να ανεβάσετε τον κώδικα.

Μετά από όλα, θα πρέπει να δείτε ότι ο σερβοκινητήρας περιστρέφεται περιοδικά.

Συνιστάται: