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