logo instructables

instructables Controllo della velocità del motore VHDL Decidi la direzione e la velocità Regolatore di velocità sinistro e destro

instructables-VHDL-Motor-Speed-Control-Decide-Direction-and-Speed-Left-and-Right-Speed-Controller-PRODOTTO

NOTA: Questa pagina è una parte di una build più ampia. Assicurati di iniziare QUI, in modo da capire dove si inserisce quanto segue all'interno del progetto più ampio

Sopraview

Il controllo della velocità e della direzione del motore è una delle due divisioni principali del robot fotorilevatore, l'altra è la divisione fotorilevatore o rilevatore di luce. Mentre la divisione dei fotorilevatori si concentra sulla visione del robot, la divisione di controllo della velocità e della direzione del motore si concentra sul movimento del robot. La velocità del motore e il controllo della direzione elaborano i dati forniti dalla divisione del fotorivelatore e forniscono un'uscita fisica sotto forma di movimento del motore.

Lo scopo di questa divisione è controllare la velocità e la direzione del motore destro e sinistro del robot a ricerca di luce. Per decidere questi valori, avrai bisogno della dimensione e della posizione della luce che è stata catturata dalla fotocamera ed elaborata tramite soglia. Avrai anche bisogno della velocità misurata su ciascuno dei motori. Da questi ingressi sarà possibile emettere il valore PWM (Pulse-Width Modulation) per ciascuno dei motori.

Per raggiungere questo obiettivo, dovrai creare questi moduli VHDL (collegati anche di seguito):

  1. Il controllo
  2. Il calcolo dell'errore
  3. La conversione binaria
  4.  L'assenza di una fonte di luce

Puoi guardare il codice VHDL per questa divisione qui.

Forniture
Si consiglia di codificare con ISE Design Suite 14.7 in quanto può essere utilizzato anche per testare il codice in VHDL. Tuttavia, per caricare il codice in BASYS 3, sarà necessario installare Vivado (ver. 2015.4 o 2016.4) e scrivere il vincolo con l'estensione .xdc.instructables-VHDL-Motor-Speed-Control-Decide-Direction-and-Speed-Left-and-Right-Speed-Controller-fig-1

Controllo della velocità del motore VHDL: decidere direzione e velocità, regolatore di velocità sinistro e destro: pagina 1

PASSO DI ISTRUZIONE

Passaggio 1: il controllo
Per capire come controllare il comportamento del robot che cerca la luce, spiegheremo il comportamento desiderato del robot quando vede una fonte di luce. Questo comportamento sarà controllato in base alla posizione e alle dimensioni della sorgente luminosa.instructables-VHDL-Motor-Speed-Control-Decide-Direction-and-Speed-Left-and-Right-Speed-Controller-

L'algoritmo utilizzato è analogo a un controller robot RC, con una leva che può essere ruotata a sinistra oa destra e un'altra leva che può essere ruotata in avanti o indietro.

Per cercare la luce, vuoi che questo robot si muova in linea retta se la posizione della sorgente luminosa è proprio di fronte al robot. Per fare ciò, vuoi la stessa velocità sia sul motore sinistro che su quello destro. Se la luce si trova sul lato sinistro del robot, vuoi che il motore destro si muova più velocemente del motore sinistro in modo che il robot possa girare a sinistra verso la luce. Al contrario, se la luce si trova sul lato destro del robot, si desidera che il motore sinistro si muova più velocemente del motore destro in modo che il robot possa girare a destra verso la luce. Questo è analogo alla leva sinistra di un controller RC, in cui puoi controllare se vuoi spostare il robot a sinistra, a destra o dritto.

Quindi, vuoi che il robot si muova in avanti se la fonte di luce è lontana (piccola fonte di luce) o si sposti all'indietro se la fonte di luce rilevata è troppo vicina (grande fonte di luce). Vuoi anche che più lontano è il robot dalla fonte di luce, più velocemente si muove il robot. Questo è analogo alla leva destra di un controller RC, dove puoi controllare se vuoi andare avanti o indietro e quanto velocemente vuoi che si muova.

È quindi possibile derivare una formula matematica per la velocità di ciascuno dei motori e scegliere l'intervallo di velocità compreso tra -255 e 255. Un valore negativo significa che il motore girerà all'indietro, mentre un valore positivo significa che il motore girerà in avanti.

Questo è l'algoritmo di base per il movimento di questo robot. Per saperne di più su questo modulo, clicca qui.

Passaggio 2: il calcolo dell'errore
Poiché si dispone già della velocità e della direzione obiettivo per i motori, si desidera tenere conto anche della velocità e della direzione misurate dei motori. Se ha raggiunto l'obiettivo di velocità, vogliamo che il motore si muova esclusivamente sulla sua quantità di moto. In caso contrario, vogliamo aggiungere più velocità al motore. Nella teoria del controllo, questo è noto come un sistema di controllo del feedback a circuito chiuso.

Per saperne di più su questo modulo, clicca qui.instructables-VHDL-Motor-Speed-Control-Decide-Direction-and-Speed-Left-and-Right-Speed-Controller-fig-2

Passaggio 3: la conversione binaria
Dai calcoli precedenti, hai già conosciuto l'azione necessaria per ciascuno dei motori. Tuttavia, i calcoli vengono eseguiti utilizzando il binario con segno. Lo scopo di questo modulo è convertire questi valori con segno in un valore che può essere letto dal generatore PWM, che sono la direzione (oraria o antioraria) e la velocità (compresa tra 0 e 255). Inoltre, poiché il feedback dal motore viene misurato in binario senza segno, è necessario un altro modulo per convertire i valori senza segno (direzione e velocità) in un valore con segno che può essere calcolato dal modulo di calcolo degli errori. Per saperne di più su questo modulo, clicca qui.

Passaggio 4: l'assenza di una fonte di luce
Hai realizzato un robot che si muove per cercare la luce quando la luce viene rilevata dal robot. Ma cosa succede quando il robot non rileva la luce? Lo scopo di questo modulo è dettare cosa fare quando tale condizione è presente.

Il modo più semplice per cercare una fonte di luce è che il robot ruoti sul posto. Dopo aver ruotato per un determinato numero di secondi, se il robot non ha ancora trovato una fonte di luce, vuoi che il robot smetta di muoversi, per risparmiare energia. Dopo un altro numero prestabilito di secondi, il robot dovrebbe ruotare di nuovo sul posto per cercare la luce. Per saperne di più su questo modulo, clicca qui.

Passaggio 5: come funziona
È possibile fare riferimento all'immagine sopra per questa spiegazione. Come accennato all'inizio di questo instructable, avrai bisogno degli input "size" e "position" dalla divisione di soglia. Per assicurarsi che questi input fossero validi (ad esample, quando ricevi size = 0, size è veramente zero perché la fotocamera non rileva la luce, e non perché la fotocamera stava ancora inizializzando) avrai anche bisogno di un qualche tipo di indicatore, che chiamiamo "READY". Questi dati verranno elaborati dal controllo (Ctrl. vhd) per determinare la velocità obiettivo di ciascun motore (9 bit, con segno).

Per un'uscita più stabile sul motore, si desidera utilizzare il feedback in un sistema a circuito chiuso. Ciò richiede gli input "direzione" e "velocità" di ciascun motore dalla divisione di misurazione della velocità del motore. Poiché desideri includere questi input nei tuoi calcoli, dovrai convertire questi valori senza segno in binario con segno a 9 bit. Questa operazione viene eseguita dal convertitore binario da non firmato a con segno (US2S.vhd).

Ciò che fa il calcolo dell'errore (error. vhd) è sottrarre la velocità misurata dalla velocità obiettivo per determinare l'azione per ciascun motore. Ciò significa che quando entrambi hanno lo stesso valore, la sottrazione diventa zero e il motore si muoverà esclusivamente sulla sua quantità di moto. Puoi anche aggiungere un fattore di moltiplicazione in modo che il robot possa raggiungere la velocità obiettivo più velocemente.

Poiché il controller del motore necessita della velocità e della direzione di ciascun motore, è necessario tradurre i valori con segno dell'azione in due valori senza segno separati: velocità (1 bit) e direzione (8 bit). Questa operazione viene eseguita dal convertitore binario da segno a senza segno (S2US.vhd) e diventerà un ingresso per la divisione di controllo del motore.

Abbiamo anche aggiunto un modulo per determinare cosa fare quando la luce non viene rilevata (nessun contatore di luce. Bhd). Poiché questo modulo è fondamentalmente un contatore, conterà il tempo necessario al robot per ruotare o rimanere in posizione. Ciò garantirà che il robot "veda" il suo ambiente anziché solo ciò che gli sta di fronte e conserverà la carica della batteria quando nessuna fonte di luce è veramente disponibile.instructables-VHDL-Motor-Speed-Control-Decide-Direction-and-Speed-Left-and-Right-Speed-Controller-fig-3

Passaggio 6: unisci il Files
Per combinare il files, è necessario collegare i segnali da ciascun modulo. Per fare ciò, devi creare un nuovo modulo di livello superiore file. Inserire come componenti gli ingressi e le uscite dei moduli precedenti, aggiungere i segnali per le connessioni e assegnare ogni porta alla coppia corrispondente. Puoi fare riferimento alle connessioni nell'illustrazione sopra e guardare il codice qui.instructables-VHDL-Motor-Speed-Control-Decide-Direction-and-Speed-Left-and-Right-Speed-Controller-fig-4

Passaggio 7: testarlo
Dopo aver finito con l'intero codice, devi sapere se il tuo codice funziona prima di caricarlo sulla bacheca, soprattutto perché parti del codice potrebbero essere state create da persone diverse. Ciò richiede un banco di prova, in cui inserirai valori fittizi e vedrai se il codice si comporta nel modo in cui vogliamo che si comporti. Puoi riposare testando ogni modulo e, se funzionano tutti correttamente, puoi testare il modulo di livello superiore.

Passaggio 8: provalo sull'hardware
Dopo che il tuo codice è stato testato sul tuo computer, puoi testare il codice sull'hardware reale. Devi fare il vincolo file su Vivado (.xdc file per BASYS 3) per controllare quali ingressi e uscite vanno a quali porte.

SUGGERIMENTO IMPORTANTE: Abbiamo imparato a nostre spese che i componenti elettrici possono avere un valore massimo di corrente o voltages. Assicurati di fare riferimento alla scheda tecnica per i valori. Per PMOD HB5, assicurati di impostare il voltage dalla fonte di alimentazione a 12 volt (poiché questo è il voltage per il motore) e la corrente minima necessaria per il movimento del motore.

Passaggio 9: combinalo con altre parti
Se i passaggi precedenti hanno avuto successo, combina il codice con gli altri gruppi per il codice finale da caricare nel robot. Quindi, voilà! Hai creato con successo un robot che cerca la luce.

Passaggio 10: contributori
Da sinistra a destra:

  • Antonius Gregorius Deaven Rivaldi
  • Felix Wiguna
  • Nicola Sanjaya
  • Riccardo Mediantoinstructables-VHDL-Motor-Speed-Control-Decide-Direction-and-Speed-Left-and-Right-Speed-Controller-fig-6

Molto bello: Controllo della velocità del motore VHDL: decidere direzione e velocità, regolatore di velocità sinistro e destro: pagina 6
Grazie per reviewing! Questo progetto è in realtà solo una parte di un progetto di classe (Light Seeking Robot con scheda BASYS 3 e fotocamera OV7670), quindi aggiungerò presto il link all'istruttore della classe!

Eccezionale: Non vedo l'ora di vedere tutto messo insieme.

Documenti / Risorse

instructables Controllo della velocità del motore VHDL Decidi la direzione e la velocità Regolatore di velocità sinistro e destro [pdf] Istruzioni
Controllo della velocità del motore VHDL Decidi direzione e velocità Regolatore di velocità sinistro e destro, velocità del motore VHDL, Controllo Decidi direzione e velocità Regolatore di velocità sinistro e destro

Riferimenti

Lascia un commento

Il tuo indirizzo email non verrà pubblicato. I campi obbligatori sono contrassegnati *