Cuprins:
2025 Autor: John Day | [email protected]. Modificat ultima dată: 2025-01-13 06:58
În acest tutorial, vom scrie codul Verilog pentru a controla servomotorul. Servo-ul SG-90 este fabricat de Waveshare. Când cumpărați servomotorul, este posibil să primiți o fișă tehnică care să enumere tensiunea de funcționare, cuplul maxim și modulul de lățime a impulsului propus (PWM) … etc. Cu toate acestea, FPGA DuePrologic furnizează o tensiune de intrare de 3,3V, unde tensiunea de funcționare a servo SG-90 este de 5V - 7V. În lipsa de energie electrică, voi lista PWM-ul meu calibrat pentru a roti cu succes servomotorul.
Sarcina noastră: Servomotorul este rotit înainte și înapoi cu perioada de 5 secunde
Meniu complet:
Pasul 1: Construiți un circuit electronic
Pasul 2: configurați Pin Planner
Faceți clic pe „Începeți analiza temei I / O” pentru a verifica dacă planificatorul de pin este setat corect. În caz contrar, trebuie să importați singur toate porturile.
Pasul 3: Codul Verilog
Creăm un cronometru „servo_count”. Când "servo_A" este HIGH, PWM este de 1,5 ms și, prin urmare, servo-ul este situat la 120 de grade. În schimb, când „servo_A” este scăzut, PWM este de 0,15 ms și, prin urmare, servo-ul rămâne la 0 grade.
assign XIO_2 [3] = servo_pulse; // pentru V '
reg [31: 0] servo_count;
început inițial
servo_count <= 32'b0;
servo_A <= 1'b0;
Sfârșit
mereu @ (posedge CLK_66)
începe
servo_count <= servo_count + 1'b1;
if (servo_count> 400000000) // Ciclul ceasului 66MHz, 1 / 66M * 400000000 ~ 5 secunde
începe
servo_A <=! servo_A;
servo_count <= 32'b0;
Sfârșit
Sfârșit
reg [31: 0] ex_auto;
început inițial
ex_auto <= 32'b0;
servo_auto <= 1'b0;
Sfârșit
mereu @ (posedge CLK_66)
începe
if (servo_A == 1'b1)
începe
ex_auto <= ex_auto + 1'b1;
dacă (ex_auto> 100000) // Ciclu de ceas 66MHz, acest PWM are ~ 1,5 ms, servo se rotește la 120 de grade
începe
servo_auto <=! servo_auto;
ex_auto <= 32'b0;
Sfârșit
Sfârșit
if (servo_A == 1'b0)
începe
ex_auto <= ex_auto + 1'b1;
dacă (ex_auto> 10000) // Ciclu de ceas 66MHz, acest PWM are ~ 0,15 ms, servo se rotește la 0 grade
începe
servo_auto <=! servo_auto;
ex_auto <= 32'b0;
Sfârșit
Sfârșit
Sfârșit
Pasul 4: Încărcați codul Verilog
Faceți clic pe „Porniți compilarea”. Dacă nu este afișat niciun mesaj de eroare, accesați „Programator” pentru a finaliza configurarea hardware. Nu uitați să actualizați fișierul pof în „Schimbați fișierul”, dacă este necesar. Faceți clic pe „Start” pentru a încărca codul.
La urma urmei, ar trebui să vedeți că servomotorul este rotit periodic.