Inhoudsopgave:

FPGA Cyclone IV DueProLogic regelt servomotor - Ajarnpa
FPGA Cyclone IV DueProLogic regelt servomotor - Ajarnpa

Video: FPGA Cyclone IV DueProLogic regelt servomotor - Ajarnpa

Video: FPGA Cyclone IV DueProLogic regelt servomotor - Ajarnpa
Video: FPGA Cyclone IV DueProLogic - Push button & LED (Tutorial & code) 2024, November
Anonim
FPGA Cyclone IV DueProLogic regelt servomotor
FPGA Cyclone IV DueProLogic regelt servomotor

In deze tutorial gaan we Verilog-code schrijven om de servomotor te besturen. De servo SG-90 is vervaardigd door Waveshare. Wanneer u de servomotor koopt, ontvangt u mogelijk een gegevensblad met de bedrijfsspanning, het maximale koppel en de voorgestelde pulsbreedtemodulatie (PWM) … enz. De FPGA DuePrologic levert echter een ingangsspanning van 3,3V, waarbij de bedrijfsspanning van servo SG-90 5V - 7V is. Bij gebrek aan elektrische stroom zal ik mijn gekalibreerde PWM vermelden om de servomotor met succes te laten draaien.

Onze taak: de servomotor wordt heen en weer gedraaid met de periode van 5 seconden

Volledig menu:

Stap 1: Bouw een elektronisch circuit

Elektronische schakeling bouwen
Elektronische schakeling bouwen

Stap 2: Pinplanner instellen

Pinplanner instellen
Pinplanner instellen

Klik op "Start I/O Assignment Analysis" om te controleren of de pinplanner correct is ingesteld. Anders moet u alle poortnamen zelf importeren.

Stap 3: Verilog-code

We maken een timer "servo_count". Wanneer "servo_A" HOOG is, is de PWM 1,5 ms en daarom bevindt de servo zich op 120 graden. Wanneer daarentegen "servo_A" LAAG is, is de PWM 0,15 ms en daarom blijft de servo op 0 graden.

toewijzen XIO_2[3] = servo_pulse; //voor V'

reg [31:0] servo_count;

eerste begin

servo_count <= 32'b0;

servo_A <= 1'b0;

einde

altijd @(posedge CLK_66)

beginnen

servo_count <= servo_count + 1'b1;

if (servo_count > 400000000) // Klokcyclus 66 MHz, 1/66 M * 400000000 ~ 5 seconden

beginnen

servo_A <= !servo_A;

servo_count <= 32'b0;

einde

einde

reg [31:0] ex_auto;

eerste begin

ex_auto <= 32'b0;

servo_auto <= 1'b0;

einde

altijd @(posedge CLK_66)

beginnen

if(servo_A==1'b1)

beginnen

ex_auto <= ex_auto + 1'b1;

if (ex_auto> 100000) // Klokcyclus 66 MHz, deze PWM is ~ 1,5 ms, servo draait tot 120 graden

beginnen

servo_auto <= !servo_auto;

ex_auto <= 32'b0;

einde

einde

if(servo_A==1'b0)

beginnen

ex_auto <= ex_auto + 1'b1;

if (ex_auto> 10000) // Klokcyclus 66 MHz, deze PWM is ~ 0,15 ms, servo draait naar 0 graden

beginnen

servo_auto <= !servo_auto;

ex_auto <= 32'b0;

einde

einde

einde

Stap 4: Upload Verilog-code

Image
Image

Klik op "Start Compilatie". Als er geen foutmelding wordt weergegeven, gaat u naar "Programmer" om de hardwareconfiguratie te voltooien. Vergeet niet om het pof-bestand bij te werken in "Bestand wijzigen" indien nodig. Klik op "Start" om de code te uploaden.

Je moet immers zien dat de servomotor periodiek wordt rondgedraaid.

Aanbevolen: