Hi,

ich möchte die Schallgeschwindigkeit in Luft (oder auch andere) messen.
Dafür habe ich ein Ultraschallsender (400ST) und Empfänger (400SR) von Conrad.
Die Schaltung habe ich von hier übernommen und etwas modifiziert. Mit einem µController soll das ganze gemacht werden. Der Controller ist ein Atmel AT89S8252 mit 24MHz. Der Controller erzeugt die 40kHz Frequenz für den Sender. Das ist zwar die leistungsschwächere Variante, aber es reicht aus. Denn Sender und Empfänger stehen gegenübereinander
in einer Entfernung von 5cm. Wenn die Schallgeschwindigkeit 344 m/s ist, dann muss t=145µs sein. Die Zeit von 145µs kann von dem AT89S8252 gemessen werden. d.h. ich muss nur diese Zeit messen können.
Die Empfängerschalltung habe ich so modifiziert, so dass wenn der Sender nichts abstrahlt, dann ist Empfänger-Schalltungsausgang auf High (--> Controllereingang - Interrupt negative Flanke getriggert).
Wenn der Controller den Sender aktiviert, wird auch einen Timer gestartet (16 Bit mit ca. 32ms Zeit zum Overflow mit eine Auflösung von 0,5 µs). Nach ca. 145µs sollte das Signal beim Empfänger ankommen und detektiert werden.
Wird ein Signal detektiert, dann wird ein Interrupt ausgelöst. In dieser Interruptroutine wird der Timer gestoppt, Timerinhalt gelesen, Sender wird wieder deaktiviert, und alles wird zurückgesetzt. Die Messung kann neu anfangen.

1. PROBLEM: Timerinhalt ist 584, d.h. eine Zeit von 584/2=292µs (das sollte doch ca. 145µs sein).
2. PROBLEM: Dieser Messwert ist zwar bei einer konstanten Entfernung (5cm) konstant. ABER manchmal tauchen andere Werte auf wie (576/2=288µs) und (536/2=268µs).
FRAGE: Warum messe ich die Zeit fast doppelt soviel es sein sollte, und wo kommen die zwei andere Werte her? Strahlt der Sender nicht immer zeitgelich?. Schaltet der Empfänger auch nicht immer zeitgleich? Oder ist es programmierfehler? Oder hängt es davon ab, wie die ansprichzeiten der elektronik Bauteile?


Danke

Goerge