Wie synchronisiert man Motoren/Bewegungen im Zeitablauf

L I V E Stammtisch ab 20:30 Uhr im Chat
  • Hallo!

    Ich möchte eine kleine Maschine bauen, die Teile über ein Fließband transportiert und einfeche Bearbeitungen macht - z. B. drehen, wenden, zur Seite schieben. (z. B. wird über eine Lichtschranke die Position des Teils erkannt - liegt es falschrum auf dem Band, muss es gedreht werden.) Auf den Fließband befinden sich mehrere Teile in gleichen Abständen. Sie werden sozusagen mit jedem Takt von einer Bearbeitungsstation zur nächsten weitergeschoben. Die Teile müssen zum Drehen/Wenden im richtigen Moment gegriffen werden.

    Das Fließband wird über einen echten Servomotor mit Servotreiber (von JMC) angetrieben. Die Position könnte ich also zu jeder Zeit bestimmen. Ich bin mir noch nicht sicher, ob die Geschwindigkeit innerhalb eines Vorschubtaktes konstant ist oder (wahrscheinlicher) langsam beschleunigt und wieder abbremst. Wahrscheinlich werde ich versuchen, dei Teile möglichst schnell vor zu schieben, dabei aber die Beschleunigung zu begrenzen und dann gibt es einen Moment Stillstand, wo das Teil z. B. gedreht werden kann. Vielleicht ist es aber auch besser, das Band durchgehend mit konstanter Geschwindigkeit laufen zu lassen. Es gibt Bewegungen, die gleichzeitig mit dem Vorschub stattfinden (z. B. beim Wenden). Es gibt auch unterschiedliche Teile, so das je nach dem Typ die Taktzeiten, Geschwindigkeiten, Beschleunigungen und die Bewegungen selbst variiert werden können/müssen. Die Geschwindigkeit kann auch insgesamt variiert werden - wenn die Maschine angelaufen ist und alles funktioniert, kann man sie hochdrehen. Dem Servo gebe ich also entsprechende Befehle oder Parameter, damit er beschleunigt und bremst usw., um das Fließband wie gewünscht anzutreiben.

    Die Motore (Servos SG90 oder Schrittmotore), die die Bewegungen der Teile machen, müssen nun synchron zur Fließbandbewegung gesteuert werden. Aber wie sage ich diesen Motoren, wann sie starten und wie schnell sie sich bewegen sollen, damit die Bewegung bei variierenden Geschwindigkeiten (Taktzeiten) oder Beschleunigungen des Bandes immer in der gleichen Weise synchron zur Fließbandbewegung ist.

    Ich vermute, es wird etwas hakelig, wenn ich die Zeit (sagen wir mal eine Sekunde pro Takt) in Abschnitte zerlege, die Positionen berechne und die Motore/Servos an die gewünschte Stelle steuere. Dann bekomme ich ruckelige Bewegungen oder ich muss sehr kurze Zeitintervalle nehmen, was sicher größeren Rechenaufwand bedeutet. Eigentlich sollen die Bewegungen ja fließend sein.

    Wie kriegt man das hin? Hat jemand Erfahrung, wie man so eine Synchronisierung von Motoren/Bewegungen generell macht?

    Letztlich will ich das mit einem µC steuern.

    Oh, man kann hier unliebsame Nutzer blockieren. Wie praktisch!

  • Wie synchronisiert man Motoren/Bewegungen im Zeitablauf? Schau mal ob du hier fündig wirst!

  • Hallo,

    ich stelle mir jetzt einfach mal ein rechteckigen Legostein auf einem Fließband vor. Das Band fährt nach der Beschleunigung mit einer konstanten Geschwindigkeit. Dann kommt die Lichtschranke und merkt dass man das Teil drehen muss.

    Wie muss ich mir das vorstellen? Bewegt sich in dem Moment ein Arm über das Band, so damit der Legostein dagegen fährt und sich dreht?

    Je nach Bearbeitungsschritt muss das ganze Band angehalten werden um einen bestimmten Schritt durchzuführen?

    Grüße

    Dennis

    🎧 With the music execution and the talk of revolution, it bleeds in me and it goes 🎧

  • Ja, das trifft die Sache ganz gut. Es sind mehr oder minder quarderförmige Objekte. Die Bewegungen sollen/müssen teilweise in der Fließbandbewegung stattfinden. Zm Wenden, also auf den Rücken legen sozusagen, greift eine Art Stab unter das Objekt und hebt es an, so dass es hochgeklappt wird und dann nach hinten umfällt. Dazu muss sich das Band gleichzeitig natürlich bewegen. Also Bildhafter: Ein Auto fährt auf Supermann zu - er hebt einfach den Bug an, bis sich das Auto nach hinten überschlägt und aufs Dach fällt.

    Bei der Drehung kann es sein, dass ich das Teil anhebe, drehe, gleichzeitig ein Stück weiter bewege und wieder an der Stelle aufs Band lege, wo es vorher lag (nur ist das Band inzwischen ein paar cm weiter gefahren).

    Die Bewegung an sich ist nicht das Problem. Es geht mehr drum, wie ich zu einer relativ variablen Bewegung des Bandes immer die anderen Bewegungen synchron halte. (Fährt das Auto schneller, muss Supermann seine Bewegungen auch entsprechend schneller machen.)

    Die Bewegungen werden je nach Größe der Teile immer anders sein. Ich muss sie also jeweils passend einstellen. Wo genau wird das Teil gegriffen, wie schnell gedreht, wo wieder abgelegt....

    Ich hab noch ein wenig nachgedacht und glaube, das einfachste ist, wenn ich die Bandbewegung in die Schritte des Steppers teile und alle anderen Bewegungen nach ihren Parametern einmal in eine Tabelle umrechne. Der Stepper wird ein paar Hundert Schritte pro Zyklus machen. Die Positionen aller anderen Antriebe könnte ich nach Eingabe/Änderung der Parameter einmal berechnen, in ein Array schreiben und bei jeder Änderung der Bandposition die anderen Antriebe entsprechend setzen. Da ich überwiegend Servos und Closed-Loop-Stepper einsetzen will, sollte das ohne Probleme klappen. Wo einfache Stepper sind, muss halt noch immer bei null mal an den Fixpunkt gefahren werden.

    Oh, man kann hier unliebsame Nutzer blockieren. Wie praktisch!

  • Moin Gnom,

    bleiben wir mal bei dem Beispiel Auto.

    Wenn es egal ist in welcher Reihenfolge die Pakete liegen, dann kann der Arm doch einfach das Paket greifen, drehen und an einer freien Fläche wieder auf das Band legen. Es müssen halt genügend Sensoren vorhanden sein, die dann die Freifläche erkennen.

    Ich würde aber früher die Pakete alle in einer Richtung ausrichten. Also quer oder längst.

    73 de Bernd

    Ich habe KEINE Ahnung und davon GANZ VIEL!!
    Bei einer Lösung freue ich mich über ein ":thumbup:"
    Vielleicht trifft man sich in der RPi-Plauderecke.
    Linux ist zum Lernen da, je mehr man lernt um so besser versteht man es.

  • Die Teile leigen alle längs. Aber die Lage (vorne/hinten) ist wichtig. Ein Sensor kann das leicht erkennen und die Dinger sollen dann um 180° gedreht werden. Derjenige, der die aufs Band legt, soll sich darum keinen Kopf machen müssen. Und wenn mal eins falsch liegt, soll es nicht zum Stopper kommen, deshalb die Drehung.

    Das Band hat in regelmäßigen Abständen Mitnehmer, die die Teile vor sich her schieben. Das Band ist also in feste Abschnitte geteilt und in jedem liegt ein Teil - die Teile können also nicht irgendwo hin gelegt werden und freie Stellen gibt es nicht.

    Aber auch das ist eigentlich nicht das Problem. Es geht um die Synchronisierung der Positionen von Band und anderen Antrieben. Wenn du schneller um de Kurve fährst, musst du auch das Lenkrad schneller drehen. Und du musst es auch im richtigen Moment zu drehen beginnen. Da kommt man mit Zeit nicht weit - du kannst nicht sagen, wenn ich an der Ampel losfahre, muss ich 5,8 Sekunden später das Lenkrad drehen, um in die Seitenstraße einzubiegen. Wenn du schneller fährst, stehst du nach 5,8 Sekunden schon auf der anderen Seite der Kreuzung. Wenn du langsamer fährst, krachst du nach 5,8 Sekunden in ein Schaufenster. Man muss wohl eher die genaue Position wissen, an der man ist.

    Fürs Band heißt das, ist muss wissen, an welcher Psoition das Band ist. Und die anderen Antriebe müssen sich synchron zum Ort des Bandes bewegen. Nur ist das rechnerisch wahrscheinlich ziemlich aufwändig, bei 800 Bandmotorschritten für jeden Schritt ich Echtzeit die Position von 5-10 anderen Motoren zu berechnen und anzusteuern. Mit einer Tabelle, die ich einmal berechne, geht das vielleicht besser.

    Oh, man kann hier unliebsame Nutzer blockieren. Wie praktisch!

    Einmal editiert, zuletzt von Gnom (1. November 2021 um 23:39)

  • Hallo,

    das gesamte Problem ist etwas komplexer, und deshalb würde ich es in Teilprobleme (oder besser: Aufgabenstellungen) zerlegen.

    Deine "Förderstrecke" hat bestimmte Arbeitsschritte, die eine ermittelte oder vorgegebene Zeit brauchen. Damit und zuzüglich der (minimalen) Transportzeiten zwischen den Stationen hast Du eine maximale Förderleistung diener Anlage.

    Schaut man sich eine Fördertechnik "in echt" an, dann erkennt man Lichtschranken für die "Einfahrt" in einen Arbeitsbereich und die müssen soweit vor dem Arbeitsbereich sitzen, dass der zugehörige Förderantrieb rechtzeitig angehalten werden kann (für den richtigen Abstand wird da auch im echten Leben getestet was das Zeug hält).

    Im Arbeitsbereich angekommen erzeugst du die Signale für die "Arbeitsplatz"-Servos.

    Dann gibt es wieder eine Lichtschranke (oder Auflagekontakt, oder Scanner o.ä.), die das Ende der Arbeit im Arbeistbereich signalsieren, woraufhin der Förderantrieb (diesmal weg vom Arbeitsbereich) wieder gestartet werden kann.

    Das heisst deine "Verweilzeiten" in den Arbeitspunkten geben den maximalen Takt vor.

    So ist die funktionale Abwicklung mal ganz grob runtergebrochen auf einer Taktstrasse (Möbelproduktion).

    Am besten für ein "Modell": Aufmalen, Zeiten, Wege und Nebenbedingungen (an jedem Punkt) ranschreiben und dann loslegen.

    Viele Grüße (und vielleicht hilfts dir weiter)

  • Moin Gnom,

    Die Teile leigen alle längs. Aber die Lage (vorne/hinten) ist wichtig.

    Das Band ist also in feste Abschnitte geteilt und in jedem liegt ein Teil - die Teile können also nicht irgendwo hin gelegt werden und freie Stellen gibt es nicht.

    Diese zwei Tatsachen waren mir nicht bekannt.

    Das Band hat in regelmäßigen Abständen Mitnehmer, die die Teile vor sich her schieben.

    Dann kannst du auch nicht einfach einen Stab nehmen und die Pakete "umwerfen". Sie liegen am Mitnehmer.

    Also greifen, anheben, drehen und ablegen. Dazu muss der Aktor wohl mit dem Band fahren und abschließend zurück in seine Ausgangsposition fahren.

    73 de Bernd

    Ich habe KEINE Ahnung und davon GANZ VIEL!!
    Bei einer Lösung freue ich mich über ein ":thumbup:"
    Vielleicht trifft man sich in der RPi-Plauderecke.
    Linux ist zum Lernen da, je mehr man lernt um so besser versteht man es.

  • Dann kannst du auch nicht einfach einen Stab nehmen und die Pakete "umwerfen". Sie liegen am Mitnehmer.

    Also greifen, anheben, drehen und ablegen. Dazu muss der Aktor wohl mit dem Band fahren und abschließend zurück in seine Ausgangsposition fahren.

    Wenn das Teil auf dem Rücken liegt, bleibt der folgende Abschnitt frei. Somit klappt das mit dem Umwerfen.

    Man kann das Teil beim Drehen auch außerhalb der Mitte greifen, so dass es nach dem Drehen weiter in Fahrtrichtung des Bandes zu liegen kommt.

    Aber auch das ist alles nicht meine Frage. Es geht mir darum, wie ich die Ansteuerung der Motoren aufeinander abstimme. Macht euch um die Bewegungen an sich keine Köpfe - darum geht es gar nicht.

    Wenn das Band schneller läuft oder die Rampen und die Maximalgeschwindigkeit oder die Bewegungs- und Stillstandszeiten sich ändern (auch im Verhältnis zueinander), dann müssen alle anderen Antriebsbewegungen ggf. entsprechend anders ablaufen. Die Frage ist, wie man sowas (programmtechnisch oder sonst irgendwie) löst. Das ist ja in der Automation sicher eine alltägliche Aufgabe. Ich hab gesehen, dass SPS und Profiantriebe solche Sync-Funktionen integriert haben. Aber mit Pi oder Arduino sieht das anders aus. Was steckt (software)technisch hinter diesen Synchronisierungsmechanismen?

    Oh, man kann hier unliebsame Nutzer blockieren. Wie praktisch!

  • Moin Gnom,

    ich glaube, du gehst das Problem falsch an.

    Du schreibst einmal, der Befüller des Bandes soll sich nicht um die Lage der Pakete kümmern.

    Es sind alle Paket ausgerichtet, schreibst du. Ok, das passiert halt irgendwo vorher.

    Dann ist plötzlich das Fach hinter dem "falschen" Paket leer. Wie soll das denn passieren?

    Es sollte erstmal einiges klar festgelegt sein.

    - Wann wird erkannt das ein Paket falsch liegt?

    - Wie weit ist es bis zur Drehstation?

    - Soll das Band halten, langsamer werden?

    - Wie soll gedreht werden und wie lange dauert das?

    - Müssen die Motoren überhaupt synchron laufen? Oder reicht ein Startbefehl an den Dreher? Der Hauptmotor kennt ja seine Schritte. Dann braucht man

    nur die Anzahl der Schritte zwischen der Fehlererkennung und der Drehstation kennen.

    73 de Bernd

    Ich habe KEINE Ahnung und davon GANZ VIEL!!
    Bei einer Lösung freue ich mich über ein ":thumbup:"
    Vielleicht trifft man sich in der RPi-Plauderecke.
    Linux ist zum Lernen da, je mehr man lernt um so besser versteht man es.

  • Hallo,

    Dann braucht man

    nur die Anzahl der Schritte zwischen der Fehlererkennung und der Drehstation kennen.

    das ist durch die Lichtschranke auch bekannt.

    Dann kannst du durch die Drehzahl des Bandmotors die Geschwindigkeit der Bauteile bestimmen. Den Abstand zwischen Lichtschranke und Arbeitsmotor ist bekannt und auch die Zeit die der Arbeitsmotor maximal benötigt um in seine Arbeitsstellung (oder was auch immer) zu fahren. Die Reaktionszeit der Lichtschranke würde ich für den ersten Versuch mal vernachlässigen. Dann wäre das Drehen erledigt.

    Du schreibst, dass es sein kann, dass das Teil angehoben werden muss, gedreht und dann an gleicher Stelle wieder abgelegt werden muss. Ist vor diesem Arbeitsschritt eine weitere Lichtschranke, damit du die Position der Teile bestimmen kannst?

    Problematischer sehe ich das Ganze, wenn das Band zwischen durch angehalten wird und sich ein Teil direkt vor der Lichtschranke befindet. Je nach Steigung der Anfahrrampe und je nach Präzision der weiteren Arbeitsschritte könnte es da zu Fehlern kommen. Da müsste die Lichtschranke während der Beschleunigung gesondert überwacht werden um die exakte Position der Teile zu bestimmen.

    Grüße

    Dennis

    🎧 With the music execution and the talk of revolution, it bleeds in me and it goes 🎧

  • Danke für deine Hilfe, Bernd, aber ich weiß, wo das Problem liegt - und zwar genau dort nicht, wo du rumrührst. Wo die Pakete liegen und wie sie gedreht werden ist nicht das Thema.

    Es geht nur darum, wie man software-/hardware-/programmtechnisch die Bewegung eines zweiten Motors mit einem ersten synchronisiert, wenn die Bewegung des ersten Motors variabel ist.

    Oh, man kann hier unliebsame Nutzer blockieren. Wie praktisch!

  • Es geht nur darum, wie man software-/hardware-/programmtechnisch die Bewegung eines zweiten Motors mit einem ersten synchronisiert, wenn die Bewegung des ersten Motors variabel ist

    Vielleicht rühre ich ja auch in der falschen Ecke rum, aber wie wäre es mit Drehzahlen messen und angleichen?

  • Es gibt keine Lichtschranke. Die Position der Teile ist jederzeit bekannt, weil das Band (wie schon gesagt) Mitnehmer hat, die Teile also an definierten Stellen liegen. Es geht nicht darum, wann oder wie sich die Antriebe bewegen, sondern, wie man sie synchron kriegt.

    Wenn ich den Hauptmotor und die anderen jeweils über PWM-Signale steuern würde, hätte ich keine Gewähr, dass die immer synchron bleiben. Die Frequenzen sind unterschiedlich, das EIn- und Ausschalten erfolgt mit leichtem Versatz und das alles kann sich aufsummieren. Deshalb ist die Frage, wie man die Bewegunge eines Motors mit einem anderen synchronisiert.

    Oh, man kann hier unliebsame Nutzer blockieren. Wie praktisch!

  • Es gibt keine Lichtschranke.

    z. B. wird über eine Lichtschranke die Position des Teils erkannt - liegt es falschrum auf dem Band, muss es gedreht werden

    Deswegen das mit der Lichtschranke.

    Dachte es geht mehr über die einzelnen Abläufe. Zu der konkreten Frage, die du jetzt nochmals gestellt hast, kann ich leider nichts beitragen. (lese aber auch gespannt mit)

    Viel Erfolg

    Dennis

    🎧 With the music execution and the talk of revolution, it bleeds in me and it goes 🎧

  • Vielleicht rühre ich ja auch in der falschen Ecke rum, aber wie wäre es mit Drehzahlen messen und angleichen?

    Das erscheint mir ebenfalls zu ungenau und zu aufwändig. Da müsste ich ja sozusagen jedem Motor einen Regelkreis mitgeben. Und das löst immer noch nicht das Problem, dass die Bewegungen ja nicht identisch sind, sondern nur synchron ablaufen. Wenn das Band an Position X ist, soll das Anheben beginnen. Bei Position Y soll das Teil um 90° aufgerichtet sein. Der Hebel, der das Teil hochgehoben hat, muss wieder in Ausgangsstellung sein, wenn das Band Position Z erreicht hat.

    Die Bestimmung der Positionen des Hebels könnte man rechnerisch machen, aber das würde bedeuten, dass man für jeden Schritt des Bandmotors eine Berechnung machen muss. Um die Bewegungen halbwegs fließend zu halten, kann man auch nicht einfach nur jeden 20. Schritt berechnen und synchronisieren. Das würde also viel Rechenzeit kosten.

    Meine einzige Idee bisher ist deshalb, die Bewegung des abhängigen Motors einmal zu berechnen und in einer Tabelle (Array) den Schritten des Hauptmotors zuzuordnen. Dann müsste das Programm nur nach jedem Schritt des Hauptmotors die Werte aller Nebenmotoren aus der Tabelle lesen und die Motoren entsprechend ansteuern.

    Oh, man kann hier unliebsame Nutzer blockieren. Wie praktisch!

  • Die genannte Lichtschranke bestimmt weniger die räumliche Position, sondern, ob das Teil richtigrum oder gedreht liegt. Wo es liegt, ist klar. Wie es liegt, ist die Frage. Möglicherweise nutze ich dafür auch OpenCV - es gibt Teile, die bedruckt sind und bei denen deshalb die Richtung, wie sie liegen, relevant ist.

    Oh, man kann hier unliebsame Nutzer blockieren. Wie praktisch!

  • Man kann das Band auch anhalten, wenn eine zusätzliche Lichtschranke ein neues Teil erkannt hat.

    Dann bewegt sich das Band nicht mehr und man muss auch nichts synchronisieren.

    Nachteil: größere Verzögerung

  • Ich frage, wie man zwei Bewegungen synchronisiert und du erzählst mir, dass ich auf die Synchronisation einfach verzichten soll und die Maschine dann eben langsamger läuft...

    1.) Hunderttausende Maschinen in aller Welt arbeiten mit synchronen Bewegungen. Ich hatte ja gehofft, dass irgendjemand hier das Grundprinzip hinter diesen Systemen kennt. Offenbar ist das nicht der Fall.

    2.) Der Sinn einer Maschine ist es nicht, möglichst langsam zu laufen, um die Konstruktion zu vereinfachen.

    3.) Dein Vorschlag ist genau das Gegenteil dessen, was ich erwarte, wenn ich hier meine Frage stelle.


    Wie backe ich eine Schweizer Nusstorte?

    Schmier dir doch ein Butterbrot, das ist einfacher!

    Oh, man kann hier unliebsame Nutzer blockieren. Wie praktisch!

  • Ich habe ca. 20 Jahre Berufserfahrung im Bereich Automatisierungstechnik, 10 Jahre mit Industrierobotern und 10 Jahre mit didaktische Systemen.

    Wenn ich den Vorschlag mache eine Alternative zu verwenden, um auf die Synchronisation zu verzichten, hat das schon seinen Hintergrund.

    Aber gut, da du ja nicht nur alles besser weißt, sondern auch besser kannst, dann mach mal.

    Viel Erfolg.

  • Hallo Gnom,

    1.) Hunderttausende Maschinen in aller Welt arbeiten mit synchronen Bewegungen. Ich hatte ja gehofft, dass irgendjemand hier das Grundprinzip hinter diesen Systemen kennt. Offenbar ist das nicht der Fall.

    da Du meine Beiträge ignorierst, wirst Du meine Antwort, die zur Lösung Deines Problems führen kann, wohl nicht zur Kenntnis gelangen lassen. Vielleicht übersetzt, d.h. dupliziert aber jemand.

    Normalerweise ist es so, dass auf einem Förderband an definierten Stellen definierte Aktionen erfolgen:

    1. Eine Lichtschranke signalisiert, dass hier etwas anfängt oder etwas aufhört.

    2. Anhand des Vorschubs und der Zeitdifferenz lässt sich eine Dimension ermitteln

    3. und 4. siehe 1. und 2. für Dimension senkrecht dazu.

    5. Aus Dimension zu 2. und 4. ergibt sich die Lage (längs oder quer)

    6. Aus 5. folgt, ob eine Neuorientierung erfolgen soll oder nicht.

    7. Ob Du das über

    a) einen mitwandernden Greifer (dessen Synchronsteuerung mehrerer Achsen durch Teach-In erzeugt wurde) machst oder über

    b) einen Stift, der an einer weiteren definierten Zone von der einen oder anderen Richtung durchwandert oder

    c) zwei Stifte (einer vorne links, der andere hinten rechts synchron gegen das Objekt stoßen)

    und dadurch das Objekt dreht, bleibt Dir überlassen. b) und c) sind einfacher umsetzbar.

    Mit dieser Denke läuft das Förderband mit konstanter Geschwindigkeit und ist komplett ereignisgesteuert = sensorgesteuert

    Wir haben mit einer vergleichsweise sehr ähnlichen Technik Ende der 90er Jahre Sortieranlagen für Entsorgungsbetriebe entwickelt, die anhand der Form z.B. Kunststoffflaschen verschiedener Hersteller erkannt haben und diese dann sortenrein getrennt haben. Dazu gehörte dann natürlich noch ein Kamerasystem zur Form-, Muster- und Farberkennung.

    Je mehr Grips Du in die exakte Positionierung investierst, umso einfacher wird der Aufwand für die Erkennung und umso größer wird Dein Zeitbudget für jegliche Aktionen.

    Beste Grüße

    Andreas

    Ich bin wirklich nicht darauf aus, Microsoft zu zerstören. Das wird nur ein völlig unbeabsichtigter Nebeneffekt sein.
    Linus Torvalds - "Vater" von Linux

    Linux is like a wigwam, no windows, no gates, but with an apache inside dancing samba, very hungry eating a yacc, a gnu and a bison.

    Einmal editiert, zuletzt von Andreas (2. November 2021 um 22:19)

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!