Hallo, Ich habe mit einem anderen Studenten und Unterstüzung eines Profs. ein kleines Projekt zur Ultraschallentfernungsmessung (Reflexion) als Einsteigerprojekt in die VHDL-Sprache geschrieben. Dabei wurde eine kleine Platine zur Signalverstärkung der Ultraschallimpulse entwickelt. Diese wurde dann an das Xilinx Spartan-3 Eval-Board angeschlossen und ein VHDL-Code geschrieben und implementiert. Diese Ultraschallmessung geht bis 5m gut. Die Auflösung beträgt dabei 5mm. Die Spannungsversorgung der Verstärkerplatine ist variabel von 5-20V. Das ganze Projekt wurde sehr detailliert dokumentiert und es wäre schön dem Rest der Welt dies nicht vorzuenthalten. Dürfen wir evtl. dieses Projekt auf mikrocontroller.net veröffentlichen? Viele Grüße Thomas Eichstetter
Ist das ein sehr langsamer ADC (<1Mhz) oder warum ist Auflösung so gering? Ansonsten würde mich das sehr interessieren, sowohl Versuchsaufbau als auch Code.
Thomas Eichstetter schrieb: > Dürfen wir evtl. dieses Projekt auf mikrocontroller.net veröffentlichen? Das mußt du deinen Prof und deine Kommilitonen fragen... ;-) Und wenn sonst keine Rechte verletzt werden, dann schreibst du am besten einen Artikel in der Abteilung FPGA & Co. (http://www.mikrocontroller.net/articles/Hauptseite)
@ Iulius Auflösung genauer zu bestimmen wäre sinnlos, da durch die unterschiedliche umgebungstemperaturen schon wesentliche Abweichungen auftreten. Außerdem wird die Laufzeit des Ultraschallimpulses gemessen. (Nix mit ADC). Ich kläre das nochmal mit den beteiligten Personen und schreibe dann einen Artikel. Versuchsaufbau und Code sind meines erachtens schön beschrieben. Danke für die Antworten. Viele Grüße Thomas Eichstetter
Thomas Eichstetter schrieb: > Dürfen wir evtl. dieses Projekt auf mikrocontroller.net veröffentlichen? Gerne! Am besten im Wiki, siehe Anleitung: Artikel erstellen.
Wie misst du denn die Laufzeit, wenn nicht über den Nulldurchgang von dem ersten Reflexionecho ? Ein ADC der häufiger abtastet kann diesen Punkt genauer bestimmen, deswegen kam ich darauf. Allerdings habe ich an unterschiedliche Temperaturen usw nicht gedacht. Eventuell lohnt es sich dort gar nicht. Bin auf jeden Fall gespannt auf den Artikel.
Najo, nicht ganz so doll... spannender finde ich die Frage, wie man bei einem Burst den ersten Nulldurchgang definiert?
Und: wozu ein Burst, wenn nur der erste Nulldurchgang verwendet werden soll? Dann müsste doch 1 einziger Impuls ausreichen...
Die großen Abweichungen entstehen auch durch die Frequenz des Ultraschallimpulses. Mit 40kHz ist die Auflösung geringer, als mit z.B. 400kHz (das gilt natürlich nur für die Laufzeitmessung). Die Temperatur beeinflusst das Ergebnis bei 5m Entfernung eher nicht so stark.
@ Scharbernack: eventuell hast du meinen Post falsch verstanden. Ich meinte nicht das sich diese Messung nicht lohnt, sondern das sich mehr Genauigkeit nicht lohnt wenn schon allein Temperaturschwankungen größere Unterschiede ausmachen und deswegen das wohl ok ist mit den 5mm. Ansonsten wüsste ich nicht was an meinem Post falsch wäre. Ich würde ja gerne mehr darüber erfahren und hoffe das mit dem Artikel die Erleuchtung kommt. Sonst findet man ja mehr über medizinische Anwendungen die im Vergleich deutlich genauer sind, aber das ist halt auch ein ganz anderes Anwendungfeld. Das soll aber keine Abwertung dieser Arbeit hier sein, falls mir wieder jemand damit kommt.
Iulius schrieb: > Sonst findet man ja mehr über medizinische Anwendungen die im Vergleich > deutlich genauer sind, aber das ist halt auch ein ganz anderes > Anwendungfeld. Und vor allem: ganz andere Frequenzen und Laufzeiten...
Thomas Eichstetter schrieb: > Auflösung genauer zu bestimmen wäre sinnlos, da durch die > unterschiedliche umgebungstemperaturen schon wesentliche Abweichungen > auftreten. Eine Temperaturkompensation nachzurüsten, wäre aber sicher auch kein großes Problem, da es sich dabei nur um Postprocessing handelt. Die ermittelte Laufzeit bzw. Entfernung muss eben am Schluss noch mit einem Temperaturwert verrechnet werden. Aber auch mit Temperaturkompensation wird bei dem Messbereich von 5m in Luft die Messgenauigkeit in realen Anwendungen kaum wesentlich besser als 1cm werden. Insofern ist die Auflösung von 5mm schon in Ordnung. Iulius schrieb: > Wie misst du denn die Laufzeit, wenn nicht über den Nulldurchgang von > dem ersten Reflexionecho ? Üblicherweise wird das über Schwellwertüberschreitung oder Maximumbe- stimmung (Nulldurchgang der Ableitung) des Hüllkurvensignals gemacht. Das kann auf analoger Seite geschehen, so dass kein ADC benötigt wird. Ein FPGA wäre natürlich zu weit mehr fähig, so dass man sich auch über eine direkte Auswertung des Trägersignals mittels eines schnellen ADCs Gedanken machen könnte. Man darf aber auch nicht übersehen, dass es sich um > ein kleines Projekt zur Ultraschallentfernungsmessung (Reflexion) als > Einsteigerprojekt handelt. Wir sind auf jeden Fall auf die Veröffentlichung des Artikels gespannt. Lothar Miller schrieb: > Und: wozu ein Burst, wenn nur der erste Nulldurchgang verwendet werden > soll? Dann müsste doch 1 einziger Impuls ausreichen... Die meisten Ultraschallwandler (insebsondere die piezoelektrischen) sind so schmalbandig, dass es ein paar Schwingungen dauert, bis die maximal mögliche Amplitude annähernd erreicht wird. Deswegen muss man praktisch immer mit Bursts arbeiten. >> Sonst findet man ja mehr über medizinische Anwendungen die im Vergleich >> deutlich genauer sind, aber das ist halt auch ein ganz anderes >> Anwendungfeld. > Und vor allem: ganz andere Frequenzen und Laufzeiten... Und das Ganze in Flüssigkeit. Das alles zusammen ergibt komplett andere Randbedingungen.
Yalu X. schrieb: > Lothar Miller schrieb: >> Und: wozu ein Burst... > Deswegen muss man praktisch immer mit Bursts arbeiten. Ich habe mit dieser Frage den Advocatus Diaboli gespielt. Denn wenn es eine Zeitlang dauert, bis der Piezoschwinger in Resonanz ist, dann ist der erste Nulldurchgang evtl. recht unzuverlässig. Allerdings ist eine Auflösung von 5mm insbesondere deshalb recht ansehnlich, weil das ja einer Zeit von 16us und damit einer Frequenz von 60kHz entspricht. Und das mit US-Wandlern, die idR. mit Frequenzen um die 40kHz angeregt werden... Ich bin gespannt... ;-)
Yalu X. schrieb: > Lothar Miller schrieb: >> Und: wozu ein Burst... > Deswegen muss man praktisch immer mit Bursts arbeiten. Ich habe mit dieser Frage den Advocatus Diaboli gespielt. Ach so, alles klar. Mich hat's auch schon gewundert ... :)
Immer mit der Ruhe^^. Auf komplexe mathematische Rechnungen wurde bewusst verzichtet, da das Erlernen von VHDL und Elektronik im Vordergrund stand. Wie wurde die Entfernungsmessung in kurzen Worten realisiert: 7 kurze Impulse wurden ausgesendet (Start der Zeitmessung) und sobald das ausreichend starke Echo zurückkommt und es schafft einen bestimmten Grenzwert an Signalstärke zu überschreiten wird die Zeit gestoppt. Das ganze wird an 5 sieben Segmentanzeigen angezeigt. Die Trägheit der Senderkapsel kompensiert sich mit der Trägheit der Empfängerkapsel. Das OK von den Beteiligten habe ich erhalten. Nächste Woche werde ich mich einlesen und den Artikel schreiben, falls er doch nicht auf diese Seite passt, dann könnt Ihr ihn nachträglich immer noch entfernen :-) Viele Grüße Thomas Eichstetter
Prinzipiell baut man sowas aus Korrelationsempfänger auf. Die erreichbare Genauigkeit hängt nicht von der Samplingfrequenz des ADCs ab, sondern primär von der Bandbreite des Signals. Grundprinzip: Empfangspuls mit Sendepuls korrelieren und den Peak bestimmen. So einfach es auch klingt, da steckt noch viel mehr dahinter. Ich mache sowas ähnliches mit elektromagnetischen Wellen (also etwa 1000000x so hohe Ausbreitungsgeschwindigkeit) und komme damit auf Genauigkeiten von wenigen cm. Der Aufwand an Signalverarbeitung im FPGA ist aber nicht zu unterschätzen. Freu' mich auf den Artikel.
http://www.mikrocontroller.net/articles/Ultraschallentfernungsmessung_mittels_FPGA Erste Version, muss noch zwei drei Fotos schießen und paar Dinge Uploaden. Bitte gebt mir Verbesserungsvorschläge, mach das hier zum ersten mal. Wenn dieses kleine Projekt hier klappt dann werd ich mich nicht schäuen demnächst ein großes interesanntes Projekt einzufügen. Viele Grüße Thomas Eichstetter
Thomas Eichstetter schrieb: > werd ich mich nicht schäuen Die Scheu --> scheuen ;-) > Bitte gebt mir Verbesserungsvorschläge, Soweit ein guter Anfang. Aber ein paar Verbesserungsvorschläge häte ich doch noch... ;-) Die Sensitivliste ist überbestimmt:
1 | --Zähler1: Zählprozess
|
2 | process ( clk, clk2) --Timer wird auf 5mm Weg/Periode gesetzt |
Der Prozess Zähler1 ist nur auf clk sensitiv. Grundsätzlich sollten Zähler besser als eingeschränkte integer realisiert werden, denn dann würdest du solche Konstrukte nicht brauchen:
1 | clk2 <= clk2+"000000000001"; --clk2 Zähl-Periode jetzt auf 25MHz |
2 | :
|
3 | :
|
4 | if (ultra="1001110001") then -- 40kHz = 50MHz /(2* 625) [2mal wegen ein/aus] |
5 | ein_aus <= ein_aus + 1; |
6 | ultra <="0000000000"; |
Das wäre dann z.B. etwas übersichtlicher:
1 | clk2 <= clk2+1; --clk2 Zähl-Periode jetzt auf 25MHz |
2 | :
|
3 | :
|
4 | if (ultra=625) then -- 40kHz = 50MHz /(2* 625) [2mal wegen ein/aus] |
5 | ein_aus <= ein_aus + 1; |
6 | ultra <= 0; |
Am Rande: ich habe den Verdacht, dass du hier um 1 zu weit zählst, denn 0..624 sind schon 625 Zählschritte! Aber die knappen 2 Promille Fehler wirst du nicht gleich merken... ;-) Das ist ein wenig verwirrend:
1 | wegzaehler2:= wegzaehler1 + "0001110000"; --400 abziehen |
Solche Überlauftricksereien müssten besser dokumentiert sein... :-/ Warum schreibst du da nicht einfach
1 | wegzaehler2:= wegzaehler1 - "0110010000"; --400 abziehen |
Oder, wenn wegzähler2 ein integer wäre:
1 | wegzaehler2:= wegzaehler1 - 400; --400 abziehen |
Und zum Schluss wäre auch eine kurze Ressourcenbetrachtung nicht schlecht: wiviel Platz (LUTs, FFs) braucht das Design in einem FPGA? Schreib doch bitte in den Text, dass das ein Anfängerprojekt ist, an dem noch einiges verbessert werden könnte. BTW: Ein Komma zuviel oder ein Name zu wenig? Beim Mentor: Dr.Ing., MBA Thomas Fuhrmann
Vielen Dank für die Fehlerkorrektur Lothar :) Ja klar, stimmt alles was du schreibt. Was bin ich nur für ein Schussel... Dankeschön. Ich selbst habe mich davor ja nur 2 Wochen nebenbei in VHDL eingelesen, von dem her bin ich für jeden Rat dankbar. Ich ändere das ganze nach den Ferien, weil die Hochschule vermutlich momentan geschlossen ist (ich habe das Board nicht selbst). Dann kommen auch Fotos und Anschlussplan ans Eval-Board rein. Bis dahin kann ich leider nicht viel tun, weil wenn ich was ändere, dann möchte ich es auch testen obs dann noch funktioniert. Viele Grüße
Hallo Thomas, wo ist der Link von deinem Projekt? Wenn ich da aufs Link klicke lande ich beim ersten Projekt. Ich würde mich sehr gerne für die Doku deines Projektes interessieren. vielen Dank MFG
Hallo Mughalles, entschuldige dass ich mich nicht früher gemeldet habe (Studium...). Ich werde in der nächste Woche versuchen die Doku fertigzustellen. Viele Grüße Thomas
In deinem Artikel hast du VHDL unter "Softwareentwicklung". Das trifft den Kern der Sache nicht. VHDL ist nun mal keine Software im klassischen Sinne. schönes Projekt übrigens!
hallo haeh, stimmt, das kommt aus der Gewohnheit vom C-Code-schreiben... und danke... Ich habe leider nicht bedacht das Donnerstag und Freitag das Labor nicht offen hat sonst hätte ich den umgeänderten Code getestet und auf der Seite aktualisiert. Dann hald diese Woche die jetzt kommt...
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.