PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Servo zucken bei Power on vermeidbar???



ACsenf
05.02.2008, 13:34
Hallo!

Ich habe folgendes Problem. Wie in der angehängten Software wird ein Servo von einem ATtiny 13 gesteuert um damit auf der Modellbahn Weichen, oder Tore zu steuern. Mit den Potis werden die Endlagen eingestellt, die eigentlich eingehalten werden sollen.

Nun ist es beim Einschalten aber so, daß das Servo kurz über die Eine Endlage zuckt um dann in der gewünschten Lage stehen zu bleiben.
Kann man dies irgendwie unterdrücken??? Oder liegt das am Servo generell? Kenne dieses Phänomän noch gut von der Lenkung meines Ferngesteuerten Auto beim Einschalten, nur macht es hier nichts aus, da keine mechanische Endlage in der Mittelstellung erreicht wird.
Kann man das vierhindern, indem ich den zuerst auf high oder low lege und dann erst als Servo freigebe???

Hat vielleicht noch jemand eine Idee, wie ich das verwendete kleine Conrad-Servo langsamer aber dennoch gleichmäßig laufen lassen kann?
Evtl. ein kleines Beispiel?

Viele Grüße

und schon mal danke für Eure Mithilfe

Sven


'-----------------------------------------------------------------------------------------
'name : Schuppentor_Servotiny13.bas
'copyright : (c) 2007 SZ
'purpose : Endlage über Potis einstellbar
' Ansteuerrung über PB1
'micro : TINY13
'Minimum : 35 for most small Conrad-Servos
'-----------------------------------------------------------------------------------------

$regfile = "attiny13.dat" ' specify the used micro
$crystal = 9600000 ' used crystal frequency
'$baud = 19200 ' use baud rate
'$sim

$hwstack = 32 ' default use 32 for the hardware stack
$swstack = 10 ' default use 10 for the SW stack
$framesize = 40 ' default use 40 for the frame space

Config Servos = 1 , Servo1 = Portb.0 , Reload = 10

'--------------------------Config AD - Wandler--------------------------------------
Config Adc = Single , Prescaler = Auto , Reference = Avcc
'For this chip you can use the additional param :
'Config Adc = Single , Prescaler = Auto, Reference = Internal
'The reference param may be :
'OFF : AREF, internal reference turned off
'AVCC : AVCC, with external capacitor at AREF pin
'INTERNAL : Internal 2.56 voltage reference with external capacitor ar AREF pin

Enable Interrupts 'Ist nötig
Config Portb.0 = Output 'Servoausgang
Config Pinb.1 = Input 'Auf/ZU
Config Pinb.2 = Input 'Jumper
Config Debounce = 20 'Tastenentprellung 20ms

'Interne Pullup Widerstände einschalten
Portb.1 = 1
Portb.2 = 1

Dim Minimum As Byte
Dim Maximum As Byte
Dim Spg_p1 As Word
Dim Sresult As Word
Dim Flag As Bit
'-----------------------------Sub Deklaration-------------------------------------
Declare Sub Poti_1
Declare Sub Poti_2

Start Adc

Flag = 0
Minimum = 35 'Rechter Anschlag
Maximum = 155 'Linker Anschlag

Do

Gosub Taster_up

Loop



End
'************************************************* ******************************

Taster_up:
'Debounce Pinb.1 , 1 , Pr 'try this for branching when high(1)
Debounce Pinb.1 , 1 , Aus_up , Sub 'Taster offen
Debounce Pinb.1 , 0 , Ein_up , Sub 'Taster gedrückt

Return
'************************************************* ******************************

'Unterprogramm Taste Up
Ein_up:
Gosub Poti_1
Return

'************************************************* ******************************

'Unterprogramm Taste Up
Aus_up:
Gosub Poti_2
Return

'************************************************* ******************************

Sub Poti_1

Spg_p1 = Getadc(2) 'Spannung an Poti

Sresult = Spg_p1 / 8
Sresult = Sresult + 35

If Sresult < 35 Then
Servo(1) = Minimum
End If

If Sresult = 35 Then
Servo(1) = Sresult
End If

If Sresult > 35 Then
Servo(1) = Sresult
End If

If Sresult > 155 Then
Servo(1) = Maximum
End If

End Sub

'************************************************* ******************************
Sub Poti_2

Spg_p1 = Getadc(3) 'Spannung an Poti

Sresult = Spg_p1 / 8
Sresult = Sresult + 35

If Sresult < 35 Then
Servo(1) = Minimum
End If

If Sresult = 35 Then
Servo(1) = Sresult
End If

If Sresult > 35 Then
Servo(1) = Sresult
End If

If Sresult > 155 Then
Servo(1) = Maximum
End If

End Sub

Hessibaby
05.02.2008, 13:58
Bei (analogen) Servos ist nun mal das Timing relativ wichtig. Alle 20ms muss ein Puls zwischen 1ms und 2ms kommen (1ms linker Anschlag, 1,5ms Mitte, 2ms rechter Anschlag). Wenn kein Signal anliegt, also dein ATiny noch am initialisieren ist und die Leitung zum Servo noch "in der Luft" hängt, kann es passieren dass das Servo zu einem Anschlag läuft, um danach in die gesollte Position zu laufen.
Wenn Du noch einen freien Ausgang hast, dann schalte das Servo, über einen Transistor, erst dann ein wenn alle Ports initialisiert sind.
Zu Deiner zweiten Frage: Zwei antiparallel geschaltete Dioden in Reihe zum Motor (im Servo) reduzieren die Spannung, am Motor, um 0,7V.
Das funktioniert sicher (selber ausprobiert).
Wenn Du es noch langsamer brauchst kannst Du es mit zwei Paaren versuchen.
Gruß aus der Modellbauecke an die Schiene

ACsenf
08.02.2008, 09:33
Bei (analogen) Servos ist nun mal das Timing relativ wichtig. Alle 20ms muss ein Puls zwischen 1ms und 2ms kommen (1ms linker Anschlag, 1,5ms Mitte, 2ms rechter Anschlag). Wenn kein Signal anliegt, also dein ATiny noch am initialisieren ist und die Leitung zum Servo noch "in der Luft" hängt, kann es passieren dass das Servo zu einem Anschlag läuft, um danach in die gesollte Position zu laufen.
Wenn Du noch einen freien Ausgang hast, dann schalte das Servo, über einen Transistor, erst dann ein wenn alle Ports initialisiert sind.
Zu Deiner zweiten Frage: Zwei antiparallel geschaltete Dioden in Reihe zum Motor (im Servo) reduzieren die Spannung, am Motor, um 0,7V.
Das funktioniert sicher (selber ausprobiert).
Wenn Du es noch langsamer brauchst kannst Du es mit zwei Paaren versuchen.
Gruß aus der Modellbauecke an die Schiene

Hallo!

Danke für den Tipp! Habe es auch mal getestet. Allerdings zuckelt das Servo dann total sobald ein Transistor in der Leitung hängt egal, ob in +5V oder der Masseleitung. Also absolut unbrauchbar.
Die Drehgeschwindigkeit verringert man durch Pausen zwischen den Schritten, nicht durch Dioden! Das bringt dann den selben Effekt wie die Flußspannung des Transistors.

Jetzt lasse ich es erstmal bei dem Einschaltzucken. Vielleicht gibt es ja noch eine Lösung.

Viele Grüße

Sven