tfv
12.03.2008, 11:23
Ich habe grade eine kleinen (Conrad ES-05 JR) Servo zum Schwenken eines Sensors angebaut. Das PWM-Signal wird vom Atmega 128 geliefert, die Spannungsversorgung des Servos (5V) kommt direkt vom RP6-Roboter, von dem auch der Atmega versorgt wird. (Hatte das vorher auch am Board, hatte aber Angst, dass der Servo zu viel Strom zieht, der unten beschriebene Effekt tritt aber in beiden Fällen auf.)
Ich fahre den Servo ganz langsam durch und warte nach jedem Einzelschritt 50 ms. Trotzdem passiert immer wieder, dass beim Fahren in der Rückrichtung der Servo plötzlich bis zum Anschlag springt, dort bleibt und dabei über 100 mA Strom zieht (sonst sinds nur so ca 20 mA). Die Wahrscheinlichkeit dafür wird höher, wenn ich nur 20 ms warte. Der Servo fährt dabei viel weiter in den Anschlag, als ich ihn sonst fahre. Mechanische Hindernisse sind nicht im Spiel, montiert ist nur ein kleiner Sharp-Sensor.
Wahrscheinlich ist mir auf diese Art schon ein anderer Servo abgeraucht (im Endanschlag hängengeblieben und viel Strom gezogen).
Der Code ist eigentlich ganz unspektakulär.
'################################################# ##
'Servoansteuerung von RN 128
'
'Autor: Wag
'################################################# ######
' ---------------Definitionen ---------------------------
$regfile = "m128def.dat" ' Bei Mega 128 "
$framesize = 40
$swstack = 40
$hwstack = 40
$crystal = 16000000 'Quarzfrequenz
$baud = 19200 'Baudrate für Funkmodul
$baud1 = 9600 'Baudrate für MAX
Open "com2:" For Binary As #2 'Ausgabe über zweite serielle Schnittstelle (MAX)
Sound Portg.2 , 400 , 450 'BEEP bei RN-Mega128Funk
Sound Portg.2 , 400 , 250 'BEEP bei RN-Mega128Funk
Sound Portg.2 , 400 , 450 'BEEP bei RN-Mega128Funk
Config Serialout1 = Buffered , Size = 100 'Ausgabebuffer für normalse RS232
Enable Interrupts
' ---------------Definitionen fuer Subprogramme----------
'Ports
Config Portf.0 = Output 'Motor
' ---------------------------------------------------
Dim I As Integer
Dim J As Integer
Wait 2
Print #2 , ""
Print #2 , "**** ****"
Print #2 , "**** Kommunikationscenter auf RN-Mega128Funk ****"
Print #2 , "**** ****"
Print #2 , ""
Print #2 , "Motor wird durchgefahren."
Config Servos = 1 , Servo1 = Portf.0 , Reload = 10
Config Portf.0 = Output
Enable Interrupts
For I = 60 To 150
Servo(1) = I
Print #2 , I
Waitms 50
Next
For I = 150 To 60 Step -1
Servo(1) = I
Print #2 , I
Waitms 50
Next
End
Hat jemand eine Idee, woher dieses Stottern kommt?
Darf ich einen Servo durch einen einzigen Befehl von einer Seite zur anderen fahren, oder muss ich alle Zwischenpositionen anfahren, weil er sonst zu viel Strom zieht?
Danke!
Ich fahre den Servo ganz langsam durch und warte nach jedem Einzelschritt 50 ms. Trotzdem passiert immer wieder, dass beim Fahren in der Rückrichtung der Servo plötzlich bis zum Anschlag springt, dort bleibt und dabei über 100 mA Strom zieht (sonst sinds nur so ca 20 mA). Die Wahrscheinlichkeit dafür wird höher, wenn ich nur 20 ms warte. Der Servo fährt dabei viel weiter in den Anschlag, als ich ihn sonst fahre. Mechanische Hindernisse sind nicht im Spiel, montiert ist nur ein kleiner Sharp-Sensor.
Wahrscheinlich ist mir auf diese Art schon ein anderer Servo abgeraucht (im Endanschlag hängengeblieben und viel Strom gezogen).
Der Code ist eigentlich ganz unspektakulär.
'################################################# ##
'Servoansteuerung von RN 128
'
'Autor: Wag
'################################################# ######
' ---------------Definitionen ---------------------------
$regfile = "m128def.dat" ' Bei Mega 128 "
$framesize = 40
$swstack = 40
$hwstack = 40
$crystal = 16000000 'Quarzfrequenz
$baud = 19200 'Baudrate für Funkmodul
$baud1 = 9600 'Baudrate für MAX
Open "com2:" For Binary As #2 'Ausgabe über zweite serielle Schnittstelle (MAX)
Sound Portg.2 , 400 , 450 'BEEP bei RN-Mega128Funk
Sound Portg.2 , 400 , 250 'BEEP bei RN-Mega128Funk
Sound Portg.2 , 400 , 450 'BEEP bei RN-Mega128Funk
Config Serialout1 = Buffered , Size = 100 'Ausgabebuffer für normalse RS232
Enable Interrupts
' ---------------Definitionen fuer Subprogramme----------
'Ports
Config Portf.0 = Output 'Motor
' ---------------------------------------------------
Dim I As Integer
Dim J As Integer
Wait 2
Print #2 , ""
Print #2 , "**** ****"
Print #2 , "**** Kommunikationscenter auf RN-Mega128Funk ****"
Print #2 , "**** ****"
Print #2 , ""
Print #2 , "Motor wird durchgefahren."
Config Servos = 1 , Servo1 = Portf.0 , Reload = 10
Config Portf.0 = Output
Enable Interrupts
For I = 60 To 150
Servo(1) = I
Print #2 , I
Waitms 50
Next
For I = 150 To 60 Step -1
Servo(1) = I
Print #2 , I
Waitms 50
Next
End
Hat jemand eine Idee, woher dieses Stottern kommt?
Darf ich einen Servo durch einen einzigen Befehl von einer Seite zur anderen fahren, oder muss ich alle Zwischenpositionen anfahren, weil er sonst zu viel Strom zieht?
Danke!