Vai al contenuto
PLC Forum


Conversione Ad Instabile Pic18f4620


Grandegiove

Messaggi consigliati

Buongiorno a tutti,

per chi avesse seguito la discussione precedente sono riuscito a realizzare un protocollo di comunicazione efficiente tra due Pic 18f4620 (alla fine di questo progetto spero di avere il tempo di condividere con voi la mia fatica).

Nell'ambito dello stesso progetto devo relaizzare la conversione A/D di due ingressi analogici:

Il primo ingresso è relativo all'ingresso lineare di un Joystick per la movimentazione di una macchina semovente ed ha un range fra 0 e 5 V.

Il secondo ingresso è invece una tensione per il feedback in corrente di un'elettrovalvola e il range è tra 50mV e 150 mV e utilizzo quindi un Vref (300mV).

La prima conversione va a buon fine: se lascio fermo l'ingresso analogico il risultato è stabile.

La seconda da il risultato esatto rispetto alla Vref ma il risultato non è molto stabile, o meglio: resta stabile ma ogni tot tempo (4-5 secondi) converte un valore errato del 10-15%.

La soluzione più ovvia sarebbe mediare su x valori precedenti:il fatto che anche mediando su 100 valori ho comunque saltuariamente uno scostamento significativo dal valore esatto.

Non vorrei appesantire troppo il ciclo mediando su troppi valori quindi vi chiedo se avete qualche idea rispetto a dove possa essere il problema o se magari è una limitazione intrinseca del convertitore A/D.

Tenente conto che:

- per testare il sistema ho simulato gli ingressi analogici con dei semplici potenziometri e interposto un amplificatore non invertente a guadagno unitario.

- ho provato a variare tempo e frequenza di conversione

- l'alimentazione è ben filtrata (inoltre l'errore non è periodico quindi non credo possa essere un disturbo di rete )

Il codice relativo alla sezione A/D è questo

  symbol selectAN1=ADCON0.CHS0
  symbol vrefAN1=ADCON1.VCFG0

  TRISA=%11111111
  ADCON0=0X01            ' inizialmente abilitato AN0
  ADCON1=0x0D            ' inizialmente Vref=5V    AN0 e AN1 analogici
  ADCON2=0X80            ' right justified


 main:
 while(1)
...
  selectAN1=0   '(superfluo)            'Legge LinJoy
  vrefAN1=0
  linJoy=ADC_Read(0)
     
  selectAN1=1    '(superfluo)             'Legge Vfbk
  vrefAN1=1     
  Vfbk=ADC_Read(1)
  end if

...

end while

Grazie a chiunque avesse qualche idea! happy.gif

Link al commento
Condividi su altri siti


provo a fare supposizioni.

visto che il segnale che ti da problemi è quello della elttrovalvola, che misuri in corrente, non è che ci possa essere problema di lettura di questa?? come è stata letta? se questa lettura in corrente la vai a preamplificare con un op. pensi che possa migliorare?

occhio alle masse dei vref e delle sorgenti di entrata, non si sa mai.

la tensione di vref, come la hai ottenuta? spero con un generatore di vref alterimenti la tua precisione suppongo che sia gia persa all'inizio.

anche la trensione di alimentazione può influire, ma hai detto che è gia stabilizzata!

proverei a fare delle misure in tensione tra le tue vref e gli ingressi in modo da verificare se effettivamente all'ingresso hai tensioni stabili oppure per qualche motivo non lo sono.

per il software, potresti anche leggere tre valori consecutivi e scartere quello che si discosta maggiormente dagli altri due. (concordo che sia una soluzione di ripiego).

Link al commento
Condividi su altri siti

3 possiibli cause.

1 - alimentazione del potenziometro con sovrapposto rumore.

2 - Vref che varia.

3 - alimentazione amplificatore con rumore.

Prova a filtrare pesantemente con gruppi R-C in serie all'alimentazione: 47 ohm, 0.1uF ceramico, 47 ohm, 100 uF tantalio.

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...