PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Conrad 5Euro Servo einstellungen



Omit
26.10.2005, 22:18
Hi, ich hab hier nen Steckbrett mit Atmega8. Es funzt alles.
Nur bekomme ich keine richtigen Drehungen hin die werte sind total krum.
Hier mein Quelltext wie gesagt es funktioniert alles. Es ist der billig servo der marke Conrad für 5 Euro. Ich probiere hier schon über ne stunde rum vieleicht hat ja einer schon die lösung.


$regfile = "m8def.dat"
$crystal = 4000000

Config Portb = Output

Enable Interrupts

Config Servos = 1 , Servo1 = Portb.1 , Reload = 100

Do
Servo(1) = 4
Waitms 2000
Servo(1) = 18
Waitms 2000
Servo(1) = 29
Loop


Wenn die werte für schnellen linkslauf und den wert für die mittelstellung und ganz vieleicht noch den wert für schnellen rechtslauf hätte wäre ich sehr sehr dankbar wenn er sie mir sagen könnte.

Danke

Goblin
27.10.2005, 09:35
Ich probiere hier schon über ne stunde rum vieleicht hat ja einer schon die lösung.


eine stunde erst?? :)

ok, schauen wir uns den servo-befehl mal an....

ja, und da haben wir schon den fehler, denke ich:



Config Servos = 1 , Servo1 = Portb.1 , Reload = 100

mach mal aus der 100 ne 20. bei 2 servos ne 10, usw... 20/servoanzahl. wären in deinem fall 0,2 servos! ;)

dann die schleife....

die hilfedatei gibt folgendes beispiel:



Dim I As Byte
Do
For I = 0 To 100
Servo(1) = I
Waitms 1000
Next

For I = 200 To 0 Step -1
Servo(1) = I
Waitms 1000
Next
Loop
End


tja, probier die demo erstmal aus. ich vermute I ist die pulsweite, die der servo alle 'reload' millisekunden bekommt, in diesem fall also 20 (haben wir ja oben eingestellt). in was die allerdings jetzt angegeben wird.. aja, sagt die hilfe:


Servo(1) = 100 '1000 uS on
Servo(2) = 200 ' 2000 uS on


d.h. I ist die pulsweite in ms/10.
die pulsweiten bei nem servo liegen zwischen 1000 und 2000. also ist 1500 die mittelstellung. das heißt I = 150. man kann den servo allerdings idR. noch in extremere positionen fahren, > 2000 und < 1000. einfach ausprobieren wie weit es geht.

so, das alles beruht jetzt nicht auf meinen langjährigen erfahrungen, bin selber bascom noob, sondern auf dem lesen der hilfedatei. also wenns total falsch ist: sorry! ;)


edit: ach, dein "schneller rechtslauf": ein servo hat eine gewisse stellzeit, die ist in deinem fall auch auf der conrad-seite bei der servobeschreibung angegeben. der "schnellste rechtslauf" ist also in dieser zeit möglich. ich weiss nicht, ob die jetzt von der mittelstellung ausgehen, da fragst du jetzt lieber nen rc-modellbauer oder so. auf jeden fall: wenn du es langsamer willst, musst du über zwischenschritte gehen, so ähnlich wie es auch in der schleife gemacht ist. d.h.:


'schneller rechtslauf:
Servo(1)= 100 'servo ist links, pulsweite 1000 ms
Servo(1) = 200 'servo geht nach rechts in minimaler zeit = stellzeit

'langsamer rechtslauf:
Do
For I = 100 To 200 step + x
Servo(1) = I
Waitms y
Next
'wobei du über x und y noch die geschwindigkeit regeln kannst. x ist die
'anzahl der zwischenschritte
'(x=1 = ca. 100 zwischenschritte, x = 100 ca. 1 zwischenschritt)
'und y die zeit in ms, die zwischen den schritten gewartet wird


und auch hier wieder gilt: ich leg meine hand dafür ganz bestimmt ned in natriumpersulfat!

27.10.2005, 15:03
Jo brauchste auch nicht... behalt die Hand!

Jo danke werde mal nen bischen damit rumprobieren.

Goblin
27.10.2005, 15:32
JOJOJO! Dann berichte mal krass von deinen Erfolgen, alda! ;)

28.10.2005, 17:44
das man bei reload 20/Servoanzahl angeben soll lese ich zum erstenmal. Stimmt das? Woher hast du das?

01.11.2005, 20:54
das steht in der Bacom Hilfedatei

Roberto
04.11.2005, 07:58
Hallo

Habe mir heute auch so ein schönes Servo gekauft (ES-05 JR)

Habe mal so probiert:

'-------------Config Servo-----------------------
Config Servos = 1 , Servo1 = Portd.0 , Reload = 10
Config Portd = Output
Enable Interrupts

Do

Servo(1) = 38
Waitms 300

Servo(1) = 150
Waitms 300

Loop


End

Mit 300ms zirkuliert das Servo schön von rechts nach links.
Linker max Weg, ohne das es ansteht ist bei 38.
Rechts bei ca. 150

Sind eigentlich ganz toll diese Servos :-) (und billig)
[/quote]

felack
05.11.2005, 12:27
@Goblin:
Reload ist unabhängig von der Zahl der Servos und sollte immer auf 10 stehen. Steht auch so in der Hilfedatei. Der Wert 10 bedeutet, dass alle 10µs eine Interruptroutine gestartet wird und alle 20ms ein neuer Impuls beginnt, was die Standardimpulszeit für Fernsteuerservos ist. Wenn man den Wert ändert, ändern sich auch die Impulszeiten und der Servo macht, was er will. Durch die 10µS Interruptfolge können bei 1000 bis 2000 µS Impulslänge 100 Positionen angefahren werden.

felack

05.11.2005, 15:55
wann bekommt der fragesteller mal ein korrekte antwort für die servo.
es hagelt hier nur von gegenteiligen äusserungen.
ich zweifle bald an die fachliche kompetenz.

"das man bei reload 20/Servoanzahl angeben soll lese ich zum erstenmal. Stimmt das? Woher hast du das?"

in der bascomhilfe steht das schwarz auf weiss.
lesen sollte man die hilfe allemal.

05.11.2005, 16:00
ich habe reload auch mit 5 ausprobiert und kam dann auf ca 180 stellungswerte beim conradservo 5 euro. bei ca 195 kam der servo ins schleudern weil die zeiten vom bascom nicht mehr eingehalten werden konnten. in fastavr-basic und winavr-c habe ich ca 360 stellungswerte erreicht ohne das das servo schleuderte.
mfg psf

-=[Cassiopeia]=-
14.11.2005, 14:57
Falls es jemanden interessiert habe ich hier mal den Code wie ich meinen Conrad Servo ES-030 ansteuere, kann man leicht modifizieren und klärt evtl auch die eine oder andere Frage.Mit den Werten für den Links-Rechts,oder Mittenanschlag muss man bei einem anderem Modell u.U. noch etwas experimentieren.

Prost



Config Servos = 1 , Servo1 = Porta.0 , Reload = 10
Config Pina.0 = Output
Enable Interrupts

Servo(1) = 108
Print "Mittelstellung"
Wait 1

Dim I As Integer
Servo(1) = 48 'Servo nach ganz links fahren
Wait 1

Print "Rechtsdrehung" 'Servo dreht von ganz links nach ganz rechts
For I = 48 To 172 Step 10
Servo(1) = I
Waitms 10
Next

Wait 1

Print "Linksdrehung" ' Servo dreht von ganz rechts nach links zurück
For I = 172 To 48 Step -10
Servo(1) = I
Waitms 10
Next

Wait 1
Print "Mittelstellung" 'Servo stellt sich wieder mittig
Servo(1) = 108