PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Servo stottert mit ATmega128funk Board



tfv
12.03.2008, 10: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!

radbruch
12.03.2008, 10:45
Hallo

Möglicherweise stört die serielle Schnittstelle, genauer der Interrupt derselben, die Impulslängen des Servos. Versuche es mal ohne Printausgaben.

Die Servos kann man auch direkt durchfahren lassen, dann muss man aber zwischen der Übergabe der (End-)Positionen länger warten (ist ja logisch, oder). Der Strom ist dabei nicht höher als bei den Einzelschritten, im Gegenteil, durch das wiederholte Starten/Stoppen ist er (eher theoretisch) etwas höher. Übel wirds erst bei echter Belastung oder beim Blockieren, dann sind's bei den 3€-Servos schon mal 0,5A! Der Spannungsregler des RP6 ist kurzschlussfest und hat einen thermische Überwachung, trotzdem ab und zu prüfen ob er sich erwärmt.



Gruß

mic