Ultraschall Anemometer zu X-ten, Bin gerade dabei ein Anemometer aufzubauen, das eine Auflösung von kleiner 0,1 m/s haben soll. Die übliche Schaltung mit Ultraschall Transmitter und Receiver. Um die geforderte Genauigkeit zu erreichen ist die exakte Phasenlage des Receiversignals gegenüber des Transmittersignals zu ermitteln. Dies geht relativ einfach mit einem Phasendetektor, aufgebaut aus zwei Exclusive-Or Gattern (LS86) und nachgeschalteten Tiefpass-Filter (siehe Skizze). Die Sinus- und Cosinus Komponente (Spannung) wird mit den AD-Inputs gemessen und durch eine einfache ARCTAN2 Funktion kann der Phasenwinkel (0 – 2 PI) ermittelt. Das Ding funktioniert soweit so gut - ganz leichter Windstoß durch Pusten entlang der Transmitter-Receiver-Strecke und der Phasenwinkel ändert sich drastisch. Ambiguities (>2PI) müssen noch durch Laufzeitmessungen ermittelt werden. Jetzt meine Frage: Derzeit verwende ich im ATmega32 eine sehr aufwendige Timerroutine um die beiden um 90 Grad verschobenen 40 kHz Signale zu erzeugen, z. Zt. mit Compare on Match Interrupt von Timer2, der aber in der Interrupt-Routine sehr viel Rechenzeit verschlingt. Hat einer eine Idee, wie ich diese beiden Signale „elegant“ erzeugen kann, auch unter Berücksichtigung meines verwendeten 8 MHz Quarzes ? Schon mal Dank von meiner Seite !
Hi, Manni, wie schnell kannst Du einen Timer zum PLL machen? Dann bräuchtest Du nur a) das Sendesignal b) das "Local Oscillator"-Signal" zum Mischen c) das LO-Signal immer so in der Phase drehen, daß die Spannung am Tiefpaß Vdd/2 wird. Dann kannst Du die A/D-Wandlung sogar vereinfachen und den Komparator einsetzen. Und wenn Du den Tiefpaß durch einen Integrator ersetzt, dann ist die minimale meßbare Luiftgeschwindigkeit nur noch eine Frage der Meßzeit. Danke für die Idee, kann ich brauchen zum Update meiner Uralt-Wheatstone-Meßbrücke Inkavi. P.S.: Wieso verschlingt der Compare Match Interrupt so viel Zeit? Die beiden Ausgangssignale sollten sich doch ganz ohne Interrupt erzeugen lassen. Ciao Wolfgang Horn
Da hat Wolfgang Recht. Einen 8-bit-Timer mit PWM-Ausgang, Teiler /1 und den Compare-Match auf 127 einstellen. Interrupt braucht's keinen, der PWM läuft auch ohne. Das sollte eine Frequenz von 31250Hz, Tastverhältnis 50% ergeben, wenn ich nicht irre.
@Wolfgang: Danke für die guten Tips: Die Idee mit dem Einstellen der Phase bis Vdd/2 werde ich mal ausprobieren. Aber das mit dem Integrator habe ich nicht ganz verstanden. Vielleicht kannst du hier noch mal nachhaken, wie du das meinst. @Sonic OK, das mit der PWM ist auch eine Lösung, aber nur für EIN Signal, ich brauche aber noch das zweite um 90 Grad phasenverschobene Signal. Ob ich das mit einem zweiten anzuschmeissenden Timer hinkriege, habe ich noch nicht ausprobiert. Aber mein Initialproblem ist immer noch da: Wie bekomme ich die beiden phasenverschobenen 40 KHz Signale (Leveshifting jeweils nach 6.25 us) aus PD0 und PD1 raus, und kann parallel (quasi off-line) noch dazu die A/D inputs lesen? Vielleicht hat ja doch noch jemand eine Idee.
Erzeuge einen einphasigen Takt mit 160kHz und spendiere deiner Schaltung noch einen 74HC74. Mit dem kannst du die beiden Phasenverschobenen Signale erzeugen. Q des ersten FF mit D des zweiten und /Q des zweiten mit D des ersten verbinden. Den 160kHz Takt auf beide CLK.
@Uwe Ja, da habe ich auch schon drüber nachgedacht. Problem ist nur, dass die 160 KHz bei einem 8 MHz Quarz ein bischen viel verlangt ist (2.5 clocks für T/2).
Falls die Frequenz 167kHz sein darf, waere es dann Clock/48. Ein kleines CPLD, zB Max3064 bietet sich da an. Sonst, falls die Frequenz stimmen muss, ein PLL, oder ein DDS. rene
Hi, Manni, zum Integrator, mehr nebenbei, weil ich keinen Sinn in einer Auflösung sehe, die deutlich feiner auflöst als die Fehler durch andere Einflüsse wie Temperaturänderungen, Wirbel und Mehrfachausbreitung. Wenn Du zwischen Mischer und AD-Wandler einen RC-Tiefpaß schaltest, dann bestimmt die Auflösung des AD-Wandlers die Auflösung Deiner Ausbreitungsgeschwindigkeit. Benutzt Du vor dem Komparator aber einen Integrator, der die Differenz des Mischersignals von Vdd/2 integriert, dann triggert auch die kleinste Differenz irgendwann den Komparator. Du: "...phasenverschobene Signal. Ob ich das mit einem zweiten anzuschmeissenden Timer" Zweiter Timer? Es genügt ein Timer mit zwei Output-Compare-Registern. Du: "Problem ist nur, dass die 160 KHz bei einem 8 MHz Quarz ein bischen viel verlangt ist (2.5 clocks für T/2)." Huh? 8MHz/160 kHz = 50. Ciao Wolfgang Horn
Hallo Manni, mit dem Meßprinzip für nen Anemometer bin ich mal schwer bruchgelandet. Bei nem kontinuierlich abgestrahlten 40kHz Signal sind für die Phasenverschiebung zwischen Sender und Empfänger im wesentlichen die Reflektionen des Schalls an Gegenständen der Umgebung maßgebend. Du kannst das einfach ausprobieren: Der gemessene Pasenwinkel ändert sich auch dramatisch, wenn Du, statt zu pusten, einfach die Hand in die Nähe der Meßstrecke bringst. Cheers Detlef
Hallo Manni, hast du dich mit den 2,5 Takten nicht verrechnet? Bei mir ist 8MHz/160kHz=50. Und 25 lässt sich mit Timer 1 leicht einstellen. Mit der Toggle-Funktion erhältst du 160kHz ohne CPU-Belastung.
Erst mal vielen Dank für die guten Tips und Hinweise !! @Uwe Ja natürlich, ich habe mich da "nur leicht" verrechnet, was Wolfgang auch schon angemerkt hat. Mit den Settings des "Compare Output Mode" auf Toggle OC1A/B ist das natürlich leicht zu bewerksteligen. Beim Layout meiner Platine habe ich nur einen Gedankenfehler gemacht und den gewünschten Ausgangstakt nicht auf PD4/5 gelegt, sondern auf PD6/7 und das ganze über eine Interrupt Routine gesteuert habe. Eigene Dummheit --> Handbuch lesen ist halt immer noch eine notwendige Tugend (leider nicht nur hinreichend) ! Werde das ganze jetzt mal mit Kupferlackdraht "reparieren und die S/W umschreiben. Vielen Dank für den Tip. @Detlef In den Beschreibungen der professionellen Instrumente hab ich auch schon davon gelesen, das man für ein "Free Field of View" sorgen sollte. Aber davon kann ich bei meinem fliegenden Meßaufbau nicht direkt sprechen. Trotzdem habe ich bei einem TX -> RX Abstand von 20 cm (und das auch noch flach auf dem Tisch) ein absolut sauberes Phasensignal, auch wenn ich in der Nähe "rumbastle". Kann mit das auch nicht so recht erkären, aber vielleicht hab ich ja was neues "erfunden". Klar, wenn ich mit der Hand dazwischen fahre, gibts nur Murks. Ich werde das trotzdem noch mal weiter verfolgen und mal ein Scope Bild hier rein stellen, wie die Phaseninformation stabil da steht. Danke an alle und Gruß Manni
Hallo Manni, will nicht nur unken, finde ich gut, was Du machst. Die Zeit, in der Ultraschallanemometer keine 1500E mehr kosten dürfen, ist da! Aber die Dinge sind nicht einfach: Ne kurze Rechnung: 0.1m/s Windgeschwindigkeit bringt Dir auf 20cm Meßstrecke ca. 182ns (Nanosekunden!) Laufzeitunterschied zur Windstille. Bei 40kHz schiebt sich Deine Phase damit um 2.6°, das ist nicht viel. Umgekehrt formuliert: Wenn sich die Phase durch Anwesenheit von Gegenständen auf dem Scope sichtbar ändert, versaut Dir das jede Windgeschwindigkeitsmessung. Noch nen schwieriger Punkt: Temperaturabhängigkeit der Messung. Man muß entweder Temperatur/Meßstreckenlänge sehr genau kennen oder die Meßstrecke in Hin- und Rückrichtung betreiben. Ich baue seit geraumer Weile an nem Ultraschallanemometer für mein Boot. Phasenmessung habe ich verworfen wg. Reflektionen und bin auf direkte Laufzeitmessung umgestiegen. Aber auch das sehr problematisch bei den nötigen Genauigkeiten. Gute Nacht Detlef
Irgenwelche Updates zu dem Beitrag? Wäre interessant zu wissen was daraus geowrden ist. Wäre hat dazu noch links um tiefer in die materie einzusteigen? Würde sowas auch gerne bauen.
Sehr guter Beitrag mit tief gehender Beschreibung der Sachverhalte. http://www.technik.ba-ravensburg.de/~lau/ultraschall-anemometer.html
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.