Implementierung: Schrittmotor im Position-Control-Loop

OP #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.
OP #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

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.