- LiFePO4 Speicher Test         
Ergebnis 1 bis 10 von 15

Thema: Abfrage Ultraschallsensor HC-SR04 unter BASCOM

Baum-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #6
    Erfahrener Benutzer Robotik Einstein Avatar von Searcher
    Registriert seit
    07.06.2009
    Ort
    NRW
    Beiträge
    1.703
    Blog-Einträge
    133
    An der Zeitmessung stören mich verschiedene Dinge. Vor allem, daß im Hauptprogramm immer alles gemacht wird bzw stockt und auf die ISR gewartet wird, die wiederum die ganze Pulslänge lang wartet.

    Hab mir also zunächst mal ein Datenblatt zum SRF04 gesucht. Es gibt viele davon und es lohnt sich mehrere anzuschauen. Ich hab mir das hier ausgesucht: http://www.roboter-teile.de/datasheets/srf04.pdf
    Falls es nicht zu Deinem Sensor paßt, verlinke bitte das passende.

    Aus dem Datenblatt entnehme ich:
    -daß der Sensor einen maximalen Meßbereich von 3cm bis 300cm haben soll
    -daß der Triggerimpuls mindestens 10µs und nicht länger als 200µs lang sein soll
    -daß die Länge des Impulses vom Echo Output Pin proportional zur Enfernung ist
    -daß die Länge des Impulses von 100µs bis 18ms reichen kann.
    -daß die Länge des Impulses, wenn kein Objekt erkannt wurde, ungefähr 36ms ist
    -die Formel zum Umrechnen der Zeit in Entfernung - mit Erklärung.

    Du möchtest recht genau messen. Was bedeutet das für Dich?

    Für mich ist 1mm Auflösung schon sehr genau. Was bedeutet das in Impulslänge?
    Nach der Formel im Datenblatt: s = 344m/s * ti / 2 bedeutet 1mm Abstand eine Impulslänge von:
    ti = s / 344m/s * 2
    ti = (1mm / 344000mm/s) * 2 = 0,000005814s

    also etwa 5,814µs, heißt, wenn ich eine Auflösung bei der Zeitmessung von 5µs habe, kann ich theoretisch Abstände mit einer Genauigkeit von weniger als 1mm messen.

    Heißt auch, daß nach Beginn des Sendens des Triggerimpulses bei 3cm Abstand das Echosignal frühestens nach
    (1000000µs / 344000mm) * 2 * 30mm = 174,4µs erwartet werden kann.

    Du nimmst den Timer1 für die Zeitmessung. Wär auch meine Wahl, nur der Prescaler von 1 gefällt mir jetzt nicht.

    Mit den 16Bit des Timers kann man von 0 bis 65536 zählen. Die Impulslänge kann von 100µs bis 18000µs (36000µs) reichen.
    Das schreit ja fast danach, den Timer so einzustellen, daß ein Schritt um 1µs bedeutet. Geht bei 8MHz Systemtakt auch noch prima.

    Prescaler auf 8. Timer läuft mit 1Mhz. 1 / 1000000Hz = 0,000001s = 1µs. Ein Timerschritt also genau 1µs.
    Auflösung: s = 344m/s * 1µs / 2 = 0,172mm (noch genauer als ich wollen würde )

    Das macht das Programm einfacher und man braucht sich nicht mit den Timerüberläufen zu quälen

    Der Programmablauf in Anlehnung an Dein Konzept könnte dann so aussehen:
    Das Programm mißt ständig. Für Meßintervalle könnte man 4.1.2 gesondert behandeln.
    Eine Einheit des Meßwertes (Timerstep) entspricht 0,172mm bei 8MHz Systemtakt und Timer1 mit Prescaler = 8
    Es wird nicht in der ISR gewartet bis der Echoimpuls vorbei ist, sondern die ISR zweimal für eine Messung aufgerufen.
    Sichern des Messergebnisses findet in der ISR statt und nur wenn eins vorhanden ist (Messung beendet), in der Hauptschleife berechnet und ausgegeben.
    Das Ergebnis der allerersten Messung ist unsicher, da man nicht weis, ob Timer1 schon durch die steigende Flanke des Echosignals initialisiert war.
    Ohne Gewähr und Logikfehler nicht ausgeschlossen Bild hier  

    1. Initialisierung
    -Header, Variablen, Timer, Interrupt, usw.
    -INT0 mit STATE=CHANGE
    2. Hauptschleife Anfang
    3. Messung Starten Flag = JA ? Abfrage
    3.1. JA
    3.1.1. 15µs Triggerimpuls senden
    3.1.2. Messung Starten Flag auf NEIN setzten
    3.1.3. Messung Beendet Flag auf NEIN setzten
    4. Messung beendet = JA ? Abfrage
    4.1. JA
    4.1.1. PRINT Meßergebnis (hier die Sicherung aus der ISR berechnen bzw direkt ausgeben)
    4.1.2. Messung Starten Flag auf JA setzten
    5. Hauptschleife Ende

    1. INT0 Isr
    2. Ist Triggerimpulspin = high?
    2.1. Ja
    2.1.1. Timer1=0
    2.2. NEIN (dann muß der Pin low sein)
    2.2.1. Meßergebnis=Timer1 (Meßergebnis sichern)
    2.2.2. Messung Beendet Flag auf JA
    3. RETURN (INT0 Isr Ende)

    Bin gespannt wie es hinhaut. Mit der Formel sollte es doch kein Problem sein, die Anzeige in cm zu machen? Wahrscheinlich muß man noch Kalibrieren, weil die Schallgeschwindigkeit von der Temperatur abhängig ist, auch Toleranzen des SRF04 und Sonstiges.

    Gruß
    Searcher
    Geändert von Searcher (14.11.2012 um 06:18 Uhr) Grund: Luftdruckabhängigkeit der Schallgeschwindigkeit gelöscht
    Hoffentlich liegt das Ziel auch am Weg
    ..................................................................Der Weg zu einigen meiner Konstruktionen

Ähnliche Themen

  1. Ultraschallsensor selbst bauen (Bascom)
    Von Janigut im Forum Elektronik
    Antworten: 5
    Letzter Beitrag: 26.04.2011, 15:58
  2. Ultraschallsensor HC-SR04 Probleme ungenauigkeit
    Von anfaenger201 im Forum Sensoren / Sensorik
    Antworten: 4
    Letzter Beitrag: 04.08.2010, 14:06
  3. pin abfrage mit bascom
    Von Che Guevara im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 6
    Letzter Beitrag: 05.09.2008, 12:59
  4. UART Sendepuffer-Abfrage mit Bascom
    Von Heideltrudel im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 4
    Letzter Beitrag: 03.08.2007, 21:12
  5. wav out mit PWM unter bascom?
    Von sebastian.heyn im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 18
    Letzter Beitrag: 10.06.2005, 09:02

Stichworte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad