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
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
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.
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.
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 ...
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.
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.
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.
>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.
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
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
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
(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.
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
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
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