Buongiorno a tutti;
Nel progetto che sto realizzando con Arduino sto riscontrando un problema che ormai da due mesi non so come risolvere.
Arduino (Due) deve eseguire determinate funzioni ogni volta che rileva il "falling" di un segnale ad onda quadra proveniente da un sensore VR (chiaramente con interposizione di Zero Crossing Detector tra sensore ed arduino). Il segnale che proviene dal sensore (che in sede di laboratorio genero mediante generatore di segnale analogico-arbitrario) è il seguente:
il segnale viene poi passato al seguente circuito ( Zero Crossing Detector):
Il risultato dell'uscita dello zero crossing detector visto all'oscilloscopio è il seguente
(nella traccia superiore si vede il segnale del sensore VR e nella traccia inferiore il segnale a monte dello Zero crossing detector)
A questo punto Arduino dovrebbe essere in grado di calcolare gli interrupt sul falling.
Invece calcola degli interrupt anche dove non vi è il falling, in particolare (guardando il segnale che riceve Arduino, cioè quello che si vede all'oscilloscopio sulla traccia inferiore) li calcola a ridosso della salita e circa a metà della parte in cui il segnale è alto.
Ho quindi deciso di fare altri test.
Il primo è stato chiaramente di rimuovere il generatore arbitrario e il convertitore e di generare un'onda quadra e mandarla direttamente all'input di Arduino.
Questa volta gli Interrupt vengono calcolati correttamente sul falling dell'onda quandra.
Allora come secondo test ho mandato l'onda quadra all'ingresso del convertitore. Il segnale all'uscita del convertitore e che arriva come input ad Arduino è ancora un'onda quadra.
(La traccia superiore è l'onda quadra generata dal generatore arbitrario e la traccia inferiore l'uscita del convertitore nonchè input di Arduino)
In questo caso l'interrupt viene spezzato in due punti uno relativo al rising e l'altro relativo al falling.
A questo punto chiedo di capire come mai non viene calcolato un unico interrupt nel momento corretto ma viene spezzato in piu' punti.
Grazie
feeeed:
In questo caso l'interrupt viene spezzato in due punti uno relativo al rising e l'altro relativo al falling.
A questo punto chiedo di capire come mai non viene calcolato un unico interrupt nel momento corretto ma viene spezzato in piu' punti.
99% la colpa è del LM358, non è un comparatore, è un opamp generico, sulla prima videata si nota la presenza di glitch molto veloci, sono questi che causano gli interrupt indesiderati.
Il generatore di funzioni che usi ha abbastanza risoluzione per simulare il segnale in modo corretto ?
Dalla schermata che proponi sembra a solo otto bit.
feeeed:
In questo caso l'interrupt viene spezzato in due punti uno relativo al rising e l'altro relativo al falling.
A questo punto chiedo di capire come mai non viene calcolato un unico interrupt nel momento corretto ma viene spezzato in piu' punti.
99% la colpa è del LM358, non è un comparatore, è un opamp generico, sulla prima videata si nota la presenza di glitch molto veloci, sono questi che causano gli interrupt indesiderati.
Il generatore di funzioni che usi ha abbastanza risoluzione per simulare il segnale in modo corretto ?
Dalla schermata che proponi sembra a solo otto bit.
Un ottimo comparatore, perfetto per squadrare segnali, è l'MCP6561 di Microchip, solo 56ns come tempo di propagazione, funziona anche a 3.3V pertanto lo puoi collegare direttamente alla DUE senza nessun partitore di tensione.
è sufficiente che sul pin6 di LM358 imposti con un partitore 10K-220ohm una tensione di 100mV invece che 0V e vedrai che tutto si sistema! se proprio non vuole andare porta una retroazione positiva sul pin non invertente inserendo una resistenza da 100k tra uscita pin7 e pin5 creando così una leggera isteresi per eliminare le incertezze.