Empfängerschaltung Ultraschall Entfernungsmesser

OP #3283422
Lesenswert?

Hi,

versuche jetzt seit einer Woche mit dem UST-40R ein von mir ausgegebenes
Signal mit einem Atmega8 auszuwerten. LEIDER ERFOLGLOS! Daher bin ich
sehr an einer mit nem AVR harmonierenden Empfängerschaltung
interessiert! Hoffe auf Rückmeldung.

Anders
Angehängte Dateien:
Gast #3283485
Lesenswert?

Anders Radek schrieb:
> LEIDER ERFOLGLOS!
Und woran liegt das? Wenn deine Bandpässe funktionieren, dein 
Gleichrichter arbeitet wie er soll und deine Endstufe bei genügend 
großer Amplitude schaltet, steht doch der Funktion nichts mehr entgegen. 
Probleme können entstehen, wenn deine Sendefrequenz nicht zum 
Frequenzgang der/des US-Wandlers oder zur Filterfrequenz der 
Empfängerschaltung paßt.
OP #3283492
Lesenswert?

Hallo Wolfgang,

danke dir. Habe die Schaltung mit einem Oszilloskop untersucht. Die 
Schaltung tut soweit dass, was sie soll. Habe jedoch nur in einem sehr 
geringem Winkelbereich eine Reflexion feststellen können. Mit dem AVR 
ist es mir leider nicht gelungen die Flanke der Reflexion detektieren zu 
können.

Das vorrangige Problem ist also der schmale Winkelbereich, in dem ich 
überhaupt eine Reflexion des aufgetroffenen Pulses (mit dem Oszi) 
feststellen kann. Der Winkelbereich wird außerdem mit zunehmenden 
Abstand kleiner.

Vielleicht kann man Empfindlichkeit weiter verbessern? Oder die 
Filterschaltung optimieren um Rauschen zu entfernen?

Weiß nicht wo ich ansetzen soll??

Anders
Angehängte Dateien:
OP #3283499
Lesenswert?

Nachtrag: Ich sende einen Rechteckpuls mit 40 KHz und Tastverhältnis 
1/2.
zwischen den Beinen des Empfängers habe ich einen 100 K Ohm Enlade 
-Widerstand. Der Sender und der Empfänger sind nach Datenblatt auf 40 
KHz +- 1 KHz abgestimmt - siehe Datenblatt. Wie finde ich die 
tatsächliche Resonanzfrequenz raus?

Gruß
Anders
Angehängte Dateien:
Gast #3283535
Lesenswert?

Anders Radek schrieb:
> Vielleicht kann man Empfindlichkeit weiter verbessern? Oder die
> Filterschaltung optimieren um Rauschen zu entfernen?

Mit deinem Verstärker belastest du die Kapsel ziemlich niederohmig. 
Prüfe doch mal mit dem Oszi, ob die Größe des Signal der Empfängerkapsel 
sich wesentlich ändert, wenn du deinen Verstärker an die Kapsel 
anschließt.
Ob die Frequenz gut zur Kapseleigenfrequenz liegt, stellst du am 
einfachsten fest, indem du mit dem Oszi die Empfangsamplitude vor dem 
Filter anguckst und die Sendefrequenz zwischen z.B. 35 und 45 kHz 
durchfährst. Genauso kannst du den Frequenzgang mit den Filtern prüfen, 
indem du vor dem Gleichrichter die Amplitude anguckst.
Mit einem Sender/Empfänger-Modul HC-SR04, wie es bei Ebay für ein paar 
Euro angeboten werden, kommt man mit einem harten Reflektor Format DIN 
A3 auf Reichweiten von gut 5m. Die Richtwirkung vergleichst du am besten 
mal mit dem angegebenen Richtdiagramm (die Zahlenangaben zu 
Empfindlichkeit sind wohl dB, bezogen auf die Vorwärtsrichtung)
OP #3284513
Lesenswert?

Kann erst am Montag wieder ins Labor der Hochschule, werde mich dann 
gleich mal ans Oszi setzen und die beiden Sachen ausprobieren.

Ein Modul wie das HC-SR04 habe ich in einem vorherigen Projekt 
verwendet. Hatte den PING von parallax.com eingesetzt. Der schafft drei 
Meter.

Das jetzige Projektziel ist die messbare Entfernung zu vergrößern. Ich 
will mit 16 V senden und eine Reichweite größer als 6 m erreichen, denn 
6 m schafft bereits das SRF-08 oder SRF-10 Modul.

Ist der Entladewiderstand von 100 K nicht etwa eine hochohmige 
Belastung?
Gast #3284553
Lesenswert?

Ich hab schonmal mit Ultraschall gebastelt. Herausgekommen ist 
folgendes: 
http://files.brauchmer.net/imghost/up/2ad8a3b1a9b228f780f67557c9d7b83e.jpg 
Gesendet UND empfangen habe ich mit dem MUS-40s von Reichelt.
Kurze Funktionserklärung: an Pin9 von SV2 kommt das 40kHz-Rechtecksignal 
vom µC, am sinnvollsten macht man das mit dem PWM-Modul. Während man 
sendet und kurz danach legt man High auf Pin10, das legt den Empfänger 
tot und lädt C10. Sobald man empfangen will, legt man Pin10 auf low, und 
mit den beiden Potis Slope und Th stellt man die RC-Kurve an IC2B so 
ein, dass sich möglichst eine gleichbleibende Empfindlichkeit ergibt. 
Statt den 4 Komparatoren könnte man auch einen LM3914 oder einen ADC der 
mit beliebigen Referenzspannungen klarkommt nehmen (gibts nen speziellen 
Namen für, fällt mir aber nicht ein) Betriebsspannung war +-12V, 
Reichweite war etwa 6m, allerdings mit nem Parabolreflektor aus Pappe. 
Mit mehr Sendeleistung und einer aufwändigeren Eingangsschaltung als 
einem MC33078 mit ner Verstärkung von 44 sollte auch mehr drin sein. 
Schau übrigens auch mal hier http://www.radartutorial.eu/index.html 
vorbei, viele Verfahren die für Radar verwendet werden, lassen sich auch 
auf Ultraschall übertragen, grade im Bereich Signalaufbereitung.
Gast #3284613
Lesenswert?

Im Buch "Powerprojekte mit Arduino und C" (ISBN-10: 3645651314)ist ein 
Ultraschall Entfernungssensor mit Schaltplan und AVR-Software 
beschrieben. Dieser Sensor kann sogar eine Fliege detektieren. Eine 
derart empfindliche Empfängerschaltung wirst Du benötigen, da Du sonst 
eine Hausmauer als Echo benötigst. Die Schwäche der obigen Schaltung 
dürfte in der Schwelle bei der Gleichrichtung zu finden sein.
Gast #3284620
Lesenswert?

Anders Radek schrieb:
> Das jetzige Projektziel ist die messbare Entfernung zu vergrößern. Ich
> will mit 16 V senden und eine Reichweite größer als 6 m erreichen, denn
> 6 m schafft bereits das SRF-08 oder SRF-10 Modul.

Wie soll den die Empfindlichkeit als Funktion der Richtung aussehen. Für 
eine Spot-Messung gibt es diverse Möglichkeiten von Gruppen-"Antenne" 
bis Schüsselreflektor.
OP #3284833
Lesenswert?

An Sascha:

Erst mal danke dir. Wofür setzt du denn die vier Komparatoren ein? 
Verstehe ich das richtig, dass du auf Pin 5 von SV2 alle Ausgänge der 
Komparatoren zusammenführst und somit eine höhere Verstärkung 
erreichst??

Da ich keine negative Versorgungsspannung habe, kann ich die 
Eingangsschaltung wohl so nicht umsetzen. Warum setzt du überhaupt zwei 
Transistoren am Eingang ein??

Ist ein Transistor am Eingang besser als ein OP?

Würde mich über Antworten freuen.

Anders
OP #3284860
Lesenswert?

Wolfgang schrieb:
> Und an Pin5 von SV2 liegt die Versorgungsspannung.

Ja richtig, sehe ich jetzt auch. Aber wozu dann die vier Komparatoren?

Wolfgang schrieb:
> Irgendwie muß ich MaWin beipflichten ...

Ja, tut mir Leid, hab halt noch sehr wenig Erfahrung in Sachen 
Analogtechnik...

Könnt ihr mich nicht trotzdem aufklären?

Der Empfänger ist dann an Pin 10 angeschlossen?
Gast #3284941
Lesenswert?

Anders Radek schrieb:
> Ist diese Empfindlichkeit nicht durch die verwendeten Sensoren
> festgelegt?

Nein, die Mindestempfindlichkeit ist durch die Anforderungen in deiner 
Anwendung festgelegt -  und das muss man dann durch geeignete 
Wandler/Aufbau/Beschaltung und Auswertealgorithmen hinkriegen.

Hier ein Beispiel für kreativen Wandlereinsatz:
http://www.mikrocontroller.com/jufo/kapitel1.htm
Gast #3285029
Lesenswert?

Da gibt es wohl etwas Verwirrung :-)
Ja, die beiden Transistoren sind die Sendeendstufe. Der Pappreflektor 
ist übrigens 25x10cm groß. Wenn man ihn auch genau parabolförmig formt, 
hört man das Knacken der Ultraschallkapsel auch in einigen Metern 
Entfernung :-)

> Wofür setzt du denn die vier Komparatoren ein?
Digitalisierung. Sie vergleichen das aufbereitete Empfangssignal mit der 
von IC2B erzeugten und mit der Spannungsteilerkette R19-R22 aufgeteilten 
RC-Kurve. Weitere Infos unter dem Punkt STC: 
http://www.radartutorial.eu/09.receivers/rx08.de.html

> Verstehe ich das richtig, dass du auf Pin 5 von SV2 alle Ausgänge
> der Komparatoren zusammenführst und somit eine höhere Verstärkung
> erreichst??
Wie kommst du denn darauf? Die vier Widerstände an VDD sind die Pullups 
für den LM339, der hat OC-Ausgänge. VDD ist in dem Fall 5V, da mein µC 
mit dieser Spannung läuft. An SV1 liegt die eigentliche Betriebsspannung 
von +-12V.

Im Prinzip kannst du die Schaltung auch mit 4V betreiben. Musst aber 
einige Sachen ändern und OPs nehmen, die auch mit dieser kleinen 
Spannung ordentlich funktionieren. Oder erzeug mit einer Ladungspumpe 
-4V. Für die gewünschte Sendeleistung brauchst du ja eh mindestens einen 
Wandler.

Meine Schaltung bitte nicht als heiligen Gral der 
Ultraschall-Verarbeitung ansehen. Sie funktioniert zwar recht gut, aber 
es gibt immer Raum für Verbesserungen.
Gast #3288279
Lesenswert?

Frage an Radio Eriwan:

Hat der ober gepostete C-Code irgend etwas mit der Realität zutun?

Wenn Ja: Schau Dir doch mal die Pulsweite des Sendeimpulses an. Meiner 
Meinung nach fährst Du mit mächtig gebremstem Schaum. Diese 
Ultraschallwandler stehen auf 40 KHz.

200 µs an + 200 µs aus ist ein bischen dünn...

Damit wird Dein "Lautsprecher" zur Flüstertüte.
OP #3288445
Lesenswert?

Das sind nicht 200 µs, sondern 200 CPU Takte. Die CPU ist auf 8 MHz 
getaktet: das entspricht einer Periodenlänge des CPU-Taktes von 125 ns. 
Die 200 CPU-Takte entsprechen genau 25 µs = 200 x 125 ns - was der 
Periodenlänge von 40 KHz entspricht.


Amateur schrieb:
> Schau Dir doch mal die Pulsweite des Sendeimpulses an.

Danke für den Tipp.
Das verwendete Tastverhältnis ist 1/2. Wie hoch kann man es denn 
wählen??
Reicht da 3/4 oder besser noch höher??
Gast #3288602
Lesenswert?

In letzter Konsequenz handelt es sich bei einem Ultraschallwandler um 
eine schwingfähige Masse. Vielleicht solltest Du der mehr als EINEN 
Tritt in den Hintern geben. Im Rahmen eines Schülerprojektes habe ich 
gute Erfahrung mit einem 8-er Paket gemacht. Es gehen wohl aber auch 
weniger.
Gast #3288643
Lesenswert?

Wieso benennst Du eigentlich eine Funktion:

_delay_us()

wenn sie etwas völlig anderes macht?

Darüber hinaus:

for(int i = laenge;i>0;i--) {
  _delay_us(1);
}

aufgerufen mit 200, macht etwas ganz anderes als

_delay_us(200);

Also wundere Dich nicht, wenn Deine Zeiten für'n A***** sind.
Gast #3288705
Lesenswert?

Zum dritten:

>Das verwendete Tastverhältnis ist 1/2. Wie hoch kann man es denn
>wählen??
>Reicht da 3/4 oder besser noch höher??

Wie die angehängte Zeichnung zeigt, kann man bei einem Einzelimpuls von 
keinem Tastverhältnis bzw. von keiner Frequenz sprechen.

Die oberen beiden Verläufe lassen sich noch in dieses Schema pressen. An 
den unteren zwei Impulsen kannst Du aber klar sehen, dass dies bei 
Einzelimpulsen Unsinn ist. Beide Pulse sind gleich lang, gehören aber zu 
einer anderen "Gesamtfrequenz".
Angehängte Dateien:
OP #3288956
Lesenswert?

Wolfgang schrieb:
> Mit deinem Verstärker belastest du die Kapsel ziemlich niederohmig.
> Prüfe doch mal mit dem Oszi, ob die Größe des Signal der Empfängerkapsel
> sich wesentlich ändert, wenn du deinen Verstärker an die Kapsel
> anschließt.

Habe die entsprechende Messung durchgeführt.
Ergebnis: ohne Belastung durch Verstärker: 78,12 mV
          mit Belastung durch Verstärker:  58,12 mV

Was kann ich tun, damit ich nicht diesen Verlust habe??
OP #3288963
Lesenswert?

amateur schrieb:
> for(int i = laenge;i>0;i--) {
>   _delay_us(1);
> }
>
> aufgerufen mit 200, macht etwas ganz anderes als
>
> _delay_us(200);

Wieso siehst du da einen Unterschied?? Die Funktion warte_us (int 
laenge) wird doch bei Aufruf warte_us(200) 200 Mal _delay_us(1) 
ausführen??
Oder verstehe ich hier was falsch? Hinzu käme doch lediglich die Zeit 
die die CPU benötigt um den Code 200 Mal auszuführen
Gast #3288989
Lesenswert?

Die Zeit zwischen den Sendebursts muss natürlich so lang sein, dass 
Echos von der maximal gewünschten Entfernung noch sicher zurückkommen 
können. Bei 6m wären das etwa 36ms. Die Sendebursts habe ich 1ms lang 
gemacht, denn der Piezo braucht ein paar Perioden, bis er richtig 
schwingt. Während der Piezo sendet kann natürlich nicht empfangen 
werden, somit ist die minimale Messentfernung etwa 30cm.
Gast #3289037
Lesenswert?

>Wieso siehst du da einen Unterschied?? Die Funktion warte_us (int
>laenge) wird doch bei Aufruf warte_us(200) 200 Mal _delay_us(1)
>ausführen??

Bei kurzen Verzögerungen in einer for-Schleife kommt noch so einiges an 
Overhead dazu.
  Ein Integerzähler muss gesetzt werden (1 mal)
dann
- Eine Verzögerung muss aufgerufen werden (n mal call mit
  allen drum und dran und ret)
- Eine Integerzahl muss dekrementiert werden (n mal
  2 Bytes holen + sub/sbc + zurück)
- Eine Integerzahl muss auf Null abgefragt werden (n mal)
- Eine Verzweigung zum call findet statt (n-1 mal)

wohl gemerkt: Nur bei kurzen Verzögerungen ein großes Problem.
OP #3291223
Lesenswert?

Habe mich die letzten Tage damit beschäftigt die Sendeleistung auf 16 V 
zu bringen. Stehe immer noch vor dem Problem, dass ich den externen 
Interrupt nicht wie gewünscht ausgelöst bekomme. Ich möchte gerne die 
erste steigende Flanke der zurückkommenden Echos erkennen. Meine Frage:

Muss ich irgendeine Form von Pullup oder Pulldown Widerstand verwenden?

Die Amplitude des zu erkennende Signal ist über 70% der der 
Versorgunspannung.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren