FPGA Cyclone IV DueProLogic steruje serwomotorem: 4 kroki
FPGA Cyclone IV DueProLogic steruje serwomotorem: 4 kroki
Anonim
FPGA Cyclone IV DueProLogic steruje serwomotorem
FPGA Cyclone IV DueProLogic steruje serwomotorem

W tym samouczku napiszemy kod Verilog do sterowania serwomotorem. Serwo SG-90 jest produkowane przez firmę Waveshare. Kupując serwosilnik, możesz otrzymać arkusz danych zawierający napięcie robocze, maksymalny moment obrotowy i proponowaną modulację szerokości impulsu (PWM)… itd. Jednak FPGA DuePrologic zapewnia napięcie wejściowe 3,3V, podczas gdy napięcie robocze serwomechanizmu SG-90 wynosi 5V - 7V. W przypadku braku zasilania elektrycznego wymienię mój skalibrowany PWM, aby pomyślnie obrócić serwomotor.

Nasze zadanie: Serwomotor obraca się tam i z powrotem z okresem 5 sekund

Pełne menu:

Krok 1: Zbuduj obwód elektroniczny

Zbuduj obwód elektroniczny
Zbuduj obwód elektroniczny

Krok 2: Skonfiguruj Pin Planner

Skonfiguruj Pin Planner
Skonfiguruj Pin Planner

Kliknij „Rozpocznij analizę przypisania we/wy”, aby sprawdzić, czy planer pinów jest ustawiony prawidłowo. W przeciwnym razie musisz samodzielnie zaimportować wszystkie nazwy portów.

Krok 3: Kod Verilog

Tworzymy timer "servo_count". Gdy „servo_A” jest WYSOKIE, PWM wynosi 1,5 ms, a zatem serwo znajduje się na 120 st. C. W przeciwieństwie do tego, gdy „servo_A” jest LOW, PWM wynosi 0,15 ms i dlatego serwo jest utrzymywane na poziomie 0 stopni.

przypisz XIO_2[3] = servo_pulse; //dla V'

reg [31:0] licznik_serw;

początkowy początek

servo_count <= 32'b0;

serwo_A <= 1'b0;

kończyć się

zawsze @(posge CLK_66)

rozpocząć

servo_count <= servo_count + 1'b1;

if(servo_count > 40000000) //Cykl zegara 66MHz, 1/66M * 400000000 ~ 5 sekund

rozpocząć

serwo_A <= !serwo_A;

servo_count <= 32'b0;

kończyć się

kończyć się

reg [31:0] ex_auto;

początkowy początek

ex_auto <= 32'b0;

servo_auto <= 1'b0;

kończyć się

zawsze @(posge CLK_66)

rozpocząć

if(serwo_A==1'b1)

rozpocząć

ex_auto <= ex_auto + 1'b1;

if(ex_auto > 100000) //Cykl zegara 66MHz, ten PWM to ~1.5ms, serwo obraca się do 120 stopni

rozpocząć

serwo_auto <= !serwo_auto;

ex_auto <= 32'b0;

kończyć się

kończyć się

jeśli(serwo_A==1'b0)

rozpocząć

ex_auto <= ex_auto + 1'b1;

if(ex_auto > 10000) //Cykl zegara 66MHz, to PWM ~0.15ms, serwo obraca się do 0 stopni

rozpocząć

serwo_auto <= !serwo_auto;

ex_auto <= 32'b0;

kończyć się

kończyć się

kończyć się

Krok 4: Prześlij kod Verilog

Image
Image

Kliknij „Rozpocznij kompilację”. Jeśli nie jest wyświetlany żaden komunikat o błędzie, przejdź do „Programisty”, aby zakończyć konfigurację sprzętu. Pamiętaj, aby w razie potrzeby zaktualizować plik pof w "Zmień plik". Kliknij „Start”, aby przesłać kod.

W końcu powinieneś zobaczyć, że serwomotor jest okresowo obracany.