Mehrfache eingehende Signale auswerten

Hallo Zusammen,

Ich stehe gerade mal wieder vor einem Verständnis / Denkproblem. Ich möchte die Bewegung der x-Achse einer CNC Fräse bestimmen. Im Netzt habe ich gefunden, dass diese mit „Glaslinealen“ gemacht wird sprich ich nehme eine Folie, auf welcher Striche sind und zähle über eine Optik wie viele striche „vorbeigehen“.

Soweit kein Ding nun aber zu meine Generellen Problem. Wenn ich so einen Eingang habe, wie ließt man das aus (generell)? Meine Überlegungen und damit verbunden Probleme:

  1. Vor jedem Schritt schauen ob High oder Low und dann mitzählen. Problem ich kann keine mehrfach Anweisungen vergeben (z.B. wieder in meinem Fall die Stepper lib, der ich ja sagen kann mach xx Schritte. Die meldet sich ja zurück wenn die Schritte an den Motor gesendet sind und hält solange das Programm an, => ich lese einmal aus wenn ich starte und einmal wenn ich fertig bin, dazwischen weis ich nix)
  2. Interrupt. Dieser kann ja bei Wechsel eines Status das aktuelle Programm anhalten und dann darauf drängen erst mal sein Programm durchzuführen. Theoretisch möglich, aber (dieses mal nicht auf mein Projekt bezogen) wenn man etwas zeitkritisches macht bekommt man hier Probleme. Gibt’s noch eine andere Variante die ich nicht sehe oder habe ich die Richtigen Überlegungen gemacht und muss einen Kompromiss zwischen diesen beiden Methoden finden?

Ok 3. Wäre noch möglich einen weitern IC zu nehmen, der das Zählen übernimmt und dann dem Arduino mitteilt wie weit was gegangen ist.

Danke schon mal für alle Infos, oder Hilfestellungen nach was ich genau suchen muss

Steve

PS Wer eine bessere Idee als Thread Überschrift hat bitte sagen, weis aber aktuell keine bessere Beschreibung)

Eigentlich ist bei Schrittmotoren keine Positionsmessung notwendig, da sie einen Schritt machen, wenn die Ansteuerung einen Schritt vorgibt. Es sei den der Motor wird mechanisch überlastet und bleibt darum stehen. Dieser Fall muß aber durch die richtige Wahl des Motors und der Ansteuerung bzw der Beschleunigung und max Geschwindigkeit ausgeschlossen werden.

Grüße Uwe

Hallo und danke für die schnelle Antwort,

der Schrittmotor war eigentlich auch nur der Aufhänger, wie ich überhaupt an mein "Problem" gekommen bin, vielmehr interessiert es mich, ob ich in meinen Überlegungen einen Denkfehler habe, oder ob es noch eine andere Lösung gibt, ist ja nicht selten, das man eingaben von externen Sensoren oder ähnliches hat :D

LG

Steve

Hallo,

kleiner Hinweis. Die Überwachung vom Schrittmotor ist schon sinnvoll. Selbst wenn alles richtig dimensioniert ist. Eine Blockierung der Mechanik kann immer im dümmsten Fall auftreten, wenn dann keine Positionskontrolle erfolgt macht die Maschine im dümmsten Fall einfach weiter, sie denkt ja sie steht am richtigen Fleck. Bei uns haben alle Schrittmotoren einen Encoder hinten drauf. Wenn der Schrittmotor seine Soll-Bewegung gemacht hat wird diese mit der Ist-Bewegung vom Encoder verglichen. Gibts keine Abweichung ist alles i.O. Ansonsten bleibt die Maschine mit Fehlermeldung stehen.

@ Chaos_Lord wie Du vielleicht herauslesen kannst, müßtest Du die Schrittüberwachung "extern" überwachen. Meinetwegen mit einem zusätzlichen Arduino oder anderen µC der die Schritte zählt. Wenn Dein Motor-Steuer-Arduino fertig ist, liest Du die gezählten Schritte vom anderen ein und vergleichst die Werte und setzt den Zähler vom externen µC zurück oder so. Wäre meine Idee dazu aus der Praxis. Dadurch bist Du unabhängig von irgendwelchen Wartezeiten vom Haupt µC.

Hallo,

sowas in der Art habe ich mir schon gedacht. Auf die Idee mit dem Encoder wäre ich wohl nicht gekommen :D nichts desto trotz bleibt mein Problem auch weiterhin bestehen, wie ließt man sowas ein.

Sagen wir ich habe da einen Encoder dran, der liefert mir ja pro bewegung ein Signal, welches ich dann auswerten muß. Ob ich das nun mit dem Arduino mache sei mal dahin gestellt. Um wirklich jedes Signal zu bekommen werde ich ja dann wohl auf Interrupts gehen müssen, oder gibts noch andere Möglichkeiten.

@Doc_Arduino: Du schreibst z.B. mit dem Arduino, gibts da fertige ICs für?

Grüsse Steve

Hallo,

googel mal nach "Arduino Encoder". Dann hast Du schon viele Beispiele. Im Normfall gibt ein Encoder 2 Signale raus die zeitlich versetzt sind. Damit man zusätzlich rausbekommt in welche Richtung sich was dreht. Das kannste alles ergoogeln. Du fragst nach welchen IC? Was haste gegen einen weiteren Arduino? ;) Es gibt aber auch unzählige fertige Encoder ICs. Was an unseren Maschinen verbaut ist, da müßte ich die Schaltpläne durchforsten. Würde Dir aber nicht viel bringen, weil Industriesteuerung aus Amiland, gibts auf dem freien Markt nicht. Ich wollte Dir auch "nur" sagen wie es an Industrieanlagen gemacht wird, die Überwachung von Schrittmotoren bzw. dessen Bewegungen.

Im Arduino programmieren bin ich auch noch Anfänger. :roll_eyes: Das zur Info.

Zum auswerten geht vielleicht pulseIn() Oder die Spezialisten hier werden Dir Tipps geben. Du wirst aber sicherlich fertige Codestücke oder sogar Librarys finden beim googeln. Es gibt auf jeden Fall fertige Encoder Shields für den Arduino, schon gesehen. Da wird es auch Beispiele geben. Ich hatte auch schon im www sowas wie ein Roboterauto gesehen wo mit Encodern (schwarz/weiß Scheiben) an jeden Rad die Bewegung überwacht wurde.

Edit: IC Auswahl, nach rotary encoder suchen, http://category.alldatasheet.com/index.jsp?sSearchword=rotary%20encoder