Forum: Mikrocontroller und Digitale Elektronik Schrittmotor über Drehgeber genau positionieren


von Der Dän (Gast)


Lesenswert?

Hallo zusammen,

Seit längerem plane ich mir ein so genanntes "Remote Follow Focus" zu 
bauen.
Hier ein Link, der kurz und bündig zeigt, was ein "Remote Follow Focus" 
ist und was es macht.

http://www.youtube.com/watch?v=ugx-rYfMCMk&NR=1

Mir geht es erstmal nur darum, dass sich der Schrittmotor synchron mit 
dem Handdrehgeber vor und zurück bewegen soll. Ich bekomme das nicht 
wirklich zufrieden stellend hin. Ich glaube, ich brauche nämlich einen 
ganz andere herangehensweise.

Einen Schrittmotor zum drehen zu bekommen ist kein Problem. Dazu nutze 
ich die Schrittmotorsteuerung mit L297 und L298 und einen Atmega32, der 
in C programmiert wird.

Mein bisheriger Ansatz ist es, die Position zu der der Motor fahren 
soll, über ein Drehpoti vorzugeben. Das Poti wird über den 10bit ADC 
ausgewertet.

Hier eine grobe Übersicht wie mein Programm Arbeitet:

Motorposition wird bei Programmstart auf 0 gesetzt.
Poti wird ausgewertet. ADC = 500
Aktuelle Motorposition (0) wird mit Sollwert (500) verglichen.
Motor dreht 500 Schritte nach rechst.
Poti wird ausgewertet. ADC = 200
Aktuelle Motorposition (500) wird mit Sollwert (200) verglichen.
Motor dreht 300 Schritte nach links.
Poti wird ausgewertet. ADC = 200
Aktuelle Motorposition (200) wird mit Sollwert (200) verglichen.
Motor bleib an seiner Position.

usw.

In der Simulationssoftware Proteus funktioniert das Programm genau sowie 
es soll.
Auch in der Praxis funktioniert das Programm, aber leider nicht sehr 
viel versprechend. Bei erreichen der Zielposition beginnt der Motor 
unkontrolliert zu zucken. Es scheint, als würde der ADC ungeau messen. 
Dadurch verliert er seine tatsächliche Position und es ist eine genaue 
Positionierung nicht mehr möglich. Ein Mittelwertsbildung aus 5 
Messungen hat keine Besserung gebracht.

In einem anderen Beitrag war die Rede als Drehgeber einen Tachogenerator 
zu benutzen. Je nachdem wie hoch die erzeugte Spannung ist, wird der 
Motor unterschiedlich schnell antacktet. Dieses habe ich aber ncoh nciht 
ausprobiert.

Hat jemand vielleicht eine Idee oder Vorschläge , wie ich zur Lösung 
meines Problems komme? Auch über Vorschläge, die eine ganz andere 
herangehensweise beschreiben, währe ich sehr dankbar.

Gruß Der Dän

von Steffen H. (avrsteffen)


Lesenswert?

Warum versuchst du es nicht mit einem Inkrementalgeber? Der gibt dir 
über einen Zähler direkt die Position. Und der zittert normalerweise 
nicht da er meist eine Rastung besitzt. Man muss nur mehr Umdrehungen 
machen um z.B. den Wert 500 zu erreichen. Inkrementalgeber (Drehgeber) 
gibt es mit Auflösungen von 16, 24 und 30 Impulsen pro Umdrehung bei 
Reichelt. Ansteuerungsroutinen findest du hier im Forum.

Steffen

von Klaus W. (mfgkw)


Lesenswert?

Vielleicht nicht den jeweils aktuellen ADC-Wert nehmen, sondern einen 
etwas geglätteten (Mittelwert der letzten 4 oder 8)?

Ein anderer Weg wäre, den Sollwert des Motors nur zu ändern, wenn er 
z.B. mehr als ein paar Schritte vom ADC abweicht.

von Knilch (Gast)


Lesenswert?

Dir ist schon klar, dass man einen (stromlosen!) Schrittmotor auch als 
Drehgeber "mißbrauchen" kann, z.B. für das Feedback der manuellen 
Änderung.
http://www.kielnet.net/home/julien.thomas/tech/schrittmotordrehgeber.htm

von Quellensteuer (Gast)


Lesenswert?

Der Dän schrieb:
> Bei erreichen der Zielposition beginnt der Motor
> unkontrolliert zu zucken.

Du mußt eine kleine Zeit warten, bis der Motor gestoppt hat und die 
Mittelwertbildung vom ADC neu eingeschwungen ist.
Dann gibt es noch das Problem des nicht 100% linearen Potis, was dazu 
führt, dass die elektrische und mechanische Position von einander 
abweichen. Hysterese verwenden, wie Klaus Wachtler geschrieben hat.

von Frank E. (Firma: Q3) (qualidat)


Lesenswert?

Beim Losfahren den Takt in einer Beschleunigungskurve erhöhen und kurz 
vor dem Erreichen der Sollposition wieder reduzieren, damit der Motor 
nicht darüber hinausschiesst. Das macht auch jeder Plotter so ...

von G a s t (Gast)


Lesenswert?

Der Dän schrieb:
> Auch in der Praxis funktioniert das Programm, aber leider nicht sehr
> viel versprechend. Bei erreichen der Zielposition beginnt der Motor
> unkontrolliert zu zucken.
Trotz Mittelwertbildung kann der Meßwert vom Poti immer an eine 
Bitgrenze liegen, so dass der Sollwert zappelt. Lass dir die gemittelten 
Werte mal ausgeben. Eine kleine Hysterese für die Steuerung hilft.

von Der Dän (Gast)


Lesenswert?

Vielen Dank für die zahlreichen Antworten.

Eine Hysterese und eine kurze Pause, bevor der nächste Wert eingelesen 
wird, werde ich mal ausprobieren.

Mir ist gerade noch eingefallen, dass der Motor vielleicht durch 
Selbstinduktion den uC und dessen ADC stört und so keine genaue 
Auswertung stattfinden kann.

Ich versorge derzeit Schrittmotor und uC über den gleichen 
Festspannungsregler mit 5V.

Ich habe hier noch einen kleinen Schrittmotor aus einem alten Drucker, 
da ist ein kleines Getriebe dran mit einer 1:8 Übersetzung. Das sollte 
für eine ausreichend hohe Auflösung reichen.

von Karl H. (kbuchegg)


Lesenswert?

Der Dän schrieb:
> Vielen Dank für die zahlreichen Antworten.
>
> Eine Hysterese und eine kurze Pause, bevor der nächste Wert eingelesen
> wird, werde ich mal ausprobieren.
>
> Mir ist gerade noch eingefallen, dass der Motor vielleicht durch
> Selbstinduktion den uC und dessen ADC stört und so keine genaue
> Auswertung stattfinden kann.

Genau deshalb ist es wichtig, sich Messwerte ausgeben zu lassen und 
diese AUsgabe zu studieren. Du machst zur Zeit den Fehler, dass du 
Annahmen darüber triffst, was du eigentlich misst.

>
> Ich versorge derzeit Schrittmotor und uC über den gleichen
> Festspannungsregler mit 5V.

Motoren und µC an einer gemeinsamen Stromversorgung erfordern meistens 
spezielle Vorkehrungen. Motoren sind 'Dreckschleudern' wenn es um die 
Stromversorgung geht.

von Michael_ (Gast)


Lesenswert?

>Bei erreichen der Zielposition beginnt der Motor
>unkontrolliert zu zucken. Es scheint, als würde der ADC ungeau messen.
Das sind natürlich Störungen/Rauschen auf der analogen Auswertung.
Ein Schrittmotor fährt immer in die Position, welche er gesagt bekommt.
Also definiere eine bestimmte Stellung digital (Display, Drehgeber) und 
schicke diesen Wert dann an den Motor.

von (jup) nicht eingeloggt (Gast)


Lesenswert?

Lass das mit dem Poti und dem ADC damit hab ich auch schon Stunden 
vergeblich rumprobiert.

Der Ansatz von Knilch (Gast) ist die beste Idee.

Nimm einen kleinen Schrittmotor aus einem alten Floppylaufwerk oder 
Drucker und beschalte Ihn wie hier

http://www.dg1sfj.de/hardware/hw_drehencoder.html

dazu dann die Drehgeberroutine von Peter Danegger hier im Forum oder Du 
verheiratest Peters Routine mit der hier

http://www.lothar-miller.de/s9y/categories/54-Encoder

und Du hast eine super perfekte Loesung

das ganze fuehlt sich auch super an und kostet nur ein paar cent.

Ju

von Juergen G. (jup)


Lesenswert?

Ach so nochwas zu den Stoerungen des Schrittmotors der drehen soll und 
dessen Treiber.

Den Treiber ganz nah am Motor platzieren, Kabellaenge max 15cm, Da in 
Deinem Aufbau sowieso die Camera ein "grosser Klotz" ist, bau die 
Elektronik direkt darunter und den Schrittmotor den Du als Drehgeber 
nimmst kannst Du ueber ein langes Kabel anschliessen.

Die Dioden am L298 muessen "ultrafast" sein, also meiner Erfahrung nach 
sind die BYW aus dem Datasheet machbar aber nicht empfehlenswert. Mit 
denen macht der Motor fast immer Krach. Nimm besser SMD Dioden, die 
haben keine draehte die als Antennen wirken.

Die Stromversorgung fuer solche Projekte baue ich mir immer aus 
Gleichrichter und 10000uF Kondensator fuer den Motor. Dabei kommt der 
Riesenelko ganz nah an die ultrafast Dioden, somit haben die 
Spannungsspitzen die vom Motor kommen einen kurzen Weg und versumpfen im 
Elko bevor sie Deine Schaltung erreichen.
Die selbe Spannung aus dem Riesenelko dann auf eine Diode in 
Flussrichtung und einen weiteren Elko 470uF, danach dann einen 
Schaltregler LM2575 zBsp.

Damit realisiere ich Schrittmotortreiber bis 40V Motorspannung und super 
Dynamic ohne den Krach den die Motoren sonst ueblicherweise machen.

Ju

von Roland P. (pram)


Lesenswert?

Bei Verwendung eines Drehgebers könnte man sich den µC ggf. komplett 
sparen.

Der Drehgeber sollte ja ein "Schrittmotorkonformes" Signal liefern. Auf 
Features wie Microstepping etc. müsste man halt dann verzichten.

Gruß
Roland

von Quellensteuer (Gast)


Lesenswert?

(jup) nicht eingeloggt schrieb:
> Lass das mit dem Poti und dem ADC damit hab ich auch schon Stunden
> vergeblich rumprobiert.

Was willst Du damit sagen?
Bei mir spielen Motor und Drehgeber (Plaste-Poti) wunderbar zusammen.

von Juergen G. (jup)


Lesenswert?

Ich wollte damit sagen das es zwischen einem Poti am ADC und dem 
Schrittmotor (SM) der zu positionieren ist immer irgendwelche 
Definitionsprobleme in der Anwendung geben wird.

Der Schrittmotor hat irgendeine Aufloesung und der ADC hat irgend eine 
andere Aufloesung, um das in Einklang zu bringen benoetigt es einer 
Definition, wobei am Ende immer eine der beiden Aufloesungen leidet weil 
sie nicht ganzzahlig dividierbar ist.
Desweiteren soll der SM mehrere Umdrehungen machen (evtl. unlimitiert) 
das Poti hat aber irgendwo seinen Anschlag.

Meiner Meinung nach sollte man nur auf unterschiedliche Signale 
ausweichen wenn es keine bessere Loesung gibt. Weil bei der Umformung 
immer irgendwelche Fehler auftreten werden.

Also wenn ich ein digitales Ding Steuern will, ist es besser einen 
digitalen Input zu haben, denn einen analogen.

Mein Problem liegt warscheinlich darin, das ich zu faul bin die gleichen 
Dinge mehrfach zu entwickeln. Wenn ich mich einmal hinsetze und 
irgendetwas mache, dann versuche ich es so flexibel wie moeglich zu 
gestalten, damit ich bei der Wiederverwendung den kleinstmoeglichen 
Aufwand habe.
Das war warscheinlich bei mir der Vater des Gedanken, das ein analoges 
Poti am ADC nicht die beste Loesung ist um einen SM zu positionieren.

Ju

von Michael R. (mexman) Benutzerseite


Lesenswert?

Hallo Der Daen,

Frank hat das richtige beschrieben:

> Beim Losfahren den Takt in einer Beschleunigungskurve erhöhen und kurz
> vor dem Erreichen der Sollposition wieder reduzieren, damit der Motor
> nicht darüber hinausschiesst. Das macht auch jeder Plotter so ...

Dein "Proteus" simuliert die Masse des Schrittmotors eben nicht.
Wenn Du den nicht sauber (oder zu stark) bremst, dann schiesst der ueber 
die Sollposition hinaus, oder erreicht sie nicht exakt.
Der erste Fall ist dabei kritischer, denn das erzeugt Dein "Zittern".

gruss

Michael

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


Lesenswert?

Hallo Michael!

Was du meinst kann auftreten, wenn man den Motor geregelt betreibt mit 
Poti als Feedback. Aber nicht, wenn das Poti den Sollwert erzeugt.

Was in der Simulation fehlt ist das Rauschen auf dem Analogsignal vom 
Poti und die Störungen durch die PWM.

Mit freundlichen Grüßen
Thorsten Ostermann

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.