PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Ultraschall Entstörung



MNjuniors42
21.08.2013, 15:20
Hallo,

ich bin gerade dabei eine Entfernungsmessung mit Ultraschall aufzubauen. Die Sensoren sind folgende: MUS-40S/E
http://www.reichelt.de/Sensoren/MUS-40S/3//index.html?ACTION=3&GROUPID=3190&ARTICLE=112245&SHOW=1&START=0&OFFSET=16&

Die Schaltung befindet sich im Anhang.
Als Testaufbau befinden sich der Sender und Empfänger direkt gegenüber.

Im Prinzip funktioniert auch alles wunderbar. Die Signale werden zuerst 2*verstärkt, dann über den Hochpass gefiltert, und der Komparator gleicht sie an 5V/0V an, sodass ich sie mit einem normalen Port auslesen kann und den adc nicht verwenden muss. Ist der Sender ausgeschaltet, so ist der PIN am atmega8 auf High (anscheinend wurde irgendwo etwas invertiert), ist der Sender eingeschaltet, so ist er auf Low

Das Problem ist nur, stoße ich gegen das Steckbrett, so schaltet der PIN trotzdem um (ersichtlich durch led). Weitere Filter (für einen exakten bandpass) brachten nichts. Das Problem ist durch einen Stoß geht nur ein einzelner Puls vom Empfänger aus, den ich nicht filtern kann.
Wie also unterscheide ich das richtige Signal von einem Stoß?
Im Prinzip sende ich ja etwa 2ms 40kHz aus und warte bis sich der Zustand des Pins umschaltet, nur ist das jetzt das Signal gewesen oder war es nur ein Stoß?
Kann ich Softwaretechnisch herausfinden ob sich der Port mit 40kHz umschaltet? (zb ein Timerinterrupt alle 12.5 mikrosekunden auslösen der abfrägt ob der Port high/low ist, und wenn das 5? mal der Fall war dann ist es das Signal und kein Stoß)


Mfg

26259

BMS
21.08.2013, 15:39
Hallo,
in deiner Schaltung sind keine wirklichen Filter drin. Lediglich C1+R9 wirken als Hochpass-Filter 1.Ordnung .
Die Frequenzanteile der "Stöße" werden damit nicht ausreichend herausgefiltert.
Ich würde empfehlen, aktive Filter mit Operationsverstärker zu bauen, z.B. Bandpass mit 40dB/Dekade im Sperrbereich. Es gibt mehrere Schaltungen dafür, sei es ein Filter mit Mehrfachgegenkopplung oder eines der Sallen-Key-Topologie.

Der LM358 ist nicht mehr ganz aktuell. Das GBP liegt bei etwa 1MHz, bei 40kHz muss man schon aufpassen, dass die Verstärkung der einzelnen Stufen nicht zu groß gewählt wird zwecks Verzerrungen. Zudem "fehlen" dem LM358 im Aussteuerbereich 1,5V nach oben. D.h. bei 5V Versorgungsspannung kann er nur bis etwa 3,5V aussteuern.

Die Spannungsteiler für die virtuelle Masse ( R3,4,7,8 ) kannst du zu einem zusammenfassen. Ein Kondensator über den unteren Widerstand sorgt dann noch dafür, dass Störgungen von der 5V-Versorgung nicht so einfach einkoppeln können.

Softwaremäßig geht eine Filterung in einem gewissen Bereich auch, das könnte den Controller aber schon ziemlich beschäftigen. Falls der viele andere Aufgaben erledigen muss, ist das eventuell kritisch.
Grüße,
Bernhard

MNjuniors42
21.08.2013, 19:13
Jap, aktive Filter mit Operationsverstärker bringen eine gute Verbesserung. Die Störungen sind nun relativ klein gehalten.
Würde den ein LM324N besser sein? Etwas anderes habe ich zurzeit nicht zur Hand.

Zu meiner Schaltung: nachdem das Signal über den ersten Komparator geleitet wurde (damit auf 5V verstärkt) leite ich es über einen Tiefpassfilter, der die Spannung mittelt, danach wieder mit einem Komparator auf 5V gebracht. Dies hätte/hat den Vorteil das, wenn ein US-Signal da ist, am PIN keine 40kHz anliegen, sondern einfach nur 5V.
Ich denke aber für den letzten Schritt in meiner Schaltung gibt es eine elegantere Methode? Vielleicht über einen Transistor/Mosfet der dann durchschaltet?

Eine Frage noch: kleine Störungen kommen trotzdem als Ausgangssignal aus dem 2.OPV, ich denke es würde einen Vorteil bringen wenn ich die Hysterese beim 1. Komparator vergrößere, nur leider weiß ich nicht wie ich dies bewerkstelligen könnte...

Softwaretechnisch würde ich es folgendermaßen lösen: nach dem Senden, soll er auf den Zustand High beim PIN warten und schauen ob er auch diesen 2ms beibehält, dann kann ich ja auch sicher sein dass es das US Signal auch war und keine Störung.

Mfg


26260J

ranke
21.08.2013, 19:22
Wie also unterscheide ich das richtige Signal von einem Stoß?

1. Empfänger durch elastische Lagerung (z.B. Moosgummi) von Körperschall abkoppeln. Empfänger mit dünnen flexiblen Litzen anschließen.
2. Signalburst des Senders verlängern, so dass er signifikant länger ist als das Signal eines Stoßes. Die Filterung am besten in der Software machen.
3. Prüfen wie weit sich die Verstärkung in der Schaltung verringern läßt, ohne dass die Empfindlichkeit für das Nutzsignal abnimmt. Ich vermute da geht noch was.
Meine bisherigen Erfahrungen (allerdings mit anderen US-Kapseln) deuten auch in die Richtung, dass Bandfilter in der Verstärkung wenig bringen, der Empfänger selbst ist im allgemeinen recht frequenzselektiv. Der Stoß selbst enthält eben auch Komponenten der Eigenfrequenz des Empfängers.

MNjuniors42
21.08.2013, 20:25
Ich denke, eine elastische Lagerung würde auf jeden Fall gegen die "harten" Stöße helfen. Wie es aber mit Vibrationen (da hilft doch auch ein Gummi wenig?) von einem Motor aussieht, müsste ich testen. Dagegen könnte aber die Entstörelektronik mit ihren Filtern helfen.
Die gesamte Länge des Signals auszutesten dachte ich mir eben auch schon, um zu schauen obs nur eine Störung ist oder nicht.
Werde demnächst die Programmierung vornehmen, und melde mich wieder mit weiteren 1000 Fragen :D

Besserwessi
22.08.2013, 11:42
Die elastische Lagerung hilft gegen harte Stöße bzw. die hohen Frequenzen von Stößen. Die niedrigen Frequenzen von Stößen kommen ggf. noch recht gut durch das Gummi, aber dafür ist der Detektor nicht mehr sehr empfindlich und auch ein Filter hilft hier.

Der LM324 ist nicht besser als der LM358 - das praktisch der gleiche OP, nur als 4-fach Ausführung. Eine etwas bessere wären z.B. TLC272 oder MCP602 oder CA3240. Die meisten OPs sind pinkompatibel, so dass man einfach tauschen kann.

Die Umwandlung vom 40 kHz Signal in eine Amplitude ginge besser mit Gleichrichtung, also z.B. einfach mit einer Diode für die Spitzenwerte und einem kleinen Kondensator. Wenn man schon einmal mit dem Komparator auf digitale Pegel gekommen ist, wäre es besser das Signal gleich mit dem µC weiter zu verarbeiten, also nicht noch einmal zurück in ein analoges wandeln.

vohopri
24.08.2013, 09:16
Hallo Junior,

es ist schon viel richtiges zu deinem Projekt geschrieben worden. Mir fällt nur auf, dass du Lösungen suchst, und die TATSÄCHLICHEN Signalformen, regulär und Störung nicht GENAU kennst. Ich würde das mit einem Oszi anschauen. Klar, du scheinst keines zu besitzen, aber Arbeitgeber, Ausbildungsinstitution, oder ein Kumpel haben oft die Gerätschaft. Ist zwar etwas umständlicher zu organisieren, aber es lohnt.

Analoge Signalverarbeitung zu entwickeln ohne scope, das wird schon sehr tricky.

MNjuniors42
24.08.2013, 14:59
@vohopri: Es bestünde für mich die Möglichkeit ein Oszi in der Schule zu benutzen, gerade sind aber Ferien^^
Für mich daheim habe ich mir ein Sound-Oszi gebastelt, das in einem gewissen Rahmen funktioniert (ich habe es bisher für PWM-Geschichten benutzt). Bei einem Ultraschall-Signal wird es aber schon sehr kritisch, das stimmt, da: Offset (Gleichspannungsanteile) kann nicht gemessen werden, den exakten Verlauf von 40kHz kann eigentlich von keinen LineIn-Eingang gemessen werden und die Amplitude ebenfalls nicht. Was ich bisher gemacht habe ist, schauen ob das Signal gleichmäßig ist oder irgendein wirrwar (das entspräche einer Störung)
Ich hänge mal ein paar Bilder ran.

26263262642626526266

Bild1 zeigt das Signal nach dem 2.OPV
Blid2 nach dem Sallen-Key Filter
Bild3 nach dem 2.OPV, bei ausgeschaltetem Sender und einem Schlag gegen den Empfänger
Bild4 nach dem Sallen-Key Filter bei ausgeschaltetem Sender und einem Schlag gegen den Empfänger

Bisheriger Stand: es scheint so als ob ich erfolgreich die Schaltung entstört habe.
Kurze Erklärung zu meiner Schaltung:
In den ersten 2 Schritten verstärke ich das Signal und entstöre es durch 2 Kondensatoren in Reihe (bringt aber eher nix), dann kommt ein Sallen-Key-Filter (wie vorgeschlagen ;) ), und zum Schluss ein Komparator der den Pegel für den uc angleicht.

Zum Sallen-Key-Filter: Berechnet habe ich es mit dem Programm AktivFilter 3.1... und da ich absolut keine Ahnung von solchen "komplizierteren" Filtern habe, stand gleich vor dem ersten Problem: Charakteristik? Bessel? Butterworth? Tschebyscheff? Spielt das eine Rolle für mein Vorhaben? Ich glaube ich habe letzteres genommen^^
In meiner Schaltung passiert allerdings folgendes: Das Signal wird absolut richtig entstört, testweise habe ich ein 1-25kHz Signal draufgegeben, was nicht druchkam und wenn ich an den Empfänger stoße, so verzerrt das Signal auch nicht mehr. Aber komischerweiße wird das Signal nicht mehr verstärkt, das bedeutet: wenn ich den Sender immer weiter entferne so bleibt die Amplitude (siehe Bild2) gleich bis plötzlich kein Signal mehr da ist...

Zur Programmierung:
Nur als kleine Verständnishilfe, wie ich vorgehen muss: Zuerst einen Ultraschallpuls von 2,5ms Länge (?) aussenden, und dann einen Timer aktivieren der einfach nur hochzählt, einen weiteren Timer aktivieren der bei jedem overflow eine ISR aufruft, die überprüft ob der pin high oder low ist (dieser Timer sollte möglichst schnell sein, zb Timer0 (8bit) bei einem Atmega8 bei 8Mhz, löst alle 32mikrosekunden einen overflow aus), wenn das ereignis stattgefunden hat, den zählerstand des 1.timers auslesen und man hat die zeit und damit den weg...
oder muss ich noch etwas warten zwischen dem puls aussenden und dem überprüfen, wegen schall in querrichtung o.ä.?


Mfg


26267

Besserwessi
24.08.2013, 20:25
Wenn die Amplitude mit geringer werdendem Abstand nicht mehr zunimmt ist vermutlich ein Stufe in die Sättigung gegangen. Das kann bei relativ langsamen LM358 auch die Grenze durch die Slew-rate sein.

Bei der Programmierung sollte man nach dem Puls noch etwas warten, denn es kann leicht auch ein direkte Einkopplung geben, so dass man dann zu früh ansprechen würde. Wie lange hängt vom Aufbau ab, das müsste man probieren oder nachmessen. Zum Empfangen nimmt man am besten einen interruptfähigen Eingang, und löst damit einen Interrupt aus. Das erspart einem das ständige abfragen und den 2. Timerinterrupt. Im Interrupt kann man dann die Zeit aus dem 1. Timer auslesen, oder man nutzt dazu gleich die ICP Hardware, die das schon erledigt. Wenn man mag könnte man auch gleich den AVR internen Komparator nutzen statt dem halben LM293. Als zusätzlichen Schutz gegen Störungen könnte man nicht nur die Zeit für die erste Flanke messen, sondern z.B. etwa 10 Flanken abwarten, und dann kontrollieren ob nach der ersten Flanke auch noch mindestens 2-8 weitere mit dem etwa passen Abstand von 25 µs folgen. Nach einer gewissen Zeit, z.B. dem Überlauf von Timer 1 wird die Messung dann ggf. abgebrochen weil kein Puls mehr kommt.

Eine ggf. sinnvolle Erweiterung wäre ein mit der Zeit zunehmende Verstärkung, denn das Signal von weiter entfernten Objekten ist in der Regel schwächer. Damit ließe sich die Wartezeit am Anfang reduzieren und die volle Empfindlichkeit (und damit auch Störempfindlichkeit) hätte man nur bei größeren Entfernungen.

MNjuniors42
24.08.2013, 21:30
Stellt denn eine Sättigung ein Problem dar? Das heißt ja nur das die Verstärkung größer wäre als die Versorgungsspannung (und damit nicht möglich), aber bei einem ganz schwachen Signal verstärkt er dann entsprechend? D.h. wenn die Entfernung gering ist geht er in die Sättigung und bleibt bei seiner bestimmten Amplitude und bei einer großen Entfernung verstärkt er entsprechend das Signal.
Beim internen Komparator gibt es ja keine Hysterese, bei Störungen u.a. auf der Versorgungsleitung würde er doch sofort umschalten? (So sauber ist kommt das Signal ja schließlich nicht aus dem Filter)

vohopri
25.08.2013, 08:02
Hi,

das Software-Oszi zeigt schon recht brauchbar, dass das jetzt gut geht. viel Erfolg!

Frage: hast du schon die Abstimmung von deinem Filter auf die Nutzfrequenz überprüft? Wenn du die Sendefrequenz komfortabel etwas variieren kannst, dann geht das ja leicht.

Besserwessi
25.08.2013, 10:42
Ein verstellend er Sendefrequenz ist bei den meisten US Wandlern für Luft keine Option - die haben nur eine geringe Bandbreite (ca. 1 kHz) . Entsprechend muss der elektronische Filter, sofern man den überhaupt braucht, nicht so schmalbandig sein. Da sollte der Abgleich dann nicht mehr so kritisch sein. Eine zu geringe Bandbreite will man auch gar nicht, denn damit wird auch das Einschwingen langsamer und damit die Messung ungenauer bzw. schwieriger. Schon die geringe Bandbreite der Wandler ist da ggf. nicht so schön.

Die Sättigung ist eigentlich kein Problem, solange die Amplitude ausreicht. Ohne eine variable Verstärkung kann man eine Sättigung auch kaum vermeiden weil das Signal am Anfang einfach oft viel stärker ist. Die Sättigung muss nicht durch die Begrenzte Versorgungsspannung kommen, das kann gerade beim langsamen LM358 auch durch die slew rate (und ggf. die Totzeit beim Stromrichtungswechsel) kommen. Für eine ernsthaft Anwendung sollte man den LM358 wirklich durch was besseres ersetzen. Die fehlende Hysterese beim internen Komparator ist ggf. wirklich nicht so schön. Man könnte auch einen normalen digitalen Eingang des AVR nutzen, die haben eine kleine, aber feste Hysterese - die Einstellung müsste dann über die Verstärkung erfolgen.

MNjuniors42
25.08.2013, 20:07
Die Abstimmung habe ich überprüft, der Filter (Sallen-Key) wirkt auch nur als Hochpass (ich konnte bisher keine höheren Schwingungen feststellen, weshalb ich keinen Bandpass brauche). Frequenzen unterhalb von 30kHz werden definitiv geblockt, wie es genau dazwischen aussieht (ab wann das Signal um wieviel Prozent schächer wird etc.) muss ich noch überprüfen.
Das mit der geringen Bandbreite kann ich so nicht bestätigen, ich habe testweiße ein 30kHz Signal auf den Sender gegeben, dies wurde genauso vom Empfänger aufgenommen. (nach dem 2.OPV hatte ich genau dieses Signal wieder gemessen) Entweder bei mir in der Messung/Schaltung stimmt etwas nicht, oder meine Ultraschallsensoren sind anders...
Ausgelegt sind sie definitiv für 40kHz, laut Beschreibung.

Ach ja am Rande: Der Sender und Empfänger sind 2 verschiedene Stromkreise mit 2 uc´s. Als Sender habe ich auch bisher nur als Programm:
while(1){PORTC^=(1<<PC0); _delay_us(12.5);}

Ich werde vorerst beim lm358 bleiben und dort mein Bestes versuchen, ein besseren OPV muss erst noch bestellt werden. So ganz schlecht kann er nicht sein, immerhin empfange ich ja etwas. Bisher funktioniert es etwa so: gehe ich mit meinem Sendersystem weit weg (oder schalte es aus), leuchtet eine LED am Empfängersystem nicht, nähere ich mich (auf etwa 50cm), so leuchtet die LED. Der Sender wird aktuell noch mit 5V betrieben, ich schließe noch einen Transistor ran und verstärke es auf 12V, womit ich wesentlich weiter kommen sollte.
Die Zeitmessung fehlt bisher noch.

Der interne Komparator funktioniert anscheinend recht gut (werde es wohl mit diesem machen anstatt mit dem lm293), ich vergleiche das Signal aber nicht mit 0V sondern mit etwa 0.2V.. das sollte zumindest Störungen ausgleichen...

Besserwessi
25.08.2013, 20:55
Die etwas höhere Schwelle für den Vergleich kann man für den Komperator auch nutzen. Wenn man mag, könnte man die Schwelle auch von der Zeit abhängig machen. Das wäre dann eine ganz einfache Version einer von der Zeit abhängigen Empfindlichkeit.

Den Tausch von LM358 zu was besseren kann man ggf. auch noch später mache - die OPs sind fast alle pinkompatibel.

Die Wandler haben eine recht ausgeprägte Resonanz um 40 kHz, aber auch bei 30 kHz sollte die Sendeleistung und Empfindlichkeit noch für eine direkte Übertragung reichen. Ob man jetzt 30 kHz oder 35 kHz nimmt macht da noch keinen so großen Unterschied, aber von 38 kHz bis 40 kHz könnte sich deutlich was verstärken. Mit der Begrenzung sieht man die Resonanz ggf. auch nicht so richtig solange die Amplitude groß ist.

Für mehr Sendeleistung lieber eine Ansteuerung als Brücke wählen, sonst brächte man noch einen Kondensator dazu damit man keine DC Spannung mit drauf hat.

MNjuniors42
26.08.2013, 12:52
Wie meinst du das mit der Ansteurung als Brücke? Eine Halbbrücke (bestehend aus Mosfets oder Tranistoren) würde das ganze doch nur unnötig groß werden lassen, mit dem dazugehörigen Treiber (ob einfacher Treiber (Transistor) für die Highside oder ganzer Halbbrückentreiber-IC).

Als Schaltung hätte ich da an soetwas gedacht: (Betrieben vielleicht sogar mit etwas über 12V)

26273
R1=10k; R2=2,2k; D1=1N5818; T1=BC 547B

Im Schaltplan des SRF04 habe ich aber auch etwas interresantes gesehen: Da wird ein Pegelwandler (ähnlich dem MAX232 glaube ich) eingesetzt, dürfte ja auch funktionieren^^ Wäre vielleicht sogar besser als ein Tranistor oder eine Halbbrücke (schneller?) ?


Edit: Bringt es eigentlich eine zusätzliche Verstärkung wenn ich statt 1 Anschluss auf Masse zu legen und auf den anderen Anschluss 40kHz gebe, auf beide Anschlüsse 40kHz gebe, nur eben versetzt (wenn der jeweils andere low ist, ist der andere high)?