Sommario:

FPGA Cyclone IV DueProLogic controlla il servomotore: 4 passaggi
FPGA Cyclone IV DueProLogic controlla il servomotore: 4 passaggi

Video: FPGA Cyclone IV DueProLogic controlla il servomotore: 4 passaggi

Video: FPGA Cyclone IV DueProLogic controlla il servomotore: 4 passaggi
Video: Урок 84 - Пример 55: Сервопривод с ШИМ 2024, Novembre
Anonim
FPGA Cyclone IV DueProLogic controlla il servomotore
FPGA Cyclone IV DueProLogic controlla il servomotore

In questo tutorial, scriveremo il codice Verilog per controllare il servomotore. Il servo SG-90 è prodotto da Waveshare. Quando acquisti il servomotore, potresti ricevere una scheda tecnica che elenca la tensione di esercizio, la coppia massima e la modulazione di larghezza di impulso proposta (PWM) … ecc. Tuttavia, l'FPGA DuePrologic fornisce una tensione di ingresso di 3,3 V dove la tensione operativa del servo SG-90 è 5 V - 7 V. In mancanza di alimentazione elettrica, elencherò il mio PWM calibrato per ruotare con successo il servomotore.

Il nostro compito: il servomotore viene ruotato avanti e indietro con un periodo di 5 secondi

Menù completo:

Passaggio 1: costruire il circuito elettronico

Costruisci un circuito elettronico
Costruisci un circuito elettronico

Passaggio 2: imposta il pianificatore di pin

Imposta il pianificatore di puntine
Imposta il pianificatore di puntine

Fare clic su "Avvia analisi assegnazione I/O" per verificare se il pianificatore pin è impostato correttamente. Altrimenti, devi importare tutti i nomi delle porte da solo.

Passaggio 3: codice Verilog

Creiamo un timer "servo_count". Quando "servo_A" è ALTO, il PWM è 1,5 ms e quindi il servo si trova a 120 gradi. Al contrario, quando "servo_A" è LOW, il PWM è 0,15 ms e quindi il servo è rimasto a 0 gradi.

assegnare XIO_2[3] = servo_pulse; //per V'

reg [31:0] servo_count;

inizio iniziale

servo_count <= 32'b0;

servo_A <= 1'b0;

fine

sempre @(posedge CLK_66)

inizio

servo_count <= servo_count + 1'b1;

if(servo_count > 400000000) //Ciclo di clock 66MHz, 1/66M * 400000000 ~ 5 secondi

inizio

servo_A <= !servo_A;

servo_count <= 32'b0;

fine

fine

reg [31:0] ex_auto;

inizio iniziale

ex_auto <= 32'b0;

servo_auto <= 1'b0;

fine

sempre @(posedge CLK_66)

inizio

if(servo_A==1'b1)

inizio

ex_auto <= ex_auto + 1'b1;

if (ex_auto > 1000000) // Ciclo di clock 66 MHz, questo PWM è ~ 1,5 ms, il servo ruota a 120 gradi

inizio

servo_auto <= !servo_auto;

ex_auto <= 32'b0;

fine

fine

if(servo_A==1'b0)

inizio

ex_auto <= ex_auto + 1'b1;

if(ex_auto > 10000) //Clock cycle 66MHz, questo PWM è ~0.15ms, il servo ruota a 0 gradi

inizio

servo_auto <= !servo_auto;

ex_auto <= 32'b0;

fine

fine

fine

Passaggio 4: carica il codice Verilog

Image
Image

Fare clic su "Avvia compilazione". Se non viene visualizzato alcun messaggio di errore, andare su "Programmatore" per completare la configurazione dell'hardware. Ricordati di aggiornare il file pof in "Cambia file" se necessario. Fare clic su "Avvia" per caricare il codice.

Dopotutto, dovresti vedere che il servomotore viene ruotato periodicamente.

Consigliato: