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

V tomto tutoriáli napíšeme kód Verilog na ovládanie servomotora. Servo SG-90 vyrába spoločnosť Waveshare. Pri kúpe servomotora môžete dostať technický list so zoznamom prevádzkového napätia, maximálneho krútiaceho momentu a navrhovanej modulácie šírky impulzu (PWM) … atď. FPGA DuePrologic však poskytuje vstupné napätie 3,3 V, kde je prevádzkové napätie serva SG -90 5 V - 7 V. Pri nedostatku elektrického napájania uvediem svoj kalibrovaný PWM, aby sa servo motor úspešne otočil.

Naša úloha: Servomotor sa otáča tam a späť v priebehu 5 sekúnd

Kompletné menu:

Krok 1: Vytvorte elektronický obvod

Zostavte elektronický obvod
Zostavte elektronický obvod

Krok 2: Nastavte plánovač pinov

Nastavte plánovač pinov
Nastavte plánovač pinov

Kliknutím na „Spustiť analýzu priradenia I/O“skontrolujte, či je plánovač pinov správne nastavený. V opačnom prípade musíte importovať všetky názvy portov sami.

Krok 3: Verilog Code

Vytvárame časovač „servo_count“. Keď je „servo_A“HIGH, PWM je 1,5 ms, a preto je servo umiestnené pri 120 stupňoch. Naopak, keď je „servo_A“NÍZKY, PWM je 0,15 ms, a preto je servo udržiavané na 0 stupňoch.

priradiť XIO_2 [3] = servo_pulse; // pre V '

reg [31: 0] servo_count;

počiatočný začiatok

servo_count <= 32'b0;

servo_A <= 1'b0;

koniec

vždy @(posedge CLK_66)

začať

servo_count <= servo_count + 1'b1;

if (servo_count> 400000000) // Taktovací cyklus 66MHz, 1/66M * 400000000 ~ 5 sekúnd

začať

servo_A <=! servo_A;

servo_count <= 32'b0;

koniec

koniec

reg [31: 0] ex_auto;

počiatočný začiatok

ex_auto <= 32'b0;

servo_auto <= 1'b0;

koniec

vždy @(posedge CLK_66)

začať

ak (servo_A == 1'b1)

začať

ex_auto <= ex_auto + 1'b1;

ak (ex_auto> 100000) // Taktovací cyklus 66 MHz, tento PWM je ~ 1,5 ms, servo sa otáča o 120 stupňov

začať

servo_auto <=! servo_auto;

ex_auto <= 32'b0;

koniec

koniec

ak (servo_A == 1'b0)

začať

ex_auto <= ex_auto + 1'b1;

ak (ex_auto> 10 000) // Taktovací cyklus 66 MHz, tento PWM je ~ 0,15 ms, servo sa otáča o 0 stupňov

začať

servo_auto <=! servo_auto;

ex_auto <= 32'b0;

koniec

koniec

koniec

Krok 4: Nahrajte kód Verilog

Image
Image

Kliknite na „Spustiť kompiláciu“. Ak sa nezobrazí žiadne chybové hlásenie, dokončite nastavenie hardvéru v časti „Programátor“. V prípade potreby nezabudnite aktualizovať súbor pof v časti „Zmeniť súbor“. Kliknutím na tlačidlo „Štart“nahráte kód.

Koniec koncov, mali by ste vidieť, že servomotor sa pravidelne otáča.