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.
Code:'################################################### '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!







Zitieren

Lesezeichen