Forum: Mikrocontroller und Digitale Elektronik Drehzahl/Geschwindigkeit mehrerer DC-Motoren synchronisieren


von Jo M. (jokel)


Lesenswert?

Hallo,

möchte mich erst kurz vorstellen. Bin 25 Jahre alt, komme aus der 
"schönen" Eifel und momentan Schüler zum 
Techniker/Automatisierungstechnik. In Sachen Microcontroller würde ich 
mich als Fortgeschrittener Anfänger bezeichnen...

bin zwar schon länger passiv in eurem Forum unterwegs, aber stehe 
inzwischen vor einem Problem wo ich nicht mehr weiter komme, daher 
dieser Beitrag.

Bei diesem Projekt geht es um die Positionierung von drei 
DC-Getriebemotoren mit einem ATmega8. Die Ist-Position wird erfasst 
durch ein Poti, welches nach dem Getriebe direkt auf die Abgangswelle 
geflanscht ist.

Die Sollpositions-Vorgabe erfolgt durch den PC und die Motoren werden 
mittels PID-Reglern positioniert. Die Motoren werden angetrieben durch 
drei L6203 (H-Brücke).

Das funktioniert soweit auch ganz Prima, Folgendes möchte ich aber gene 
erweitern:

Die Motoren sollen künftig so gereglt werden, das sie unabhängig vom 
erforderlichen Drehwinkel zur gleichen Zeit ankommen. Beispiel: Motor 1 
soll 180° drehen, Motor 2 soll 90° drehen, beide Motoren erreichen die 
Zielposition zeitgleich. Dazu muss Motor 2 natürlich nur hab so schnell 
drehen wie Motor 1. (Motor 3 hier mal außer betracht)

Jetzt weiss ich leider nicht so richtig wie ich das anpacken soll. Ich 
habe inzwischen einiges über Kaskadenregelungen gelesen. Die 
Geschwindigkeit der Motoren könne ich ja durch die Werteveränderung des 
Potis zur Abtastzeit erfassen. Doch wie müsste man das anschließend 
verrechnen? Dazu müsste ich ja die Zeit wissen, wann der Motor mit dem 
längsten Winkel ankommmt und die anderen Motoren müssten ja entsprechend 
dieser Zeit langsamer drehen. Ich denke hier liegt irgendwo mein 
Denkfehler.

Daher die Fragen, könnte man das so realisieren? Wie würde denn dann der 
grobe Ablauf von der Regelung aussehen? Die Positionierung erfolgt ja 
dann weiterhin über den PID-Regler, nur müsste der Übergeordnete Regler 
diesen Regler ja dann bei den Motoren mit dem kürzeren Weg einbremsen.

Hoffe meine Gedanke sind nicht zu verwirrend...

Vielen Dank schonmal

Johannes

Achja, ich halte die Ist-Wert Erfassung durch die Potis nicht für ideal, 
leider ist das aber die Vorgabe für dieses Projekt.

von Hauke R. (lafkaschar) Benutzerseite


Lesenswert?

Du hast schon eine Positionsregelung? Dann Gib doch für die beiden 
Motoren einfach eine Rampe (d.h. Änderst die Sollposition über die Zeit) 
und zwar genau so, dass deine Motoren zum Gewünschten Zeitpunkt die 
Endposition erreichen.

von Willi (Gast)


Lesenswert?

Bei kurzen Fahrten kann man ein gleichzeitiges Drehende der DC-Motoren 
kaum erreichen, da gerade kurzfristige niedrige Drehzahlen per Poti kaum 
zu reglen sind.

Ein ATmega/Motor dürfte besser sein und Schrittmotore optimal.

von Jo M. (jokel)


Lesenswert?

Hauke Radtki schrieb:
> Du hast schon eine Positionsregelung? Dann Gib doch für die beiden
> Motoren einfach eine Rampe (d.h. Änderst die Sollposition über die Zeit)
> und zwar genau so, dass deine Motoren zum Gewünschten Zeitpunkt die
> Endposition erreichen.

Ja, die Positionsregleung für alle drei Motoren läuft.
Versteh ich das so richtig

Motor1     0 ->  90°
Motor2     0 -> 180°

Dann fahr ich z.B.

Zeit    Motor1    Motor2
 1        1°         2°
 2        2°         4°
...
...
 90      90°       180°

Das ginge sicherlich, wobei die Schrittweite ja auszutesten wäre, aber 
ich denke daraus wird sich wohl keine wirklich homogene Bewegung ergeben 
und zudem müsste ich ja jeden Zwischenpunkt irgendwie überschleifen um 
nicht jeden Punkt "anzubremsen"

Gruß

Jo

von Reinhard Kern (Gast)


Lesenswert?

Hallo,

du brauchst die Software einer Bahnsteuerung, die macht genau das - z.B. 
einen Schlitz in beliebigem Winkel mit gleichbleibender Geschwindigkeit 
fräsen. Das du keine reale Bahn entlangfährst ist dabei ziemlich egal.

Ich will damit keineswegs sagen, dass das einfach ist, aber jede 
CNC-Steuerung kann das.

Gruss Reinhard

von Helmut L. (helmi1)


Lesenswert?

Willi schrieb:
> da gerade kurzfristige niedrige Drehzahlen per Poti kaum
> zu reglen sind.

Das Poti hat mit der Drehzahlregelung nichts zu tun. Das ist eine 
Positionsregelung.

von Praktiker (Gast)


Lesenswert?

Der Motor der am längsten für Bewegung braucht, also wenn alle Motoren 
gleich sind und auch gleich belastet sind der mit dem größten Weg, wird 
der Mastermotor. Den regelst Du ganz normal auf die Endposition.

Der andere Motor wird der Slave-Motor. Der bekommt seine Soll-Position 
in Abhängigkeit vom der Ist-Position des Masters.

von Hauke R. (lafkaschar) Benutzerseite


Lesenswert?

Jo M. schrieb:
> Ja, die Positionsregleung für alle drei Motoren läuft.
> Versteh ich das so richtig
>
> Motor1     0 ->  90°
> Motor2     0 -> 180°
>
> Dann fahr ich z.B.
>
> Zeit    Motor1    Motor2
>  1        1°         2°
>  2        2°         4°
> ...
> ...
>  90      90°       180°

Ja genau so, wenn du das hochauflösend genug machst (also Winkel und 
Zeitauflösung) dann solltest du davon nicht viel merken. Dann wird die 
Regelung langsam genug sein um eine flüssige Bewegung draus zu machen.

Wenn das deinen Anforderungen nicht genügt, musst du dann wohl noch 
Kaskadierte Regler benutzen und die Geschwindigkeitsregelung 
entsprechend begrenzen, dass beide Motoren maximal die entsprechende 
Geschwindigkeit fahren dass sie ca. gleichzeitig ankommen.

von Jo M. (jokel)


Lesenswert?

Praktiker schrieb:
> Der Motor der am längsten für Bewegung braucht, also wenn alle Motoren
> gleich sind und auch gleich belastet sind der mit dem größten Weg, wird
> der Mastermotor. Den regelst Du ganz normal auf die Endposition.
>
> Der andere Motor wird der Slave-Motor. Der bekommt seine Soll-Position
> in Abhängigkeit vom der Ist-Position des Masters.

Ja, so langsam wirds das mir verständlich. Gibts da irgendwelche 
Algorythmen auch im Bezug auf den Begriff Bahnstuerung der weiter oben 
gefallen ist, die sowas irgendwie "gleitend" umsetzen? Finde da einiges, 
bsp. Besenham aber dies ist wohl idealer für Schrittmotoren...

Denoch geht dies doch dann auch in Richtung Kaskadenregleung oder bin 
ich da völlig falsch.

Ansonsten müsste ich mal versuchen, die Bewegung des "Mastermotors" in 
z.B. 10-Teile einzuteilen, die dann die Sollposition des Slavemotoren 
vorgibt...

Gruß

Jo

von Praktiker (Gast)


Lesenswert?

Ähm, nö... Du brauchst keine "Bahnsteuerung" oder sonst irgendwelche 
Rampen etc. für Deine einfache Anwendung.

Du hast doch eine Regelung. Also hast Du für jeden Motor eine 
Soll-Position und eine Ist-Position.

Wenn Du nun eine neue Position anfahren willst, gibst Du dem 
Master-Motor als Soll-Position ja die Endposition vor. Der Master-Motor 
wird nun durch Deine PID-Regelung mit maximaler Geschwindigkeit 
gefahren.

Während der Master-Motor zu seiner Endposition fährt, liest Du ja eh 
ständig seine Ist-Position ein. Also kannst Du die Soll-Position des 
Slave-Motors ständig nach der Ist-Position des Master-Motors regeln.

Du musst natürlich etwas aufpassen mit den Richtungen und den Offsets. 
Einfaches Beispiel: Motor A steht bei Position 50, Motor B steht bei 
Position 80. Nun sollen beiden Motoren auf Position 100.

    Soll_A = 100                    # Neue Endpositionen
    Soll_B = 100

    Start_A = Ist_A                 # Beispiel: 50
    Start_B = Ist_B                 # Beispiel: 80

    Weg_A = Soll_A - Start_A        # Beispiel: 100 - 50 = 50
    Weg_B = Soll_B - Start_B        # Beispiel: 100 - 80 = 20

    Schleife so lange Ist_A <> Soll_A und Ist_B <> Soll_B

        Wenn Betrag(Weg_A) >= Betrag(Weg_B) dann

            PID_A( Soll_A )
            PID_B( (Ist_A - Start_A) / Weg_A * Weg_B + Start_B )

        sonst

             PID_B( Soll_B )
             PID_A( (Ist_B - Start_B) / Weg_B * Weg_A + Start_A )

        Wenn_ende

    Schleife_ende

von Willi (Gast)


Lesenswert?

Helmut Lenzen schrieb:
> Das Poti hat mit der Drehzahlregelung nichts zu tun. Das ist eine
> Positionsregelung.

Jo M. schrieb:
> Die
> Geschwindigkeit der Motoren könne ich ja durch die Werteveränderung des
> Potis zur Abtastzeit erfassen.

So, wie ich das verstehe, ist das Poti der einzige Sensor für die 
Ist-Position und (indirekt) für die Geschwindigkeit/Drehzahl. Wenn eine 
Zielfahrt 10s dauert, kann man damit vielleicht etwas regeln. Bei 0,5s 
kann man bestenfalls etwas 'zusammenruckeln'.

@Jo. M.
Welchen Motor verwendest Du? Welche Untersetzung hat das Getriebe? 
Welche Winkel sollen in welcher Zeit angefahren werden?

von Jo M. (jokel)


Lesenswert?

Willi schrieb:
> Helmut Lenzen schrieb:
>> Das Poti hat mit der Drehzahlregelung nichts zu tun. Das ist eine
>> Positionsregelung.
>
> Jo M. schrieb:
>> Die
>> Geschwindigkeit der Motoren könne ich ja durch die Werteveränderung des
>> Potis zur Abtastzeit erfassen.
>
> So, wie ich das verstehe, ist das Poti der einzige Sensor für die
> Ist-Position und (indirekt) für die Geschwindigkeit/Drehzahl. Wenn eine
> Zielfahrt 10s dauert, kann man damit vielleicht etwas regeln. Bei 0,5s
> kann man bestenfalls etwas 'zusammenruckeln'.
>
> @Jo. M.
> Welchen Motor verwendest Du? Welche Untersetzung hat das Getriebe?
> Welche Winkel sollen in welcher Zeit angefahren werden?


Ja, das Poti ist der einzige Sensor.
Das sind DC-Getriebmotoren aus einer Überaschungskiste, bei 12V ca 30 
1/min, Getriebe ca 1:80. Der Stellbereich beträgt ca 120°. Zur Zeit, 
naja, so schnell wie es mir möglich ist, 1-1,5 sek.

Die Abtastzeit von den Reglern liegt aktuell bei 5ms. Die Positionierung 
(jeder Motor für sich) funktioniert so tadellos.

Gruß

Jo

von Reinhard Kern (Gast)


Lesenswert?

Hallo,

es gibt 2 Ansätze für eine Bahnsteuerung:

1. Ein Mastermotor wie oben vorgeschlagen - aber da ergibt sich das 
Problem, welcher ist der Master und wie schnell soll er fahren. Je nach 
Richtung müsste es mal der X-Motor, mal der Y-Motor sein, und bei einem 
Kreis wird die Sache ziemlich komplex.

2. Die Steuerung berechnet in einem festen Zeitraster die Sollpositionen 
für X und Y. Die ergeben sich aus Richtung und gewünschter 
Geschwindigkeit, und das ist bei einem Kreis oder irgendeiner anderen 
Kurve genauso, bloss aufwendiger zu rechnen. Dem ist eine 
Positionsregelung für jeden Motor nachgeschaltet, deren Aufgabe es ist, 
zum nächsten Zeitpunkt die nächste Zielposition der jeweiligen Achse zu 
erreichen. Das Zeitraster bestimmt die erreichte Genauigkeit, eine 
Werkzeugmaschine, die mit µ-Genauigkeit fräsen soll, muss im 
Sub-ms-Bereich rechnen können.

Bei perfekter Regelungsauslegung bewegt sich das Werkzeug glatt von 
Sollposition zu Sollposition, schwingt die Regelung, so ergibt sich eine 
Schlangenlinie um den gewünschten Weg. Das ist nicht nur ungenau, es 
schadet auch den Antrieben.

Das ist die Kurzform. Es gibt auch dicke Fachbücher dazu.

Gruss Reinhard

PS mit 3 Achsen geht es natürlich genauso.

PS2 bei geraden Wegen muss man bloss zwischen Start und Ziel 
interpolieren.

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.