UN PROGETTO DI: REBELLATO Elia & BENOTTO Daniele Classe 5^Bet 2012/2013 Cingolato Radiocomandato Rebellato Elia – Benotto Daniele Pag. 1 Indice 1. 2. 3. 4. 5. 6. 7. 8. Descrizione generale del progetto Schema a blocchi del progetto Descrizione hardware Descrizione software Descrizione delle fasi di costruzione Datasheet dei componenti Schemi elettrici Elenco componenti pag. 3 pag. 4 pag. 5 pag. 12 pag. 20 pag. 22 pag. 36 pag. 41 Cingolato Radiocomandato Rebellato Elia – Benotto Daniele Pag. 2 Descrizione generale del progetto Il progetto che abbiamo costruito consiste in un veicolo cingolato controllato dal computer che ci permette di muoverlo in tutte le direzioni. Questo è possibile grazie a due motori in corrente continua posti sul retro del veicolo che, a seconda del verso in cui girano, muovono i cingoli avanti e indietro. I motori vengono controllati tramite il ponte H che consente di regolare la velocità e di cambiare la direzione. I comandi vengono inviati dal computer ad un microcontrollore che, a sua volta, invia i dati tramite un modulo radio wireless alimentato via usb. Questi vengono ricevuti da un altro modulo radio wireless posto nel circuito sopra il mezzo, alimentato da una batteria che fornisce la corrente necessaria per il funzionamento del circuito. I motori sono pilotati da un microcontrollore che gestisce i driver, i quali controllano un circuito di potenza (ponte H) che fornisce tensione ai motori. Cingolato Radiocomandato Rebellato Elia – Benotto Daniele Pag. 3 Schema a blocchi Trasmettitore Computer Connettore USB Modulo radio Microcontrollore PIC18F4550 Led Antenna Schema a blocchi Ricevitore Antenna Modulo radio Microcontrollore PIC18F4520 Driver Led Led Ponte H Motore Sinistro Motore Destro Cingolato Radiocomandato Rebellato Elia – Benotto Daniele Led Pag. 4 Descrizione Hardware Connettore USB L’Universal Serial Bus è uno standard di comunicazione seriale che consente di collegare diverse periferiche a un computer. Lo standard prevede che il connettore porti anche un cavo (VBUS) per alimentare le periferiche a basso consumo fino a 5V. Nel nostro progetto per comodità abbiamo utilizzato l’USB tipo B versione 2.0, che supporta collegamenti a 480 Mbit/s. Il circuito per l’invio dei dati è alimentato a 5V quindi questo metodo ci è risultato essere il migliore. Pin 1 2 3 4 5 Nome segnale VBUS DD+ ID GND Colore filo Rosso Bianco Verde Fucsia Nero Note +5V Data Data + Non connesso Massa PIC18F4550 Cingolato Radiocomandato Rebellato Elia – Benotto Daniele Pag. 5 Il microcontrollore è progettato per interagire direttamente con il circuito tramite un programma residente nella propria memoria interna e mediante l’uso di pin specializzati e configurabili dal programmatore. Abbiamo adoperato questo pic perché dispone di una quantità sufficiente di porte e di una velocità adeguata alle le nostre esigenze, inoltre è già predisposto per la comunicazione USB e lavora a 8 bit. I 40 piedini non ci sono serviti tutti, dato che abbiamo controllato solo la radio. Abbiamo inserito un oscillatore esterno da 20MHz per far in modo che la precisone del clock fosse alta in modo da comunicare adeguatamente con la periferica USB. Per avere un riscontro visivo sul funzionamento del programma, abbiamo incluso tre led di differente colore, che lampeggiano a seconda delle operazioni che sta svolgendo il micro. Cingolato Radiocomandato Rebellato Elia – Benotto Daniele Pag. 6 PIC18F4520 Questo microcontrollore è molto simile al PIC18F4550 solo che non ha la possibilità di collegare l’USB. In questo caso il numero di piedini utilizzati è stato maggiore, perché abbiamo controllato i driver dei motori, le luci del cingolato e la radio. Non è servito mettere un oscillatore esterno, perché il pic dispone già di uno interno e anche in questo caso abbiamo messo un led per verificare se il programma stesse funzionando. LM1117 Il circuito di invio, oltre che dei 5 V forniti dall’USB, ha bisogno di alimentare il modulo wireless che funziona a 3.3 V, e per questo abbiamo messo uno stabilizzatore di tensione che, opportunamente polarizzato, ha il compito di abbassare la tensione. Nel circuito di ricezione, oltre alla tensione della batteria da 6 V per alimentare i motori, ce ne servono altre due: la prima sono i 5 V necessari per l’alimentazione del microcontrollore, dei driver e della porta logica; la seconda sono i 3.3 V per l’alimentazione del modulo radio wireless. Cingolato Radiocomandato Rebellato Elia – Benotto Daniele Pag. 7 Modulo radio wireless usb Questo tipo di modulo radio basa la trasmissione dati sulla modulazione DSSS, che è un particolare tipo di modulazione che sfrutta la tecnica di comunicazione a spettro espanso (spread spectrum). Spreading è il termine che indica il processo con cui lo spettro di un segnale viene espanso su una banda molto più grande di quella del segnale informativo in ingresso moltiplicandolo per un segnale di spreading che ha una banda molto maggiore di quella del segnale in origine. Si ha cosi una distribuzione della potenza del segnale su una banda larga, quindi una potenza per unita di banda molto piccola. In ricezione si esegue il despreading, cioè si moltiplica il segnale ricevuto per lo stesso segnale per cui lo si è moltiplicato in trasmissione e si eliminano le alte frequenze con un filtro passa basso. Questo sistema permette di condividere la banda con altri utenti di uno stesso sistema senza creare interferenze, basta che ognuno utilizzi un codice di spreading differente e trasmetta con una bassa densità spettrale di potenza. Questo modulo è stato scelto in base alla portata di circa 40 m, che è più che sufficiente per la nostra applicazione, e in base alla frequenza di lavoro di 2.4 GHz. Cingolato Radiocomandato Rebellato Elia – Benotto Daniele Pag. 8 74HC14 È una porta logica NOT trigger usata per negare il segnale PWM che pilota uno dei due driver per ciascun motore. Abbiamo scelto la famiglia HC perché la commutazione del segnale è molto più veloce rispetto alla famiglia LS. Il Trigger di Schmitt è un particolare tipo di comparatore di soglia con isteresi, ovvero un circuito che consente di trasformare un segnale analogico in un'uscita che varia soltanto tra due valori di tensione a seconda che l'ingresso superi una certa soglia o sia inferiore ad una seconda soglia (più bassa). Questo schema ci può aiutare a capire il funzionamento: Cingolato Radiocomandato Rebellato Elia – Benotto Daniele Pag. 9 Mosfet a Ponte H Abbiamo preferito utilizzare la tecnologia dei mosfet perché, nel comportamento da interruttore chiuso, dissipano una potenza minore rispetto ai transistor. I transistor in saturazione hanno una VCE pari a 0.2 V, mentre i mosfet hanno una tensione tra drain e source molto più piccola. Dato che la potenza dissipata è data dal prodotto tra tensione e corrente, se la corrente che attraversa il dispositivo e alta, il transistor si surriscalda molto di più del mosfet. Il ponte H è un circuito elettronico che può funzionare nei quattro quadranti del piano corrente-tensione sul carico. Nel convertitore a quattro quadranti corrente e tensione di carico possono essere sia positive che negative. Per un carico induttivo, proprio il caso di un motore in continua, questo tipo di convertitore può controllare il flusso di potenza e la velocità del motore nel funzionamento diretto (tensione e corrente di carico positive), nella frenatura a recupero diretto (tensione di carico positiva e corrente di carico negativa), nel funzionamento inverso (tensione e corrente di carico negative) e nella frenatura a recupero inverso (tensione di carico negativa e corrente di carico positiva). Cingolato Radiocomandato Rebellato Elia – Benotto Daniele Pag. 10 Driver Il segnale PWM che proviene dal microcontrollore non è sufficientemente potente per controllare adeguatamente i mosfet, che sono gli elementi principali nel controllo del motore. Essendo racchiusi in un ponte ad “H” devono operare come interruttori, cioè devono entrare in conduzione o spegnersi per far passare corrente sui motori, in base a degli intervalli di tempo (molto piccoli). Per garantire al gate del mosfet un segnale con livelli logici corretti e abbastanza potente si usano i driver. Il driver, quindi, deve fornire una VGATE positiva, per far entrare in conduzione il mosfet, e una VGATE uguale a 0 nel caso in cui lo si voglia spegnere, o meglio, una VGATE minore di zero, per evitare accensioni indesiderate dovute ai disturbi. Inoltre il tempo di accensione dei mosfet dipende dal valore della corrente di gate, quindi il progettista deve dimensionare opportunamente i driver affinché riescano ad erogare la corrente desiderata. Cingolato Radiocomandato Rebellato Elia – Benotto Daniele Pag. 11 Descrizione Software La comunicazione tra il computer e il circuito di trasmissione avviene tramite un cavo USB. Windows grazie a degli appositi driver, non riconosce il collegamento come una vera e propria comunicazione attraverso il cavo USB, ma attraverso una porta COM, così da avere una gestione più semplice della comunicazione, anche se più lenta, con Visual Basic 6.0. All'avvio del programma viene richiesto il numero della porta COM “virtuale” ove è collegato il circuito. Dopo aver impostato il numero della porta, si aprirà la seguente finestra: Cingolato Radiocomandato Rebellato Elia – Benotto Daniele Pag. 12 Controllo USB In questo Frame verrà gestita la porta virtuale che è stata impostata precedentemente. Per iniziare ad inviare dati è necessario spuntare, dopo aver cliccato sul pulsante “Apri”, la casella “Comunicazione Disattivata”, in questo modo verrà attivato il timer “timerDati” che ogni 5 ms provvederà a chiudere tutti i dati che servono al cingolato in una stringa e ad inviare quest'ultima al circuito di trasmissione. La stringa dei dati è la seguente: 2 velSX velDX temp checksum / / / I numeri contenuti nelle variabili sopra indicate verranno convertiti in caratteri secondo la tabella ascii. Il primo carattere della stringa indica l'inizio del pacchetto, il secondo e il terzo contengono la velocità del motore sinistro e del motore destro, la variabile “temp” potrà essere 1 o 0 e indica se i fari della macchina sono accesi o spenti. Il checksum verrà calcolato eseguendo l'operazione XOR tra le velocità dei due motori. Di seguito il codice in Visual Basic che esegue quanto descritto sopra: StringaTX = Chr$(2) & Chr$(velSX) & Chr$(velDX) & Chr$(temp) & Chr$(velSX Xor (velDX)) & Chr$(166) If MSComm1.PortOpen = True Then MSComm1.Output = StringaTX Per convertire il numero in carattere viene utilizzata la funzione “Chr$(var)”. Es: Chr$(65) = “A” . È stato deciso di convertire i numeri in caratteri per ottenere una comunicazione più pulita e ordinata. Cingolato Radiocomandato Rebellato Elia – Benotto Daniele Pag. 13 Modalità di controllo separata In questa modalità di controllo i motori vengono gestiti in modo separato tramite due scrollbar che vanno da -100 a +100. È possibile quindi modificare la velocità del motore trascinando il cursore o cliccando il pulsante “Carica” dopo aver inserito il valore nella apposita casella. Per fermare il cingolato è necessario cliccare sui due pulsanti “Ferma”. In questa modalità è possibile anche comandare i motori premendo i pulsanti del tastierino numerico 4,5,7,8. Alla pressione del tasto 4 il motore di sinistra avrà una velocità del -100% (quindi andrà indietro) mentre alla pressione del tasto 7 la velocità sarà del +100%. I tasti 5 e 8 controllano il motore destro. Modalità di controllo con cloche Questo blocco è ispirato ai joystick del Pc, di conseguenza deve essere immaginato come uno di questi visto dall'alto. Trascinando il cerchio blu (Cloche) verso l'alto la velocità di tutti e due i motori verrà aumentata in modo proporzionale, mentre trascinandolo verso il basso verrà diminuita. Trascinando la cloche verso sinistra invece, aumenterà solo la velocità del motore destro, mentre quella del motore sinistro diminuirà. Viceversa nella direzione opposta. Cingolato Radiocomandato Rebellato Elia – Benotto Daniele Pag. 14 La cloche torna automaticamente alla posizione centrale quando viene rilasciata: per evitare questo evento è necessario togliere la spunta alla casella “Auto-centramento al rilascio della cloche”. Modalità di controllo con percorso In questa sezione è possibile creare un percorso che la macchina dovrà eseguire automaticamente. Per costruire il tragitto bisogna inserire la velocità (compresa tra 100% e +100%) dei due motori e il tempo in millisecondi che indica per quanto deve essere tenuto quell'andamento. Dopo aver caricato il percorso è sufficiente premere il pulsante “Esegui percorso prestabilito” che attiverà il timer “timerPercorso”, quest'ultimo provvederà a inviare alla macchina la velocità dei motori come stabilito nel listbox. Man mano che viene eseguito il tragitto verrà selezionato nella listbox il punto in cui il veicolo è arrivato. Per interrompere il percorso è necessario premere il pulsante “INTERROMPI”. È possibile inoltre eliminare un solo punto del percorso selezionandolo e premendo sul tasto “Elimina selezionato”; per eliminare l'intero percorso, invece, bisogna premere il pulsante “Elimina tutto”. Cingolato Radiocomandato Rebellato Elia – Benotto Daniele Pag. 15 Nella listbox i dati vengono memorizzati come segue: “Motore SX:10% ; Motore DX:10% ; Per:10ms” Per permettere al programma di capire la velocità dei motori e il tempo, è stata utilizzata la funzione Split: temp = Split(percorso.List(indexPath), ":") temp1 = Split(temp(1), "%") velSX = 100 + temp1(0) temp1 = Split(temp(2), "%") velDX = 100 + temp1(0) temp1 = Split(temp(3), "m") Questa funzione divide una variabile e restituisce un array. Esempio: variabile = “ciao, mondo” seguendo la funzione Split sul carattere “,” ottengo un array del tipo: array[0] = “Ciao” array[1]= ” mondo” Cingolato Radiocomandato Rebellato Elia – Benotto Daniele Pag. 16 Diagramma di flusso del trasmettitore Inizio Inizializzazione programma Controllo dati ricevuti da USB Invio dei dati via Radio Durante la fase di inizializzazione programma è necessario impostare quali piedini del pic verranno utilizzati come ingressi e quali verranno utilizzati come uscite. Dopo aver regolato tutti i valori necessari al funzionamento del pic, è necessario avviare la comunicazione USB con il computer, affinché quest'ultimo possa riconoscere il circuito, e la comunicazione con il modulo radio. Verranno quindi impostati gli Interrupt e i timer, indispensabili per il funzionamento del programma. Cingolato Radiocomandato Rebellato Elia – Benotto Daniele Pag. 17 A questo punto il circuito continuerà a controllare se riceve dati dal computer tramite la funzione “USBtask();” che verranno elaborati, una volta ricevuti, nella funzione “processIO();”. Dopo aver ricevuto tutta la stringa, la funzione “SendRad();” invierà tutto il pacchetto via radio. Diagramma di flusso del ricevitore Inizio Inizializzazione programma Controllo dati ricevuti via Radio Elaborazione dati e gestione motori Come nel circuito di trasmissione, all'avvio del programma verranno svolte tutte quelle funzioni che impostano i parametri per il funzionamento del pic. Cingolato Radiocomandato Rebellato Elia – Benotto Daniele Pag. 18 Verrà quindi abilitata la ricezione della radio e, ad ogni pacchetto ricevuto, verrà eseguita l'operazione XOR con le velocità dei due motori che sono state ricevute, il risultato verrà confrontato con il checksum ricevuto. Se le due variabili risultano uguali i valori ricevuti verranno memorizzati nelle variabili globali del programma, altrimenti verranno scartati. Il programma, una volta avviato, continuerà ad eseguire la funzione “InitPwm();” che controlla il ponte H: if (velocitaSX == 0) PWM1_OFF; //Motore Sinistra else { if (uptimerVelSX < 1) { if (uptimerVelSX == 0) { --uptimerVelSX; PWM1_OFF; } --downtimerVelSX; if (downtimerVelSX < 1) { uptimerVelSX = velocitaSX; downtimerVelSX = 100 - velocitaSX; PWM1_ON; } } else --uptimerVelSX; } if (direzioneSX == 1) PORT1_ON; //direzione Motore Sinistra else PORT1_OFF; Questa routine segue la seguente logica: 1 2 3 *…+ 100 101 102 *…+ 119 120 uptimerVelSX 80 (velocitaSX) 99 98 *…+ 1 0 0 0 0 80 (velocitaSX) downtimerVelSX 20 (100-velocitSX) 20 20 20 20 19 18 *…+ 1 20 (100-velocitaSX) PWM1 1 1 1 1 1 0 0 0 0 1 Cingolato Radiocomandato Rebellato Elia – Benotto Daniele Pag. 19 Descrizione delle fasi di costruzione Nel mese di ottobre 2012 abbiamo pensato di costruire qualcosa che avrebbe potuto interessare coloro che avrebbero visto il nostro progetto. L’idea era quella di una macchina radiocomandata da un telecomando, progetto che avevano già svolto dei ragazzi di quinta l’anno scorso e su cui ci potevamo basare per non partire ‘allo sbaraglio’. Pensavamo di partire da zero, costruendoci l’intera macchina, con due motori passo passo e quattro ruote, con la possibilità di farla sterzare come una vera macchina. Dopo alcuni consigli dell’ingegner Michele Visentin e del dottor Joe Rigato abbiamo deciso di modificare il progetto per una questione di tempi e di semplicità. Abbiamo quindi recuperato da un escavatore giocattolo la base, formata da due cingoli che girano grazie a due motori in corrente continua. Dopo aver definito tutto il materiale che era necessario abbiamo effettuato gli ordini dei componenti che non erano disponibili in laboratorio. Una volta ottenuti tutti i componenti necessari, abbiamo iniziato a costruire il circuito di invio e, dopo averlo terminato, abbiamo verificato che non fossero presenti cortocircuiti e che i collegamenti fossero esatti. Finito di costruire anche il circuito della macchina e fatto il programma in VisualBasic, abbiamo provato a comunicare. Durante questa fase è stato necessario aggiungere un condensatore ad un piedino del microcontrollore nel circuito di invio per stabilizzare la tensione di alimentazione fornita dall’usb, in modo che il computer riconoscesse la Cingolato Radiocomandato Rebellato Elia – Benotto Daniele Pag. 20 periferica. In seguito abbiamo apportato delle modifiche al programma che gestiva lo scambio dei dati tra le due schede, e fatte le opportune verifiche, abbiamo collaudato l’intero progetto, provando anche del divertimento nel veder muovere il cingolato ai nostri comandi. Cingolato Radiocomandato Rebellato Elia – Benotto Daniele Pag. 21 Datasheet dei componenti PIC18F4550 Cingolato Radiocomandato Rebellato Elia – Benotto Daniele Pag. 22 Cingolato Radiocomandato Rebellato Elia – Benotto Daniele Pag. 23 PIC18F4520 Cingolato Radiocomandato Rebellato Elia – Benotto Daniele Pag. 24 Cingolato Radiocomandato Rebellato Elia – Benotto Daniele Pag. 25 LM1117 Cingolato Radiocomandato Rebellato Elia – Benotto Daniele Pag. 26 Cingolato Radiocomandato Rebellato Elia – Benotto Daniele Pag. 27 74HC14 Cingolato Radiocomandato Rebellato Elia – Benotto Daniele Pag. 28 Driver TC4468 Cingolato Radiocomandato Rebellato Elia – Benotto Daniele Pag. 29 Cingolato Radiocomandato Rebellato Elia – Benotto Daniele Pag. 30 Cingolato Radiocomandato Rebellato Elia – Benotto Daniele Pag. 31 Mosfet FQP50N06L Cingolato Radiocomandato Rebellato Elia – Benotto Daniele Pag. 32 Cingolato Radiocomandato Rebellato Elia – Benotto Daniele Pag. 33 Modulo radio CYWM6935 Cingolato Radiocomandato Rebellato Elia – Benotto Daniele Pag. 34 Cingolato Radiocomandato Rebellato Elia – Benotto Daniele Pag. 35 Schemi elettrici Microcontrollore Trasmettitore Cingolato Radiocomandato Rebellato Elia – Benotto Daniele Pag. 36 Trasmettitore Cingolato Radiocomandato Rebellato Elia – Benotto Daniele Pag. 37 Microcontrollore ricezione Cingolato Radiocomandato Rebellato Elia – Benotto Daniele Pag. 38 Motore Destro Cingolato Radiocomandato Rebellato Elia – Benotto Daniele Pag. 39 Motore Sinistro Cingolato Radiocomandato Rebellato Elia – Benotto Daniele Pag. 40 Elenco componenti Parte trasmissione 1 microcontrollore PIC18F4550 1 modulo radio wireless CYWM6935 1 connettore usb femmina tipo B 1 stabilizzatore di tensione LM1117-ADJ 1 quarzo 20MHz 1 resistenza 1 MΩ, 1/4W 1 resistenza 100 KΩ, 1/4W 7 resistenze 10 KΩ, 1/4W 1 resistenza 1.5 KΩ, 1/4W 5 resistenza 1 KΩ, 1/4W 1 resistenza 100 Ω, 1/4W 1 resistenza 150 Ω, 1/4W 5 resistenze 470 Ω, 1/4W 5 condensatori a film plastico 100 nF 1 condensatore elettrolitico 10 μF 2 condensatori ceramici 22 pF 2 diodi 1N4148 2 led verdi 1 led rosso 1 led giallo Cingolato Radiocomandato Rebellato Elia – Benotto Daniele Pag. 41 Parte ricezione 1 microcontrollore PIC18F4520 1 modulo radio wireless CYWM6935 2 driver TC4468 1 integrato 74HC14 4 mosfet FQP50N06L 4 mosfet IRF9540 3 morsettiere 2 pin 1 base cingolato 2 motori in CC 2 stabilizzatori di tensione LM1117-ADJ 3 resistenze 10 KΩ, 1/4W 1 resistenza 1.5 KΩ, 1/4W 3 resistenze 1 KΩ, 1/4W 5 resistenze 470 Ω, 1/4W 1 resistenza 330 Ω, 1/4W 1 resistenza 150 Ω, 1/4W 1 resistenza 100 Ω, 1/4W 4 resistenze 10 Ω, 1/4W 20 resistenze 1 Ω, 1/2W 3 condensatori a film plastico 10 nF 2 condensatori elettrolitici 470 μF 25V 3 condensatori a film plastico 100 nF 2 condensatori elettrolitici 10 μF 2 condensatori elettrolitici 1 μF 1 trimmer 5 KΩ 5 diodi 1N4148 2 led verdi, gialli, rossi Cingolato Radiocomandato Rebellato Elia – Benotto Daniele Pag. 42 Cingolato Radiocomandato Rebellato Elia – Benotto Daniele Pag. 43 Ringraziamenti Un ringraziamento particolare all’ingegner Michele Visentin per l’aiuto che ci ha dato nella programmazione dei pic, al professor Rigato Joe che ci ha sostenuto e consigliato nella progettazione e a Cirillo Riccardo che ci ha aiutato a trasformare il giocattolo in un cingolato adatto alle nostre necessità. Cingolato Radiocomandato Rebellato Elia – Benotto Daniele Pag. 44