Table des matières:

Servomoteur de contrôle FPGA Cyclone IV DueProLogic : 4 étapes
Servomoteur de contrôle FPGA Cyclone IV DueProLogic : 4 étapes

Vidéo: Servomoteur de contrôle FPGA Cyclone IV DueProLogic : 4 étapes

Vidéo: Servomoteur de contrôle FPGA Cyclone IV DueProLogic : 4 étapes
Vidéo: Servomotor control on the FPGA Basys3 Board 2024, Novembre
Anonim
FPGA Cyclone IV DueProLogic contrôle le servomoteur
FPGA Cyclone IV DueProLogic contrôle le servomoteur

Dans ce tutoriel, nous allons écrire du code Verilog pour contrôler le servomoteur. Le servo SG-90 est fabriqué par Waveshare. Lorsque vous achetez le servomoteur, vous pouvez recevoir une fiche technique qui répertorie la tension de fonctionnement, le couple maximal et la modulation de largeur d'impulsion (PWM) proposée, etc. Cependant, le FPGA DuePrologic fournit une tension d'entrée de 3,3 V où la tension de fonctionnement du servo SG-90 est de 5 V - 7 V. En l'absence d'alimentation électrique, je vais lister mon PWM calibré afin de faire tourner le servomoteur avec succès.

Notre tâche: le servomoteur est tourné d'avant en arrière avec une période de 5 secondes

Menu complet:

Étape 1: Construire un circuit électronique

Construire un circuit électronique
Construire un circuit électronique

Étape 2: Configurer le planificateur d'épingles

Configurer le planificateur de broches
Configurer le planificateur de broches

Cliquez sur "Démarrer l'analyse de l'affectation des E/S" pour vérifier si le planificateur de broches est correctement défini. Sinon, vous devez importer vous-même tous les noms de port.

Étape 3: Code Verilog

Nous créons un timer "servo_count". Lorsque "servo_A" est HAUT, le PWM est de 1,5 ms et le servo est donc situé à 120 degrés. En revanche, lorsque "servo_A" est LOW, le PWM est de 0,15 ms et donc le servo est resté à 0 degré.

assigner XIO_2[3] = servo_pulse; //pour V'

reg [31:0] servo_count;

début initial

compte_servo <= 32'b0;

servo_A <= 1'b0;

finir

toujours @(posedge CLK_66)

commencer

compte_servo <= compte_servo + 1'b1;

if(servo_count > 400000000) //Cycle d'horloge 66MHz, 1/66M * 400000000 ~ 5 secondes

commencer

servo_A <= !servo_A;

compte_servo <= 32'b0;

finir

finir

reg [31:0] ex_auto;

début initial

ex_auto <= 32'b0;

servo_auto <= 1'b0;

finir

toujours @(posedge CLK_66)

commencer

si(servo_A==1'b1)

commencer

ex_auto <= ex_auto + 1'b1;

if (ex_auto > 100000) // Cycle d'horloge 66 MHz, ce PWM est d'environ 1,5 ms, le servo tourne à 120 degrés

commencer

servo_auto <= !servo_auto;

ex_auto <= 32'b0;

finir

finir

si(servo_A==1'b0)

commencer

ex_auto <= ex_auto + 1'b1;

if (ex_auto > 10000) // Cycle d'horloge 66 MHz, ce PWM est de ~ 0,15 ms, le servo tourne à 0 deg

commencer

servo_auto <= !servo_auto;

ex_auto <= 32'b0;

finir

finir

finir

Étape 4: Télécharger le code Verilog

Image
Image

Cliquez sur "Démarrer la compilation". Si aucun message d'erreur ne s'affiche, accédez à « Programmer » pour terminer la configuration du matériel. Pensez à mettre à jour le fichier pof dans "Changer de fichier" si nécessaire. Le clic "Démarrer" pour télécharger le code.

Après tout, vous devriez voir que le servomoteur tourne périodiquement.

Conseillé: