LabVIEWForum.de - Inkremental Encoder - Drehzahlerfassung

LabVIEWForum.de

Normale Version: Inkremental Encoder - Drehzahlerfassung
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Hallo Leute,

bin ziemlicher Newbie in der "LabView"-Branche und bitte euch daher dringend um Eure Hilfe.

Und zwar liegt mir folgende Aufgabenstellung vor.

1. Einlesen des Encoders über ein SCB-68 Modul / NI PXIe-6358 Karte
2. Position bestimmen (Winkel)
3. Umdrehungen bestimmen (Richtungsabhängig: sprich dreht der Encoder links und durchläuft die Nullmarke sollen die gezählten Umdrehungen 1x dekrementiert und ansonsten normal inkrementiert werden)
4. Drehzahl bestimmen (U/min bzw. RPM)

Das Karten- und Modulequipment habe ich bereits erwähnt, als Encoder kommt ein Inkrementalencoder von Heidenhain Typ ERN 430 mit 5000 Strichen pro Umdrehung zum Einsatz.

Nun meine Frage(n):
--------------------
zu 2)
Ich habe den Encoder bereits eingelesen und zwar über den CTR0 (A-Sig auf Source, B-Sig auf AUX, und Z-Sig auf GATE) mit Hilfe eines Bsp. aus dem Example Finder (Position Angular Measure oder so ähnlich), dass funktioniert auch soweit, dreht von -360° auf +360° mit Z-index Enabeld und wird bei Nulldurchgang auf 0 gesetzt

zu 3)
wurde mit DAQmx - Cnt Edges gelöst...zählt auch die Umdrehungen richtig, allerdings werden die Umdrehungen immer nur addiert, sprich wenn z.B. der Encoder auf +35° steht und die Anzahl der Umdrehungen 5 beträgt und der Encoder dann aber links gedreht wird in eine negative Winkelstellungen wird dabei der Nulldurchgang passiert und die Anzahl der Umdrehungen auf 6 erhöht, obwohl gar keine vollständige Umdrehungen passiert ist. Zudem sollte er dann auch erst 1 abziehen sobald der Encoder eine vollständige Umdrehungen in negative Richtung gemacht hat.
Bitte helft mir wie ich dieses Problem lösen kann (am besten mit Screenshot des Block-Diagramms)

Wie kann ich es auch realisieren, dass der Motor dreht bis die Nullmarke erstmals überschritten wird und der Zählstand der Umdrehungen auf 0 gesetzt wird (ansonsten wäre dieser jetzt 1 ohne das zwangsläufig eine volle Umdrehung stattgefunden hat, je nach Anfangsstellung)
Und welche Edges werden gezählt - die des Source Signal (A-Signal)?

zu 4)
...dann möchte ich noch die Drehzahl des Motors ermitteln: Habe einiges schon im Forum gelesen, aber soviele verschiedene Posts, dass ich keine Ahnung habe wie man dieses Problem am elegantesten löst. Ich hätte mir gedacht hierfür den DAQmx - CI Pulse width zu verwenden der die Pulsdauer zwischen 2 pos. Flanken misst. Allerdings ist mir nicht ganz klar, von welchen Signal (A, B oder Z-Sig). Ich schätze vom A-Signal. Und wie komme ich dann auf die Drehzahl?

- Kann man alle 3 Punkte auch gleichzeitig, also parallel über ein Triggersignal starten, damit alles synchron lauft?
- Auf was bezieht sich das DAQmx Counter VI (Cnt Edges, CI Puls Width, CI Freq etc) immer auf das A-Signal oder kann man das nicht sagen
- Vielleicht könntet ihr mir vllt. noch sagen was es mit den unterschiedlichen Triggern (20MHz TimeBased, Sample Clock, etc.) auf sich hat.

Da würdet ihr mir sehr weiterhelfen.

Besten Dank im voraus für eure Bemühungen

PS: Bitte so erklären, dass es auch nicht geübte LV User nachvollziehen können :-)
Hallo NILVuse,

ist ziemlich viel was Du da schreibst und da mir das praktische fehlt, evtl. solltest du ein paar Screenshots rein packen, beantworte ich eine Frage. Beim den Impulsen wird Signal A und B gebraucht. Um die Umdrehungen zu ermitteln braucht man eigentlich nur ein Signal (also A oder B), da man aber auch die Richtung wissen möchte benötigt man A und B (da diese ja jeweils versetzt sind. Wenn dir also die Richtung angegeben wird, ließt "er" beide. Evtl. hilft die bei diesem Problem Quadrature Encoder von NI, einfach mal danach googlen.

Gruß snuz
Hallo snuz,

...das wäre der Wahnsinn wenn du mir bei diesem "Problem" helfen könntest.

Habe schon einwenig den Glauben daran verloren, dass sich noch jemand meldet.

Leider kann ich dir mein VI erst morgen abend hochladen, hoffe es ist nicht zu spät.

Vielen Dank im voraus für deine Bemühungen.
Denk bitte an die Version die die hoch lädst, ein Screenshot ist auch gut.
So...

mein aktuelles Werk ist im Anhang.

Habe einmal meine Grundversion wo ich versucht habe die Winkelposition + Anzahl der Umdrehungen + Drehzahl zu ermitteln angehängt, sowie meine noch nicht fertig ausgebaute Version wo ich 3x Encoder gleichzeitig einlesen möchte.

Ich möchte noch hinzufügen, dass ich die Drehzahl mit min. 200Hz, also alle 5ms ermitteln möchte, da ich auch einen Zeitverlauf zur späteren Auswertung erstellen soll.
Wie könnte ich, dass am besten lösen?

Für alle 3 Aufgaben (Winkel, Umdrehungen und Drehzahl) möchte ich max. 2 Counter pro Encoder nutzen müssen.

Wäre super wenn du snuz oder auch andere mir dabei helfen könnten.

Sobald ich alle 3x Encoder gleichzeitig einlesen will, wie kann ich gewährleisten dass alle Counter (habe 3 SCB68 Module zur Verfügung) gleichzeitig zu zählen beginnen?[attachment=35427][attachment=35428][attachment=35429]
Hallo NILVuser,

Zitat:zu 3)
wurde mit DAQmx - Cnt Edges gelöst...zählt auch die Umdrehungen richtig, allerdings werden die Umdrehungen immer nur addiert, sprich wenn z.B. der Encoder auf +35° steht und die Anzahl der Umdrehungen 5 beträgt und der Encoder dann aber links gedreht wird in eine negative Winkelstellungen wird dabei der Nulldurchgang passiert und die Anzahl der Umdrehungen auf 6 erhöht, obwohl gar keine vollständige Umdrehungen passiert ist. Zudem sollte er dann auch erst 1 abziehen sobald der Encoder eine vollständige Umdrehungen in negative Richtung gemacht hat.
Bitte helft mir wie ich dieses Problem lösen kann (am besten mit Screenshot des Block-Diagramms)

so wie es aussieht, ist "DAQmx Cnt Edges" so konfiguriert, dass er nur einen Signal (vermutlich A) zählt. Und daraus ergibt sich, dass er nur aufwärts zählt bei rechts oder links Drehung. Meine Lösung wäre hier, dass Du versuchst nicht mehr mit "Counter DBL 1 Sample" die Impulse zählen lässt, sondern direkt versuchst an die Flankensignale heran zu kommen. Somit musst Du hier, den Funktionsblock "DAQmx - Lesen" auf Digital einstellen. In der Hoffnung, dass Du dann die reinen Signale A und B siehst. Probier dies mal aus, und wenn Du die reinen Signale siehst, Screenshot und Ergebnisse zeigen.

Gruß snuz
Referenz-URLs