Come rilevare Velocità Ultrasuoni
ciao tutti
dopo alcuni calcoli teorici (vedi http://arduino.cc/forum/index.php/topic,98326.msg739697.html#msg739697) ho costruito su breadboard il circuito http://www.micro-examples.com/public/microex-navig/doc/090-ultrasonic-ranger.html con l'unica modifica di un'induttanza da 100uh invece che 330uh per limitare vrms ad un valore più conservativo e dalle prove eseguite dati sperimentali non discostano di molto dai teorici.
le codizioni di test sono state:
distanza: 17,5 cm
vrms: 10 volt (da simulazione spice, non verificato in quanto non dispongo di oscilloscopio per verificare)
ho rilevato un picco massimo di 254mv ricevuti (senza alcuna amplificazione!), dai conti teorici risultava un minimo di 192mv.
un grafico vale più di mille parole quindi:

nella prima colonna sono indicati usecondi dopo la fine dell'intero treno di 10 impulsi 40 khz (durato quindi 250us) mentre nella seconda relativi valori letti dall'adc di arduino.
l'adc campionava alla velocità di 77 khz e via software venivano scartati valori più piccoli di 8 mv per eliminare eventuale rumore e veniva salvato il tempo di ricezione.
tra due valori consecutivi può quindi esserci un intervallo di 20us il che porta ad una frequenza di campionamento più bassa dei 12.5us richiesti dal teorema di nyquist.
ciò che mi sorprende sono alcune letture dal valore esattamente identico dopo 52,76,96 e 408us....
il grafico non è proprio in scala ma non dovrebbe essere difficile capire l'andamento reale.
il primo valore ricevuto poco dopo la fine della trasmissione (dopo 32us) è dovuto ad un effetto chiamato ringing ed è quindi sicuramente da scartare.
a 17,5 cm considerando la velocità del suono mi sarei aspettato un ritardo di 0,175 m / 343,4 m/s = 510us mentre rilevo un valore di picco un pò distante di 736us.
non ho ben capito, e qui vi chiedo aiuto, quale valore ricevuto devo considerare come l'inzio della ricezione, il picco o il primo valore sopra una certa soglia? ad esempio il segnale di 24mv dopo 464us?
in tal caso devo contare il tempo da dopo tutto il treno di impulsi (quindi 462us) o partire dal primo impulso (quindi 462-225=237us)? la differenza sarebbe abbastanza significativa e in entrambi casi non vicina ai 510us che mi aspettavo.
ciao e grazie tutti
dopo alcuni calcoli teorici (vedi http://arduino.cc/forum/index.php/topic,98326.msg739697.html#msg739697) ho costruito su breadboard il circuito http://www.micro-examples.com/public/microex-navig/doc/090-ultrasonic-ranger.html con l'unica modifica di un'induttanza da 100uh invece che 330uh per limitare vrms ad un valore più conservativo e dalle prove eseguite dati sperimentali non discostano di molto dai teorici.
le codizioni di test sono state:
distanza: 17,5 cm
vrms: 10 volt (da simulazione spice, non verificato in quanto non dispongo di oscilloscopio per verificare)
ho rilevato un picco massimo di 254mv ricevuti (senza alcuna amplificazione!), dai conti teorici risultava un minimo di 192mv.
un grafico vale più di mille parole quindi:
nella prima colonna sono indicati usecondi dopo la fine dell'intero treno di 10 impulsi 40 khz (durato quindi 250us) mentre nella seconda relativi valori letti dall'adc di arduino.
l'adc campionava alla velocità di 77 khz e via software venivano scartati valori più piccoli di 8 mv per eliminare eventuale rumore e veniva salvato il tempo di ricezione.
tra due valori consecutivi può quindi esserci un intervallo di 20us il che porta ad una frequenza di campionamento più bassa dei 12.5us richiesti dal teorema di nyquist.
ciò che mi sorprende sono alcune letture dal valore esattamente identico dopo 52,76,96 e 408us....

il grafico non è proprio in scala ma non dovrebbe essere difficile capire l'andamento reale.
il primo valore ricevuto poco dopo la fine della trasmissione (dopo 32us) è dovuto ad un effetto chiamato ringing ed è quindi sicuramente da scartare.
a 17,5 cm considerando la velocità del suono mi sarei aspettato un ritardo di 0,175 m / 343,4 m/s = 510us mentre rilevo un valore di picco un pò distante di 736us.
non ho ben capito, e qui vi chiedo aiuto, quale valore ricevuto devo considerare come l'inzio della ricezione, il picco o il primo valore sopra una certa soglia? ad esempio il segnale di 24mv dopo 464us?
in tal caso devo contare il tempo da dopo tutto il treno di impulsi (quindi 462us) o partire dal primo impulso (quindi 462-225=237us)? la differenza sarebbe abbastanza significativa e in entrambi casi non vicina ai 510us che mi aspettavo.
ciao e grazie tutti
quote
nella prima colonna sono indicati usecondi dopo la fine dell'intero treno di 10 impulsi 40 khz (durato quindi 250us) mentre nella seconda relativi valori letti dall'adc di arduino.
se vuoi avere 40khz un impulso non puó avere 250µs, ma l' impulso piú la pausa deve avere 25µs. se hai un duty cicle di 50% allora l' impulso dovrá avere una lunghezza di 25µs e una pausa di 25µs.
questo invalida tutto il resto dei tuoi conti e misure. una frequenza di 40khz non riesci campionare 77khz. se vuoi misurare la tensione massima del segnale devi elaborarlo analogicamnete oppure campionarlo con una frequenza moooolto piú alta.
ciao uwe
Arduino Forum > International > Italiano > Generale (Moderator: leo72) > Come rilevare Velocità Ultrasuoni
arduino
Comments
Post a Comment