Archiv verlassen und diese Seite im Standarddesign anzeigen : Winkelencoder auf Schrittmotor mit VB auslesen
DerTorte
01.06.2005, 16:48
Hallo :-)
Ich moechte gerne die Drehung eines Schrittmotors mit Hilfe von einem Winkelencoder messen (die zusaetzliche Winkelmessung ist zur Sicherheit notwendig).
Der Winkelencoder wird auf die Motorwelle aufgesteckt und gibt bei Bewegung 1en oder 0en heraus, anhand dieser Schritte kann man den Winkel bestimmen. Diese Schritte muss ich in Visual Basic ueber eine Messkarte von NI mit nur digitalen Ein-/Ausgaengen erfassen. Der Schrittmotor wird auch aus VB gesteuert und somit kann ich nicht den Motor ansteuern und genau gleichzeitig den Werte einlesen.
Gibt es eine Moeglichkeit, die Inkremente des Encoders zwischen zu speichern und nach einer gewissen Zeit erst mit VB einfach einzulesen? Der Hardware- und Programmieraufwand sollte gering sein, also am besten kein MC.
Hoffe ihr keonnt mir helfen.
Der Torte
Die Aufgabe ist etwas arg nebulös/kompliziert beschrieben.
Was ich machen würde: Sollwert vom PC auf einen Controller rausschreiben, von dort den Stepper in Marsch setzen und über Drehgeber auf Zielwert (z.B. "0") fahren lassen, dann "Zielwert errecht" zurückmelden. Auch so dürften keine Schrittlein verlorengehen.
frobo
Zur Kontrolle eines inkrementalen Aktors einen inkrementalen Sensor einzusetzen ist eigentlich keine sehr schöne Lösung.
Die Wahrscheinlichkeit eines unerkannten Fehlers sinkt, die Wahrscheinlichkeit eines fehlerhaften Zustandes steigt.
Bei den Diskettenlaufwerken und den Druckern (wo eben die vielen Schrittmotorn eingesetzt werden) gibt es neben der inkrementalen Positionierung noch eine absolute Positionskontrolle die vor wichtigen Positionierungen angefahren wird, um den unwahrscheinlichen Fall eines Positionierungsfehlers weitergehend auszuschließen.
Das könnte schon noch einmal überdacht werden, speziell wenn es heißt:
die zusaetzliche Winkelmessung ist zur Sicherheit notwendig
Manfred
DerTorte
02.06.2005, 08:19
Danke fuer die schnellen Antworten.
Etwas genauer:Die von mir gewuenschten Steps muss ich nicht unbedingt kontrollieren, das klappt ziemlich genau.Waehrend sich der Stepper eigentlich nicht bewegen soll, kann dies aber aus Versehen ueber einen grossen Hebelarm passieren. Diese Bewegung muss ich vor den naechsten regulaeren Steps wieder ausgleichen, um eine genaue Position anzufahren.
Danke
torte
Das entspricht ja der Funktion von Diskettensteuerungen oder Druckern. Deshalb ist eine Positionskontrolle durch Anfahren eines Referenzpunktes (z.B. mit Gabellichtschranke) sehr zu empfehlen.
Wenn die Referenzfahrt erlaubt ist, dann ist es die einfache und sichere Lösung.
Manfred
DerTorte
02.06.2005, 09:29
Okay,
also erstmal weg vom Encoder.
Wie kann ich denn mit am wenigsten Aufwand die Signale der z.B. Lichtschranke zwischenspeichern falls der Stepper versehendlich gedreht wird? Visual Basic kann nicht permanent die LS abfragen.
Ich nehme an dass der Rechner auch mal abgeschaltet wird, dann kann er sicher nicht die Stellung kontrollieren.
Die Referenzfahrt ist die Bewegung bei der zur Lichtschranke gefahren wird. Wird sie erreicht, dann kennt man die Stellung und kann von dort aus die Schritte zählen.
Manfred
Genau dieses Schrittzaehlen nachdem eine Position angefahren ist, soll ersteinmal ohne die Messkarte funktionieren.
Ich habe keine Ahnung, wie und wo ich diese Schritte zwischenspeichern kann und die Messkarte diese dann auf Anfrage auslesen kann. Denke da gibt es irgendwelche Counter-Schaltungen....
Wenn die Schritte nach einer frischen Referenz-Positionierung ausgegeben werden, dann geht man häufig davon aus, dass sie vom Schrittmotor auch druchgeführt werden. Bestehen ausreichend Zweifel, dann kann man den Winkel messen, aber es lohnt sich dann im allgemeinen nicht mehr der Einsatz eines Schrittmotors. Der Gedanke ist soweit sicher klar.
Es soll also einen Encoder eingesetzt werden, es gibt ja absolute und inkrementale Encoder, es soll ein inkrementaler sein.
Ein Zähler der die Impulse des Encoders aufnimmt kann diese Zählen. Bei zwei versetzten Signalen des Encoders, Quadratursignalen, gibt das eine bei der negativen Richtung des anderen jeweils die Richtung an, in der sich der Motor beim Überschreiten der Triggerschwelle gedreht hat.
Man kann damit einen up-down counter (auch kaskadierbar) ansteuern der die Positionsinformation aufnimmt.
Es folgen das Auslesen des Zählers und wenn erforderlich eine Sicherung gegen das Mehrfachschalten an einer Triggerschwelle bei Vibrationen.
(Eigentlich schon fast eine Aufgabe für einen abgesetzten Controller. )
Geht die Vorstellung denn in die Richtung einen up down counter beispielsweise aus Standardlogikbausteinen TTL/CMOS zu verwenden?
Manfred
DerTorte
02.06.2005, 12:14
Kurz zum Aufbau: Der Stepper steht senkrecht und bewegt eine Art Revolver-Teller mit 25 Positonen unter einem Greifer. Der Revolverteller keonnte aus Versehen durch Anstossen gedreht werden. Diese Bewegung muss ich erfassen.
Mit Triggerschwelle ist das clock signal an den Stepper gemeint?
Es ist ein inkrementaler Encoder mit 2 Kanaelen, also auch fuer die Richtungsbestimmung geeignet.
Einen Up/Down Counter aus Standartbausteinen faende ich super, weil ich mir gerne die Programmierung von einem Controller sparen moechte.
Auch hatte ich bisher keine Probleme mit Mehrfachschaltungen, Positionierung funktioniert einwandfrei.
Der Nebel hat sich etwas gelichtet:
Wenn es sich also um eine Art Magazin handelt, so könnte man sich vorstellen, daß nach einer Positionierung die Stellung fixiert wird, etwa durch eine Rastung (Hirth-Verzahung oder so ...) oder ist das aus Kollisionsschutzgründen nicht möglich?
Jede dieser 25 Positionen ließe sich codieren, wie es bei Werkzeugen heute üblich ist.
Mit Triggerschwelle ist das clock signal an den Stepper gemeint?
Ich meine damit die Wirkung des Encoders auf den Zähler. Eine Testschaltung kann man leicht mit einem Standardlogikbaustein aufbauen. Bei der kontinuierlichen Bewegung in eine Richtung wird es beim Aufwärts und Abwärtszählen keine Zählfeher geben. Bei Schwingungen im Ablauf, muß man den Zähler gegen Mehrfachzählung schützen.
Ein absoluter Encoder scheint ja bei der begrenzten Zahl von Positionen auch möglich.
Manfred
http://www.standardics.philips.com/products/counters/4516/
http://www.standardics.philips.com/products/hef/pdf/hef4516b.pdf
DerTorte
03.06.2005, 08:08
Die mechanische Loesung hatte ich wieder verworfen, da dieses Magazin schon hergestellt ist und der gesamte Aufbau recht platzsparend angeordnet ist.
An genau diesen Countern bin ich auch schon ausgekommen. Allerdings zaehlen die nur bis mx 15, was bei einer Encoder Aufloesung von 500/U einem Drehwinkel von ungefaehr 10 Grad entsprechen wuerde. Das reicht mir eigentlich nicht aus. Eine Verschaltung von zwei dieser Counterbausteine um hoeher zu zaehlen wuerde ausreichen.Aber dann muesste ich schon 8 Input Lines an der Messkarte zum Auslesen der Counter benutzen?
Am besten waere ich wohl doch mit einem Controller dran?
Man kann einen Zählerstand nicht nur parallel auslesen.
Grundsätzlich kann man auch den Zähler "presetten" (auch seriell) und den Überlauf detektieren oder zur Abfrage die Eingänge übernehmen und die nötigen Pulse für den Überlauf beim eingeben abzählen.
Am besten waere ich wohl doch mit einem Controller dran?
das ist auch eine gute Idee.
Manfred
DerTorte
04.06.2005, 10:12
Wie kann ich diesen Counter-Baustein denn seriell auslesen? Mit einem zusaetzlichen Bauteil?
Und wie bekomme ich diese Sicherung gegen Mehrfachzaehlen hin?
Ich scheue naemlich etwas den (Zeit-) Aufwand fuer alles was mit dem Controller zu tun hat.
Serielles Auslesen geht grundsätzlich mit einem Schieberegisterbaustein. Bei der kleinen Zahl ca. 100 kann man auch von der Steuerung aus weiter Impulse eingeben und den Überlauf erkennen.
Ein Mehrfachschalten kann im einfachen Fall mit einen Schmittrigger vermindert werden. Logisch ausschließen kann man es mit einem Flipflop, das jeweils durch das Richtungssignal rückgesetzt wird.
(Es ist beim Aufwand zu prüfen, welche Fälle wirklich abgedeckt werden sollen. )
Manfred
DerTorte
07.06.2005, 08:40
Dieses mehrfachschalten koennte ich also mit beispielsweise einem SN74279 verhindern. Einfach die lines meines encoders an R und S des flip flops. Dann kommt an Q ein high raus, wenn high am eingang R und ein low an S anstehen.
Sinnvollerweise sollte ich einen counter suchen, den ich takten kann. Kann ich dann auch das Signal von Q als taktsignal nehmen? Waere doch sinnvoll, um diesen undefinierten zustand (wenn an R und S das gleiche signal anliegt) nicht an den Counter weiterzugeben. Oder gibt es eine bessere loesung?
Das Thema wurde nun hier unter Zähleransteuerung mit Quadratursignalen ausführlich behandelt.
Es gibt für diese Funktion auch den IC: http://www.lsicsi.com/pdfs/LS7083_84.pdf
Manfred
https://www.roboternetz.de/phpBB2/zeigebeitrag.php?p=88467#88467
https://www.roboternetz.de/phpBB2/album_pic.php?pic_id=553
https://www.roboternetz.de/phpBB2/files/circuit.jpg
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.