10.07.2007, 21:24
Hallo zusammen!
Ich hab ein kleines Problem bei dem ich nicht weiter komme.
Und ja ich hab die Forumssuche schon bemüht, doch leider konnte sie mir nicht weiterhelfen weils bei mir nicht um eine simple Flankenerkennung geht...
Folgendes:
Meine Eingabedaten sind mehrere (viele) Integer-Werte die als Array vorliegen. (Wurden aus einem Controller ausgelesen)
Mich interessiert an jedem Byte jedoch nur das 4te und das 6te Bit (von 0 an gezählt) weil darin die die Abtastwerte eines Rechtecksignals gespeichert sind.
Betrachtet man also nur diese beiden Bits hat man zwei von einander abhängige Rechteckssignale welche einem Auskunft über die Drehrichtung und Drehposition eines Gleichstrommotors geben.
Abhängig deswegen weil die beiden Signale um 90 Grad phasenverschoben sind und bei Drehung in die eine Richtung das erste dem zweiten Signal nachläuft. Bei Drehung in die andere Richtung läuft dann das zweite dem ersten Signal nach.
Mein eigentliches Problem besteht jetzt darin, die Flanken so richtig zu zählen, dass ich zum einen erkenne in welche Richtung sich der Motor dreht, als auch wieviele bereits vorhanden waren um die relative Position des Motors gegenüber der Ausgangsposition zu kennen.
Ich habs schon so versucht in ner Schleife aus jedem einzelnen Byte die beiden relevanten Bits "herauszufiltern" und mit den Bitwerten aus dem vorheringen Schleifendurchlauf zu vergleichen. (einfache Flankenerkennung)
Wenn ich dabei noch versuche die Drehrichtung zu bestimmen kommt irgendwie nicht das richtige raus...
Könnt ihr mir dabei vielleicht helfen?
Am coolsten wäre es eigentlich wenn man direkt aus den einzelnen Bytes mittels irgendwelcher Vektoroperationen die Flanken auslesen könnte. Zwecks Performance (weil ich taste mit ca 500 kHz ab was glaub ich mit ner "manuellen" Verarbeitung in ner Schleife (also Byte für Byte) nicht an die Geschwindigkeit der in LabVIEW implementierten Vektorbibliotheksfunktionen herankommt.)
Also quasi eine Boolsche Operation direkt auf den ganzen Array anwenden oder so. Aber ich hab mir da noch nix vernünftiges ausdenken können.
Ich hab mal mein bisheriges VI angehängt.
Wär cool wenn ihr zumindest mal drübergucken könntet obs soweit stimmt.
Außerdem sind im Anhang noch ein paar vom Controller ausgelesenen Testdaten.
Grüße
Adrian
Ich hab ein kleines Problem bei dem ich nicht weiter komme.
Und ja ich hab die Forumssuche schon bemüht, doch leider konnte sie mir nicht weiterhelfen weils bei mir nicht um eine simple Flankenerkennung geht...
Folgendes:
Meine Eingabedaten sind mehrere (viele) Integer-Werte die als Array vorliegen. (Wurden aus einem Controller ausgelesen)
Mich interessiert an jedem Byte jedoch nur das 4te und das 6te Bit (von 0 an gezählt) weil darin die die Abtastwerte eines Rechtecksignals gespeichert sind.
Betrachtet man also nur diese beiden Bits hat man zwei von einander abhängige Rechteckssignale welche einem Auskunft über die Drehrichtung und Drehposition eines Gleichstrommotors geben.
Abhängig deswegen weil die beiden Signale um 90 Grad phasenverschoben sind und bei Drehung in die eine Richtung das erste dem zweiten Signal nachläuft. Bei Drehung in die andere Richtung läuft dann das zweite dem ersten Signal nach.
Mein eigentliches Problem besteht jetzt darin, die Flanken so richtig zu zählen, dass ich zum einen erkenne in welche Richtung sich der Motor dreht, als auch wieviele bereits vorhanden waren um die relative Position des Motors gegenüber der Ausgangsposition zu kennen.
Ich habs schon so versucht in ner Schleife aus jedem einzelnen Byte die beiden relevanten Bits "herauszufiltern" und mit den Bitwerten aus dem vorheringen Schleifendurchlauf zu vergleichen. (einfache Flankenerkennung)
Wenn ich dabei noch versuche die Drehrichtung zu bestimmen kommt irgendwie nicht das richtige raus...
Könnt ihr mir dabei vielleicht helfen?
Am coolsten wäre es eigentlich wenn man direkt aus den einzelnen Bytes mittels irgendwelcher Vektoroperationen die Flanken auslesen könnte. Zwecks Performance (weil ich taste mit ca 500 kHz ab was glaub ich mit ner "manuellen" Verarbeitung in ner Schleife (also Byte für Byte) nicht an die Geschwindigkeit der in LabVIEW implementierten Vektorbibliotheksfunktionen herankommt.)
Also quasi eine Boolsche Operation direkt auf den ganzen Array anwenden oder so. Aber ich hab mir da noch nix vernünftiges ausdenken können.
Ich hab mal mein bisheriges VI angehängt.
Wär cool wenn ihr zumindest mal drübergucken könntet obs soweit stimmt.
Außerdem sind im Anhang noch ein paar vom Controller ausgelesenen Testdaten.
Grüße
Adrian