PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : [Gelöst] Hab Probleme mit dem Servo Mg995



robin
03.11.2008, 15:53
Hallo,

Ich hab hier 4 Stk von den dingern rumliegen und keiner will sich so bewegen wie er soll.

Ich habe meinen Servo wie folgt angeschlossen:
https://www.roboternetz.de/phpBB2/album_pic.php?pic_id=2199

Der Akku ist ein Racingpack aus dem Modellbau mit 7.2V und 3A.

Das komische ist, dass die billigen 5€ Servos vom "C" mit damit klar kommen und auch mit dem Programm, dass ich geschrieben hab, die funktionieren ohne Probleme.

Nur die mg995 wollen einfach nicht. wenn sie sich mal bewegen, dann bewegen sie sich zu einem der beiden enden (kann jetzt nicht Sagen, ob max oder min).

Mein Programm habe ich in assembler geschrieben. Es liest 8Bit werte über den ADC ein und gibt dann ein Signal von 0,6 -2,2 ms länge aus und wiederholt sich nach 19,2ms, was also passen sollte (kann das programm auch posten).

Testen kann ich die Signale leider nicht, da ich kein oszi hab.
Am Servo liegen laut meinem Messgerät 7,6V an und ich kann keinen Spannungseinbruch feststellen, is aber auch nur ein billiges Messgerät.

Hoffe ihr könnt mir helfen

mfg robin

MeckPommER
03.11.2008, 16:14
hallo robin,

- nur einen servo zur zeit testen, 3A sind nicht viel für diese servos
- ms verkürzen auf z.b. 15 ms
- programm posten
- auch einige einfache multimeter haben zumindest frequenzmessung, das kann schon eine nette hilfe sein. gibts schon für unter 40Euro
- auch ein soundkarten-oszi kann bei sowas enorm helfen und kostet so gut wie nichts. sollte man sich mal anschauen, grade wenn man mit servos zu tun hat

Daumendrückend

MeckPommER

robin
03.11.2008, 17:46
Hier ist der code:


Main:
rcall Berechnung
rcall Ausgabe
push A1
ldi A1,17
rcall WaitMs
pop A1
rjmp Main

;-----------------------------------------------
; UP zur ansteuerung der servos
;-----------------------------------------------
Ausgabe:
push A1
push A2
push B1
push B2
clr X1
ser A1
cli
ser B1
out Portd,B1
out Portb,A1
push B1
ldi B1,250
loopp: ldi B2,6
loop: dec B2
brne loop
dec B1
brne loopp
pop B1


Se1:
cp X1,var1
brne wait1
clr B1
subi A1,0b00000001
nop
rjmp Se2
wait1:
nop
nop
nop
Se2:
cp X1,var2
brne wait2
subi A1,0b00000010
nop
rjmp se3
wait2:
nop
nop
nop
Se3:
cp X1,var3
brne wait3
subi A1,0b00000100
nop
rjmp se4
wait3:
nop
nop
nop

Se4:
cp X1,var4
brne wait4
subi A1,0b00001000
nop
rjmp se5
wait4:
nop
nop
nop

Se5:
cp X1,var5
brne wait5
subi A1,0b00010000
nop
rjmp se6
wait5:
nop
nop
nop
Se6:
cp X1,var6
brne wait6
subi A1,0b00100000
nop
rjmp se7
wait6:
nop
nop
nop
Se7:
nop
out Portd,B1
out portb,A1
nop
ser A2
cp X1,A2
brne se8
sei
pop B2
pop B1
pop A2
pop A1
ret
se8:
inc X1
rjmp Se1


;-----------------------------------------------

waitMs: push A2
push B1
push B2
loop1: ldi r17,10
loop2: ldi r18,159
nop
nop
loop3: dec r18
nop
nop
brne loop3
dec r17
brne loop2
dec r16
brne loop1
pop B2
pop B1
pop A2
ret ;Rücksprung

Das Up Berechnung ist nur eine Abfrage des ADC Ports und speichert den Wert in var1 (servo1).

Ich verwende nen Mega168 und die Routine dauert 19,2ms, Kann aber recht schnell runtergedreht werden, werd ich auch mal testen.

edit: habs gad mit ner wait schleife mit 15 ms ausprobiert, will aber auch nicht.

mfg robin

robin
07.11.2008, 21:27
Hab das problem endlich behoben.

hab die initialisierung vergessen.

Hätt ich vlt auch früher drauf kommen können.... aber da ich nur mit analogen servos oder billigen servos arbeite, hab ich nie dran gedacht, dem servo minimal und maximal werte am anfang zu senden.

hätt mir des niemand sagen können?

mfg robin

MeckPommER
07.11.2008, 23:08
Interessant!

Was für eine Initialisierung führst du nun durch?

Die MG995 brauchen jedenfalls keine Initialisierung, vielleicht hat das, was du jetzt machst einen Nebeneffekt, der für die Lösung deines Problems verantwortlich ist.

Gruß MeckPommER

robin
08.11.2008, 10:23
hi,

ich hab doch auch keine ahnung, warum des jetzt funktioniert.

Och geb denen Servos zu begin einen 1ms impuls, dann einen 2 ms impuls, und dann kann ich sie ohne Probleme ansteuern.

Ich hab immer nur Analoge Servos verwendet und diese funktionierten immer auf anhieb.

In meiner Verzweiflung hab ich mir dann einfach gedacht, versuch ich des mal, da jedes mal, wenn ich nach dem MG995 gegoogled hab, irgentetwas von einem Motortreiber kam. Da ich ein bischen ahnung von Modellbau hab( hab ein RC Auto) und ma da auch die digitalen Motorregler initialisieren muss, hab ich mir einfach mal gedacht, versuch ich des mal. und siehe da, es klappt.

mfg robin