Torna indietro   BaroneRosso.it - Forum Modellismo > Elettronica > Circuiti Elettronici


Rispondi
 
Strumenti discussione Visualizzazione
Vecchio 15 novembre 18, 16:53   #1 (permalink)  Top
User
 
L'avatar di gawain
 
Data registr.: 18-04-2008
Residenza: milano
Messaggi: 405
Citazione:
Originalmente inviato da ElNonino Visualizza messaggio
Non conosco direttamente la MPU in oggetto però per lavoro ho utilizzato accelerometri per leggere un'inclinazione sul piano, alcuni analogici altri con uscita digitale e DSP interni.

Per misurare un'inclinazione in regime statico come è la lettura dell'incidenza di ali, piani di coda o pale di elicottero basta un accelerometro, il giroscopio è inutile, il problema degli accelerometri analogici è che l'uscita non era lineare rispetto all'angolo d'inclinazione ma bensì ha un andamento sinusoidale che va compensato tramite algoritmi di fusione dei dati di almeno due assi e poi ulteriormente linearizzato con una tabella appositamente creata.

Uso un solo accelerometro analogico da oltre 10 anni per leggere l'inclinazione verticale dei pannelli FV installati in baita sul mio sistema di inseguimento solare senza alcun problema, utilizzo solo gli assi X ed Y in quanto l'asse Z è sempre parallelo al suolo e la velocità di rotazione è estremamente bassa quindi non ho necessità di effettuare ulteriori compensazioni.

Indipendentemente dal tipo di sensore usato è comunque necessario filtrare molto bene il segnale, sia attraverso reti RC passa basso + algoritmi digitali nel caso di analogico che filtri digitali + DSP in quelli puramente digitali, mi ricordo di aver disquisito di ciò sul Barone in un'altra discussione (forse in elicotteri o multirotori)

Comunque una soluzione semplicissima (ma non di soddisfazione) per realizzare un incidenziometro è quella di acquistare un inclinometro digitale e fissarlo su opportuni supporti, cosa che ho fatto io per le pale dei miei elicootteri RC.

Se servono info a disposizione.


la sensor fusion con il gyro serve per migliorare la risposta in frequenza... se la misura è lenta allora la soluzione diventa banale e basta filtrare potentemente con filtro IIR le componeti del vettore accelerazione
gawain non è collegato   Rispondi citando
Vecchio 15 novembre 18, 16:37   #2 (permalink)  Top
User
 
L'avatar di Minestrone
 
Data registr.: 13-09-2012
Messaggi: 4.689
Grazie a tutti delle preziose informazioni. Sto sbattendo la testa per la prima volta con questi sensori e sto cercando a fatica di capire. Oramai ho capito come lavorare sul registro dell'integrato e mi sento già un passo avanti. Purtroppo non riesco più a stare alzato fino a tardi come qualche anno fa e la mia attività modellistica ne sta risentendo.

Ora sto rifinendo il mio sketch che, al momento, fa uso di due soli assi dell'accelerometro. Devo inserire la calibrazione e registrare il valore nel registro dell'integrato. Per adesso non sto usando né DMP né librerie.

Per quanto riguarda il giroscopio, da quello che ho capito e da quello che sto osservando nelle mie prove, il problema è che l'accelerometro è molto rumoroso e il filtro complementare (o altri) mixano i valori del gyro e dell'accelerometro per ottenere un dato pulito. Devo ancora implementare la lettura e la determinazione dell'angolo con il gyro, fatto quello potrò scoprire se il filtro funziona.

Per adesso ho detto valori molto sporchi e variabili. Ho provato ad applicare un filtro passa basso con la libreria filter senza ottenerne nulla, probabilmente la frequenza di campionamento dell'integrato è troppo bassa. Sto facendo la media delle letture con calcolo della media ogni mezzo secondo ma i risultati sono ancora sporchissimi.

Inviato dal mio Mi A1 utilizzando Tapatalk
Minestrone non è collegato   Rispondi citando
Vecchio 01 dicembre 18, 08:00   #3 (permalink)  Top
User
 
L'avatar di Minestrone
 
Data registr.: 13-09-2012
Messaggi: 4.689
Ok, penso di aver capito anche l'uso che fai di &. Veramente interessante

Inviato dal mio Mi A1 utilizzando Tapatalk
Minestrone non è collegato   Rispondi citando
Vecchio 01 dicembre 18, 22:32   #4 (permalink)  Top
User
 
L'avatar di ElNonino
 
Data registr.: 06-05-2007
Residenza: Tre Ville (Preore)
Messaggi: 3.605
Invia un messaggio via MSN a ElNonino
Allora per il punto #def k 180.0 è perchè in genere una costante (k) il compilatore la alloca in memoria statica e quando viene utilizzata viene richiamata in un solo ciclo, invece usare 180.0 obbliga il compilatore ad usare più cicli.

Per le operazioni binarie devi sapere che un x >>1 equivale a dividere per 2 il valore di x ed un x <<2 equivale a moltiplicare per due, ora nella maggior parte dei compilatori questa operazione comporta un solo ciclo di clock, una / molti di più.

Il tuo tempo di stabilizzazione può essere corretto, nel senso che se hai un ciclo di 80ms ed un array di 64 valori 0,08s x 64 = 5,12s contando che per avere un valore stabile all'accensione servono almeno due serie di campionamenti completi siamo sui 10,24s, decisamente lento.

Io direi che se usi un array di 2 x 16 valori in cui inserisci le letture di X ed Y dell'accelerometro e calcoli l'angolo una sola volta a ciclo usando la media dei due canali velocizzi di molto il tempo di ciclo.

Poi per il printf di float ci sono trucchetti semplici che lo velocizzano molto.

Se hai un oscilloscopio, anche economicissimo, ti consiglierei di utilizzarlo per misurare con precisione il tempo impiegato da operazioni, funzioni, routine o loop: imposti un pin digitale come output e ti crei due macro in define che settino o resettino il pin e le chiami TEST_ON e TEST_OFF poi

TEST_ON
......
.....
.....
TEST_OFF

e sull'oscilloscopio vedrai esattamente la durata delle operazioni comprese far ON ed OFF, è un sistema che ho sempre usato in fase di scrittura e test di programmi time critical per microprocessori embedded.

__________________
Peace & Love
Fate le cose nel modo più semplice possibile, ma senza semplificare. (A. Einstein)
ElNonino non è collegato   Rispondi citando
Vecchio 01 dicembre 18, 22:41   #5 (permalink)  Top
User
 
L'avatar di Minestrone
 
Data registr.: 13-09-2012
Messaggi: 4.689
Farò tesoro dei consigli. Per quanto riguarda la misura del tempo di ciclo un oscilloscopio rudimentale ce l'ho, però ho sempre fatto misurare il tempo di ciclo tramite la funzione millis() e facendo stampare a video il risultato; certamente il tempo di ciclo è sovrastimato, però credo che con buona approssimazione possa andare, o no?

Inviato dal mio Mi A1 utilizzando Tapatalk
Minestrone non è collegato   Rispondi citando
Vecchio 02 dicembre 18, 10:59   #6 (permalink)  Top
User
 
L'avatar di ElNonino
 
Data registr.: 06-05-2007
Residenza: Tre Ville (Preore)
Messaggi: 3.605
Invia un messaggio via MSN a ElNonino
Io non fido troppo delle misure sui tempi d'esecuzione ottenute dallo stesso micro su cui gira il programma, preferisco andare alla vecchia con l'oscilloscopio, l'unico errore introdotto dallo strumento è quello del tempo di salita e discesa dei fronti dell'impulso che in genere è di pochissimi ns.

__________________
Peace & Love
Fate le cose nel modo più semplice possibile, ma senza semplificare. (A. Einstein)
ElNonino non è collegato   Rispondi citando
Vecchio 02 dicembre 18, 11:06   #7 (permalink)  Top
User
 
L'avatar di Minestrone
 
Data registr.: 13-09-2012
Messaggi: 4.689
Citazione:
Originalmente inviato da ElNonino Visualizza messaggio
Io non fido troppo delle misure sui tempi d'esecuzione ottenute dallo stesso micro su cui gira il programma, preferisco andare alla vecchia con l'oscilloscopio, l'unico errore introdotto dallo strumento è quello del tempo di salita e discesa dei fronti dell'impulso che in genere è di pochissimi ns.

Capisco. L'errore di salita e discesa però dovrebbe compensarsi, almeno in parte. O no?

Inviato dal mio Mi A1 utilizzando Tapatalk
Minestrone non è collegato   Rispondi citando
Vecchio 02 dicembre 18, 11:40   #8 (permalink)  Top
User
 
L'avatar di ElNonino
 
Data registr.: 06-05-2007
Residenza: Tre Ville (Preore)
Messaggi: 3.605
Invia un messaggio via MSN a ElNonino
Citazione:
Originalmente inviato da Minestrone Visualizza messaggio
Capisco. L'errore di salita e discesa però dovrebbe compensarsi, almeno in parte. O no?

Inviato dal mio Mi A1 utilizzando Tapatalk
Su tempi di ciclo anche brevissimi l'errore introdotto dai tempi di salita e discesa dell'oscilloscopio che l'istruzione del micro è trascurabile ai fini della misura.

__________________
Peace & Love
Fate le cose nel modo più semplice possibile, ma senza semplificare. (A. Einstein)
ElNonino non è collegato   Rispondi citando
Vecchio 10 maggio 19, 11:29   #9 (permalink)  Top
User
 
L'avatar di Minestrone
 
Data registr.: 13-09-2012
Messaggi: 4.689
Rispolvero la discussione perché, dopo aver accantonato per qualche mese il progetto, lo sto riprendendo in mano.
Alla fine avevo creato uno sketch che sfruttava i dmp interni dei due MPU6050. Al bus i2c sono collegati i due sensori e un cristalli liquidi.
Avevo imbastito un buon 80% del programma con i menù e un' autocalibrazione che, provato a pezzi, funzionava. Alla fine ho cablato il tutto, messo assieme il codice e non funzionava più nulla.
Adesso stò riprendendo in mano l'accrocchio e mi accorgo che probabilmente non funziona nulla a causa dell'eccessiva lunghezza dei cavi che non va d'accordo con il bus I2c.
Avete suggerimenti per far funzionare il tutto?
So che esistono I2c extender ma, forse, piuttosto che mettere 4 I2C extender, conviene mettere due arduino pro mini a fianco dei sensori e trasformare la comunicazione da I2c a seriale. Questa soluzione mi scoccia parecchio perché dovrei mettere mano al codice ma mi permetterebbe di dividere il codice su 3 arduino che, a quel punto lavorerebbero in scioltezza. Considerando che allo stato attuale gira tutto su un arduino nano con flash e EEPROM quasi piene...
Minestrone non è collegato   Rispondi citando
Vecchio 10 maggio 19, 13:29   #10 (permalink)  Top
User
 
L'avatar di Minestrone
 
Data registr.: 13-09-2012
Messaggi: 4.689
Non ho usato resistenze di pull up affidandomi a quelle integrate nella scheda. Come cavo ho usato un vecchio cavo di rete che avrà certamente alta capacità essendo twistato e i cavi saranno lunghi meno di un metro l'uno.
Se mi dici che utilizzando resistenze di pull up posso risolvere faccio delle prove in quella direzione.
Considera che per me è tutta una esperienza nuova e ogni volta che faccio qualcosa la devo studiare per impararla.
Già l'aver scritto tutto quel codice per me è stato uno sforzo enorme.

Inviato dal mio Mi A1 utilizzando Tapatalk
Minestrone non è collegato   Rispondi citando
Rispondi

Bookmarks




Regole di scrittura
Non puoi creare nuove discussioni
Non puoi rispondere alle discussioni
Non puoi inserire allegati
Non puoi modificare i tuoi messaggi

BB code è Attivato
Le faccine sono Attivato
Il codice [IMG] è Attivato
Il codice HTML è Disattivato
Trackbacks è Disattivato
Pingbacks è Disattivato
Refbacks è Disattivato


Discussioni simili
Discussione Autore discussione Forum Commenti Ultimo Commento
Radiocomando 3 motori DC e 2 sensori di T con Arduino su trenino spraity Radiocomandi 3 09 febbraio 17 15:07



Tutti gli orari sono GMT +2. Adesso sono le 05:56.


Basato su: vBulletin versione 3.8.11
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
E' vietata la riproduzione, anche solo in parte, di contenuti e grafica. Copyright 1998/2019 - K-Bits P.I. 09395831002