Inhaltsverzeichnis:

FPGA Cyclone IV DueProLogic steuert Servomotor - Gunook
FPGA Cyclone IV DueProLogic steuert Servomotor - Gunook

Video: FPGA Cyclone IV DueProLogic steuert Servomotor - Gunook

Video: FPGA Cyclone IV DueProLogic steuert Servomotor - Gunook
Video: DE0-Nano — Краткое руководство по началу работы с Altera Cyclone IV FPGA | Шаг за шагом 2024, November
Anonim
FPGA Cyclone IV DueProLogic steuert Servomotor
FPGA Cyclone IV DueProLogic steuert Servomotor

In diesem Tutorial werden wir Verilog-Code schreiben, um den Servomotor zu steuern. Das Servo SG-90 wird von Waveshare hergestellt. Wenn Sie den Servomotor kaufen, erhalten Sie möglicherweise ein Datenblatt, das die Betriebsspannung, das maximale Drehmoment und die vorgeschlagene Pulsweitenmodulation (PWM) usw. auflistet. Der FPGA DuePrologic bietet jedoch eine Eingangsspannung von 3,3 V, wobei die Betriebsspannung des Servo SG-90 5 V - 7 V beträgt. Bei fehlender elektrischer Leistung werde ich meine kalibrierte PWM auflisten, um den Servomotor erfolgreich zu drehen.

Unsere Aufgabe: Der Servomotor wird mit der Zeit von 5 Sekunden hin und her gedreht

Vollständige Speisekarte:

Schritt 1: Elektronische Schaltung aufbauen

Elektronische Schaltung aufbauen
Elektronische Schaltung aufbauen

Schritt 2: Pin-Planer einrichten

Pin-Planer einrichten
Pin-Planer einrichten

Klicken Sie auf "Start I/O Assignment Analysis", um zu überprüfen, ob der Pinplaner richtig eingestellt ist. Andernfalls müssen Sie alle Portnamen selbst importieren.

Schritt 3: Verilog-Code

Wir erstellen einen Timer "servo_count". Wenn "servo_A" HIGH ist, beträgt die PWM 1,5 ms und somit befindet sich das Servo bei 120°. Im Gegensatz dazu, wenn "servo_A" LOW ist, beträgt die PWM 0,15 ms und daher bleibt das Servo auf 0 Grad.

zuweisen XIO_2[3] = servo_pulse; //für V'

reg [31:0] servo_count;

anfänglicher Anfang

servo_count <= 32'b0;

servo_A <= 1'b0;

Ende

immer @(posege CLK_66)

Start

servo_count <= servo_count + 1'b1;

if(servo_count > 400000000) // Taktzyklus 66MHz, 1/66M * 400000000 ~ 5 Sekunden

Start

Servo_A <= !Servo_A;

servo_count <= 32'b0;

Ende

Ende

reg [31:0] ex_auto;

anfänglicher Anfang

ex_auto <= 32'b0;

servo_auto <= 1'b0;

Ende

immer @(posege CLK_66)

Start

if(servo_A==1'b1)

Start

ex_auto <= ex_auto + 1'b1;

if (ex_auto > 100000) // Taktzyklus 66 MHz, diese PWM beträgt ~ 1,5 ms, Servo dreht auf 120 Grad

Start

servo_auto <= !servo_auto;

ex_auto <= 32'b0;

Ende

Ende

if(servo_A==1'b0)

Start

ex_auto <= ex_auto + 1'b1;

if (ex_auto > 10000) // Taktzyklus 66 MHz, diese PWM beträgt ~ 0,15 ms, Servo dreht sich auf 0 Grad

Start

servo_auto <= !servo_auto;

ex_auto <= 32'b0;

Ende

Ende

Ende

Schritt 4: Verilog-Code hochladen

Image
Image

Klicken Sie auf "Kompilierung starten". Wenn keine Fehlermeldung angezeigt wird, gehen Sie zu "Programmer", um das Hardware-Setup abzuschließen. Denken Sie daran, die pof-Datei bei Bedarf unter "Datei ändern" zu aktualisieren. Klicken Sie auf "Start", um den Code hochzuladen.

Schließlich sollten Sie sehen, dass der Servomotor periodisch gedreht wird.

Empfohlen: