PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Servo



Sven04
26.11.2005, 11:40
Ich habe diese Programm geschrieben, und daran drei verschiedene Conrad 5 Euro Servos angeschlossen, jedoch drehen alle drei Servos nach rechts und machen dann gar nichts mehr . Könnt ihr mir helfen hab keine Ahnung was sein könnte.


Mfg
Sven


Config Servos = 1 , Servo1 = Portb.0 , Reload = 10
Config Portb = Output
Servo(1) = 10

Do
Loop

Dim I As Byte
Print "Mittelstellung"
Servo(1) = 48
Wait 1

Servo(1) = 48 'servo nach ganz links fahren

Wait 1


Print "Rechtsdrehung"

For I = 48 To 172 Step 10
Servo(1) = I
Waitms 10


Next
Wait 1

Print "linksdrehung"
For I = 172 To 48 Step -10
Servo(1) = I
Waitms 10
Next

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


+ Codetags (PicNick)

PicNick
26.11.2005, 11:48
Du hast "I" als Byte definiert, da gibt's kein Vorzeichen. deshalb geht wohl die For schleife zum runterzählen nicht. (Step -10)

Sven04
26.11.2005, 12:07
Hi PicNick,

was würdest du sagen was am besten für I ist zum definieren, dass sich die servos wieder drehen:

PicNick
26.11.2005, 12:45
DIM i as integer
das sollte eigentlich klappen

Torsten_G
26.11.2005, 13:47
Hi,

das Bascom-Beispiel für die Servos verwendet auch ein Byte in den Zählschleifen, und warum sollte man von einem Byte nicht subtrahieren können?

Könnte das Verhalten möglicherweise etwas damit zu tun haben, dass Startwert, Endwert und Step nicht zusammenpassen und somit die Abbruchbedingung der For-Next-Schleife nicht erreicht wird?

48 + (n*10) wird nämlich niemals 172 und 172 - (n*10) nicht 48... [-X

Versuchs doch mal mit Step 1 bzw. Step-1 oder gleiche Start-, Step- und Endwert so aufeinander ab, dass die Sache genau aufgeht.

Viele Grüße

Torsten

Sven04
26.11.2005, 14:33
HI Leute,
danke für eure Hilfe, ich hab das Byte auf Integer geändert und als step 1 genommen, jedoch drehen die Servos, die ich an Portb.0 angeschlossen hab immer noch nach rechts und geht nicht weiter wieder nach links oder in die Mittelsatellung.
Habt ihr noch andere Ideen an was es liegen könnte.


Mfg
Sven

Torsten_G
26.11.2005, 14:49
Hi,

laufen denn die ganzen Schleifen abwechselnd durch oder hängt das Programm irgendwo?

Kommen die ganzen Print-Befehle raus?

Programmier doch mal ein "Print I" in jede Schleife und erhöhe waitms auf 500, damit es im Terminal nicht rast wie dolle.
Oder alternativ, toggle einen Port mit LED, damit Du weisst, ob die Schleife hängt oder nicht.

Du kannst Dir auch ein einfaches Testrogramm schreiben:


Do

Servo(1) = 108

wait 2

Servo(1) = 172

wait 2

Servo(1) = 108

wait 2

Servo(1)= 48

wait 2


loop


Und schließ doch erstmal nur EIN Servo an B.0 an, nicht gleich alle drei.

Grüße

Torsten

Edit:

Och nööö... ist ja nicht wahr, grade gesehen in Deinem geposteten Code:


...
Config Servos = 1 , Servo1 = Portb.0 , Reload = 10
Config Portb = Output


Servo(1) = 10

Do
Loop

Dim I As Byte
Print "Mittelstellung"
Servo(1) = 48
Wait 1
...

Sven04
26.11.2005, 14:58
HI Torsten,
ich hab immer nur einen an Portb.0 hab nur als getauscht ob vielleicht einer kaputt ist. Ich bekommen kein Printbefehl an´gezeigt, der servo dreht sich von links nach rechts und dann macht er nix mehr..

Torsten_G
26.11.2005, 15:01
Aha... s.o. ! :arrowu:

Sven04
26.11.2005, 15:21
Vielen Dank Leute,

nachdem ich do und loop entfernt hab funktioniert das Ganze jetzt.

sulu
27.11.2005, 17:18
Hab mal ne Frage:
Wie schließt man Servos eigentlich an einem normalen controllerboard (z.b rncontrol) an?
Ich vermute zwei Kabel an zwei verschiedene Pins und eins an GND?

bad-joker
27.11.2005, 17:23
Also die Servos haben ja drei Anschlüsse. Eines wird auf Masse angeschlossen, das zweite an die Versorgungsspannung und über das dritte gibst du den Sollwert vor. Der wird als PWM Signal geliefert und kommt (belegt) somit an einen Ausgang deines Controlles.
Tom
siehe auch
https://www.roboternetz.de/wissen/index.php/Servos

sulu
27.11.2005, 18:23
Hi also könnte ich vier (oder mehr) Servos so anschließen?
Müsste ich eigentlich.

bad-joker
27.11.2005, 18:28
Ähm ja so oder so ähnlich.
Wie gesagt ein Kabel auf Plus, ein Kabel auf Miuns und das verbleibende zum Controler. Das sollten dann aber PWM Ausgänge sein, falls nicht genügend PWM Ausgänge (=> Hardware PWM) vorhanden, kannst du dir das auch mit dem Contoler emulieren (=> Software PWM)
Tom

sulu
27.11.2005, 18:35
Ist nicht jeder Pin ein Pwm Ausgang?


Simon

bad-joker
27.11.2005, 18:41
NEIN, das kann man nicht so allgemein sagen. Das hängt von deinem Controller ab den du benutzt. Freie Pins können alles mögliche sein.
Tom

sulu
27.11.2005, 18:46
Steht sowas in der Beschreibung des jeweiligen Controllers?

bad-joker
27.11.2005, 18:47
Ja sicher, die Ein- und Ausgänge, also die Pinbelegung sind dort spezifiziert.
Tom

ICH_
28.11.2005, 12:43
Naja, man kann alle Pins zu PWM-Ausgängen machen, indem man wie schon gesagt das ganze durch eine Software macht, wie es z.B. in BASCOM schon als fertiger Befehl eingebaut ist!