Problem bei Pulslänge messen ATMega32

Gast #1149191
Lesenswert?

Moin

Ich habe da so mein Probleme die Länge eines Impulses zu messen. Ich hab 
auch schon dieverse Beiträge durchgesucht und versucht damit mein 
Problem zu lösen, was leider nicht geklappt hat :( Deswegen hoff ich das 
mir jemande hier helfen kann.
Ich verwende einen ATMega 32 bei 1MHz
Also mein Problem. Ich habe mir ein Ultraschallmesser SRF05 gekauft. Um 
die Messung zu aktivieren, muss ein min 10µs langer Impuls gesendet 
werden und dann muss der Port auf Eingang geschaltet werden. Das Klappt 
auch alles soweit und ich bekomme auch Zeiten ausgegeben, aber nicht 
die, die ich erhofft habe.
Der Impuls der vom SRF05 ausgesendet wird ist zwischen 100µs bis 25ms 
lang. Jenachden wie weit das Objekt weg ist, umsolänger ist auch der 
Impuls. Teilt man die Impulslänge durch 58, so soll das ergebniss in cm 
rauskommen. Leider Klappt das nicht. und ich weiß nicht vorran das lieg. 
die Ergebnisse stimmen nicht mit der Tatsächlichen Entfernung ein.
Vielleicht hab ich ja irgendwo ein fehler drin. Hoffentlich kann mir 
jemand helfen. Wäre euch sehr dankbar.

Gruß Tobi
Angehängte Dateien:
Persönliche Seite #1156808
Lesenswert?

Nach Umkonfigurierung von Timer1 die IRQ-Flags zurücksetzen?

Der Verwending von Timer1 schein etwas zerfrickelt zu sein. Du willst 
doch ständig messen und nicht nur 1x? AM besten ginge das über 2 Timer: 
Timer1 macht den InCapt und ein anderer die Zeit.

Zudem versteh ich nicht, warum die Länge des Echos von den Entfernung 
abhängen soll? Die Zeit, bis man das Echo hört, sollte davon abhängen...

Johann
#1156832
Lesenswert?

Johann L. wrote:

> Zudem versteh ich nicht, warum die Länge des Echos von den Entfernung
> abhängen soll? Die Zeit, bis man das Echo hört, sollte davon abhängen...

Ne, das ist ein Ultraschallmesser mit "Eigenintelligenz". Der gibt das 
Messergebnis als längencodierten Pulse aus.
Gast #1157400
Lesenswert?

Man kann das Ding komplett mit einem Timer erschlagen.
Für den ICP lässt man den Timer konstant durchlaufen.
Beim Overflow-Interrupt setzt man den Pin auf Senden.
Im OCR steht dann 10 für 10 µs bei 1MHz Timer-Frequenz.
In der OCR-ISR schaltet man den Pin dann auf Empfang, da zu diesem 
Zeitpunkt der Sendepuls fertig sein soll.
Die ICP-Flanke müsste zu diesem Zeitpunkt auf steigende Flanke 
eingesetellt sein. Sobald die ICP-ISR aufgerufen wird, sichert man das 
ICR und schaltet die Flankendetektionsrichtung um auf fallende Flanke.
Wenn die ICP-ISR wieder aufgerufen wird, sichert man auch wieder das ICR 
(input Capture Register); diesmal in einer anderen Variablen.
Um die Pulsdauer herauszubekommen, subtrahiert man den ersten Wert vom 
zweiten. Dabei ist es egal, ob es zwischendurch einen Überlauf gab oder 
nicht.  Das geht deswegen, weil der Zahlenraum begrenzt ist (auf Papier 
ausprobieren, falls dasnicht klar geworden ist.)
Dann sollte man zu sinnvollen Ergebnissen kommen.

http://www.robotikhardware.de/download/srf05doku.pdf

enhält ja auch ein Bascom Bespiel...
Gast #1162262
Lesenswert?

Bedenke auch die Schallgeschwindigkeit, die immer von der Temperatur 
abhängig ist, was die Genauigkeit beeinflußt. Das Mosul scheint mir 
keinen Sensor zur Temperaturkompensation zu haben.

http://www.sengpielaudio.com/DieSchallgeschwindigkeitLuftdruck.pdf

Außerdem musst Du bei den SFRxx Modulen immer auch die 
Richtcharakteristik der US-Keule beachten. (Diagramm im Datenblatt). 
Diese ist 3-dimensional.
Zudem wird das US-Signal von allem in der näheren Umgebung befindlichen 
Gegenständen zerstreut und diffus reflektiert.

Wenn Du z.B. bei Deinen Versuchen den SRF05 zu dicht am Tisch hast, 
verfälscht Dein Ergebniss durch Reflektionen. Aus Erfahrung würde ich 
mindestens 20cm Höhe pro Entfernungsmeter vorsehen.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren