Archiv verlassen und diese Seite im Standarddesign anzeigen : Laufzeitmessung von Schall
Hi !
Zum projekt : ich möchte die laufzeit des von einem beeper ausgegeben schalls zum micro messen. Daraus liese sich dann leicht über die schallgeschwindigkeit die enfernung errechnen.
dazu habe ich hier mal ein programm geschrieben:
$regfile = "m32def.dat"
$crystal = 16000000
$baud = 9600
Dim X As Integer
Dim Ti As Word
Dim Xsave As Integer
Dim Erg As Long
Dim Zwierg As Long
Config Pind.7 = Output
Config Lcdbus = 4
Config Lcdpin = Pin , Db4 = Pinc.7 , Db5 = Pina.5 , Db6 = Pina.6 , Db7 = Pina.4 , E = Pinc.6 , Rs = Pinc.5
Config Lcd = 16 * 4
Config Timer1 = Timer , Prescale = 1
Config Adc = Single , Prescaler = Auto
Start Adc
On Timer0 Tim1_isr
Enable Timer1
Enable Interrupts
Sound portd.7 , 200 , 450
Do
If Getadc(2) > 614 Then
Ti = Timer0
Xsave = X
Exit Do
End If
Loop
Sound Portd.7 , 2000 , 1000
Erg = Ti * 63
Zwierg= Xsave * 65536
Erg = Erg + Zwierg
Cls
Lcd "berechnung:"
Lowerline
Lcd Erg ; " // " ; Ti
Tim1_isr:
X = X + 1
Return
End
Allerdings funktioniert das noch nicht so ganz... Erg und Ti sind irgendwie immer null. und das programm endet nie, so wie es eigentlich sollte... Könnte das daran liegen, das der Timer weiterhin fleisig überleuft und interrupts produziert ? und dann natürlich wieder zurück in die Schleife springt ?
Würde mich interessieren, was ihr dazu sagt ! (sonst hätte ichs auch net hier rein gestellt ^^)
mfg Javik
Könnte es daran liegen, dass du Timer0 und Timer1 durcheinanderwirfst?
Hi !
](*,) ich bin ein Trottel ! Ich hab vorher überall Timer0 dranstehen gehabt und dann gesehen das des blos ein 8bit Timer ist. Dann wollte ich auf den 16bit Timer und dabei hab ich wohl was übersehen...
Auf jeden fall bringt er jetzt ergebnisse ! Aber die sind viiiiel zu ungenau !
Kann des daran liegen, dass fü den Befehl Sound der timer auch verwendet wird ? Wie kann man den Sound wieder ausstellen?
mfg Javik
hi,
das programm ist etwas dünn geraten um exakte ergebnisse liefern zu können. ist auch nicht so richtig klar, was an adc(2) hängt ('ne Taste?).
aber egal, ein ähnliches problem hatte ich auch schon.
in erster linie musst du berücksichtigen, dass dein empfangenes signal immer unterschiedlich ausfallen wird, je nach umgebung etc. du darfst also nur die info im signal auswerten, das könnte so ablaufen.
1. schallsignal erzeugen, dauernd senden
2. innerhalb des schallsignals eine kennung einbauen
3. wenn kennung abgeschickt, timer starten
4. wenn kennung empfangen, timer stoppen und auswerten
5. zyklisch wiederholen bis z.b. 255 messwerte zusammen sind
6. mittelwert bilden und ausgeben
das ist grob der ablauf einer software für echolote, so sollte es gehen
gruss, harry
Hi !
an Adc(2) hängt ein Microphon, das auf die frequenzen in dennen der Pizo lautsprecher sendet. An adc(2) liegt dann mehr spannung an.
An was für einen kennung denkst du da ? Mein Microphon kann leider nciht auf verschieden frequenzen reagiren.
mfg Javik
Hi !
an Adc(2) hängt ein Microphon, das auf die frequenzen in dennen der Pizo lautsprecher sendet. An adc(2) liegt dann mehr spannung an.
An was für einen kennung denkst du da ? Mein Microphon kann leider nciht auf verschieden frequenzen reagiren.
mfg Javik
Hast du die Wechselspannung vom Mikrofon direkt an den ADC-Port gehängt?
Trotzdem wird das nicht sehr genau. Wir hatten das Problem schon mal hier in einem Thread. Manf hat uns dann drauf gebracht. Die Membran des Senders und des Empfängers müssen jeweils anschwingen. Dein Programm überwacht die Spannung des Mics auf einen bestimmten Schwellwert der aber vom Pegel des reflektierten Signals abhängig ist.
Dadurch variiert die Erkennungszeit des Signals.
Wie ungenau ist denn deine Messung? mm o. km? ;-)
Gruß, Sonic
Hi,
Nein ich habe das signal mit nem OV verstärkt und durch nen Hochpassgejagt...
Kannst du mir sagen wie der Thread heist ?
Naja ^^ sender und emfpänger sind ca 5 cm von einander entfernt, was rein rechnerisch kein problem sein sollte, aber er errechnet einen abstnd von ca 0,2m - 0,3m.....
Javik
Hi,
Nein ich habe das signal mit nem OV verstärkt und durch nen Hochpassgejagt...
Naja, die Anstiegszeit bekommst du damit kleier ab nicht weg ;-(
Kannst du mir sagen wie der Thread heist ?
https://www.roboternetz.de/phpBB2/viewtopic.php?t=2647&highlight=%2Aschall%2A+%2Aphasenverschiebung%2A
Naja ^^ sender und emfpänger sind ca 5 cm von einander entfernt, was rein rechnerisch kein problem sein sollte, aber er errechnet einen abstnd von ca 0,2m - 0,3m.....
Javik
Jetzt fehlt nur noch die Frequenz und man könnte anfangen zu Rechnen um den Fehler einzugrenzen ;-)
Aber nach den Werten liegt der Messwert 400%-600% daneben, das kann nicht nur am Einschwingverhalten liegen...
Gruß, Sonic
Wie lang ist denn dein Schallimpuls? Bei einer solch geringen Distanz bekommt man zwangsläufig Probleme, da dein Empfänger schon ein Echo detektiert, während der Sender noch am Senden ist.
hi,
wenn dein micro nur eine freq. detektiert kannst du die kennung z.b. aus 2 pausen bauen, die 1. zum 'ohrenspitzen' als attention-signal, damit der uc weiss, jetzt gilt's gleich, die 2. als messpause. in der fernsehtechnik wird auf ähnliche weise der zeilen- und bildkipp-impuls erzeugt.
gruss, harry
aus 2 pausen bauen, die 1. zum 'ohrenspitzen' als attention-signal, damit der uc weiss, jetzt gilt's gleich, die 2. als messpause. in der fernsehtechnik wird auf ähnliche weise der zeilen- und bildkipp-impuls erzeugt.
Ich fürchte, das mit dem Fernseher könnte man auch ganz anders erklären. :-k
Vor allem sollte, wie oben angesprochen, die Güte des Wandlers berücksichtigt werden, die die Geschwindigkeit vorgibt, mit der sich das Signal ändern kann.
Der Einfluß dieser Güte (Bandfiltercharakteristik des Wandlers) macht die Impulslaufzeitmessung sehr ungenau, unabhängig davon, ob es sich um Impulse oder um Pausen handelt.
Bei derart kurzen Distanzen, wenn die Anschwingdauer in die Größenordnung der Laufzeit kommt, ist eigentlich nur eine Phasenmessung sinnvoll, die ganz im eingeschwungenen Zustand durchgeführt wird.
Manfred
klar kann man, soll ich was von schwarzschulter blubbern oder wie? da weiss doch kaum einer was mit anzufangen wenner den ganzen altkram nich schon mit der muttermilch eingesogen hat. ich wollt nur ausdrücken, es gibt weiss gott simple methoden um eine deutliche träger / nutzsignaltrennung vorzunehmen. und die müssen noch nichtmal kompliziert sein. aber phasenmessung funtzt sicher auch, wird wohl so bei lasermessgeräten gemacht, ist aber halt auch nicht so richtig simpel...
gruss, harry
Hi !
Die Strecke wird wohl noch größer werden, aber jetzt hab ich halt erst mal eine von 5cm aufgebaut, weil ichs erst mal testen wollte. Später sollens ja 2 teile seien.
Wenn die Strecke nun länger ist, dann wird der fehler ja kleiner oder ?
Was ist eine Phasenmessung ? hat da wer Links oder ne Erklärung?
Javik
Eine kleine Stoffsammlung zum Thema Phasenmessung:
Die Artikel sind unterschiedlich in ihrer Ausführlichkeit, vielleicht ist das Passende dabei.
Manfred
http://www.geocities.com/stefangachter/Technology/Phasen.html#2_4_6
www.lebensmittelmeister.de/Technikecke/Krohne/HB_LEVEL_d_144.pdf
www.ub.uni-duisburg.de/diss/diss0039/kapitel6.pdf
https://www.roboternetz.de/phpBB2/printview.php?t=413&start=25
http://ag-vp-www.informatik.uni-kl.de/Papers/skriptamr/Kapitel%202.2.pdf
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.