Dann ist gut. Wollte nur nicht, dass Du dich vergaloppierst.
Dann ist gut. Wollte nur nicht, dass Du dich vergaloppierst.
Einer der Gründe weswegen ich vorher nach dem Ansatz gefragt habeDann ist gut. Wollte nur nicht, dass Du dich vergaloppierst.
außerdem ist es ja seine Arbeit und ich wollte dem Lernprozess nicht zu weit vorweggreifen :P
Viel Erfolg dabei, bei uns wars bisher immer nur das Kaloriemetrische Verfahren, weil "einfacher"
Es gibt 10 Sorten von Menschen: Die einen können binär zählen, die anderen
nicht.
Es ist so, dass tatsächlich auch das Kalorimetrische Verfahren zur Auswahl steht.
Ich soll mich aber jetzt 2 Wochen mit beiden Verfahren beschäftigen und erörtern welches Verfahren am vielversprechensden für das Unternehmen ist.
Noch eine Frage zum Verständnis.
Wenn ich das jetzt richtig verstanden habe, darf die Wellenlänge maximal so groß sein wie der Durchmesser des Rohres oder?
Wenn die Wellenlänge größer wäre als das Rohr würde man nichts messen?
Sinnvollerweise ja, da kommt es aber auch auf das Medium an wegen der Schallgeshwindigkeit durch das Medium ... bei 2Mhz sollte man aber DEUTLICH darunter liegen, hier spielt der Körperschall eher eine Rolle.darf die Wellenlänge maximal so groß sein wie der Durchmesser des Rohres oder
Kurzgeasgt beim Kaloriemetrischen Verfahren kannst du nur einen relativen Flow messen, du baust den Sensor ein, machst dann eine Kalibrierung für min und max und bekommst dann einen Prozentwert zwischen den Grenzen.
Beim Ultraschallverfahren bin ich mir da zwar nicht 100% sicher aber ich denke damit kann man absolute Geschwindigkeitswerte bekommen. Und bei bekanntem Querschnitt kann man dann bequem auf die Menge umrechnen ohne vorher eine Kalibirierfahrt zu machen.
Es gibt 10 Sorten von Menschen: Die einen können binär zählen, die anderen
nicht.
Hallo Hans,
grundsätzlich, zur Anwendung von Ultraschallsensoren, gibt es Zusammenhänge von Frequenz, Schalleistung/Wirkungsgrad und dem "Klingeln", also das Nachschwingen auf der Resonanzfrequenz.
Viele Entfernungsmessungsverfahren arbeiten nach dem Hüllkurvenverfahren. Damit ist die zeitlicheZuordnung zwischen Sende-, und Empfangssignal schwierig. Vertut sich der Hüllkurvendemodulator, gibt es Abweichungen mit einem Vielfachen einer Periode. Also bei 1MHz Transducern wären das 1, 2, n µs. Das ist auch rausrechenbar. Die billigen 40kHz Transducer beispielsweise brauchen etwa 8 Sendeimpulse, damit das Sendesignal ordentlich beim Empfanger ankommt. Der Empfangstransducer sieht dann 60-70 Schwingungen, die aussehen, wie ein gestrecktes Spermium. Die Hüllkurvenmessung erfolgt am Kopf des Spermiums für etwa 10 Perioden. Bei diesen 40kHz ist der Periodenversatz bei Fehlmessungen 25µs. Fragt sich, womit sich besser umgehen läßt...
Wählst Du Transducer, die weniger nachklingeln (kleiner Resonanz-Güte), brauchen diese mehr Sendeleistung und mehr Empfangsverstärkung. Transducer gleicher Resonanzgüte aber mit höherer Frequenz haben auf jeden fall geringere zeitliche Abweichungen.
Im Laufzeitdifferenzverfahren überlagert die Strömungsfrequenz die Schallgeschwindigkeit von 1500m/s. Strömt das Wasser mit 1 m/s, mißt Du in Hin/Rückrichtung 1499m/s und 1501m/s, also eine Diff von 2m/s, also mußt Du auf 1 Promille genau messen. Für einen Meter benötigt der Schall 1/1500 s = 6,7ms. Die auf 1 Promille aufgelöst = 6,7µs. Die max Auflösung des Arduino mit 62,5ns ist 9,3 mal besser. Das letzte Bit kippt immer, daher bleiben 4,7. Das könnte gerade so gehen. Allerdings, wenn Deine Meßstrecke 10cm und Deine Meßuntergrenze 10cm/s sein sollen, braucht Du die 100-fache Speed beim messen. Und mit dem Arduino? Selbst bei guter low level Programmierung übersteigts die physikalischen Möglichkeiten.
Die Signalerzeugung habe ich Dir im anderen Thread beschrieben. Die Auswertung,... puhh. Das Schnellste was der ATmega328p kann, funktioniert über den Input-Capture. Aber schneller als 1,25µs-Pulse messen habe ich noch nicht geschafft. Und da ist das Jitter schon so groß, wie der Impuls selbst. Vlt gehts mit einem STM32 Prozessor besser (Maple Mini). Der läuft mit 72MHz Takt, glaube ich. Und der läuft auch unter der Arduino IDE.
Wenn Du magst, halte mich auf dem Laufenden. Es interessiert mich.
Viele Grüße, Rainer
Geändert von fliesskomma (17.02.2019 um 16:56 Uhr)
Hallo fliesskomma,
Danke für deine Antwort.
Ich habe schon einen Versuchsaufbau gemacht.
Auf Grund des Aufwands messe ich jetzt die Frequenzdifferenz und nicht direkt die Laufzeit. Das heißt ein Frequenzgenerator steuert den US-Sender an, das empfangene Signal am US-Empfänger wird über einen Operationsverstärker wieder zurück zum Frequenzgenerator geleitet und dient diesem als neues Triggersignal. So entsteht ein Kreislauf. Die Frequenz dieses Signaldurchlaufs befindet sich zwischen 20 kHz und 30 kHz und wird mit einem Frequenzzähler oder am Oszi erfasst.
Letztendlich ist das ja auch die Laufzeit. Denn mit steigender Strömungsgeschwindigkeit steigt die Geschwindigkeit des US-Signals und die Frequenz des Signalkreislaufs steigt. Umgekehrt sinkt sie.
Also die Physik dahinter habe ich bereits nachgewiesen, allerdings gibt es starke Schwankungen, deren Ursache noch nicht geklärt ist. Mein Eindruck ist, dass der Frequenzgenerator selbst eine Kurve durchläuft. Also auch bei stehender Flüssigkeit schwankt die Frequenz des Signalskreislaufs. Hängt vielleicht auch mit der Betriebstemperatur zusammen.
Ich habe noch eine Woche Zeit um dahinter zu kommen. Um von einem Durchflussmesser sprechen zu können, müsste ich einen bestimmten Messwert einer bestimmten Durchflussmenge zuordnen können. Aber genau das, funktioniert noch nicht richtig.
Am Wochenende wollte ich das mit Arduino versuchen. Die Laufzeit möchte ich aufaddieren. Also, dass man z.B 1000 Mal das Signal in Strömungsrichtung sendet und die Gesamtzeit misst, minus 1000 Mal gegen die Strömungsrichtung.
Viele Grüße
Hans
Ich überlege gerade, ob man das Signal der beiden Messunge nicht irgendwie gegeneinander schalten kann. Ob man da irgendwie das Time of Flight Prinzip enwenden könnte um mehr Auflösung zu bekommen?!
EDIT: Wie empfängst und wertest du denn im Moment das Signal aus?!
EDIT2: Oder vielleicht eine Phasenauswertung!? Aber das ist dann wieder Medienabhängig oder?!
EDIT3: Habe gerade mit einem Kollegen ein wenig theoretisiert ... Phasenauswertung wäre eine Möglichkeit zur Steigerung der Messgenauigkeit, aber technisch nur äußerst aufwendig realisierbar (die Phasendifferenz ist ja abhängig von der Schallgeschwindigkeit im Medium ... wir haben zwar einen konstanten Abstand, aber damit die Messung der Phase nicht ebenfalls von Rauschen beeinflusst werden würde, müsste man eigentlich CW messen und das ginge dann nur mit mit einem MIMO Ansatz)
Geändert von Ceos (01.03.2019 um 10:59 Uhr)
Es gibt 10 Sorten von Menschen: Die einen können binär zählen, die anderen
nicht.
Hallo Hans,
das Generatorsignal durchläuft also Sendetransducer-Medium-Empfangstransducer-Verstärker und triggert dann wieder den Ursprungs-Generator?
Was macht der Generator denn, bei einem Triggersignal? Abbrechen und triggersynchron weiter? Oder wie ne PLL solange rumeiern, bis die Frequenz zusammen mit dem Trigger einen Nulldurchgang zeigt? Bei letzterem hättest Du eine Regelschleife die durch Schallgeschwindigkeit und Strömungsgeometrie auf eine passende Frequenz einrastet. Mit all den Regelcharakteristiken, die so ein Regelkreis nunmal aufwirft.
Ich vermute mal, Du machst letzteres. Das ist aber keine Frequenzmessung, das ist vertrakter. Ich erkläre mal...
Du schreibst ganz richtig, mit steigender Strömungsgeschwindigkeit, steigt die Frequenz und vice-versa. Du beschreibst damit einen instationären Geschwindigkeitszustand und damit eine Beschleunigung. Die Frequenz verhält sich also wie die erste Ableitung zur Geschwindigkeit.
Was Du mit Deiner Frequenznachregelung machst, ist letzlich eine Phasenmessung. Und per Regelung hälst Du die Phase auf einem gemäß der Nyquist-Schwingbedingung, günstigen Wert. Würdest Du den Regelkreis an der Triggerung unterbrechen, könntest Du mit dem Oszi am US-ReceiverTransducerVerstärker Dein Eingangssignal um die Laufzeit, phasenverschoben wiederfinden. Allerdings ist die Phasenverschiebung winzigst.
Ich rechne mal
Angenommen Länge der Meßstrecke L=0,2m, F = 30kHz, C(w)=1500m/s, V(w0) = 0m/s, V(w1) = 0,2m/s, V(w2)=1m/s
Durchlaufzeit t(0) für V(w0):
Wellenlänge Lamda = (1500m/s )/ (30000Hz) = 50mm
Da L ein Vielfaches von 50mm ist, kommt am Ende das Signal nach 4 Perioden mit Phasenversatz von 0 Grad wieder raus.
Die Verzögerung beträgt t(0) = L / C(w) = 133,3333µs
Durchlaufzeit t(1) für V(w1):
Strömungsrichtung von 0,2m/s in Meßrichtung -> Die Schallaufzeit sinkt
t(1) = L / (C(w) + V(w1) = 133,1556µs
Durchlaufzeit t(2) für V(w2):
t(1) = 133,2445µs
Die Skalierung wäre also 133,3333µs - 133,2445µs = 888 Nanosekunden je m/s Strömungsgeschwindigkeit.
Der 16MHz Arduino mit 62,5ns ticks, wären das 888/62,5 = 14,2, oder anders herum eine Strömungsgeschwindigkeits- Auflösung von 1/14,2 = 0,071 m/s
Um diese Auflösung hinzubekommen, brauchts meines Erachtens den Input Capture Eingang des Arduinos. Der hat den Vorzug daß er im Falle eine externen Triggerung den momentanen Wert des Timer1 sofort zwischenspeichert. Der ATmega328 hat aber nur einen davon. Also mußt Du ne externe Logik aufbauen die ein Triggersignal z.B. bei jedem neg. Nulldurchgang der Generatorfrequenz an den InputCapture durchläßt. Der InputCapture registriert, speichert den aktuellen Timer1-Wert zwischen. Anschließend sichert sich Deine Software den Timerwert aus dem Register:
timer1Value[2 * i] = ICR1;
Dann schnell die externe Logic mit anderen AusgangsPortBits umschalten, daß sie fortan nicht mehr die Generatorfrequenz auf den InputCapturePin schaltet, sondern daß Empfangssignal. Das Empfangssignal muß natürlich triggerfähig (Rechteck) konditioniert sein. (Fachbegriff für Deinen Bachelor: Signalkonditionierungsabschnitt)
Und dann mißt Du eine ganze Reihe von Empfangsnulldurchgängen, sagen wir für eine Millisekunde und speichest die Werte in einem Array. Heißt 30 Triggerwerte bei 30 kHz. ...Weil angenommen, daß in dieser kurzen Zeit keine Strömungsbeschleunigung stattfindet. Dann wirst Du feststellen, wenn Du vom ersten Empfangstriggerwert eine Sendeperiode abziehst, vom nächsten 2 Perioden und so weiter, bleibt jedesmal der Phasenversatz übrig. Also mach das, bilde den Mittelwert aus den Phasenvesätzen und rechne das nach obigen Mustern auf die Flußgeschwindigkeit um.
Beim Timer1 gibts zu beachten, es sind unsigned integer werte (uint16_t). Und wenn, um die Differenz zu bilden der frühere, vom späteren Wert abgezogen wird, stimmt das Ergebnis immer noch, wenn der Timer zwischendurch max. einen Überlauf hatte. Also hier nie mit schlichtem int arbeiten.
Willst Du aber bei Deiner Regelschleife bleiben, mußt Du anstatt nach den Werten t(0), t(1), t(2), nach f(0), f(1), f(2) auflösen, für die sich bei Deiner Meßgeometrie immer der selbe Phasenwert ergibt.
Das ist jetzt aber Deine Aufgabe.
In welchem Fachbereich schreibst Du Deinen Bachelor denn?
Man muß heute ja aufpassen, sonst kann man zumindest kein Politiker mehr werden, wenn Teilergebnisse der eigenen Arbeit im Web gefunden werden. *lach*
Ich wünsche Dir auf jeden Fall viel Erfolg bei allem und berichte mal, bitte dann.
Bedenke immer, der Beweis, ob ein Weg geht, oder ob er auch nicht geht hat akadisch gesehen den selben Wert. Nur wirtschaftlich nicht. Will sagen, beweise lieber akurat und begründet was warum nicht funktioniert und führe dann Plan B auf, der ja Deinen Bachelorumfang überschritten hätte, als beides halbherzig- und doch nicht zum gewünschten Erfolgserlebnis zu bringen. Sprechs am Besten mit Deinem Betreuer ab. Wenns ein wirklicher Wissenschaftler ist, wird er Dir genau das sagen.
Gruß, Rainer
Hallo, hatte kaum Zeit letzte Woche, habe die Bachelorarbeit jetzt fertig geschrieben und morgen wird gedruckt.
Leider bin ich nicht mehr dazu gekommen, mich weiter mit dem Arduino zu beschäftigen.
@Ceos: Ich werte das aus in Exel-Tabellen. Die Messgeräte haben leider noch keine Computer-Schnittstelle.
Das ist sehr zeitaufwendig tausende von Werten in Exel-Tabellen einzutragen :/
@fliesskomma:
Genau, auf der fallenden Flanke des Binärsignals, das vom OPV kommt, triggert der Frequenzgenerator erneut den Ultraschallsender.das Generatorsignal durchläuft also Sendetransducer-Medium-Empfangstransducer-Verstärker und triggert dann wieder den Ursprungs-Generator?
Danke für deinen Aufwand.
Ich habe es zwar nicht geschafft einen Messwert einer bestimmten Durchflussmenge zuzuordnen, aber andere wichtige Erkenntnisse herausgefunden.
Die Temperatur des Wassers spielt eine sehr wichtige Rolle, da sich mit steigender Temperatur, Schallgeschwindigkeit ändert. Ca. 2 m/s pro 1°C.
Dementsprechend ändert sich dann auch die Signallaufzeit und die Triggerfrequenz. Dieser Faktor ist mir leider erst am Freitag aufgefallen, aber ich habe es zum Glück noch geschafft, diese Versuche mit in die Bachelorarbeit zu schreiben.
Auf meiner Bachelorarbeit wird dann jemand anders nach mir aufbauen können, vielleicht eher aus dem Bereich Elektrotechnik. Ich bin Maschinenbauer
Ich habe mir schon überlegt, nach meiner BA daran weiter zu forschen um vielleicht wirklich einen Durchflusssensor zu entwickeln.Die Messgeräte sind allerdings etwas teuer.
Die Materialkosten für den Durchflusssensor sind eher gering.
Aber trotzdem fängt ein aktueller Ultraschall-Durchflusssensor zum Kaufen erst ab 2000 € an.
Gruß und danke für die Unterstützung
Hans
Lesezeichen