Spisu treści:
2025 Autor: John Day | [email protected]. Ostatnio zmodyfikowany: 2025-01-13 06:58
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
Krok 2: 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
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.