PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : problem mit der servo-ansteuerung



jagdfalke
15.06.2005, 20:04
Hallo,
Ich hab jetzt endlich ein funktionstüchtiges RNBFRA 1.1.
Also, um den Servo in Gang zu bringen hab ich folgendes gemacht:
-> rns1.zip runtergeladen
-> ISP Dongle and ISP2 gesteckt
-> Chip auf 2313det.dat und Programmer auf STK200/STK300 gestellt
-> in den Programmer und das .hex file aus der rns1.zip geladen
-> dann auf Write buffer to Flash Rom geklickt und rüber damit

-> dann das Dongle wieder auf ISP1 und den Programmcode der dabei ist kompiliert und auch rübergespielt.

-> Servo and den ersten Anschluss gestöpselt und jetzt kommt das Problem:

Der Servo bewegt sich immer in eine Position, bleibt dort stehn und dann hör ich noch minimales geruckel aus dem Servo. Aber er bleibt genau da stehn wo er war. Eigentlich sollte er sich doch erst alle Positionen (0-255) durchgehn und dann noch irgendwas machen. Tut er aber nicht.
Die Position in der er stehen bleibt is irgendwo in der Mitte von dem was er kann, also wenn ich den Servo abstecke und ihn in egal welche Richtung weiterbewege und dann wieder anschließe geht er immer wieder in die Position zurück, da kann ich machen was ich will. Es ist also nicht so, dass der das Ende seines Bewegungsbereichs erreicht hat.

Ich hab irgendwo etwas gelesen, dass man einen Jumper bei JP16 so stecken soll, dass der quer von RX nach TX steckt. Ich weiß weder was das bedeuten soll, noch reagiert der Servo dann anders.

Kann mir jemand damit helfen?

Achja:
Version 1.1
Hauptprozessor: ATMEGA32
Coprozessor: AT90S2313
Servo: normales Model von Conrad (einfach a servo mit nem 3-poligen anschluss)

PicNick
15.06.2005, 20:24
Es dürfte um den besagten Jumper gehen. Ich hab die 1.2 Karte, das ist aber, glaub ich, gleich.
da steht auf einer Seite 1, 2, 3 und auf der anderen INT2, RX, TX
Es gehören 3 u. RX verbunden , das geht ein bißchen schwer, weil es schräg ist, aber es geht.

jagdfalke
15.06.2005, 20:28
bei mir sieht es so aus:
INT2 1 | |
RX 2 | |
TX 3 | |

also muss ich so verbinden:

INT2 1 | |
RX 2 O |
TX 3 |O

richtig? allerdings ist es egal ob ich so oder gar nicht verbinde. der servo macht trotzdem nichts anderes.

PicNick
16.06.2005, 09:01
Vielleicht geht's um die Beschriftung. Schau dir den Plan an, es muß verbunden sein: TX vom Mega mit dem RX vom RNS1
Wenn du das Terminal anschließt, müssen die Kommandos dort auch sichtbar sein.
Umgekehrt, wenn du zum Testen RX waagrecht verbindest, kannst du mit dem Terminal auch Kommandos schicken

16.06.2005, 11:40
hier das selbe problem wie beim thread über schrittmotoren. ich hab kein Verbindungskabel zwischen RS232 und COM1.
Ich hab jetzt alle Verbindungsmöglichkeiten der Jumper durch und es tut sich nichts.
Bei den Anschlüssen für die Servos ist ja der äußere pin GND der mittlere +5V und der innere müsste ja dann für den puls sein, richtig? Vielleicht passt ja die Anornung der einzelnen Stecker am Servo selbst nicht ?! Wie kann ich den das herausfinden? (Hab kein Datenblatt zu dem Servo)

PicNick
16.06.2005, 12:02
Das RNS-Programm stellt die Servos in die Mittelposition.
Wenn also ein servo RICHTIG steckt, und du hast es vorher verdreht, muß es sofort in die Mittelstellung laufen.
Die Steckerbelegung von Servos ist eigentlich so genormt, wie du es beschrieben hast.

jagdfalke
16.06.2005, 12:51
das heißt ja praktisch, dass der Servotreiber richtig auf den Coprozessor übertragen wurde und der Coprozessor auch funktioniert. Es muss also an der Kommunikation zwischen Haupt- und Coprozessor liegen, richtig?

PicNick
16.06.2005, 13:08
Ich würde das auch so sehen, wenn der Hauptprozessor seine eigenen Prüfungen (Hello world) bestanden hat

jagdfalke
16.06.2005, 15:16
Also ich hab's schon in einen anderen thread gepostet aber hier passt es ja wesentlich besser her:

Die Servosteuerung klappt jetzt nachdem ich den Quarz aktiviert und das Fusebit JTAG auf disabled hab. Der Code zum testen ist der aus der datei rns1.zip: er sollte den servo im kompletten Bewegungsspektrum bewegen. Der Servo aber bewegt sich nur um ca. 90 Grad. Was is da faul?

PicNick
16.06.2005, 15:30
Schau mal ins testprogramm, ob es überhaupt von 0-255 geht

Andere Frage: stimmt die Mittelstellung ?

print "#s";chr(0);chr(0) links
print "#s";chr(0);chr(127) mitte
print "#s";chr(0);chr(255) rechts

jagdfalke
16.06.2005, 16:00
das ist der code aus dem testprogramm:


'
$regfile = "m32def.dat"


Declare Sub Rnb_servo(byval Servonummer As Byte , Byval Position As Byte)
Declare Sub Rnb_servob(byval Servonummer As Byte , Byval Position As Byte)


Dim I As Byte
Dim Pos As Byte

$crystal = 8000000 'Quarzfrequenz
$baud = 9600


Wiederhole:

For I = 1 To 255
Call Rnb_servo(1 , I)
Waitms 50
Next I

For I = 1 To 4
Pos = 1
Call Rnb_servo(1 , Pos)
Wait 2 'Warte 2 Sekundne
Pos = 255
Call Rnb_servo(1 , Pos)
Wait 2
Next I

Goto Wiederhole




Sub Rnb_servo(byval Servonummer As Byte , Byval Position As Byte)
Print "#s" ; Chr(servonummer) ; Chr(position)
End Sub

Sub Rnb_servob(byval Servonummer As Byte , Byval Position As Byte)
Open "comd.7:9600,8,n,1" For Output As #2
Print #2 , "#s" ; Chr(servonummer) ; Chr(position)
Close #2
End Sub

End


Es sollte also wirklich alle 256 Positionen durchgehen.

Ja die Mittelstellung stimmt, ziemlich genau (so genau wie ich es mit den Augen abschätzen kann).

PicNick
16.06.2005, 16:05
mmhh.
Es gibt Servos, die ein etwas anderes Impulsbereich verlangen. Kannst du eine anderes versuchen ?
Ich kann im moment nicht mit meinem Board vergleichen, aber ich werd' mal sehen, wie das bei mir ist.

jagdfalke
16.06.2005, 16:15
der einziger andere servo den ich hab kann von Natur aus nur etwas mehr als 90 Grad. Ich kann ihn auch manuell nicht weiter drehen.
Der andere aber kann manuell bis zu 180 Grad gedreht werden, dreht sich aber wenn er über das Board gesteuert wird nur genauso weit wie der andere.

PicNick
16.06.2005, 19:07
Ich hab das bei mir ausprobiert. Es scheint wirklich nur ca 100 Grad hin und her zu gehen. Ist mir nicht aufgefallen, weil's immer gereicht hat. Muß mal den Frank befragen, was man tun kann.