Forum: Mikrocontroller und Digitale Elektronik Schrittmotor und Magnetschalter


von 2fun (Gast)


Lesenswert?

Halle alle zusammen,

Ich habe hier ein Problem zu der ich ein wenig hilfe bedarfe.

Zuerst mal die Aufgabe (etwas vereinfacht):

Ich habe einen Schrittmotor den ich mit einem PCI-1245 von Advantec 
zunächst einmal steuere. Dieser sorgt dafür, dass sich ein Schlitten in 
einer Konstanten geschwindigkeit von X nach Y bewegt (gerade Strecke)

Nun befindet sich auf dieser zb ein IFL oder IFO der, je nachdem was 
sich auf diesem Schlitten befindet zu einem anderen Zeitpunkt/Strecke, 
schaltet (zB einmal bei 12mm und einmal bei 6mm).

Ich dachte mir jetzt über einen QuadratureEncoder (Inkrementgeber) die 
Schritte des Motors zu zählen und dann sobald das Signal vom Sensor 
ankommt auf dem Rechner die angegebene Strecke auszugeben.

Das ganze möchte ich gerne über C# am Rechner realisieren (mit hilfe von 
div. PCI karten natürlich)und es muss "genau" sein. Nur weis ich nicht 
ob dies so funktionieren würde oder ob ich zB wärend des Sensorsignals 
nicht doch immer X Schritte überspringe oder noch schlimmer immer 
unterschiedlich viele Schritte überspringe.

Wäre es zB. sinnvoll eine Communication Card noch hinzuzunehmen um die 
CPU belastung zu minimieren?

Ich hoffe das ist nicht zu viel Text auf einmal (vor allem da dies hier 
mein aller erster Beitrag hier im Forum ist) aber ich würde mich über 
Ideen usw. sehr freuen.

: Verschoben durch Moderator
von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Abtasten eines Quadraturencoders auf einem PC in Software, das wird 
nichts...
Aber steck doch einfach eine Zählerkarte mit Encodereingang in einen 
PCI-Slot. Die vergisst keinen Schritt.


BTW: was hat das Problem mit FPGAs zu tun?

von MaWin (Gast)


Lesenswert?

> Ich dachte mir jetzt über einen QuadratureEncoder (Inkrementgeber) die
> Schritte des Motors zu zählen

Du WEISST doch wieviele Schritte der Schrittmotor gelaufen ist,
deswegen ist es doch ein Schrittmotor.

von Tufan A. (2fun)


Lesenswert?

Zunächst einmal einen herzlichen Dank für die Antworten.

Das eigentliche Problem ist die Genauigkeit. Würde ich jetzt eine Art 
Prüftisch zusammenbauen, dass zB die Schaltabstände eines Reed-Kontaktes 
messen soll, wie genau wären die Angaben?

Ich weiß, dass mir die Schritte bekannt sind aber wäre es überhaupt 
möglich genau genug zu bleiben.
Sagen wir mal der Reedkontakt schaltet an und der Schrittmotor ist x 
Schritte gefahren (fährt aber weiter durch). Wären die Verarbeitung der 
Daten denn überhaupt schnell genug um diese x Schritte dem Schaltvorgang 
zuzuordnen oder würde ich erst bei x+y Schritten die Daten im Rechner 
abspeichern.

Mein Betreuer sagt mir, dass unter Windows der Takt nicht konstant und 
sich ständig ändert -> wir erreichen nicht die benötigte genauigkeit.

Ich selber bin sozusagen ein Laie was das Thema angeht und arbeite mich 
schon seit 2-3 Wochen rein und bitte um Verständnis wenn ich scheinbar 
"dumme" fragen stelle ;-)

Ich dachte zB dass ich bei einem Quadraturenencoder die werte 
"zwischenspeichern" kann und bei der schnellen Abarbeitung und dem 
vergleich mit dem Schaltaugenblick keine Schritte zu viel mit 
einbeziehe.


Edit: Ich schau mir jetzt erstmal an was so eine Zählerkarte mit 
Encodereingang so alles kann.

von MaWin (Gast)


Lesenswert?

> Ich weiß, dass mir die Schritte bekannt sind aber wäre es überhaupt
> möglich genau genug zu bleiben.

Das ist bloss ein mechanisches Problem. Man kann mit Schrittmotoren 
Mikrometerschrauben drehen.

> Mein Betreuer sagt mir, dass unter Windows der Takt nicht konstant und
> sich ständig ändert -> wir erreichen nicht die benötigte genauigkeit.

Unsinn, ein Schritt bleibt ein Schritt. Er kommt möglicherweise nicht im 
regelmässigen Zeitraster, man darf dann den Schrittmotor nicht schneller 
laufen lassen als er diesen Unregelmässigkeiten mit seiner trägen Masse 
folgen kann.

Eine CNC Steuerung für en PC (wie Mach3) treibt zwar einigen Aufwand um 
regelmässige Schritte zu erzeugen (Gerätetreiber, Abschaltung von ACPI 
und dynamischer Taktfrequenzänderung des Prozessors) die Dümmsten der 
Dummen Programmierer bekommen es also nicht so gut hin,

aber die Ergebnisse sind immer schrittgenau
http://www.youtube.com/watch?v=NUOEeYT1CAs

von Tufan A. (2fun)


Lesenswert?

Danke dir MaWin

Ich werde mir das Video erst zuhause ansehen können (hier ist Youtube 
gesperrt und auch via Proxy ungern gesehen) aber die Tatsache, dass 
regelmäßige Schritte erzeugbar sind stimmt mich schon mal Positiv.

Nur um meine Aufgabenstellung nochmal zu verdeutlichen.
Ich möchte keine Positionen anfahren, sondern eine Strecke durchfahren 
und die darin vorkommendne Schaltabstände bestimmen.

                                     --------------
                 Schlitten         /                \
                     |            |                 |
|-------------------<=>------------------------------------------|
                                  |         o       |
                                  |         |       |
                                  \   Reedkontakt   /
                                    ---------------

Der große Kreis ist der Schaltabstand (an und aus) des Reedkontaktes.
Diese möchte ich jetzt ermitteln.
Die X Achse wird später auch immer ein par Schritte in Y Richtung 
gefahren um ein Halbkreis zu erhalten was kein Problem darstellt.

von Tufan A. (2fun)


Lesenswert?

Bin soeben auf eine "Windows Realtime Extension" gestoßen.
http://www.sha-toolkit.de/
oder
http://www.kithara.de/de/produkte/realtime-suite
und diverse andere.
Mal sehen worum es sich hierbei handelt.
Falls jemand schon Erfahrung mit so was hat bitte melden.

von Thorsten O. (Firma: mechapro GmbH) (ostermann) Benutzerseite


Lesenswert?

Wie werde die Takte für den Schrittmotor erzeugt? Via Timer auf der 
Advantec-Karte, oder durch deinen Code? Wenn das ganze Timer basiert 
läuft, hat dein Betreuer recht. Dann brauchst du eine 
Echtzeit-Erweiterung für dein Windows (z.B. Kithara). Oder du schaust 
mal, ob du eine Encoder-Karte mit Hardware-Latch findest. Die kann dann 
von deinem Sensor getriggert werden und "sichert" den aktuellen 
Zählerstand von der Encoder-Auswertung in einem zusätzlichen Register, 
welches man dann zeitverzögert auslesen kann.

Mit freundlichen Grüßen
Thorsten Ostermann

von Tufan A. (2fun)


Lesenswert?

Das ganze geschieht auf der Advantec Karte mit hilfe von Timern.
Ich werde fleißig weiterrecherchieren und meine Programmierkentnisse 
weiterhin aufstocken um zu Beginn meines Projektes gut genug auf alles 
vorbereitet zu sein.

Momentan scheint mir die Lösung mit einer RTX am besten/einfachsten zu 
sein, dennoch werde ich nach Encodermodulen suchen die das gewünschte 
bewerkstelligen können.

Aus der Kithara-Website "Interrupt: Behandlung von Hardware-Interrupts 
(...Echtzeit)" was ja so ziemlich meine Problemstellung lösen dürfte.

Ich melde mich die nächsten Wochen/Tage, wenn ich eine endgültige Lösung 
gefunden habe.

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.