Forum: Mikrocontroller und Digitale Elektronik Implementierung: Schrittmotor im Position-Control-Loop


von Ananas E. (ananas_express)


Angehängte Dateien:

Lesenswert?

Hallo,

ich möchte gerne ein Labormodell aus meiner UNI nachbauen, konkret ein 
einfaches Feder-Masse-System mit Positionsregelung (siehe Anhang)

Gesteuert wird das Ganze mit einem Microcontroller (vermutlich ein AVR) 
und als Antrieb ein Schrittmotor mit einem Treiber wie den DRV8825.

Ich habe mir das nun so gedacht, dass ich als Ausgang der verschiedenen 
Regelalgorithmen die Geschwindigkeit des Schrittmotor vorgebe.

Der DRV8825 bekommt als Input Pulse für jeden neuen Step - also je 
schneller die Pulse, desto schneller die Geschwindigkeit.

Nun zur eigentlichen Frage: Wie implentiere ich am besten 
Pulsgenerierung?

Meine Idee wäre hier einen Timer mit Interrupt zu konfigurieren und das 
Compare Register in der ISR mit der aktuellen Speedrequest des 
Algorythmus entpsrechend zu setzen.

Ist das ein guter Ansatz oder gibt es hier bessere geeignete 
Funktionalitäten von µC (muss jetzt auch nicht unbedingt ein AVR sein)?

Bin dankbar für Tipps dazu!

von A. S. (Gast)


Lesenswert?

Ananas E. schrieb:
> Wie implentiere ich am besten
> Pulsgenerierung?
>
> Meine Idee wäre hier einen Timer mit Interrupt zu konfigurieren und das
> Compare Register in der ISR mit der aktuellen Speedrequest des
> Algorythmus entpsrechend zu setzen.

Wenn Du die Größenordnung von
- Pulse pro Sekunde
- Puls-Pausenverhältnis
- Genauigkeit

kennst, dann kann darüber nachdenken, das in externer HW, interner HW 
oder SW zu machen.

von Thorsten O. (Firma: mechapro GmbH) (ostermann) Benutzerseite


Lesenswert?

Eine Positionsregelung setzt eine Istwerterfassung voraus. Ein Sensor 
fehlt aber in deiner Prinzipskizze?!

Mit freundlichen Grüßen
Thorsten Ostermann

von my2ct (Gast)


Lesenswert?

Ananas E. schrieb:
> Der DRV8825 bekommt als Input Pulse für jeden neuen Step - also je
> schneller die Pulse, desto schneller die Geschwindigkeit.

Vielleicht solltest du dir darüber klar werden, wie man feststellt, ob 
irgendetwas schneller oder langsamer ist. Das tu man gewöhnlich, indem 
man die Geschwindigkeiten misst und vergleicht. Eine gängige Methode zur 
Bestimmung der Geschwindigkeit ist die Messung des Zeitintervals, die 
der fragliche Gegenstand für eine bestimmte Strecke benötigt. Der 
Differenzenquotient ist dann die Geschwindigkeit.

So, und jetzt erklär mal, wie du feststellen willst, ob eine 
Geschindigkeit schneller oder langsamer ist.

von Ananas E. (ananas_express)


Lesenswert?

Hallo Thorsten,

die Positionsmessung erfolgt mit einem Inkrementalgeber bei der 
Umlenkrolle :)

von Ananas E. (ananas_express)


Lesenswert?

Hallo  my2ct,
ich nehme an, du meinst beziehst dich gerade auf die Geschwindigkeit der 
Masse.
In der Umlenkrolle ist ein Inkrementalencoder, damit weiß ich die 
Position.
Die Position z und die Geschwindigkeiten dz/dt bzw. dy/dt werden dann 
mit einem Observer ermittelt.

Auf eine direkte Messung der Geschwindigkeit über einen Timer möchte ich 
im ersten Schritt verzichten. Position sollte reichen.

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.