Servo motor FPGA Cyclone IV DueProLogic ovládá: 4 kroky
Servo motor FPGA Cyclone IV DueProLogic ovládá: 4 kroky
Anonim
Servomotor ovládá FPGA Cyclone IV DueProLogic
Servomotor ovládá FPGA Cyclone IV DueProLogic

V tomto tutoriálu budeme psát kód Verilog pro ovládání servomotoru. Servo SG-90 vyrábí společnost Waveshare. Při koupi servomotoru můžete obdržet datový list se seznamem provozního napětí, maximálního točivého momentu a navrhované modulace šířky pulsu (PWM)… atd. FPGA DuePrologic však poskytuje vstupní napětí 3,3 V, kde je provozní napětí serva SG -90 5 V - 7 V. Při nedostatku elektrické energie uvedu svůj kalibrovaný PWM, aby se servomotor úspěšně otočil.

Náš úkol: Servomotor se otáčí tam a zpět po dobu 5 sekund

Kompletní nabídka:

Krok 1: Vybudujte elektronický obvod

Vybudujte elektronický obvod
Vybudujte elektronický obvod

Krok 2: Nastavte Pin Planner

Nastavte plánovač pinů
Nastavte plánovač pinů

Kliknutím na „Spustit analýzu přiřazení I/O“zkontrolujte, zda je plánovač pinů nastaven správně. V opačném případě musíte importovat všechny názvy portů sami.

Krok 3: Verilog Code

Vytvoříme časovač „servo_count“. Když je „servo_A“VYSOKÝ, PWM je 1,5 ms, a proto je servo umístěno na 120 stupňů. Naproti tomu, když je „servo_A“NÍZKÉ, PWM je 0,15 ms, a proto servo zůstane na 0 stupních.

přiřadit XIO_2 [3] = servo_pulse; // pro V '

reg [31: 0] servo_count;

počáteční začátek

servo_count <= 32'b0;

servo_A <= 1'b0;

konec

vždy @(posedge CLK_66)

začít

servo_count <= servo_count + 1'b1;

if (servo_count> 400000000) // Clock cycle 66MHz, 1/66M * 400000000 ~ 5 seconds

začít

servo_A <=! servo_A;

servo_count <= 32'b0;

konec

konec

reg [31: 0] ex_auto;

počáteční začátek

ex_auto <= 32'b0;

servo_auto <= 1'b0;

konec

vždy @(posedge CLK_66)

začít

if (servo_A == 1'b1)

začít

ex_auto <= ex_auto + 1'b1;

if (ex_auto> 100000) // Clock cycle 66MHz, this PWM is ~ 1,5ms, servo rotates to 120 deg

začít

servo_auto <=! servo_auto;

ex_auto <= 32'b0;

konec

konec

if (servo_A == 1'b0)

začít

ex_auto <= ex_auto + 1'b1;

if (ex_auto> 10 000) // Taktovací cyklus 66MHz, tento PWM je ~ 0,15ms, servo se otáčí o 0 stupňů

začít

servo_auto <=! servo_auto;

ex_auto <= 32'b0;

konec

konec

konec

Krok 4: Nahrajte kód Verilog

Image
Image

Klikněte na „Spustit kompilaci“. Pokud se nezobrazí žádná chybová zpráva, dokončete nastavení hardwaru v části „Programátor“. V případě potřeby nezapomeňte aktualizovat soubor pof v části „Změnit soubor“. Kód odešlete kliknutím na „Start“.

Koneckonců byste měli vidět, že se servomotor pravidelně otáčí.

Doporučuje: