Forum: Digitale Signalverarbeitung / DSP / Machine Learning Quadratursignal erzeugen aus zwei Rampensignalen


von Signalverarbeitung (Gast)


Lesenswert?

Hallo zusammen,

ich suche nach einer schönen/einfachen/eleganten Lösung für folgendes 
Problem:


Ich habe zwei digitale Dreieckssignale mit 45° Phasenversatz. Amplitude 
der Signale beträgt 100 digits. Aus diesen soll nun ein übliches 
Quadratursignal entstehen, wobei eine Periode der Dreiecke mindestens 
100 Quadratur-Schritte erzeugen soll. Vorwärts/Rückwärts soll natürlich 
auch gezählt werden.


Ich habe schon mehrere Varianten probiert und mit keiner bin ich so 
richtig glücklich geworden. Meist hängt es an den Übergängen wo man 
zwischen den Signalen umschaltet. Aber evtl. fällt hier ja jemandem noch 
die Idee ein.

Implementiert ist das ganze auf einem FPGA. Die Dreieckssignale 
entstehen aus drei Phasenverschobenen Rechtecken durch ein XOR.

Falls ich was vergessen habe, einfach Fragen. Wenn man länger an einer 
Sache sitzt, ist es manchmal schwer bis dahin unbeteiligte direkt 
mitzunehmen und alle Randbedingungen zu erwähnen.

Bin gespannt auf eure Ideen!
Viele Grüße,
Fabian

von MaWin (Gast)


Lesenswert?

Deine Dreiecksignale sind offenbar Stufensignale.
Wenn die 100 Digits aka 100 Stufen bei dem einen Signal nicht um 45 Grad 
aka 1/2 digit phasenverschobene Flanken zum anderen sind, wird das mit 
der Umsetzung in ein 100 Positions Quadratursignal nichts, höchstens 50.
Wenn es phasenverschoben ist, müssten sogar 200 drin sein.

von Signalverarbeitung (Gast)


Angehängte Dateien:

Lesenswert?

Hm, bei uns nennen alle die Signalform Dreieckssignal, aber egal. Ich 
hab zur Verdeutlichung mal ein Bild angehängt. Blau und Orange sind 
relevant. In der Mitte etwa der Richtungswechsel.

Die Amplitude lässt sich durch Aufsummieren über mehrere Perioden der 
ursprünglichen Rechtecksignale auch noch erhöhen, das ist nicht das 
Problem. Es geht primär um die Wandlung in einen Zähler oder eben direkt 
die Quadratursignale. Aus einem kontinuierlichen Zähler könnte ich mir 
die Quadraturflanken ja leicht erzeugen.

Viele Grüße,
Fabian

von MaWin (Gast)


Lesenswert?

Du hast also ein auf +/-2 verrauschtes 100er Signal. Sei froh, wenn du 
hinterher 25 Positionen pro Umdrehung auswerten kannst. Vergiss 100, 
dein Signal ist nichtmal um 1/2 phasenverschoben.

von Signalverarbeitung (Gast)


Lesenswert?

Hallo MaWin,

Kann es sein, dass wir immernoch aneinander vorbeireden?

Ich hätte gerne bei jeder Änderung von dem blauen Signal um ein digit 
eine Flanke am Quadratursignal. Für die Bestimmung der Zählrichtung 
(hierfür ist das orangene Signal gedacht) ist es doch egal ob das Signal 
90° oder 45° versetzt ist.
Die nachher resultierenden Quadratursignale müssen natürlich 90° 
versetzt sein.

von Yalu X. (yalu) (Moderator)


Lesenswert?

Signalverarbeitung schrieb:
> Ich hätte gerne bei jeder Änderung von dem blauen Signal um ein digit
> eine Flanke am Quadratursignal.

Was ist, wenn das blaue Signal um 2 oder mehr Digits springt? Dann
müssten ja innerhalb eines Abtastzyklus gleich mehrere Flanken des
Quadratursignals erzeugt werden.

von Signalverarbeitung (Gast)


Lesenswert?

Der Messschrieb is das Ergebnis einer langsamen UART Übertragung, es 
fehlen somit viele Werte.

Im fpga läuft die Abtastung und Verrechnung mit 200MHz. Die 
ursprünglichen Rechtecksignale haben 4MHz, und die finale Ausgaberate 
des Quadratursignals liegt bei 250kHz. Sprünge von mehr als einem 
Schritt, müssen natürlich verarbeitet werden.

von Signalverarbeitung (Gast)


Lesenswert?

Die Sache mit den Mehrfach-Schritten hatte ich bisher so gelöst, dass 
ich aus dem blauen und orangenen Signal einen Zähler kreiert habe, und 
das Quadratur-Ausgabemodul diesen mit 250kHz in Einzelschritten 
verarbeitet.

Hauptproblem is eher die Generierung des Zählers....

von Helmut (Gast)


Lesenswert?

Falls ich das Problem richtig verstanden habe, scheint mir die Lösung 
einfach.
Du legst einfach eine Schwelle auf den Wert 25 und machst mit der 
Schwelle aus jedem Signal ein binäres Rechtecksignal. Die beiden 
Rechtecksignale sind dann wie gewohnt als Quadratursignal auszuwerten.

von Michael W. (Gast)


Lesenswert?

Helmut schrieb:
> Du legst einfach eine Schwelle auf den Wert 25 und machst mit der
> Schwelle aus jedem Signal ein binäres Rechtecksignal. Die beiden
> Rechtecksignale sind dann wie gewohnt als Quadratursignal auszuwerten.

Das ist die beste Möglichkeit, das zufällige Rauschen auch wirklich 
maximal ins Spiel kommen zu lassen.

Signalverarbeitung schrieb:
> Implementiert ist das ganze auf einem FPGA. Die Dreieckssignale
> entstehen aus drei Phasenverschobenen Rechtecken durch ein XOR.
Kannst du das mal zeichnen, bitte?

von Signalverarbeitung (Gast)


Angehängte Dateien:

Lesenswert?

Hallo Zusammen,

also ich probiers mal nochmal ausführlicher:

Es geht um den Bau eines Sensors der als Ausgabe ein Quadratursignal 
liefert. Hierzu liefert der Aufbau drei Rechtecksignale Ref, Sig1 und 
Sig2 mit je 4MHz. Sig1 und Sig2 haben einen festen Phasenversatz von 90° 
zueinander und ändern ihre Phase gleichförmig zum Signal Ref je nach 
Position des Sensors. Bei Position 0 ist die Phasenverschiebung von Ref 
und Sig1 "0", bei Position 50 ist die Phasenverschiebung von Reg und 
Sig1 180°, bei Position 100 ist die Phasenverschiebung von Ref und Sig1 
360°/0° und bei Position 150 ist die Phasenverschiebung wieder 180°.... 
Habe mal drei Oszibilder erzeugt (Türkis entspricht dem Signal Ref, Gelb 
entspricht Sig1 und Lila entspricht Sig2).

Nun werden die Rohsignale im FPGA digitalisiert durch eine PLL 
gefiltert/geglättet und anschließend folgende Signale gebildet: Sig3 = 
Ref XOR Sig1 und Sig4 = Ref XOR Sig2. Durch die Abtastung mit 200MHz 
ergeben sich pro Phase maximal 50 Zählwerte, wenn man nicht über mehrere 
Phasen aufsummiert.


Sig3 und Sig4 entsprechen dem blauen und orangenen Signal aus dem obigen 
Messplot. Dass es hier nur 45° Phasenversatz zwischen dem blauen und 
orangenen Signalen waren, liegt momentan an der Einstellung der PLL, 
sollte aber eigentlich keinen Unterschied machen.



Hoffe es war nun verständlicher, sonst bitte weiterfragen*g*

Gruß Fabian

von Helmut (Gast)


Lesenswert?

von M. W. (elektrowagi78) Benutzerseite
05.02.2020 15:40

>Das ist die beste Möglichkeit, das zufällige Rauschen auch wirklich
>maximal ins Spiel kommen zu lassen.

Dann mache halt zwei Hysteresschwellen bei 20 und 25 und gut ist.

von Signalverarbeitung (Gast)


Lesenswert?

@Helmut

ich glaube du hast mein Ziel noch nicht ganz verstanden. Ich will nicht 
direkt aus dem blauen und orangen Dreieckssignal das Quadratursignal 
machen.
Jeder Zählwert des blauen Signals entspricht quasi einer Flanke im 
Quadratursignal das ich generieren möchte.

von c-hater (Gast)


Lesenswert?

Signalverarbeitung schrieb:

> Jeder Zählwert des blauen Signals entspricht quasi einer Flanke im
> Quadratursignal das ich generieren möchte.

Na toll. Wenn du das wenigstens schon erkannt hast, dann solltest du 
dich als erstes Fragen: Wozu, zum Teufel, brauch' ich eigentlich das 
"orange Signal"...

Die korrekte Antwort darauf ist: zu garnix. Das ist über, unsinnig, 
nutzlos.

Unter der Voraussetzung, dass garantiert ist, dass das "blaue Signal" 
jeden "Zählwert" auch tatsächlich durchläuft, brauchst du nur genau die 
untersten zwei Bits dieses Signals, um ein korrekt 
"quadraturencodiertes" Signal daraus zu erzeugen. Oder anders 
ausgedrückt: die ganze Zählermimik ist zu 6 Bits ebenfalls vollkommen 
nutzlos, da du ja nur genau zwei davon brauchst...

Sprich: Ein lächerlicher Witz. Wenn man verstanden hat, was man da 
eigentlich tut...



Komplizierter wird es allerdings, wenn es keine Garantie gibt, dass der 
Zähler des "blauen Signals" wirklich jeden Zählschritt durchläuft. Dann 
(und nur dann) ist es kein Witz mehr, sondern erfordert wirklich etwas 
Gehirnschmalz.

von Signalverarbeitung (Gast)


Lesenswert?

Hallo c-hater,

wenn ich mal die (mehr oder weniger gerechtfertigten) spitzen Kommentare 
ignoriere bleibt folgendes:

Es gilt leider die Variante welche mehr Hirnschmalz erfordert. Es kann 
durchaus passieren, dass mal zwei Werte übersprungen werden. Aus den 
unteren zwei bits die qdec_A und qdec_B Signale generieren schaffe ich 
gerade so... is ein 12-Zeiler in VHDL...





Wichtig wäre, wie schon gesagt, aus den verrauschten Rohsignalen den 
durchlaufenden Zähler zu erhalten, aus dem ich dann die Quadratursignale 
erzeuge. Und nach Möglichkeit ohne 100 If-Abfragen sondern "schön". 
Zudem will ich ja nicht, dass das Quadratursignal bei zwei Perioden 
des blauen Signals folgendes macht:
hochzählen bis 100, runterzählen bis 0, hochzählen bis 100, runterzählen 
bis 0, ...

Er soll folgendes machen:
hochzählen bis 100, weiterzählen bis 200, weiterzählen bis 300, 
weiterzählen bis 400, ...




Ich glaube noch nicht, dass ich auf das orangene Signal verzichten kann, 
lasse mich aber gerne eines besseren belehren.

Gruß Fabian

von c-hater (Gast)


Lesenswert?

Signalverarbeitung schrieb:

> Es gilt leider die Variante welche mehr Hirnschmalz erfordert. Es kann
> durchaus passieren, dass mal zwei Werte übersprungen werden.

Dann hast du dein Problem schlicht falsch dargestellt. Es ist dann eben 
kein ZÄHLER.

> Aus den
> unteren zwei bits die qdec_A und qdec_B Signale generieren schaffe ich
> gerade so... is ein 12-Zeiler in VHDL...

12 Zeilen, tatsächlich?!

> Wichtig wäre, wie schon gesagt, aus den verrauschten Rohsignalen den
> durchlaufenden Zähler zu erhalten, aus dem ich dann die Quadratursignale
> erzeuge. Und nach Möglichkeit ohne 100 If-Abfragen sondern "schön".

Wieviele "if" du brauchst, hängt schlicht davon ab, welche maximale 
Sprungweite dieses Nicht-Zählers du garantieren kannst. Das ist doch 
klar.

> Zudem will ich ja nicht, dass das Quadratursignal bei zwei Perioden
> des blauen Signals folgendes macht:
> hochzählen bis 100, runterzählen bis 0, hochzählen bis 100, runterzählen
> bis 0, ...
> Er soll folgendes machen:
> hochzählen bis 100, weiterzählen bis 200, weiterzählen bis 300,
> weiterzählen bis 400, ...

Du brauchst schlicht wirklich einen echten Zähler mit eigener 
Taktdomain. Das Problem ist: der muss schnell schneller sein als dein 
Pseudozähler. Wieviel schneller, sagt dir die o.g. (von dir selbst zu 
treffende) Spezifikation der maximalen Sprungweite seines Pseudo-Zählers 
und Shannon/Nyquist.

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
Noch kein Account? Hier anmelden.