instructables VHDL Motor Speed Control Decide a Direzzione è Speed Left and Right Speed Controller
NOTA: Questa pagina hè una parte di una custruzzione più grande. Per piacè assicuratevi di principià QUI, cusì capisce induve si mette in u prughjettu più grande
Overview
A velocità di u mutore è u cuntrollu di a direzzione hè una di e duie divisioni principali in u robot fotodetettore, l'altru hè a divisione di fotodetettore o detector di luce. Mentre a divisione di fotodetettore si focalizeghja nantu à a visione di u robot, a divisione di cuntrollu di a velocità di u mutore è a direzzione si focalizeghja nantu à u muvimentu di u robot. A velocità di u mutore è u cuntrollu di a direzzione di u prucessu di dati datu da a divisione di fotodetettore è dà una pruduzzioni fisica in forma di muvimentu di u mutore.
U scopu di sta divisione hè di cuntrullà a vitezza è a direzzione di u mutore di a manca è di a diritta di u robot di ricerca di luce. Per decide di sti valori, avete bisognu di a dimensione è a pusizione di a luce chì era stata catturata da a camera è trattata da thresholding. Avete ancu bisognu di a vitezza misurata nantu à ognunu di i mutori. Da questi inputs, puderete prucede u valore PWM (Pulse-Width Modulation) per ognunu di i mutori.
Per ottene questu, avete bisognu di fà questi moduli VHDL (liati ancu quì sottu):
- U cuntrollu
- U calculu di errore
- A cunversione binariu
- L'assenza di una fonte di luce
Pudete vede u codice VHDL per questa divisione quì.
Forniture
Hè ricumandemu di codificà cù ISE Design Suite 14.7 perchè pò ancu esse usatu per pruvà u codice in VHDL. Tuttavia, à carica u codice in BASYS 3, vi tuccherà à stallà Vivado (ver. 2015.4 o 2016.4) è scrivite u constraint cù estensione .xdc.
Controllo di Velocità di Motore VHDL: Decide Direzzione è Velocità, Controller di Velocità Manca è Destra: Pagina 1
PASSE DI ISTRUZIONE
Passu 1: U cuntrollu
Per capisce cumu cuntrullà u cumpurtamentu di u robot di ricerca di luce, spiegheremu u cumpurtamentu desideratu di u robot quandu vede una fonte di luce. Stu cumpurtamentu serà cuntrullatu secondu a pusizione è a dimensione di a fonte di luce.
L'algoritmu utilizatu hè analogu à un controller di robot RC, cù una palanca chì pò esse girata à manca o diritta, è una altra palanca chì pò esse girata in avanti o in daretu.
Per circà a luce, vulete chì stu robot si move in una linea recta se a pusizione di a fonte di luce hè ghjustu davanti à u robot. Per fà quessa, vulete a listessa vitezza nantu à i mutori di manca è di diritta. Se a luce hè situata à a manca di u robot, vulete chì u mutore drittu si move più veloce di u mutore di manca per chì u robot pò turnà à a manca versu a luce. À u cuntrariu, se u lume hè situatu à u latu drittu di u robot, vulete chì u mutore di manca si move più veloce di u mutore di dirittu per chì u robot pò turnà à a diritta versu a luce. Questu hè analogu à a palanca di manca di un controller RC, induve pudete cuntrullà si vulete spustà u robot à manca, à diritta o dritta.
Allora, vulete chì u robot si move avanti se a fonte di luce hè luntanu (una piccula fonte di luce), o si move in daretu se a fonte di luce rilevata hè troppu vicinu (grande fonte di luce). Vulete ancu chì u più luntanu u robot hè da a fonte di luce, più veloce u robot si move. Questu hè analogu à a palanca diritta di un controller RC, induve pudete cuntrollà s'ellu vulete avanzà o retrocede, è quantu veloce vulete chì si move.
Puderete tandu derivà una formula matematica per a vitezza di ognunu di i mutori, è scegliemu a gamma di vitezza trà -255 à 255. Un valore negativu significa chì u mutore vultà in daretu, mentre chì un valore pusitivu significa chì u mutore vultà in avanti.
Questu hè l'algoritmu basu per u muvimentu di stu robot. Per sapè di più nantu à stu modulu, cliccate quì.
Passu 2: u calculu di errore
Siccomu avete digià a velocità di u scopu è a direzzione per i mutori, vulete ancu piglià in contu a vitezza misurata è a direzzione di i mutori. S'ellu hà righjuntu u scopu di velocità, vulemu chì u mutore si move solu nantu à u so momentu. Se ùn hè micca, vulemu aghjunghje più veloce à u mutore. In a teoria di u cuntrollu, questu hè cunnisciutu com'è un sistema di cuntrollu di feedback in ciclu chjusu.
Per sapè di più nantu à stu modulu, cliccate quì.
Step 3: A Cunversione Binary
Da i calculi previ, avete digià cunnisciutu l'azzione necessaria per ognunu di i mutori. Tuttavia, i calculi sò fatti cù u binari firmatu. U scopu di stu modulu hè di cunvertisce sti valori firmati in un valore chì pò esse lettu da u generatore PWM, chì sò a direzzione (in u sensu orariu o in u sensu antiurariu) è a velocità (che varieghja da 0 à 255). Inoltre, postu chì u feedback da u mutore hè misuratu in binari senza signu, un altru modulu hè necessariu per cunvertisce i valori senza signu (direzzione è velocità) in un valore firmatu chì pò esse calculatu da u modulu di calculu di errore. Per sapè di più nantu à stu modulu, cliccate quì.
Passu 4: L'Assenza di Fonte di Luce
Avete fattu un robot chì si move per circà a luce quandu a luce hè rilevata da u robot. Ma chì succede quandu u robot ùn rileva micca a luce? U scopu di stu modulu hè di detta ciò chì fà quandu una tale cundizione hè presente.
A manera più faciule è una fonte di luce per circà hè chì u robot rote in u locu. Dopu a rotazione per un certu numaru di sicondi, se u robot ùn hà micca truvatu una fonte di luce, vulete chì u robot smette di muvimenti, per risparmià energia. Dopu à un altru numeru di sicondi, u robot deve rotà in u locu novu per circà a luce. Per sapè di più nantu à stu modulu, cliccate quì.
Passu 5: Cumu Funziona
Pudete riferite à a stampa sopra per questa spiegazione. Cumu l'anu dettu à l'iniziu di questu instructable, avete bisognu di l'inputs "taglia" è "posizione" da a divisione di thresholding. Per assicurà chì questi inputs eranu validi (per esample, quandu vi riceve size = 0, size hè veramente cero perchè a camera ùn detect luce, è micca perchè a camera era sempre inizializzante) avete bisognu di qualchì tipu d'indicatore, chì chjamemu "READY". Sti dati seranu trattati da u cuntrollu (Ctrl. vhd) per determinà a velocità di u scopu di ogni mutore (9 bits, firmatu).
Per una pruduzzioni più stabile nantu à u mutore, vulete usà feedback in un sistema di ciclu chjusu. Questu richiede l'inputs "direzzione" è "velocità" di ogni mutore da a divisione di misurazione di a velocità di u mutore. Siccomu vo vulete include sti inputs à i vostri calculi, vi tuccherà à cunvertisce sti valori unsigned in binariu firmatu 9-bit. Questu hè fattu da u unsigned à u cunvertitore binariu firmatu (US2S.vhd).
Ciò chì u calculu di l'errore (errore. vhd) face hè resta a velocità misurata da a velocità di u scopu per determinà l'azzione per ogni mutore. Questu significa chì quandu i dui anu u stessu valore, a sottrazione diventa cero è u mutore si move solu nantu à u so momentu. Pudete ancu aghjunghje un fattore di multiplicazione in modu chì u robot puderia ghjunghje à a velocità di u scopu più veloce.
Siccomu u cuntrollu di u mutore hà bisognu di a vitezza è a direzzione di ogni mutore, avete da traduce i valori signati di l'azzione in dui valori separati senza signu: velocità (1 bit) è direzzione (8 bits). Questu hè fattu da u cunvertitore binariu firmatu à unsigned (S2US.vhd), è diventerà inputs à a divisione di cuntrollu di u mutore.
Avemu ancu aghjustatu un modulu per determinà ciò chì fà quandu a luce ùn hè micca rilevata (senza cuntatore di luce. Bhd). Siccomu stu modulu hè basicamente un contatore, cuntarà quantu tempu u robot hà bisognu di rotà o di stà in u locu. Questu hà da assicurà chì u robot "vede" u so ambiente piuttostu chè ciò chì ci hè davanti, è cunservà l'energia di a batteria quandu ùn ci hè una fonte di luce veramente dispunibule.
Passu 6: Unisce u Files
Per unisce u files, avete bisognu di cunnette i signali da ogni modulu. Per fà questu, avete da fà un novu modulu di livellu superiore file. Inserite l'inputs è l'output di i moduli precedenti cum'è cumpunenti, aghjunghje segnali per e cunnessione è assignate ogni portu à u paru currispundente. Pudete riferite à e cunnessione nantu à l'illustrazione sopra, è fighjà u codice quì.
Passu 7: Pruvate
Dopu avè finitu cù tuttu u codice, avete bisognu di sapè s'ellu hè u vostru còdice funziona prima di caricallu à u bordu, soprattuttu perchè parte di u codice puderia esse fatta da diverse persone. Questu hè bisognu di un testbench, induve entrerete valori dummy è vede s'ellu u codice si cumporta a manera chì vulemu chì si cumportanu. Pudete restà principià per pruvà ogni modulu, è se tutti funzionanu bè, pudete pruvà u modulu di primu livellu.
Passu 8: Pruvate nantu à u Hardware
Dopu chì u vostru codice hè statu pruvatu in u vostru urdinatore, pudete pruvà u codice nantu à u hardware reale. Avete da fà a limitazione file nantu à Vivado (.xdc file per BASYS 3) per cuntrullà quali inputs è outputs vanu à quale porti.
SUGGERIMENTU IMPURTANTE: Avemu amparatu a manera dura chì i cumpunenti elettrici puderanu avè un valore massimu di currente o voltages. Assicuratevi di riferite à a datasheet per i valori. Per PMOD HB5, assicuratevi di stabilisce u voltage da a fonte di energia à 12 volti (cum'è questu hè u voltage per u mutore), è u currente pocu quantu necessariu per u mutore per move.
Passu 9: Unisce cù altre parti
Se i passi precedenti anu successu, combina u codice cù l'altri gruppi per u codice finali per esse caricatu in u robot. Allora, voilà ! Avete fattu cun successu un robot di ricerca di luce.
Passu 10: Cuntributori
Da manca à diritta:
- Antonius Gregorius Deaven Rivaldi
- Felix Wiguna
- Nicholas Sanjaya
- Richard Medyanto
Assai bellu: Controllo di Velocità di Motore VHDL: Decide Direzzione è Velocità, Controller di Velocità Manca è Destra: Pagina 6
Grazie per reviewing! Stu prughjettu hè in realtà solu una parte di un prughjettu di classa (Robot di ricerca di luce cù scheda BASYS 3 è camera OV7670), cusì aghjustà prestu u ligame à l'istruzzione di a classe!
Geniale: Sò impaziente di vede tuttu inseme.
Documenti / Risorse
![]() |
instructables VHDL Motor Speed Control Decide a Direzzione è Speed Left and Right Speed Controller [pdf] Istruzzioni Controllo di Velocità di Motore VHDL Decide a Direzzione è Velocità Controller di Velocità Manca è Destra, Velocità di Motore VHDL, Cuntrolla Decide a Direzzione è Velocità Controller di Velocità Manca è Destra |