PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Gelöst: Servo defekt?



tfv
09.03.2008, 08:31
Mein Standard-Servomotor (universelles Standardservo für 9,95 von Robotikhardware) verhält sich plötzlich etwas seltsam, was kann denn da kaputt gehen?

Ich hatte schon mal ein kleines Ansteuerprogramm für den Servo mithilfe des RP6-ADC-Ausgangs geschrieben, das funktioniert hat. Nun funktioniert weder dieses Programm, noch ein ähnliches Programm auf dem Rn128Megafunk.

Zum Test habe ich, inspiriert von einem anderen Boardeintrag, ein kleines AVR-Oszi gebaut, weil ich erst dachte, die Servosignale würden nicht richtig funktionieren. Hab dazu einfach Servosignale über einen anderen ADC-Eingang wieder eingelesen (man kommt so auf Abtastraten von 0,2 ms). Hier kann ich ganz klar sehne, dass sich die Pulsweite verändern lässt, die Signalgeneration scheint also zu funktionieren.

Programm habe ich mal beigefügt.



'################################################# ##
'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

' ---------------Definitionen fuer Subprogramme----------
'Ports
Config Portf.0 = Output 'Motor
Config Portf.1 = Input
Config Servos = 1 , Servo1 = Portf.0 , Reload = 10
Config Adc = Single , Prescaler = Auto , Reference = Internal
Enable Interrupts

' ---------------------------------------------------

Dim I As Integer
Dim J As Integer
Dim K As Integer
Dim V(500) As Word
Dim U As Word

Wait 2

Print #2 , ""
Print #2 , "**** ****"
Print #2 , "**** Kommunikationscenter auf RN-Mega128Funk ****"
Print #2 , "**** ****"
Print #2 , ""

Print #2 , "Motor wird durchgefahren."

Servo(1) = 100
Start Adc

For I = 1 To 200
U = Getadc(0)
V(i) = U
Next
Stop Adc

For I = 1 To 20
For J = 1 To 10
K = I * 10
K = K + J
Print #2 , V(k) ; " ";
Next
Print #2 , " "
Next


Print #2 , "Neuer Test"

Servo(1) = 80
Start Adc

For I = 1 To 200
U = Getadc(0)
V(i) = U
Next
Stop Adc

For I = 1 To 20
For J = 1 To 10
K = I * 10
K = K + J
Print #2 , V(k) ; " ";
Next
Print #2 , " "
Next

Print #2, "Neuer Test"

Servo(1) = 60
Start Adc

For I = 1 To 200
U = Getadc(0)
V(i) = U
Next
Stop Adc

For I = 1 To 20
For J = 1 To 10
K = I * 10
K = K + J
Print #2 , V(k) ; " ";
Next
Print #2 , " "
Next
End



Der Servo selbst zuckt aber überhaupt nicht, trotzdem bewegt er sich aber in anderen Fällen, beim Ein-oder Ausschalten, mal ruckartig, mal dreht er langsam.

Kann da im Servo irgendeine Eingangselektronik abgeraucht sein? Wenn ja, in welchen Fällen macht die sowas?

Danke für alle Tips!

oberallgeier
09.03.2008, 10:59
Hi, tfv,

Du denkst sicher dran, dass der Servo eine eigene Energieversorgung braucht? Der Port eines Controllers bringt nicht genug Saft um den Servo zu bewegen! Die Schaltung könnte ungefähr so aussehen:


;
; Vcc(6V LNT) -----------------------------------------Vcc-Servo1
;
; Vcc -----------tiny13-Vcc
; |
; | tiny13-PB3=pin2----------------+---Signal-Servo1
; | |
; | + - - (poti1->ADC) - - +
; | |
; | tiny13-PB4--------+
; | V
; | +--------+
; +-------------------+ 25klin +----+
; +--------+ |
; |
; GND---------------------------------------+----------GND-Servo1

..sprich: eigene Leitung zum Servo. Der zieht eben mehr als die paar kümmerlichen mA, die der Controller maximal bereitstellt. Ich bin über diesen Fehler auch schon gestolpert, wie viele vor mir.

Der GND muss dann übrigens einheitlich sein. Aber das ist wohl alles klar. Oder?

tfv
09.03.2008, 18:53
@oberallgeier

Danke für den Hinweis! Ich glaube aber eher nicht, dass dies hier das Problem ist.
Zwar nutze ich die Spannungsversorgers, des Controllers, aber
* erstens hat das ja schon mal funktioniert
* zweitens hatte ich damals die Stromaufnahme gemessen, diese lag bei 100-200 mA im Dauerbetrieb, beim einmaligen ansteuern deutlich weniger, mit natürlich etwas höheren Einschaltströmen, das Board liefert aber angeblich 500 mA an der Stelle, an der ich abgreife
* drittens fährt der Motor ja manchmal unkontrolliert und
* viertens würde ich erwarten, dass bei zu starker Belastung zusätzlich auch der Controller selbst stottern/rücksetzen würde, was er aber nicht tut.

Ich werd jetzt mal einen weiteren Servo besorgen und probieren, ob der sich anders verhält, eine andere Analyseidee hab ich im Moment nicht mehr.

Was geht denn bei einem Servo kaputt, wenn was kaputtgeht?

oberallgeier
09.03.2008, 19:28
... Was geht denn bei einem Servo kaputt, wenn was kaputtgeht?Tut mir leid, da habe ich für eine Stellungnahme viel zu wenig Erfahrung. Meine Ser vos habe ich immer "gehackt" - umgebaut zu Minimotoren mit Getriebe (https://www.roboternetz.de/phpBB2/zeigebeitrag.php?t=36049&highlight=). Ser vos als Ser vo hatte ich eher übungshalber betrieben. Das war ganz sinnvoll als Programmierarbeit in Assembler und C, um P W M´s zu programmieren und deren Funktion, die ja sehr eng definiert ist, zu testen.

tfv
12.03.2008, 11:02
Lösung war: Der Servo war wirklich defekt. Ich hab einen zweiten Serve gekauft, der geht, den ersten habe ich mit einem Servotester getestet, da ging er nicht.