PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Laufzeitmessung von Schall



Javik
04.09.2004, 18:41
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

recycle
04.09.2004, 19:29
Könnte es daran liegen, dass du Timer0 und Timer1 durcheinanderwirfst?

Javik
05.09.2004, 10:42
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

harryup
07.09.2004, 08:26
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

Javik
07.09.2004, 11:02
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

sonic
08.09.2004, 01:28
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

Javik
08.09.2004, 09:10
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

sonic
08.09.2004, 09:48
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

08.09.2004, 11:30
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.

harryup
08.09.2004, 14:38
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

Manf
08.09.2004, 16:08
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

harryup
08.09.2004, 20:39
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

Javik
10.09.2004, 13:26
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

Manf
10.09.2004, 14:19
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