Pages: [1] 2   Go Down
Author Topic: precisione lettura analogica  (Read 681 times)
0 Members and 1 Guest are viewing this topic.
0
Offline Offline
Shannon Member
****
Karma: 117
Posts: 10106
:(){:|:&};: TOX id: fcb8e918bef08581e23f6ddf9d4dba77697c25b217bf372736ed959a95fde36df5b8c5b90fbb
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Scusate se la domanda suona stupida, ma non son sicuro di quello che faccio :-)
Per trasformare la lettura analogica del giroscopio in gradi al secondo, uso questa formula (da datasheet):
(((5/1024.0)*1000.0)/0.67)
ciò vuol dire che ogni incremento analogico corrisponde a 7,28 gradi al secondo in più... troppa poca precisione!

quindi se io settassi il reference analogico sull'interno, avrei come riferimento 1,1v.. quindi la formula diventa:
(((1,1/1024.0)*1000.0)/0.67)
quindi la precisione per incremento sale a 1,6 gradi al secondo!

è giusto come ragionamento?

altro particolare, essendo i giroscopi alimentati a 5v, essi danno un'output a 5v, non c'è il riscio di bruciare il micro perchè supero la corrente di riferimento? l'unica soluzione è usare un ADC esterno? quale consigliate?

e di nuovo, essendoci collgato anche un nunckuck via i2c sempre alimentato a 5v, ci sono problemi?
Logged

my Arduino code: https://github.com/lestofante/arduinoSketch
sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

Lamezia Terme
Offline Offline
Shannon Member
****
Karma: 411
Posts: 11986
Le domande di chi vuol imparare rappresentano la sua sete di sapere
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Ciao lesto,
forse qui posso dare una risposta io a te, solo perché ho affrontato la questione in un post di una paio di giorni fa, con astrobeed.
Se il tuo segnale analogico ha un range da 0 a 5V settare VRef a 1,1V significa leggere con precisione da 0 a 1,1, poi ti va in over range; non credo (ma non sono sicuro!!!) che si possa bruciare il micro, come potrebbe accadere invece con tensioni >5V, penso sia solo una questione di misurazione.
Nella risposta di astrobeed è spiegato come aumentare la risoluzione da 10 a 12 bit, per me è piuttosto problematica realizzarla ora, anche se mi metterò a studiare la reference perché è una cosa che mi serve, ma tu che sei esperto non dovresti avere problemi.
http://arduino.cc/forum/index.php/topic,55924.0.html
Spero di esserti stato utile, altrimenti scusami per l'inutilità del post.
Logged

Guida alla programmazione ISP e seriale dei micro ATMEL (Caricare bootloader e sketch):
http://www.michelemenniti.it/Arduino_burn_bootloader.php
Guida alla Programmazione ATmega328 noP:
http://www.michelemenniti.it/atmega328nop.html
Articoli su Elettronica In:
http://www.michelemenniti.it/elettronica_in.html

0
Offline Offline
Shannon Member
****
Karma: 117
Posts: 10106
:(){:|:&};: TOX id: fcb8e918bef08581e23f6ddf9d4dba77697c25b217bf372736ed959a95fde36df5b8c5b90fbb
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

l'over-range rende infattibile l'idea, mentre la discussione sembra interesante..
con 12 bit ottengo 1,82 di precisione, che mi basta (l'accelerometro dovrebbe compensare)

dato che i giro li sto usando in una libreria, poi ti posto il codice così con qualche modifica dovreti riuscire ad usarla!
Logged

my Arduino code: https://github.com/lestofante/arduinoSketch
sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

Lamezia Terme
Offline Offline
Shannon Member
****
Karma: 411
Posts: 11986
Le domande di chi vuol imparare rappresentano la sua sete di sapere
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Mi saresti di un aiuto speciale!
Allora terrò d'ochio costantemente questo topic, in attesa del codice, poi magari ti chiederò qualche chiarimento (tanto l'hai capito dall'altro topic a che livello sono, vero?  smiley-red).
Ciao.
Logged

Guida alla programmazione ISP e seriale dei micro ATMEL (Caricare bootloader e sketch):
http://www.michelemenniti.it/Arduino_burn_bootloader.php
Guida alla Programmazione ATmega328 noP:
http://www.michelemenniti.it/atmega328nop.html
Articoli su Elettronica In:
http://www.michelemenniti.it/elettronica_in.html

0
Offline Offline
Shannon Member
****
Karma: 117
Posts: 10106
:(){:|:&};: TOX id: fcb8e918bef08581e23f6ddf9d4dba77697c25b217bf372736ed959a95fde36df5b8c5b90fbb
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

è più facile del previsto, sommi 16 letture analogiche e poi dividi per 4... nient'altro che un for, una somma e una divisione, per iniziare.

Poi ci si può complicare con array di rotazione ecc... in modo che dopo le prime 16 letture hai un risultato valido ogni lettura
Logged

my Arduino code: https://github.com/lestofante/arduinoSketch
sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

Lamezia Terme
Offline Offline
Shannon Member
****
Karma: 411
Posts: 11986
Le domande di chi vuol imparare rappresentano la sua sete di sapere
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

La parte relativa a ciclo for ed array non avrei problemi a realizzarla, il fatto è che non ho capito cosa devo usare come elementi, queste letture da dove le prendo? Se è dal pin analogico (p.es A0), intanto che sommo e divido quello continua a "sparare" valori smiley-eek
Ti chiedo non di darmi chiarimenti altrimenti perderai la giornata, se invece posti, anche un altro giorno, il codice, almeno posso studiarlo (in questo me la cavo) e, al limite, avere qualche chiarimento per applicarlo alla mia esigenza).
Logged

Guida alla programmazione ISP e seriale dei micro ATMEL (Caricare bootloader e sketch):
http://www.michelemenniti.it/Arduino_burn_bootloader.php
Guida alla Programmazione ATmega328 noP:
http://www.michelemenniti.it/atmega328nop.html
Articoli su Elettronica In:
http://www.michelemenniti.it/elettronica_in.html

0
Offline Offline
Shannon Member
****
Karma: 117
Posts: 10106
:(){:|:&};: TOX id: fcb8e918bef08581e23f6ddf9d4dba77697c25b217bf372736ed959a95fde36df5b8c5b90fbb
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Se è dal pin analogico (p.es A0), intanto che sommo e divido quello continua a "sparare" valori smiley-eek
no, queio valori prima devono essere campionati, e intanto puoi fare qualche operazione senza perdere letture
Logged

my Arduino code: https://github.com/lestofante/arduinoSketch
sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

Lamezia Terme
Offline Offline
Shannon Member
****
Karma: 411
Posts: 11986
Le domande di chi vuol imparare rappresentano la sua sete di sapere
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

E' qui che non mi regolo più, il campionamento ( smiley-eek) ecco perché ti chiedo la gentilezza di postare il codice, appena lo realizzi, una volta compresa la tecnica poi posso andare avanti da solo.
Logged

Guida alla programmazione ISP e seriale dei micro ATMEL (Caricare bootloader e sketch):
http://www.michelemenniti.it/Arduino_burn_bootloader.php
Guida alla Programmazione ATmega328 noP:
http://www.michelemenniti.it/atmega328nop.html
Articoli su Elettronica In:
http://www.michelemenniti.it/elettronica_in.html

0
Offline Offline
Shannon Member
****
Karma: 117
Posts: 10106
:(){:|:&};: TOX id: fcb8e918bef08581e23f6ddf9d4dba77697c25b217bf372736ed959a95fde36df5b8c5b90fbb
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Code:
sommaMedia=0;
  int i, r;
  for (i=0; i < 16;i++){
    sommaMedia += analogRead(gyroPin);
  }
  Serial.print("Media: ");
  Serial.println(sommaMedia/4);
Logged

my Arduino code: https://github.com/lestofante/arduinoSketch
sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

Lamezia Terme
Offline Offline
Shannon Member
****
Karma: 411
Posts: 11986
Le domande di chi vuol imparare rappresentano la sua sete di sapere
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Grazie lesto!
Allora gyroPin è il pin analogico su cui applico i valori da leggere, leggo 16 valori, li sommo e poi divido per 4, in questo modo ottengo una risoluzione di 12 bit, sul monitor in pratica leggo 1 valore ogni 16 che arrivano. Mi sembra tutto chiaro (ma ho capito bene? smiley-red). Il mio dubbio è: quando ha caricato i primi 16 valori, durante la fase di calcolo non si perde qualche valore? forse è ininfluente?
L'altra possibilità di cui parlavi (gli array), basterebbe sostituire sommamedia nel for con una riga tipo
16pack[]=analogRead(gyroPin);
in questo modo potrei memorizzare "x" gruppi da 16 valori di lettura originale, ma come faccio a creare un nuovo array ad ogni nuovo ciclo for, dovrei riuscire ad ottenere qualcosa tipo 16pak001, 16pack002, ecc. come?
Logged

Guida alla programmazione ISP e seriale dei micro ATMEL (Caricare bootloader e sketch):
http://www.michelemenniti.it/Arduino_burn_bootloader.php
Guida alla Programmazione ATmega328 noP:
http://www.michelemenniti.it/atmega328nop.html
Articoli su Elettronica In:
http://www.michelemenniti.it/elettronica_in.html

0
Offline Offline
Shannon Member
****
Karma: 117
Posts: 10106
:(){:|:&};: TOX id: fcb8e918bef08581e23f6ddf9d4dba77697c25b217bf372736ed959a95fde36df5b8c5b90fbb
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

il ragionamento è giusto.
con array circolari:
Code:
int r=0;
int array[16];

setup(){
  int i;
  for (i=0; i < 16;i++){
    array[i] = analogRead(gyroPin);
  }
}

loop(){
  leggiNuovoValore();
  calcolaMedia();
}

calcolaMedia(){
  sommaMedia=0;
  for (i=0; i < 16;i++){
    sommaMedia+=array[i];
  }
  Serial.print("Media: ");
  Serial.println(sommaMedia/4);
}

leggiNuovoValore(){
   array[r++]=analogRead(gyroPin);
   if (r>=16)
     r=0;
}
facile no?
ah ovvio che è da sistemare, è giusto un abbozzo velocissimo :-)
Logged

my Arduino code: https://github.com/lestofante/arduinoSketch
sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

Lamezia Terme
Offline Offline
Shannon Member
****
Karma: 411
Posts: 11986
Le domande di chi vuol imparare rappresentano la sua sete di sapere
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Fantastic!
Appena posso sperimenterò subito questo codice con dati reali, i piccoli errori li scovo, ti farò sapere.
grazie!!
Logged

Guida alla programmazione ISP e seriale dei micro ATMEL (Caricare bootloader e sketch):
http://www.michelemenniti.it/Arduino_burn_bootloader.php
Guida alla Programmazione ATmega328 noP:
http://www.michelemenniti.it/atmega328nop.html
Articoli su Elettronica In:
http://www.michelemenniti.it/elettronica_in.html

BZ (I)
Online Online
Brattain Member
*****
Karma: 234
Posts: 20218
+39 349 2158303
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Si puó aumentare la precisione anche aggiungendo un Convertitore A/D esterno. Ciao Uwe
Logged

Lamezia Terme
Offline Offline
Shannon Member
****
Karma: 411
Posts: 11986
Le domande di chi vuol imparare rappresentano la sua sete di sapere
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

che a questo punto andrebbe collegato con l'uscita su un pin digitale di Arduino?
Qualche tipo di convertitore, magari poco costoso...?
Logged

Guida alla programmazione ISP e seriale dei micro ATMEL (Caricare bootloader e sketch):
http://www.michelemenniti.it/Arduino_burn_bootloader.php
Guida alla Programmazione ATmega328 noP:
http://www.michelemenniti.it/atmega328nop.html
Articoli su Elettronica In:
http://www.michelemenniti.it/elettronica_in.html

Deep south of Italy
Offline Offline
Faraday Member
**
Karma: 7
Posts: 2961
The quieter you become, the more you can hear
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

di quanti canali adc in più hai bisogno?
con che precisione?
con che velocità?
quale tipo di comunicazione?
avendo la risposta a queste domande si potrebbe consigliarti un IC dedicato smiley
Logged

Pages: [1] 2   Go Up
Jump to: