PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Phasenverschiebung bestimmen



Maverick89
20.10.2010, 16:19
Ich komme mal wieder bei dem selben projekt nicht weiter.. Erfahrene Helfer erwünscht ^^

Ich kriege ultraschall-Signall von 4 Piezos (ca 40kHz mit schwimmende Frequenz - +/- 1kHz, damit man verschiebungen über 1*lambda auch detektieren kann, + störungen). Ich will nun die Phasenverschiebung zwischen Kanal 1 und jeweils jedem anderen Kanal bestimmen - zu vereinfachung gelte, dass am alle anderen Kanäle dem Kanal 1 folgen oder gleichen, aber nicht vorauslaufen.

Die frage ist wie. Ich habe mir überlegt dass man an einem Substrahierer die kanäle bis zu höchster auslöschung schieben muss (es ist auch nicht schlimm wenn das ergebnis dem signal leicht folgt)

Analoge lösung:
Problem 1: woher weiß ich in welche richtung zu schieben (ok, hier könnte man ja einfach durchlaufen..) Problem 2: wie schieb ich analog die Phase, ohne andere eigenschaften des signals zu verändern?

Digitale Lösung:
Um 40kHz optimal zu erfassen muss ich mit mindestens 80kHz abtasten (nach Nyquist), und zwar jedes Kanal. Der AVR schafft das so schnell nur auf einem kanal. Also weitere Kanäle auf schnellen ADCs nehmen?
Leider wirds teuer 3 ADCs zu verbauen: gibt es denn so preiswerte ADCs bzw ein ADC der mehrere Kanäle abwechseln und schnell genug abtasten Kann.


grüße

PICture
20.10.2010, 16:45
Hallo Maverick!

Ich möchte dir helfen, aber ehrlich gesagt verstehe ich dein Problem nicht genug gut dafür.

Du hast z.B geschrieben:


Ich will nun die Phasenverschiebung zwischen Kanal 1 und jeweils jedem anderen Kanal bestimmen -

und das verstehe ich nicht. Ich denke eben, dass du den Abstand zwischen den Impulsen einfach messen möchtest, oder ?

Die analoge bzw. digitale Lösung ist von zulässigen Fehler abhängig. Bei digitaler Lösung werden angebich drei µC's günstiger als ein genug schneller ADC mit multiplexing.

MfG

Besserwessi
20.10.2010, 17:05
Es gäbe da noch eine halb-analoge methode. Man bestimmt analog mit einem Multiplizierer und Tiefpaß die Kreuzkorrelation der Signale. Einmal direkt, und einmal wird eines der Signale um 90 Grad Phasenverschoben. Die beiden ausgangssignale kann man dann relativ langsam Digitalisieren und im µC daraus den Phasenwinkel bestimmen über den Arcustangens.

Als etwas vereinfachte Version könnte man die beiden Signale in Rechecksignale umwandeln und dann einen digitalen Phasenvergleicher nutzen, z.B. als Teil eines 74HC4046. Da reicht dann ein Kanal.

Für die rein digitale Lösung wäre eine Möglichkeit ein genügend schneller µC wie z.B. ein PIC33.... . Da gehen dann auch 2 Kanäle mit 80 kHz oder mehr.

Wenn die Signale wenig Störungen haben, kännte man die Phase auch über die Verzögerungszeit zwischen den Nulldurchgängen bestimmen.

Richard
20.10.2010, 17:21
Am einfachsten das Signal digitalisieren und durch ein EXOR jagen. Das digitalisieren kann in diesem Fall ein einfacher Schmi trigger machen. Auf diese Art wurden (weden) ppm
Signale im Servo zur Steuerung ausgewertet.

Gruß Richard

Bayho144
20.10.2010, 20:29
Hi, Maverick89,

"Ich kriege ultraschall-Signall von 4 Piezos (ca 40kHz mit schwimmende Frequenz - +/- 1kHz, damit man verschiebungen über 1*lambda auch detektieren kann, + störungen). Ich will nun die Phasenverschiebung zwischen Kanal 1 und jeweils jedem anderen Kanal bestimmen - zu vereinfachung gelte, dass am alle anderen Kanäle dem Kanal 1 folgen oder gleichen, aber nicht vorauslaufen."

In der Funkortung, Dopplerpeiler der Luxusklasse haben eine ähnliche Aufgabe - da sind die Phasen eines Signals an mehreren Antennen zu messen.
Zusätzliche Erschwernis: Amplituden oder Frequenzmodulation des zu peilenden Signals.

Lösung, hier angepaßt: Du nimmst Deinen Kanal 1 als Referenzkanal.
Dessen Signal formst Du durch Begrenzung zum Rechteck.
Gleichzeitig erzeugst Du ein um 90° verschobenes Hilfssignal von diesem Rechteck, dazu könnte eine PLL genügen, die auf doppelter oder vierfacher Frequenz schwingt und heruntergeteilt wird für den Phasenvergleich. Aus der Teilerkette leitest Du das Quadratursignal ab.

Die Kanäle 2..4 sind die Messkanäle. Die tastest Du der Reiche nach ab, das Multiplexsignal heisse "Messsignal".
Nun miss die Differenzphase zwischen Mess- und Referenzsignal.
Beispielsweise mit einem Quadraturmischer, zwei Tiefpässen, A/D-Wandlung und Berechnung des cotangens.

Durch das Multiplexen gewinnst Du drei Differenzen - und das sollte für Deine Anwendung ausreichen.

Wenn Dein Multiplexer schnell genug ist, kannst Du die Messwerte über mehrere Zyklen des Multplexers mitteln.

Ciao
Wolfgang Horn

Maverick89
21.10.2010, 09:41
Bayho144, Besserwessi:

die Lösung klingt interessant, natürlich nicht unkompliziert.

Richard's post hat ich auf folgende idee gebracht: Ich verstärke den signal stark (=> rechtecksignal) um amplituden-differenten zu unterdrücken und jags durch den scmitt-trigger.
Umschaltungen des triggers lösen interrupts im cntroller aus, der dann die Zeiten der umschaltung speichert.

Nun wird im uC aus der reihe von aufgenommenen umschaltungen eine zeitdifferent bestimmt, bei der die summe der differenzen der Zeiten am kleinsten ist.

Richard
21.10.2010, 11:20
Bayho144, Besserwessi:

die Lösung klingt interessant, natürlich nicht unkompliziert.

Richard's post hat ich auf folgende idee gebracht: Ich verstärke den signal stark (=> rechtecksignal) um amplituden-differenten zu unterdrücken und jags durch den scmitt-trigger.


Wenn Du nach dem schmitt Trigger noch ein Exor...

(quote)
A B Q
0 0 0
0 1 1
1 0 1
1 1 0
(/Quote)
...setzt entspricht de Länge der 1 Pulse der Phasen Differenz der Eingänge, einfach Q auf einen capture Zähler legen. Allerdings sagt Q nicht aus welcher Eingang vor b.z.w. nacheilt. Das muss also noch eine geeignete Verknüpfung folgen.

Gruß Richard

Maverick89
21.10.2010, 11:36
Bayho144, Besserwessi:

die Lösung klingt interessant, natürlich nicht unkompliziert.

Richard's post hat ich auf folgende idee gebracht: Ich verstärke den signal stark (=> rechtecksignal) um amplituden-differenten zu unterdrücken und jags durch den scmitt-trigger.


Wenn Du nach dem schmitt Trigger noch ein Exor...

(quote)
A B Q
0 0 0
0 1 1
1 0 1
1 1 0
(/Quote)
...setzt entspricht de Länge der 1 Pulse der Phasen Differenz der Eingänge, einfach Q auf einen capture Zähler legen. Allerdings sagt Q nicht aus welcher Eingang vor b.z.w. nacheilt. Das muss also noch eine geeignete Verknüpfung folgen.

Gruß Richard

Im Prinip ja, allerdings nur wenn phi < lambda (also verschiebung kleiner einer wellenlänge). Da bei mir aber verschiebungen über einer wällenlänge auftreten können (die dank der variierenden frequenz aber nachweisbar sind), klappts mit dem XOR soweit ich verstehe nicht..

Jakob L.
21.10.2010, 12:41
Beim Bestimmen der Phasenverschiebung z.B. durch Korrelation bekommt man immer noch recht gute Übereinstimmungen, wenn das Signal um einige wenige Schwingungen verschoben ist, solange die Zeitdifferenz zwischen den Signalen kleiner als etwa 1 geteilt durch den Frequenzunterschied zwischen minimaler und maximaler Frequenz ist. Dieser Frequenzunterschied ist jedoch andererseits durch den begrenzten Frequenzgang der Ultraschall Sender/Empfänger begrenzt. Bringt dir die genaue Phasenverschiebung auch etwas, wenn es möglicherweise noch nicht detektierte Verschiebungen um einige wenige komplette Schwingungen gibt?

Bayho144
21.10.2010, 14:52
Hi, Maverick89,

"Im Prinip ja, allerdings nur wenn phi < lambda (also verschiebung kleiner einer wellenlänge). Da bei mir aber verschiebungen über einer wällenlänge auftreten können (die dank der variierenden frequenz aber nachweisbar sind), klappts mit dem XOR soweit ich verstehe nicht.."

Noch ein Beispiel aus der Funkpeilerei: Faustformel ist 0,3 Lambda für die größte Phasendifferenz.
Denn +0,5 Lambda sind identisch mit -0,5 Lambda, und davon muss man sich so weit verhalten, wie sich Fehler akkumulieren können.

Breitbandige Interferometer gibt es beispielsweise für den Frequenzbereich von 1,5 bis 30 MHz, also viele Oktaven - und die Interferometer haben viele Antennen, beispielsweise in einem logarithmisch periodischen Abstand.

Ciao
Wolfgang Horn

Besserwessi
21.10.2010, 17:19
Wenn es um größere Phasendifferenzen geht, also mehr als knapp eine Periode, dann geht das Sinnvol fast nur noch Digital im µC bzw. DSP. Die Umwandlung in ein digitales Signal und abgleich der Zeiten geht, wenn man wenig Störungen hat. Bei zu viel Störungen kann man zusätzliche Zeitsignale bekommen, und damit wird die Auswertung dann sehr schwer.
Zur Messung der Zeiten würde sich so etwas wie die Input Capture Funktion beim AVR oder die entsprechende Hardware bei einem anderen µC anbieten.

Bei stärkeren Störungen wird einem vermutlich nicht viel anderes Übrigbleiben als die Korreltation, mit entsprechend hohem Rechenzeitaufwand, und je nach Version auch viel Speicherplatzbedarf. Ein normaler AVR wird damit überfordert sein, zumindest ohne zusätzliche Hardware vor der Digitalisierung.

Wenn das Signal nur um 40 kHz +-1 kHz ist, braucht man wohl auch ein relativ langes Zeitfenster um die Verzögerung eindeutig zu finden. Mit einigen wenigen Perioden ist es da wohl nicht getan, sondern man wird schon längere Zeiten von vielleicht 50 Perioden (oder mehr) brauchen. Bei der Digitalen Methode geht eigentlich nur eine reine FM modulation und entsprechend lang müßte das Fenster werden. Bei der Auswertung des vollen analogen Signals ginge auch eine Amplitudenmodulation.

Maverick89
22.10.2010, 13:04
Beim Bestimmen der Phasenverschiebung z.B. durch Korrelation bekommt man immer noch recht gute Übereinstimmungen, wenn das Signal um einige wenige Schwingungen verschoben ist, solange die Zeitdifferenz zwischen den Signalen kleiner als etwa 1 geteilt durch den Frequenzunterschied zwischen minimaler und maximaler Frequenz ist. Dieser Frequenzunterschied ist jedoch andererseits durch den begrenzten Frequenzgang der Ultraschall Sender/Empfänger begrenzt. Bringt dir die genaue Phasenverschiebung auch etwas, wenn es möglicherweise noch nicht detektierte Verschiebungen um einige wenige komplette Schwingungen gibt?

Nicht detektierte komplette schwingungen sind no-go, allerdings brauch ich den wert nicht so oft haben: 50 - 100 mal die sekunde reicht. Deswegen kann ich auch längere zeit zu auswertung verwenden, wobei natürlich die frage ist was in den hauptspeicher des controllers noch passt.

Das "schwimmen" der frequenz kann auch relativ krass gewählt werden, ggf mach ich am sender einen digitalen generator der dann 3 verschiedene wellenlängen jeweils eine welle schickt (vorausgesetzt der sender selbst machts mit)

Besserwessi
22.10.2010, 14:52
Das detektieren der ganzen Wellenlängen ist das eigentlich schwierige Problem. Dabei ist es egal ob man es mit der vollen Korrelation oder nur mit den Zeiten der Signalwechsel macht.

Wenn das Rauschen relativ gering ist, so dass man die Messung anhand der Zeiten zu den Flanken machen kann, sollte der Speicher noch nicht so das Problem sein. Für die Zeiten sollte eine 16 Bit Auflösung reichen. Davon kann man schon 2 mal 100 Zeiten in den Speicher bekommen. Die vergleiche sind auch nicht so rechenzeitaufwendig: Die Zahl der ganzen Periode kann man erstmal nur Probieren und dann für etwa 5-10 mögliche Zuordungen einfach die Abweichungen und den Bruchteil der Periode berechnen.