Atmega8 und der ADC

Gast #4380966
Lesenswert?

Hallo,
ich hoffe, ich finde hier Unterstützung.
Für ein kleineres Projekt benötige ich einen Schrittmotor mit mech. 
gekoppeltem Potentiometer. Dadurch soll die genaue Position des motors 
festgestellt werden.
Habe mir dazu einen passenden Versuchsaufbau aufgebaut.
Im Programm selbst findet ihr die Daten dazu.

Das problem: sobald der Motor in die Nähe der Position 0 kommt, fängt er 
an zu "stottern" und nähert sich so in kleinen Schritten der 
Anfangsposition.
Alles Andere funktioniert hervorragend.

Der Effekt tritt auch auf wenn:
   - andere Mikroschritte auf dem Driverboard gewählt werden
   - die Motorgeschwindigkeit geändert wird
   - Interruptsteuerung angewendet wird

Vielleicht kann es sein, dass kleine Spannungen nicht mehr genau 
abgetastet werden...?
Aber wie soll ich dann die Ruckelei wegbekommen...?

Ich komme nicht mehr weiter.
Hat eine von Euch ein paar Tipps dazu ?
Gern auch telefonisch :-)
Hier dazu die Telef-Nr. anfragen( christoph.maass@cmaass.org )

Danke im Voraus !!!!

Christoph
Angehängte Dateien:
Gast #4380971
Lesenswert?

Fuer solche Fragen laesst man sich normalerweise Ausgaben von 
interessierenden Werten vom Programm irgenwohin ausgeben/schreiben. 
Daran sieht man, woran es hapert.

Eine moeglicher Einfluss waere Spiel im Getriebe.

wendelsberg
#4380981
Lesenswert?

> Eine moeglicher Einfluss waere Spiel im Getriebe.

Ein anderer möglicher Einfluss wäre eine unebene Widerstandsbahn am Ende 
des Potiwegs.

Wie wendeslberg schon sagte: gemessene Wert irgendwo ausgeben lassen.
Persönlich halte ich einen Versuchsaufbau während der Entwicklung ohne 
irgendeine Ausgabemöglichkeit für einen schwerwiegend strategischen 
Fehler des Entwicklers.
#4381017
Lesenswert?

Karl H. schrieb:
> Ein anderer möglicher Einfluss wäre eine unebene Widerstandsbahn am Ende
> des Potiwegs.

Das kenne ich auch so. Ist das vielleicht ein Mehrgangpoti? Da sollte 
man die 0-Position auch 1 bis 1,5 Umdrehungen vom Endanschlag entfernt 
legen.

Der ADC des Atmegas misst eigentlich in allen Bereichen gleich gut aber 
du könntest auch mal die Kurve aufnehmen. Das Thema bzgl. 
Quantisierungfehler und Co wird ja auch im Datenblatt ganz gut 
behandelt. Warum nimmst du eigentlich einen Atmega8? Ich mein der hatte 
u.a. einen Design-Fehler bei dem Intern VCC und AVCC verbunden ist was 
man auch nicht unbedingt will. Wurde erst mit dem Atmega8A gefixt soweit 
ich weiß. Aber ich würde auch so ein neueres Modell nehmen wie z.B. den 
Atmega88 und Co.
#4381034
Lesenswert?

Das ist aber auch nicht gut:

If Geber = 0 Then                                         'Wenn 
Geberwert = 0 dann befindet sich
     Position = Null                                        'der Motor 
in Startposition 0
       Else
     If Geber > 0 Then                                      'Sonst auf 
einer anderen Position oder am Ende
       Position = Ende
     End If
  End If

Sowie der Motor sich nur ein kleines Stückchen bewegt, ist schon die 
Bedingung erfüllt, daß er das Ende erreicht haben könnte. Beim nächsten 
Durchlauf denkt das Programm dann, er wäre schon am Anschlag angelangt
und will gleich wieder zurück. Daher das Zittern.

MfG Paul
Gast #4381070
Lesenswert?

Vielen Dank für die Hilfe !!!!

Ich werde die einzelnen Beiträge. Ich werde diese nun "abarbeiten" un 
mir die Werte ausgeben lassen.
Mal sehen, was dabei herauskommt.

Zu den Comments:

Wendelsberg
Ausgabe der Daten: ok
Ein Spiel im Getriebe kann hier ausgeschlossen werden.

Karl-Heinz
Widerstandsbahn bei versch. Potis getestet. Hier Draht-Poti 10-Gang !
Ausgabe der Daten: ok
Schwerwiegender Fehler: na ja .....da ist ja ein ganz schlauer  ;-)


Michael Köhler
--------------
0-Position auch 1 bis 1,5 Umdrehungen vom Endanschlag entfernt legen: 
OK, gute Idee
Neueres Modell: ok, z.Zt. ist das ein Atmega8A (stand auch im 
Programm-Comment)

Paul Baumann
Eingangswiderstand zu hochohmig: habe dies auch mit anderen Werten 
probiert.

andi
Servo: da gibt es gute Gründe, würde den Rahmen hier sprengen

------------------------------------------------------------------------ 
----
Paul Baumann
-------------
Der Geberwert wird in der Subroutine aufgenommen und im Hauptprogramm 
noch einmal abgefragt. Das ist falsch !
Du bist richtig mit Deinem Beitrag. Habe die erste Abfrage direkt 
hinbter Wait (Zeile 62) verlegt.
Der aufbau arbeitet nun fehlerlos.

Das war's !  Klasse Beitrag !!!   Danke !!!

Vielen dank für die Anregungen !

 C. Maass

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