Forum: Mikrocontroller und Digitale Elektronik Ultraschallmessung zu ungenau


von Joe J. (anfaenger2010)


Lesenswert?

Hallo, realisiere gerade eine Abstandsmessung mit einem HC-SR04 (nachbau 
von Devantech srf04?) der an einem Atmega32 hängt.
Der sensor hat einen Triggereingang und einen Echoausgang, die 
Entfernung berechnet man mithilfe der Laufzeit des Echosignals und der 
halben Schallgeschwindigkeit oder die Laufzeit in mikrosec. /58.
Der Quellcode ist in Bascom geschrieben und mithilfe vo pulsein pulseout 
steuere ich den Sensor an.
Es klappt auch ich bekomme werte vom Sensor zurück, soweit so gut.
Leider komme ich nicht auf die richtigen Abstände wenn ich die 
Signallaufzeit * 344M/s /2 nehme auch die Laufzeit /58 bringt keine 
Verbesserung, ich dachte es würde am Pulsein Signal liegen es wird ja in 
10us ausgegeben, habe also diese Laufzeit also esrstmal *10 genommen, 
auch nichts.
Habe mir dan die Formel so umgestellt das ich bei einer Messunch von 
20cm auf den richtigen Abstand komme, dachte ich sei schon am Ziel, die 
Werte sahen vielversprächend aus. Doch dann musste ich feststellen, dass 
sobbald ich Distanz von 20 auf z.B. 70cm verschiebe die Ergebnisse nicht 
mehr ganz richtig waren, eine Toleranz von 2-3cm hab ich immer oft auch 
mehr.
Ich habe versucht die Variablen zur Berechnung der Laufzeitz zu 
vergrößern, also die Laufzeit des Signals nicht nur *172 sodern mal 
*1000000... und dieses Ergebniss dann so zu teilen, dass ich auf die 
entsprechende Entfernung komme, habe den Sensor auch auf verschiedene 
Entfernungen kalibriert, keine verbesserung.
Ich könnte mir höchstens vorstellen das es an der Tacktfrequenz meines 
Mega32 liegt, er läft auf etwas über 14MHz, kann das denn soeine 
ungenauigkeit bedingen?
Habe auch versucht ihn auf 1MHz laufen zu lassen, half auch nichts.
Muss dazu sagen das ich mit Bascom und einem USBAVP arbeite, da das ja 
nicht direkt geht habe ich AVRDUDE bei Bascom benutzt um programmieren 
zu können.
Jetzt kann ich aber leider nichtmehr an die Fusebits ran um diese 
entsprechend der Frequenz zu ändern.
Danke für die Hilfe.

von Lehrmann M. (ubimbo)


Lesenswert?

Du musst einen Timer verwenden um zum Ziel zu kommen. In Bascom wird das 
mit Zeitkritischen Anwendungen sonst nix.

Eine weitere Möglichkeit, die allerdings eine Kalibration erforderlich 
macht wäre die Lineare Interpolation.

Joe Joe schrieb:
> Jetzt kann ich aber leider nichtmehr an die Fusebits ran um diese
> entsprechend der Frequenz zu ändern.

Dann solltest du dich entweder um eine besser Programmierumgebung 
bemühen oder nicht die billigsten Microcontroller verwenden...

Und bitte bemüh dich mal richtig zu schreiben. Da wird mir ganz übel 
wenn ich mir deine Rechtschreibung (oder das was davon übrig geblieben 
ist) anschaue. Das hat auch was mit Höflichkeit hier im Netz zu tun. 
Dankeschön =)

von Arne W. (blaueled)


Lesenswert?

Hallo,

wie Michael schon geschrieben hat, solltest du für dein Vorhaben auf 
jeden Fall einen Timer nutzen.

Wenn du deinen timer auf etwa 5,82us einstellst, dann hast du genau 
einen mm Abstand pro Timerauslösung und sparst dir die ganze Rechnerei. 
Dann Zählst du einfach, wieoft dein Timer ausgelöst hat, bis der 
Echoausgang ein Signal ausgibt.

So richtig wird für mich nicht klar, wie du es im Moment zu lösen 
versuchst.

Die Fuses einzustellen ist elementar und ein externer Quarz wäre wegen 
der höheren Frequenz und damit besseren Genauigkeit wünschenswert.

Viel Glück

von Joe J. (anfaenger2010)


Lesenswert?

Vielen Dank,
ich bin leider noch ein blutiger Anfänger in Sachen AVR und Bascom.
Ich muss mich erstmal etwas mit dem Timer beschäftigen, um mit ihm die 
länge des High-Signal am Echoausgang des Ultraschllmodules zu messen.
Ich sehe jedoch jetzt schon, dass es nicht ganz so leicht wird, wie mit 
dem Pulsein Befehl.
Jedenfalls weiss ich jetzt, woher die beschriebene Ungenauigkeit 
herrühren könnte.
Mich wudert nur, dass ich bereits einige Bascom Quellcodes gesehen habe, 
die genau wie ich, die Signallänge am Echoausgang mithilfe des Pulsein 
Befehles bewekstelligt haben.

von Karl H. (kbuchegg)


Lesenswert?

Dazu kommt noch, dass deine Annahme, dass die 
Ausbreitungsgeschwindigkeit konstant wäre, nicht stimmt. Durch 
Temperaturschwankungen verändert sich die.

Kalibrieren solltest du immer bei der größten Entfernung, nicht bei der 
kleinsten!

von Msp 4. (msp430_crew)


Lesenswert?

Die größten Probleme sind zum einen die Temperatur, die Luftfeuchte, die 
anderen Bestandteile der Luft usw.

Ein andere weiterer Punkt sind Fehler durch Reflektion, Beugung/ 
Brechung bzw. Streung. Gerade wenn Du mit einem Sender und einem 
Empfänger arbeitest vergrößert sich dieser Fehler.

Nich zu vergessen dass die gesamt Messmethode nur 2 dimensional 
funktioniert....

Viel Erfolg :-)

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.