Grandegiove Inserito: 22 dicembre 2010 Segnala Share Inserito: 22 dicembre 2010 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! Link al commento Condividi su altri siti More sharing options...
lelerelele Inserita: 22 dicembre 2010 Segnala Share Inserita: 22 dicembre 2010 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 More sharing options...
Livio Orsini Inserita: 22 dicembre 2010 Segnala Share Inserita: 22 dicembre 2010 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 More sharing options...
Messaggi consigliati
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 accountAccedi
Hai già un account? Accedi qui.
Accedi ora