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.