Forum: Mikrocontroller und Digitale Elektronik DC Motor ansteuern, bestimmte Positionen anfahren


von Patrick B. (p51d)


Lesenswert?

Hallo miteinander

Ich habe eine kleine Frage zu einer Positionsregelung für einen DC 
Motor:
Der Motor wird über eine H-Brücke angesteuert, womit ich ihn vorwärts 
und rückwärts an bestimmte Positionen fahren kann. Respektive der Motor 
treibt über ein Untersetzungsgetriebe eine Welle an, die dann einen 
Schlitten an die Positionen fahren soll. Die momentane Position wird 
über ein Schleiferpotentiometer zum Prozessor zurückgegeben, womit ich 
weis, wo der Schlitten sich befindet.
Die Daten zum Motor kenne ich:
- Un  12V
- P   11W
- n0  9380
- Mn  14.2mN/m
Das Getriebe kenne ich leider nicht, aber es wird sehr stark untersetzt, 
damit so dass der Motor nur noch etwa 5-10 Umdrehungen pro Minute macht.

Zusätzlich zum analogen Positionssignal messe ich noch den Strom über 
einen ZXCT1009.

Jetzt die grosse Quissfrage: Wie kann ich das ganze von einem Prozessor 
aus am besten realisieren, damit er mir die Positionen schön anfährt, 
aber nicht überfärht. Mit einem PID oder mit einem Rampenprinzip? Die 
H-Brücke habe ich direkt an einem kompatiblen PWM Port, womit ich auch 
noch die Geschwindigkeit regeln kann (Vorgabe ist zwischen 80-100%).
Leider kenne ich mich mit diesem Bereich nicht so aus, habe zwar ein 
paar Kenntnisse von der Regeltechnik, aber so etwas ist absolut neu.

PID:
Scheint eine elegante Lösung zu sein (wenn der Regler abgeglichen ist), 
damit die Positionen sauber angefahren werden können, selbst bei 
ändernder Last (was bei mir der Fall ist). Aber so ist mir noch keine 
Idee gekommen, wie ich dann einen Sanftstart machen kann, weil die 
Leistung des Netzteils ist auf ~12W begrenzt.

Rampe:
Bis jetzt habe ich da die meisten Ideen, aber sobald problematische 
Zustände (Beschleunigung noch nicht abgeschlossen; wann Bremsphase 
einleiten, da die Distanzen und Belastungen nie gleich sind) eintreten, 
happerts dann mit den Lösungsideen.

Ich währe dankbar, wenn Ihr mir ein paar Lösungsvorschläge machen könnt, 
respektive pro- contra Ansichte einbringen.

Besten Dank
MFG Patrick

: Verschoben durch Moderator
von Helmut L. (helmi1)


Lesenswert?

Patrick B. schrieb:
> Aber so ist mir noch keine
> Idee gekommen, wie ich dann einen Sanftstart machen kann, weil die
> Leistung des Netzteils ist auf ~12W begrenzt.

In dem du zuerst einen Stromregler aufbaust der dir den Motorstrom 
regelt.
Der Stromregler bekommt seinen Sollwert vom Drehzahlregler und der 
wiederum vom Positionsregler. Das ist die uebliche Loesung fuer 
Positionierantriebe.
Also 3 Regler in einander geschachtelt. Stichwort Kaskadenregelung. Je 
nachdem koennstes du eventuell den Drehzahlregler rauslassen.

von MB (Gast)


Lesenswert?

Was ist den absolut neu daran für dich?

Ich verstehe nicht ganz wo dein Problem ist:

1. Du implementierst dir einen PD-Regler (PID ist nicht nötig, da deine 
Stecke schon integrierend ist) auf deinem Controller.

2. Die Führungsgrösse dieses Reglers kann nun eine von dir definierte 
Rampe sein um langsam anzufahren etc..


Da du wie ich vermute nicht alzu viele Daten von deiner Stecke etc. 
hast, würde ich einfach mal den Regler implementieren und dann empirisch 
oder eventuell unter der Verwendung von Einstellregeln die Parameter 
einstellen.

von smatlok (Gast)


Lesenswert?

MB schrieb:
> 1. Du implementierst dir einen PD-Regler (PID ist nicht nötig, da deine
> Stecke schon integrierend ist) auf deinem Controller.

Stimmt nicht, da die Störgröße nach dem integrierenden Streckenglied 
auftritt. Daher ist der I-Regler sinnvoll und je nach geforderter 
Genauigkeit auch nötig.

von smatlok (Gast)


Lesenswert?

smatlok schrieb:
> Stimmt nicht, da die Störgröße nach dem integrierenden Streckenglied
> auftritt

Ach Quatsch, die Position ist ja die rückgeführte Größe^^ und die 
Störgröße greift davor ein, damn ;-) - Trotzdem: PID Regler wennst du 
den Fehler unter Last auf 0 Regeln willst..

von Karl (Gast)


Lesenswert?

Oder PD wenn es schnell sein soll. Der I-Anteil regelt nicht nur auf 
0-Fehler, sondern auch langsam!

von Klaus (Gast)


Lesenswert?

Patrick B. schrieb:
> so dass der Motor nur noch etwa 5-10 Umdrehungen pro Minute macht

Das ist aber ein hochdynamisches System

MfG Klaus

von Patrick B. (p51d)


Lesenswert?

Klaus schrieb:
> Patrick B. schrieb:
>> so dass der Motor nur noch etwa 5-10 Umdrehungen pro Minute macht
>
> Das ist aber ein hochdynamisches System
>
> MfG Klaus

Das ist eine grobbe Schätzung (Augenmass), da ich es bis jetzt weder 
messen konnte, noch irgendwelche Datenblätter gefunden habe. Eigentlich 
ist das ganze schon stabil, also immer die gleiche Drehzahl.

MB schrieb:
> Ich verstehe nicht ganz wo dein Problem ist:
>
> 1. Du implementierst dir einen PD-Regler (PID ist nicht nötig, da deine
> Stecke schon integrierend ist) auf deinem Controller.
>
> 2. Die Führungsgrösse dieses Reglers kann nun eine von dir definierte
> Rampe sein um langsam anzufahren etc..

Da komme ich jetzt nicht ganz mit: Mann kann ja den PID Wert errechnen, 
aber wie soll das dann mit der Rampe zusammenspielen?

Also was ich bis jetzt so gelesen habe, empfehlt ihr nicht die H-Brücke 
über PWM anzusteuern?

von Helmut L. (helmi1)


Lesenswert?

Patrick B. schrieb:
> Also was ich bis jetzt so gelesen habe, empfehlt ihr nicht die H-Brücke
> über PWM anzusteuern?

Sicher kannst du die H-Brücke mit PWM ansteuern. Dein PWM-Wert ist die 
Ausgangsgrösse deines Reglers. Wenn du jetzt einen Kaskadenregler baust 
also Positionsregler und dann Stromregler kannst du die Ausgangsgrösse 
des Stromreglers begrenzen und schon hast du deinen Sanftstart. Das 
ganze kannst du in Software auf einem AVR machen.

von Wolfgang S. (wsm)


Lesenswert?

Steuere den Strom bzw. den PWM-Wert proportional zur Abweichung der 
Schlittens vom Sollwert.

W.

von Patrick B. (p51d)


Lesenswert?

OK, ich versuche das einmal etwas zusammenzufassen:

Das analoge Geschwindigkeitssignal definiert mir ein PWM Wert von 
80-100%. Dieser wiederum wird dann mit dem Strom Regler weiter 
verrechnet, welcher nochmals den neuen PWM Wert von 0-100% einstellt, 
damit die Anfahrrampe erreicht wird. Dazu noch eine Zwischenfrage: Wie 
steil darf diese Rampe sein?

Zum Abbremsen übernehme ich einfach die Differenz zwischen Soll und Ist 
und gebe diese als PWM aus (ergibt 45° Rampe...), und das Maximum 
entspricht dem Analogsignal. Kann hierbei nicht das Problem auftreten, 
dass der Motor gar nicht das Soll erreicht, wenn die Führungsgrösse zu 
klein ist? Z.B der PWM steht noch bei 5%, aber die Last am Motor ist zu 
gross als dies noch reichen würde um den Motor zu drehen.

Anders könnte man das Abbremsen über einen PID-Wert lösen, wodurch auch 
eine "Rampe" entsteht und die Position sicher erreicht wird.

Das grösste Problem ist, dass die Soll-Position unter keinen Umständen 
überfahren werden darf, also ein Einschwingen darf nicht vorkommen.

von Harald Wilhelms (Gast)


Lesenswert?

Patrick B. schrieb:

> Das grösste Problem ist, dass die Soll-Position unter keinen Umständen
> überfahren werden darf, also ein Einschwingen darf nicht vorkommen.

Du willst eine Präzisionspositionierung? Was für ein Poti verwendest
Du denn als Geber?
Gruss
Harald

von Patrick B. (p51d)


Lesenswert?

Keine Ahnung, was das Für ein Poti ist, da der mechanische Teil von 
einer externen Firma gemacht wird.
Es ist ein "Band" auf dem es 5 Abnehmer hat sowie ein nachfolgendes 
mehrgang Poti zum Ableich.

Ich bin arbeite mich gerade ein wenig in die PID Software-Version ein...

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.