Jump to content
PLC Forum


stabilità lettura tensione 0Volt con l'ADC di un PIC


polmax
 Share

Recommended Posts

Buongiorno e buon anno a tutti,

Il problema riguarda la lettura di una tensione all'uscita di un sensore Hall (ACS712) tramite un ADC 10bit di un PIC (16F917).

Il sensore restituisce 2,5V ad un passaggio di zero Ampere e incrementa o decrementa la propria uscita di 185mV ogni 1000mA rilevati.

Per utilizzare i passi "positivi" dell'ADC provvedo a sottrarre 512 passi per identificare lo zero

Il passaggio delle correnti viene correttamente rilevato sia dal sensore che dall'ADC.

Nasce il problema quando la corrente è nulla e l'ADC rileva erroneamente uno step negativo che normalmente elaborato  (Es 511-512=anzichè -1=513) determinando conseguenze indesiderate.

grazie ancora una volta per avermi letto

polmax

Link to comment
Share on other sites


Sai che non ho capito? Se te fai una sottrazione, e il valore sottratto è maggiore della lettura, deve per forza venire un valore negativo. Purché te stia utilizzando valori INT  e non UINT, che altrimenti avvengono cose strane.

Puoi per favore spiegare meglio l'esempio? Se la corrente è nulla, quindi 2,5V, con un ADC a 10bit (0-1023), dovresti leggere un valore intorno (effetto dei rumori) tra 511 e 512.

Ricorda che si parte da 0, per cui 1024 valori vanno da 0 a 1023, e quindi la metà si piazza tra 511 e 512. Fino a 511 valori di corrente negativa, da 512 valori di corrente positiva.

 

Link to comment
Share on other sites

Scusa se lo zero è letto come 511, considera questo conteggio come zero ed agisci di conseguenza togliendo 511 anzichè 512.

comunque considera che l'indecisione di +/- 1 count è normale nella conversione A/D.

Link to comment
Share on other sites

2 ore fa, Livio Orsini ha scritto:

Scusa se lo zero è letto come 511, considera questo conteggio come zero ed agisci di conseguenza togliendo 511 anzichè 512.

comunque considera che l'indecisione di +/- 1 count è normale nella conversione A/D.

prova già fatta: ma in questo modo il risultato oscilla tra zero e + 1

Mi chiedevo se esisteva uno stratagemma per eliminare l'oscillazione

 

Link to comment
Share on other sites

2 ore fa, Livio Orsini ha scritto:

considera che l'indecisione di +/- 1 count è normale nella conversione A/D.

Come dice Livio, è parte dell'errore proprio del sistema. L'unica è mettere una soglia. Per esempio, se sai che la corrente minima che scorrerà farà cambiare il valore dell'ADC di +-10, fai un confronto e tutti i valori in quella gamma li metti uguali a zero (cioè se -10<letto<10, allora letto=0).

Link to comment
Share on other sites

10 minuti fa, Ctec ha scritto:

Come dice Livio, è parte dell'errore proprio del sistema. L'unica è mettere una soglia. Per esempio, se sai che la corrente minima che scorrerà farà cambiare il valore dell'ADC di +-10, fai un confronto e tutti i valori in quella gamma li metti uguali a zero (cioè se -10<letto<10, allora letto=0).

ok grazie! speravo in qualche alchimia migliore ma ti credo! dalla serie: "ufficio complicazioni cose semplici" mi adeguerò

Link to comment
Share on other sites

6 ore fa, polmax ha scritto:

: "ufficio complicazioni cose semplici" mi adeguerò

 

No! In questo caso non c'è alcun U.C.A.S.

E il limite della tecnologia discreta. Per quanto piccolo sia il quanto di misura esisterà sempre un valore che si trova a metà tra 2 successivi livelli, per cui uno è troppo grande e l'altro è troppo piccolo. Il risultato è che il conteggio oscillerà tra +1 e -1 count. Per evitare questo sarebbe necessario un conteggio di conversione infinito ma, a questo punto, non ci sarebbe alcuna differenza con l'analogico.

Per evitare oscillazioni attorno allo zero, o ad un livello di comparazione, si usa mettere una finestra. Ad esempio neltuo caso si considera 511 come zero (negativo) e 512 sempre zero (positivo)

Link to comment
Share on other sites

7 minuti fa, Livio Orsini ha scritto:

 

No! In questo caso non c'è alcun U.C.A.S.

E il limite della tecnologia discreta. Per quanto piccolo sia il quanto di misura esisterà sempre un valore che si trova a metà tra 2 successivi livelli, per cui uno è troppo grande e l'altro è troppo piccolo. Il risultato è che il conteggio oscillerà tra +1 e -1 count. Per evitare questo sarebbe necessario un conteggio di conversione infinito ma, a questo punto, non ci sarebbe alcuna differenza con l'analogico.

Per evitare oscillazioni attorno allo zero, o ad un livello di comparazione, si usa mettere una finestra. Ad esempio neltuo caso si considera 511 come zero (negativo) e 512 sempre zero (positivo)

chiarissimo! grazie ancora Livio.

ps: hai letto quanto ti ho scritto su "misura corrente carica/scarica batteria"?

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...