13.07.2015 Views

Progettazione e realizzazione di una base robotica bilanciante su ...

Progettazione e realizzazione di una base robotica bilanciante su ...

Progettazione e realizzazione di una base robotica bilanciante su ...

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

6.2. Acquisizione dei segnali 65Per l’acquisizione dei segnali viene sfruttato uno dei due convertitori analogico/<strong>di</strong>gitaleintegrati nel microcontrollore, configurati in modo da eseguireil campionamento con il tempo <strong>di</strong> sample più lungo possibile (i segnali inoggetto non variano rapidamente, ma sono affetti da rumore) e da effettuarecontinuamente la scansione ciclica dei canali utilizzati.Viene inoltre adoperato un canale DMA per effettuare il trasferimento delvalore letto in <strong>una</strong> determinata area <strong>di</strong> memoria: ogni volta che il ciclo <strong>di</strong>conversione <strong>di</strong> tutti i canali viene terminato, un interrupt segnala al controllerDMA che i dati sono <strong>di</strong>sponibili per essere copiati nelle relative variabili,senza interrompere l’esecuzione del programma.Per ridurre ulteriormente il rumore della mi<strong>su</strong>ra viene utilizzata la tecnicadell’oversampling: è possibile aumentare la risoluzione <strong>di</strong> un convertitoreanalogico/<strong>di</strong>gitale, a scapito della frequenza <strong>di</strong> conversione, me<strong>di</strong>andoN = 2 2n letture. Il numero n <strong>di</strong> bit guadagnati è quin<strong>di</strong> pari a:n = log 2(N)2(6.1)I dati convertiti dall’ADC vengono quin<strong>di</strong> salvati in <strong>una</strong> struttura <strong>di</strong> array,che vengono scritte <strong>di</strong>rettamente dal controller DMA: è infatti possibile configurarel’ADC ed il canale DMA utilizzato per il tasferimento dei dati inmaniera da eseguire N conversioni per K canali e quin<strong>di</strong> copiare in bloccoi valori acquisiti in <strong>una</strong> struttura composta da K array <strong>di</strong> N celle ciascuno.Quando un componente del programma richiede il dato letto da un canaledell’ADC, <strong>una</strong> funzione apposita restituisce la me<strong>di</strong>a degli N campionipresenti nell’array relativo a quel canale.I valori ricavati dall’acquisizione delle mi<strong>su</strong>re rese <strong>di</strong>sponibili dall’accelerometroe dal giroscopio vengono utilizzati per stimare l’angolo del robotrispetto alla verticale me<strong>di</strong>ante un filtro <strong>di</strong> Kalman (per la descrizione delfunzionamento del filtro si rimanda alla Sezione 3.2.1).Il co<strong>di</strong>ce che sintetizza il filtro <strong>di</strong> Kalman è stato ottimizzato manualmenteal fine <strong>di</strong> permetterne l’esecuzione da parte del microcontrollore in tempicompatibili con il periodo del ciclo <strong>di</strong> controllo. In particolare le operazionitra matrici sono state sviluppate in maniera da ridursi a cinque moltiplicazioninella funzione <strong>di</strong> pre<strong>di</strong>ct, mentre la routine che esegue l’update, incui si effettuano trasposizioni e inversioni <strong>di</strong> matrici, è svolta me<strong>di</strong>ante novemoltiplicazioni e due <strong>di</strong>visioni. Le operazioni <strong>di</strong> pre<strong>di</strong>ct e <strong>di</strong> update del filtrovengono invocate all’interno del ciclo a 100 Hz e i valori <strong>di</strong> angolo e velocitàangolare stimati vengono salvati nella struttura Config (6.1).

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!