Forum: FPGA, VHDL & Co. Ultraschallentfernungsmessung mit FPGA


von Thomas Eichstetter (Gast)


Lesenswert?

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

von Iulius (Gast)


Lesenswert?

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.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

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)

von MT (Gast)


Lesenswert?

Wäre auch sehr an den Artikel interessiert...

von Thomas Eichstetter (Gast)


Lesenswert?

@ 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

von Andreas S. (andreas) (Admin) Benutzerseite


Lesenswert?

Thomas Eichstetter schrieb:
> Dürfen wir evtl. dieses Projekt auf mikrocontroller.net veröffentlichen?

Gerne! Am besten im Wiki, siehe Anleitung: Artikel erstellen.

von Iulius (Gast)


Lesenswert?

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.

von Eddy C. (chrisi)


Lesenswert?

Najo, nicht ganz so doll... spannender finde ich die Frage, wie man bei 
einem Burst den ersten Nulldurchgang definiert?

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Und: wozu ein Burst, wenn nur der erste Nulldurchgang verwendet werden 
soll? Dann müsste doch 1 einziger Impuls ausreichen...

von dr.prof.schlau (Gast)


Lesenswert?

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.

von Iulius (Gast)


Lesenswert?

@ 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.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

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...

von Yalu X. (yalu) (Moderator)


Lesenswert?

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.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

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... ;-)

von Yalu X. (yalu) (Moderator)


Lesenswert?

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 ... :)

von Thomas Eichstetter (Gast)


Lesenswert?

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

von Sym (Gast)


Lesenswert?

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.

von Thomas E. (feldweg)


Lesenswert?

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

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

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

von Thomas Eichstetter (Gast)


Lesenswert?

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

von Mughalles (Gast)


Lesenswert?

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

von Thomas E. (feldweg)


Lesenswert?

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

von haeh (Gast)


Lesenswert?

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!

von Thomas E. (feldweg)


Lesenswert?

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
Noch kein Account? Hier anmelden.