Implementierung: Schrittmotor im Position-Control-Loop

#5891684
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!
Angehängte Dateien:
Gast #5891694
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.
Gast #5893071
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.
#5898919
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren