PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Servoansteuerung Bsp ändern?!



Bammel
16.04.2009, 22:34
Hallo,
ich habe mal anfangen ein bischen mit servos rum zu experimentieren.

nun wollte ich mal das beispiel aus dem wiki nehmen.
https://www.roboternetz.de/wissen/index.php/Servoansteuerung
mein prob ist das ich nen atmega8 habe der einen takt von 3,6864 Mhz hat. nun muss ich ja die timer werte umrechnen.

meine frage ist wie? wäre ganz nett wenn mir jemand das mal erklären könnte. oder mal das generelle umrechnen erklären könnte. ich weis immer nicht wie man auf die werte bzw zeiten kommt.

mfg Bammel

radbruch
16.04.2009, 22:57
Dreisatz?


16 3,6864
------- = ---------
62535 x

36864 * 62535 / 160000 = 14408


Überschlägig knapp 1/4, das scheint zu passen. Drehbereich wäre dann ca. +-500.

Ich hoffe das stimmt so :)

Man könnte auch den Prescaler anpassen, aber das wäre mir zuviel Rechnerei für "ein bisschen mit servos rum zu experimentieren"

[edit]
Oje, das war nix, der Timer scheint im Overflow zu laufen. Dann muss man den Abstand der Werte zu 65536 verwenden, also so:

36864 * (65536-62535) /160000 = x

und der gesuchte Wert für Servomitte wäre dann:

65536-x

Jetzt sollte es aber passen :)

Bammel
16.04.2009, 23:08
danke da bin ich ja mal überhaupt nicht drauf gekommen... naj diese ganze geschwindigkeitsberechnungen mit den Hz bin ich net so fit drinne hab das ganze auhc nohc net so wirklich gepeilt

EDIT:
leider funktioniert das so nicht ;( (das war vor deinem edit) werde das andere moregn probierrne ich muss ins bett

EDIT Nr2: danke jetzt funktionierts, hatte mir keine ruhe gelassen. mich würde die geschichte mit dem prescaler aber auch nochmals interessieren.

Willa
17.04.2009, 07:58
Hi,
ich habe den Artikel mal ganz bisschen erweitert:
Es gibt das Tool rnAVR mit dem man sich die Rechnerei für Preload und Prescale sparen kann: rnAVR (https://www.roboternetz.de/phpBB2/dload.php?action=file&file_id=169)

sechsrad
17.04.2009, 09:43
So ein bisschen Mathe kann nicht schaden...., lernen die in der Schule nicht mehr.

Dreisatz...,wat is dat denn...

mfg

Thomas$
17.04.2009, 14:54
sechsrad das kann man nicht so pauschal sagen !!!!!!!!!!

Bammel
17.04.2009, 21:30
danke für die sehr klugen worte.. aber mathe kann ich wohl sehr gut...!

nur muss man erstmal drauf kommen und ganz so easy war es dann ja doch net. bzw reiner dreisatz brachte einem ja nicht weiter...!!!

PS.: <<< auf grund einer bitte entfernt>>>

schönen abend und danke an willa und radbruch

Bammel
19.04.2009, 16:26
hallo,
hat soweit funktioniert auch wenn ich die eigentlichen servowerte durch annäherung herausbekommen habe.

habe nur ein problem und zwar nutze ich die mg995 servos. nur kann ich diesem um max. 180grad bewegen. alle werte die drüber gehen würden fährt der servos nur bis zu den 180grad werten normal an danach nur sehr langsam .. esseiden ich wähle einen extrem hohen wert dann schläg der servo aber mit voller geschwindigkeit an den endanschlag dieses sollte ja vermieden werden. weis da jemadn eine lösung?

code sieht nun so aus:

$regfile = "m8def.dat"
$crystal = 3686400
$baud = 19200
$framesize = 64
$swstack = 64
$hwstack = 64
Config Timer1 = Timer , Prescale = 1 'timer für servos
Enable Timer1
Timer1 = 56320
Config Portb = Output
Portb.0 = 0 'hier hängt servo1
Portb.1 = 0 'hier hängt servo2
Portb.2 = 0 'hier hängt servo3
Portb.3 = 0 'hier hängt servo4

On Timer1 Servoirq 'servo

Enable Interrupts

Dim Kanal As Byte
Dim Servo(4) As Word 'links: 63200, mitte 60000, rechts 56800
Do
Servo(1) = 63200 'mitte
Servo(2) = 60000
Servo(3) = 56800
Servo(4) = 60000
Wait 1
Servo(1) = 60000 'mitte
Servo(2) = 56800
Servo(3) = 63200
Servo(4) = 60000
Wait 1
Servo(1) = 56800 'mitte
Servo(2) = 63200
Servo(3) = 60000
Servo(4) = 60000
Wait 1

Loop

Servoirq:
If Kanal = 0 Then
If Portb.0 = 0 Then 'wenn port low
Timer1 = Servo(1) 'dann timer auf entsprechende verzögerung
Portb.0 = 1 'und port anschalten
Else 'das hier passiert erst bei dem darauf folgenden interrupt
Portb.0 = 0 'dann port wieder ausschalten
Incr Kanal 'und den nächsten kanal bearbeiten
End If
End If
If Kanal = 1 Then
If Portb.1 = 0 Then
Timer1 = Servo(2)
Portb.1 = 1
Else
Portb.1 = 0
Incr Kanal
End If
End If
If Kanal = 2 Then
If Portb.2 = 0 Then
Timer1 = Servo(3)
Portb.2 = 1
Else
Portb.2 = 0
Incr Kanal
End If
End If
If Kanal = 3 Then
If Portb.3 = 0 Then
Timer1 = Servo(4)
Portb.3 = 1
Else
Portb.3 = 0
Incr Kanal
End If
End If

If Kanal = 4 Then
Timer1 = 21300 '54016 eine pause von ca. 12ms bis zum nächsten interrupt. Bei guten Servos oder Brushlessreglern kann man hier bis auf 65530 gehen ==> ansteuerfrequenz von ~ 200Hz
Kanal = 0
End If
Return
End

radbruch
19.04.2009, 17:45
Hallo

Ich kenne die mg995er-Servos (von TowerPro?) nicht persönlich. Nach kurzer Suche bin ich auch nirgends auf einen Angabe des Drehbereichs gestossen (wohl aber auf viele unterschiedliche Angaben zum Drehmoment ;). Daraus schliesse ich: Der Drehbereich für Servos ist normalerweise ca. 180 Grad (meist etwas mehr). Wenn nirgends erwähnt wird das dieses Servo deutlich weiter drehen kann, was ja eine bessere Positionierung am Markt wäre, dann würde auch damit geworben werden. Also sind 180° für dieses Servo normal. Achtung! Wiederholtes Anschlagen am Anschlag kann das Servo zerstören!

Die meisten Fundstellen hier im RN-Forum verknüpfen die MG995er mit MeckPommER (https://www.roboternetz.de/phpBB2/profile.php?mode=viewprofile&u=29698) weil er sie in seinem Marvin einsetzt:

https://www.roboternetz.de/phpBB2/zeigebeitrag.php?t=37615

Schreib ihm doch mal 'ne PN.

Gruß

mic

Bammel
19.04.2009, 19:26
ja hatte ihm schon vor dem kauf angeschrieben. werde es auch nochmal tun. von seinem projekt hatte ich auch die servos "entdeckt". da es auch mein traum ist so einen hexa auf die beine zu stellen wollte ihc mihc mla langsam ran waagen servos anzusteuern und ggf. den die servo experiment-ühase vorbei ist mal ein bain aufbauen um dnan mal die inverse kinematik versuchen zu können.

PS: das mit dem anschlag erzählt meckprommer mir schon. da ich @mom eh am testen bin fände ich es jetzt nicht weiter schlimm wenn mir ein servos kaput gehen sollte.

gruß bammel

Willa
19.04.2009, 20:11
Eigentlich haben alle Modellbauservos einen "garantierten" Drehbereich von ca. 120° manche Servos können bis 160°, ich habe ich noch keine gehabt die weiter drehen können. Über 180° macht für normalen Modellbau auch keinen Sinn, da sich der lineare Weg den das Servo macht dann ja wieder verkürzt (üblicherweise wird durch ein Gestänge die Drehbewegung in eine lineare Bewegung umgewandelt).

Bammel
19.04.2009, 20:25
okay da weis ich ja bescheid...! aber logisch klinkt das.. darüber habe ich nicht nachgedacht. habe selber nen bisl erfahrungen im auto modellsport