instructables-logo

instructables Controlul vitezei motorului VHDL Decideți direcția și viteza Controlerului de viteză la stânga și la dreapta

instructables-VHDL-Motor-Speed-Control-Decide-Direction-and-Speed-Last-and-Right-Speed-Controller-PRODUCT

NOTA: Această pagină este o parte a unei versiuni mai mari. Vă rugăm să vă asigurați că începeți AICI, astfel încât să înțelegeți unde se potrivește următoarele în cadrul proiectului mai mare

Pesteview

Controlul vitezei și direcției motorului este una dintre cele două diviziuni principale ale robotului fotodetector, cealaltă este divizia fotodetectorului sau detector de lumină. În timp ce diviziunea fotodetectorului se concentrează pe vederea robotului, divizia controlului vitezei și direcției motorului se concentrează pe mișcarea robotului. Viteza motorului și controlul direcției procesează datele date de la divizia fotodetectorului și oferă o ieșire fizică sub formă de mișcare a motorului.

Scopul acestei diviziuni este de a controla viteza și direcția atât a motorului stâng, cât și a celui din dreapta al robotului care caută lumină. Pentru a decide aceste valori, veți avea nevoie de dimensiunea și poziția luminii care au fost captate de cameră și procesate prin thresholding. Veți avea nevoie și de viteza măsurată pe fiecare dintre motoare. Din aceste intrări, veți putea scoate valoarea PWM (Pulse-Width Modulation) pentru fiecare dintre motoare.

Pentru a realiza acest lucru, va trebui să creați aceste module VHDL (de asemenea, legate de mai jos):

  1. Controlul
  2. Calculul erorii
  3. Conversia binară
  4.  Absența unei surse de lumină

Puteți consulta codul VHDL pentru această diviziune aici.

Furnituri
Vă recomandăm să codificați cu ISE Design Suite 14.7, deoarece poate fi folosit și pentru a testa codul în VHDL. Cu toate acestea, pentru a încărca codul în BASYS 3, va trebui să instalați Vivado (ver. 2015.4 sau 2016.4) și să scrieți constrângerea cu extensia .xdc.instructables-VHDL-Motor-Speed-Control-Decide-Direction-and-Speed-Stânga-și-Dreapta-Speed-Controller-fig-1

Controlul vitezei motorului VHDL: Decideți direcția și viteza, Controlerul vitezei la stânga și la dreapta: Pagina 1

PASUL DE INSTRUCȚIUNE

Pasul 1: Controlul
Pentru a înțelege cum să controlăm comportamentul robotului care caută lumină, vom explica comportamentul dorit al robotului atunci când vede o sursă de lumină. Acest comportament va fi controlat în funcție de poziția și dimensiunea sursei de lumină.instructables-VHDL-Motor-Speed-Control-Decide-Direction-and-Speed-Stânga-și-dreapta-Speed-Controller-

Algoritmul utilizat este analog cu un controler de robot RC, cu o pârghie care poate fi rotită la stânga sau la dreapta și o altă pârghie care poate fi rotită înainte sau înapoi.

Pentru a căuta lumina, doriți ca acest robot să se miște în linie dreaptă dacă poziția sursei de lumină este chiar în fața robotului. Pentru a face asta, doriți aceeași viteză atât pe motoarele din stânga, cât și pe cele din dreapta. Dacă lumina este situată pe partea stângă a robotului, doriți ca motorul din dreapta să se miște mai repede decât motorul din stânga, astfel încât robotul să se poată întoarce la stânga spre lumină. În schimb, dacă lumina este situată pe partea dreaptă a robotului, doriți ca motorul din stânga să se miște mai repede decât cel din dreapta, astfel încât robotul să se poată întoarce la dreapta către lumină. Acest lucru este analog cu pârghia din stânga a unui controler RC, unde puteți controla dacă doriți să mutați robotul la stânga, la dreapta sau drept.

Apoi, doriți ca robotul să se deplaseze înainte dacă sursa de lumină este departe (sursă de lumină mică) sau să se deplaseze înapoi dacă sursa de lumină detectată este prea aproape (sursă de lumină mare). De asemenea, doriți ca, cu cât robotul este mai departe de sursa de lumină, cu atât robotul se mișcă mai repede. Acest lucru este analog cu pârghia dreaptă a unui controler RC, unde puteți controla dacă doriți să vă deplasați înainte sau înapoi și cât de repede doriți să se miște.

Puteți obține apoi o formulă matematică pentru viteza fiecăruia dintre motoare și alegem intervalul de viteză între -255 și 255. O valoare negativă înseamnă că motorul se va întoarce înapoi, în timp ce o valoare pozitivă înseamnă că motorul se va întoarce înainte.

Acesta este algoritmul de bază pentru mișcarea acestui robot. Pentru a afla mai multe despre acest modul, faceți clic aici.

Pasul 2: Calculul erorii
Deoarece aveți deja viteza și direcția obiectivului pentru motoare, doriți să luați în considerare și viteza măsurată și direcția motoarelor. Dacă a atins obiectivul de viteză, dorim ca motorul să se miște numai pe impulsul său. Dacă nu, vrem să adăugăm mai multă viteză motorului. În teoria controlului, acesta este cunoscut ca un sistem de control al feedback-ului în buclă închisă.

Pentru a afla mai multe despre acest modul, faceți clic aici.instructables-VHDL-Motor-Speed-Control-Decide-Direction-and-Speed-Stânga-și-Dreapta-Speed-Controller-fig-2

Pasul 3: Conversia binară
Din calculele anterioare, ați cunoscut deja acțiunea necesară pentru fiecare dintre motoare. Cu toate acestea, calculele se fac folosind binar cu semn. Scopul acestui modul este de a converti aceste valori cu semn într-o valoare care poate fi citită de generatorul PWM, care sunt direcția (fie în sensul acelor de ceasornic, fie în sens invers acelor de ceasornic) și viteza (cuprinzând între 0 și 255). De asemenea, deoarece feedback-ul de la motor este măsurat în binar fără semn, este necesar un alt modul pentru a converti valorile fără semn (direcția și viteza) într-o valoare cu semn care poate fi calculată de modulul de calcul al erorilor. Pentru a afla mai multe despre acest modul, faceți clic aici.

Pasul 4: Absența sursei de lumină
Ai creat un robot care se mișcă pentru a căuta lumină atunci când lumina este detectată de robot. Dar ce se întâmplă când robotul nu detectează lumina? Scopul acestui modul este de a dicta ce trebuie făcut atunci când este prezentă o astfel de condiție.

Cel mai simplu mod de a căuta și o sursă de lumină este ca robotul să se rotească pe loc. După ce s-a rotit pentru un număr stabilit de secunde, dacă robotul încă nu a găsit o sursă de lumină, doriți ca robotul să nu se mai miște, pentru a economisi energie. După un alt număr stabilit de secunde, robotul ar trebui să se rotească din nou pentru a căuta lumina. Pentru a afla mai multe despre acest modul, faceți clic aici.

Pasul 5: Cum funcționează
Puteți consulta imaginea de mai sus pentru această explicație. După cum sa menționat la începutul acestui instrucțiuni, veți avea nevoie de intrările „mărime” și „poziție” din diviziunea de prag. Pentru a vă asigura că aceste intrări au fost valide (de exampatunci când primiți dimensiune = 0, dimensiunea este cu adevărat zero pentru că camera nu detectează lumina și nu pentru că camera încă se inițializa) veți avea nevoie și de un fel de indicator, pe care îl numim „READY”. Aceste date vor fi procesate de control (Ctrl. vhd) pentru a determina viteza obiectiv a fiecărui motor (9 biți, semnat).

Pentru o ieșire mai stabilă a motorului, doriți să utilizați feedback într-un sistem în buclă închisă. Acest lucru necesită intrările „direcția” și „viteza” fiecărui motor din diviziunea de măsurare a vitezei motorului. Deoarece doriți să includeți aceste intrări în calcule, va trebui să convertiți aceste valori fără semn în binar cu semn de 9 biți. Acest lucru se face de către convertorul binar nesemnat la semnat (US2S.vhd).

Calculul erorii (error. vhd) face este să scadă viteza măsurată din viteza obiectivului pentru a determina acțiunea pentru fiecare motor. Aceasta înseamnă că, atunci când ambele au aceeași valoare, scăderea devine zero și motorul se va mișca numai pe impulsul său. De asemenea, puteți adăuga un factor de multiplicare, astfel încât robotul să atingă viteza obiectivului mai repede.

Deoarece controlerul de motor are nevoie de viteza și direcția fiecărui motor, trebuie să traduceți valorile cu semn ale acțiunii în două valori separate fără semn: viteza (1 bit) și direcția (8 biți). Acest lucru este realizat de convertorul binar semnat-nesemnat (S2US.vhd) și va deveni intrări pentru divizia de control al motorului.

Am adăugat, de asemenea, un modul pentru a determina ce trebuie făcut atunci când lumina nu este detectată (fără contor de lumină. Bhd). Deoarece acest modul este practic un numărător, va conta cât timp trebuie robotului fie să se rotească, fie să rămână pe loc. Acest lucru va asigura că robotul „văd” mediul său, mai degrabă decât ceea ce este în fața lui și va economisi energia bateriei atunci când nicio sursă de lumină nu este cu adevărat disponibilă.instructables-VHDL-Motor-Speed-Control-Decide-Direction-and-Speed-Stânga-și-Dreapta-Speed-Controller-fig-3

Pasul 6: Combinați Files
Pentru a combina files, trebuie să conectați semnalele de la fiecare modul. Pentru a face asta, trebuie să creați un nou modul de nivel superior file. Introduceți intrările și ieșirile modulelor anterioare ca componente, adăugați semnale pentru conexiuni și atribuiți fiecare port perechii corespunzătoare. Puteți să consultați conexiunile din ilustrația de mai sus și să priviți codul aici.instructables-VHDL-Motor-Speed-Control-Decide-Direction-and-Speed-Stânga-și-Dreapta-Speed-Controller-fig-4

Pasul 7: Testează-l
După ce ați terminat cu întregul cod, trebuie să știți dacă codul funcționează înainte de a-l încărca pe placă, mai ales că părți din cod ar putea fi făcute de persoane diferite. Acest lucru necesită un banc de testare, unde veți introduce valori fictive și veți vedea dacă codul se comportă așa cum vrem să se comporte. Puteți începe prin a testa fiecare modul și, dacă toate funcționează corect, puteți testa apoi modulul de nivel superior.

Pasul 8: Încercați-l pe hardware
După ce codul dvs. a fost testat pe computer, puteți testa codul pe hardware-ul real. Trebuie să faci constrângerea file pe Vivado (.xdc file pentru BASYS 3) pentru a controla ce intrări și ieșiri merg la ce porturi.

SFAT IMPORTANT: Am învățat la greu că componentele electrice ar putea avea o valoare maximă a curentului sau a volumuluitages. Asigurați-vă că consultați fișa de date pentru valori. Pentru PMOD HB5, asigurați-vă că setați voltage de la sursa de alimentare la 12 volți (deoarece acesta este volumul necesartage pentru motor), iar curentul cât este necesar pentru ca motorul să se miște.

Pasul 9: Combinați-l cu alte părți
Dacă pașii anteriori au avut succes, combinați codul cu celelalte grupuri pentru ca codul final să fie încărcat în robot. Atunci, voila! Ați creat cu succes un robot care caută lumină.

Pasul 10: Colaboratori
De la stânga la dreapta:

  • Antonius Gregorius Deaven Rivaldi
  • Felix Wiguna
  • Nicholas Sanjaya
  • Richard Medyantoinstructables-VHDL-Motor-Speed-Control-Decide-Direction-and-Speed-Stânga-și-Dreapta-Speed-Controller-fig-6

Foarte frumos: Controlul vitezei motorului VHDL: Decideți direcția și viteza, Controlerul vitezei la stânga și la dreapta: Pagina 6
Mulțumesc pentru reviewing! Acest proiect este de fapt doar o parte a unui proiect de clasă (Robot căutător de lumină cu placa BASYS 3 și cameră OV7670), așa că voi adăuga în curând linkul la instrucțiunile clasei!

Minunat: Aștept cu nerăbdare să văd totul adunat.

Documente/Resurse

instructables Controlul vitezei motorului VHDL Decideți direcția și viteza Controlerului de viteză la stânga și la dreapta [pdfInstrucțiuni
Controlul vitezei motorului VHDL Stabilirea direcției și vitezei Controlerul vitezei la stânga și la dreapta, Viteza motorului VHDL, Controlerul decide direcția și viteza Controlerului vitezei la stânga și la dreapta

Referințe

Lasă un comentariu

Adresa ta de e-mail nu va fi publicată. Câmpurile obligatorii sunt marcate *