PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : [ERLEDIGT] Genaue Zeitmessung für SRF05



RobotMichi
21.04.2011, 08:09
Hallo,

ich würde an meinen RP6 gerne 1-2 SRF05 Ultraschallsensoren anschließen. Da diese jedoch den Messwert über die Dauer eines High-Impulses zurückgeben, ist es wichtig diese Zeit möglichst genau zu messen.

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

Meine erste Idee waren natürlich die Stopwatches. Die haben nur eine Auflösung von 1ms; der niedrigste Rückgabewert d.h. die niedrigste Signaldauer liegt aber bei 100µs. Außerdem kann man den Wert so nur sehr ungenau bestimmen.

Gibt es also eine Möglichkeit die Zeitspanne des Impulses genauer zu messen?

Warum ich nicht SRF02/08/10 verwenden möchte:
SRF02 ist doch relativ ungenau, kann nur min. 15cm messen und SRF08/10 sind mir etwas zu teuer
Der große Vorteil wäre allerdings die Ansteuerung über I2C...

lg
Michi

RolfD
21.04.2011, 09:03
Ich kann dir aus eigener Erfahrung mit ähnlichen Modulen wie dem Polaroid http://www.uoxray.uoregon.edu/polamod/ nur zum SRF8 raten, genaue Zeitmessungen lassen sich jedoch mit delay cycle Messungen ebenso wie mit dem Hardware Timer lösen. Der Aufwand vor allem bei Echo und Mehrfachimpulsen ist jedoch hoch und die Cpu ist in der Zeit für andere Aufgaben kaum zu gebrauchen. Auf dem SRF8 werkelt ein kleiner PIC Prozessor, der sich um nichts anderes kümmert als die Auswertung. Das spart auf der main Unit zudem RAM, vor allem wenn man eh weitere I2C Devices (wie Kompas) nutzt. Die Forensuche könnte Dir auch helfen.
https://www.roboternetz.de/community/showthread.php?3183-Ultraschall-Entfernungsmessung
LG Rolf

Dirk
21.04.2011, 15:10
@RobotMichi:
Du kannst auch z.B. die timer-Variable nehmen.
Die wird beim RP6 alle 100us hochgezählt, so dass du bei einer max. Impulslänge des SRF05 von 25ms Werte von 1..250 (also 8 Bit) erreichen kannst. Das ist eine Auflösung von ca. 1,6cm pro Digit.
Also: In einer Schleife auf die 1. Flanke warten, timer-Wert 1 speichern (uint16_t), auf die 2. Flanke warten, timer-Wert 2 speichern. Wert = Timer-Wert 2 - Timer-Wert 1

RobotMichi
21.04.2011, 16:27
Hallo,

ich hab mir das mit den delay-Funktionen angesehen - das scheint jedoch nicht sehr genau zu sein (weil Software basiert). Und die Hardwaretimer sind doch eigentlich die Stopwatches, oder?

Ich werde daher doch einen SRF08 verwenden, das spart - wie RolfD bereits erwähnt hat, Zeit, weil die Abfrage über den I2C-Bus läuft.

lg
Michi

Dirk
21.04.2011, 16:34
@Michi:
Die Stopwatches basieren auf Zählern, die in Interrupts alle 1ms hochgezählt werden.
Die Variable "timer" wird genauso hochgezählt, aber alle 0,1ms.
Beide Varianten sind also gleich genau/ungenau,- wie man das sehen möchte.

Aber: Der SRF08 ist auch eine gute Wahl, wenns Geld reicht ...

Fabian E.
22.04.2011, 23:03
Also ich habe zwei SRF02 und einen 08 und bin eigentlich sehr zufrieden damit.
Man muss sich quasi um nichts kümmern (außer, dass der SRF wieder bereit ist) und halbwegs genau sind ide auch.
Der 08 ist natürlich schon viel besser als die 02er ;)
Die 02er kann man auch softwaremäßig koppeln, dann hast du eigentlich ein 08er :)

RobotMichi
23.04.2011, 12:26
Hallo,

danke für eure Antworten.
Ich bleibe dann aber doch beim SRF08.
@Fabian: Ob ich zwei SRF02 oder einen 08 kaufe ist preismäßig fast egal. Daher ist es für mich einfacher einen SRF08 zu nehmen.

lg
Michi