Vai al contenuto
PLC Forum


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


polmax

Messaggi consigliati

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 al commento
Condividi su altri siti


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 al commento
Condividi su altri siti

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 al commento
Condividi su altri siti

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 al commento
Condividi su altri siti

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 al commento
Condividi su altri siti

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 al commento
Condividi su altri siti

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 al commento
Condividi su altri siti

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 al commento
Condividi su altri siti

Crea un account o accedi per commentare

Devi essere un utente per poter lasciare un commento

Crea un account

Registrati per un nuovo account nella nostra comunità. è facile!

Registra un nuovo account

Accedi

Hai già un account? Accedi qui.

Accedi ora
×
×
  • Crea nuovo/a...