Sommario:
2025 Autore: John Day | [email protected]. Ultima modifica: 2025-01-13 06:57
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
Passaggio 2: imposta il pianificatore di pin
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
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.