Pages: [1]   Go Down
Author Topic: Servo.h austricksen oder lieber anders?  (Read 303 times)
0 Members and 1 Guest are viewing this topic.
Dresden
Offline Offline
God Member
*****
Karma: 12
Posts: 691
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hallöchen.
Ich hab beschlossen, dass mein kleiner Segway ne Stütze bekommen soll.
Die möchte ich mit nem Servo betätigen- dazu sind die Dinger schliesslich perfekt.

Wo ich den rantüdele, ist prinzipiell egal aber- die Servo.h blockiert mir die PWM auf Pin9  beim Uno!
Und genau dort (und auf der 11 auch) brauche ich sie zwingend für die Fahrmotoren.
Hab auch schon versucht, die "softServo"-Bibliothek zu benutzen, die lässt sich aber gar nicht erst compilieren- veraltet?

Bevor ich jetzt dan halben Segay umbauen muss, stellt sich mir die Frage ob das Problem nicht irgendwie zu umgehen wäre?

Die Idee, das Servo beim fahren kurzerhand abzumelden mit detach() hatte ich schon, aber das gibt Startprobleme, da ja das Teil sich erst mal aufrichten muss, ehe die Stütze hochgeklappt werden kann.
Im Grunde braucht das Servo nur zwei Stellungen anfahren können: Stütze unten oder eben oben.
Logged

------------
Grüssle, Sly

Online Online
Edison Member
*
Karma: 28
Posts: 2110
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hi Sly,

kannst du Sketch oder deine komplette Pinbelegung posten? Gunther hatte sich mal eine kleine Funktion geschrieben, mit der sich der Servo immer näher dem eigentlich sollWert nähert.
Logged

Kein technischer Support über die Private Nachricht!

Forum Moderator
BZ (I)
Offline Offline
Brattain Member
*****
Karma: 248
Posts: 21172
+39 349 2158303
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Das PPM-Signal es Servo ist teilweise identisch mit einem PWM Signal hat aber eine höhere Frequenz (490 statt 50Hz).
Versuch mal ob der Servo mit dem PWM-Signal funktioniert. Du brauchst relativ kleine Werte ca 25 bis 52.
Alternativ nimmst Du einen anderen Controller (oder zB Server Platine von Pololu) und steuerst mit dem den Servo an. Die ansteuerung des Kontrollers kannst Du bei Selbstbau auch einfach mit einem Pin realisieren (L stütze unten H oben).
Grüße Uwe

« Last Edit: March 03, 2014, 09:35:31 am by uwefed » Logged

Offline Offline
Edison Member
*
Karma: 38
Posts: 1152
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Du kannst Servos auch Problemlos ohne die Servo.h ansteuern.

Servos erwarten ca. alle 20ms einen Impuls einer Länge von ca. 700µs bis 2400µs. Die Länge des Pulses bestimmt die Lage des Servoarmes.
die  20ms sind unkritisch. Wenn die Pulse seltener werden, reagieren die meisten Servos darauf, in dem sie langsamer werden.

du kannst also sowas machen:
Code:
if (millis() - lastpulse > 20){
  lastpulse = millis();
  noInterrupts();
  digitalWrite(ServoPin,HIGH); /
  delayMicroseconds(pulselength);
  digitalWrite(ServoPin,LOW);
  interrupts();
}
(Nach einer Idee von Jurs)

Das unschöne daran ist, dass du eben alle 20ms deinen Code mit delayMicroseconds() für ca. 2ms blockierst.
Wenn das für deinen Fall kein Problem ist, dann kann du es machen.
Wenn dein Ständer in beiden Positionen mechanisch eigenstabil ist, reicht es ja auch, den Servo nur zum Stellen anzusteuern, dann brauchst du keine Pulse mehr schicken.

Im Anhang ein Sketch mit einer Funktion, die die Umrechnung von Winkel in Pulse übernimmt, für die Ansteuerung von mehreren Servos. wenn du die Konstante "wievieleServos" auf 1 setzt, dann eben nur für Ein Servo.
 

* Servo_refresh.ino (2.13 KB - downloaded 11 times.)
Logged

Grüße
Gunther

Dresden
Offline Offline
God Member
*****
Karma: 12
Posts: 691
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Danke, das schau ich mir sofort an.
Uwes Methode funktioniert leider nicht: das Servo singt nur in verschiedenen Tonlagen.
Das das Servo dann nur Signale kriegt, wenn es sich bewegen muss, ist ok: in der abgesenkten Stellung ist die Stütze sowieso mechanisch blockert (durchs Eigengewicht), und angehoben: die wiegt nix, die bleibt auch so oben denke ich.

@sschultewolter: du hast recht- ich _könnte_ andere Pins für die Motorregelung benutzen, und das Problem damit einfach umschiffen. Aber dann müsst ich mir _noch_ nen neuen Stecker bauen, langsam überlege ich eh schon, ob ich mir nicht einfach ein Shield baue, was die gesamte Peripherie für den Segway enthält (bzw. die Verkabelungen) und das einfach aufstecke.
Damit könnte man manchem Zirkus aus dem Wege gehn. aber auch das funktioniert erst, wenn eine endgültige Belegung geklärt ist, momentan weiss ich noch nicht, wie weit ich die Spielereien treiben will, aufs Display z.B. warte ich ja noch.

Logged

------------
Grüssle, Sly

Offline Offline
Edison Member
*
Karma: 38
Posts: 1152
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

aufs Display z.B. warte ich ja noch.
Dann würde ich die Servo.h sowieso nicht nehmen. Ich habe den Eindruck, die verträgt sich nicht mit dem I2C bus.
Logged

Grüße
Gunther

Forum Moderator
BZ (I)
Offline Offline
Brattain Member
*****
Karma: 248
Posts: 21172
+39 349 2158303
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Paß auf daß die Servos wirklich stehen bleiben wo sie sind wenn sie keine Impulse mehr bekommen. So sicher ist das nicht.

Mechanisch blockeren wenn der Servo verucht den Ständer zu bewegen ist keine gute Idee.
Grüße Uwe
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 10
Probier's mal mit Gemütlichkeit...
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hallo Sly,

wenn Du das Servo nur in 2 Positionen steuern willst, dann nimm doch nen digital-Pin. Dahinter einen Servertester (Schaltpläne, feritig oder als Bausatz zuhauf im www) und ermittle empirisch welche Potiwerte Du für die beiden Stellungen brauchst. Bischen rechnen, 2 Widerstände in Reihe und einen überbrückst Du mit einem Transi (Basis über 1k Ohm oder so am Digital-Pin). Dann brauchst Du Dir keine Gedanken über PPM, PWM usw. mehr zu machen.

MfG   Mekanax
Logged

Dresden
Offline Offline
God Member
*****
Karma: 12
Posts: 691
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

1. das Beispiel funktioniert schon mal.
Inzwischen hab ich aber nen paar Geschichten umgebaut innen drin, daher hab ichs noch nicht in die eigentliche Software einbauen können- das kommt aber als nächstes.

2. ich weiss dass ich das Servo nicht die ganze Zeit unter Last halten kann bzw. sollte. Hab ich auch nicht vor, die Stütze ist so angeordnet, dass sich der RCWay nur recht locker drauf abstützt, dabei wird sie ein bisschen gegen nen Anschlag gedrückt-weiter gehts nicht. Die ist keineswegs dafür gedacht, das Ding stundenlang so zu parken (das geht, aber dann kann ich ihn auch ausschalten, auch dann hält die so), sondern soll eher ne Art Stromsparmodus sein: wenn ne Minute nicht egfahren wird, setzt das Teil sich auf der Stütze ab und die Balanceregelung wird abgeschalten.
Aus dieser Position sollte er auch alleine wieder starten können (kräftig genug sind die Antriebe allemal).
Wenn die Stütze hochgeklappt ist, wird das Servo mit 3Gramm belastet oder so- schwerer ist die nicht. Wenn sich das Ding wirklich verstellen sollte (manche Servos entwickeln ein Eigenleben wenn sie keine klaren Kommandos bekommen), kann ich immer noch "gelegentlich" mal die Position wieder schicken.
Momentan (ohne Display und RC) braucht das Programm für die Hauptschleife um die 3000µs, da ist also durchaus noch Luft.

3. Servotester wäre eine gute Idee nur: das Ding ist ziemlich voll inzwischen. Aber wenn ich das mit dem Shield durchziehen sollte (ist bisher weder beschlossen noch abgelehnt), könnt man den dadrauf packen, mal sehn, aber vorerst gehts ohne, denke ich.

Mal schauen, erstmal muss ich das Programm sowieso neu organisieren, um die "Lande-Routine" überhaupt einbauen zu können.
Logged

------------
Grüssle, Sly

Pages: [1]   Go Up
Jump to: