Servos mit PCA9685 ansteuern

Hallo zusammen,

ich möchte Weichenantriebe mit Servos aufbauen und dazu den PCA9685 verwenden. Geht auch recht gut. Nun mein Problem:
Ich möchte in der Endlage die Impulse unterdrücken um die Servos zu schonen.
Ist es möglich die Ausgänge einzeln abzuschalten?

Gruß
Kalliy

Versuche mal setPWM(num, 0, 4096);

Ist 4096 ein gültiger 12 Bit wert?

uwefed:
Ist 4096 ein gültiger 12 Bit wert?

Natürlich nicht, aber in der Bibliothek finde ich:

// Special value for signal fully off.
setPWM(num, 0, 4096);

Daher habe ich das abgeleitet.

Danke agmue.
Fast hätte es geklappt. Es ist Output(num, 0, 4096);

@ uwefed

4096 trifft es nicht ganz. Es sind 4095.

Vielen Dank

Kally

Kally:
Fast hätte es geklappt. Es ist Output(num, 0, 4096);

Dann habe ich wohl in eine andere Programmbibliothek geschaut, leider hast Du Deine nicht benannt.

Es gibt auch setLEDOff(int ledNumber)

Hallo,

in Endlage abschalten ist gar keine gute Idee. Die Weichenzunge sollte immer leicht angedrückt bleiben, sonst kann der Zug entgleisen, wenn sich die Zunge beim überfahren verstellt. Die Servoposition kannste doch fein einstellen sodass die Zunge ohne viel Druck anliegt. Meinetwegen kannste noch die Pulswiederholrate runtersetzen. Aber ganz abschalten - niemals.

Hängt bei so einer Weiche nicht eine kleine Feder als Servosaver dazwischen? Wenn nicht, wär das doch eine gute Idee.

Doc_Arduino:
Hallo,

in Endlage abschalten ist gar keine gute Idee. Die Weichenzunge sollte immer leicht angedrückt bleiben, sonst kann der Zug entgleisen, wenn sich die Zunge beim überfahren verstellt. Die Servoposition kannste doch fein einstellen sodass die Zunge ohne viel Druck anliegt. Meinetwegen kannste noch die Pulswiederholrate runtersetzen. Aber ganz abschalten - niemals.

Die Selbsthaltekraft der Servos reicht durch die hohe Getriebeübersetzung dafür vollkommen aus.

MicroBahner:
Die Selbsthaltekraft der Servos reicht durch die hohe Getriebeübersetzung dafür vollkommen aus.

ich gehe da lieber auf Nummer sicher :wink:
Aber stimmt schon, die Selbsthaltekraft ist sehr hoch.

Die Selbsthaltekraft ist schon recht hoch, klar, je nach Servo. Aber wenn das Servo immer leicht die Weiche "drücken" soll, brummt es sehr gerne. Und wenn ich mich an meine Märklin Zeit vor Jahrzehneten richtig erinnere, wurde die Weiche von einem zweispuligen Elektromegneten gestellt, der eine Feder hatte und die Weiche mit leichtem Druck in ihrer Stellung hielt. Wenn nun ein Zug in Gegenrichtung fährt, und die Weichenzunge (heisst das so?) zu "fest" gegen das Gleis gedrückt wird, könnte doch das Rad einer langsamen, schwachen Lok stecken bleiben, oder gar entgleisen. Oder gar das Rad eines leichten Waggons im Schubbetriebs.
Oder ist das heute anders?

Hallo,

naja, dass kommt auch auf die Bauform der Weiche und Weichenzunge drauf an. Eine Weichenzunge sollte sich niemals hochstellen oder sowas, sondern einfach nur sauber anliegen. Bei den sonstigen Magnetantrieben gibts unzählig verschiedene Arten.

Ich glaube EIEspanol meinte, dass es Probleme geben könnte, wenn man die Weiche aufschneidet und die Zunge zu hart angedrückt wird. Das ist auch sicher ein Problem.
Servos werden eigentlich meistens eingesetzt, um die Weiche vorbildgerecht langsam umlaufen zu lassen. Ein Feder in der Weiche, die die Zunge 'schnappen' lässt ist da sowieso eher nicht das Richtige. Nur der Servo muss über einen Federdraht mit der Zunge verbunden sein. Ein solche Weiche sollte man sowieso nicht aufschneiden. Wenn man das machen will, bleibt man besser bei den althergebrachten Antrieben.

MicroBahner:
Nur der Servo muss über einen Federdraht mit der Zunge verbunden sein.

Das meinte ich. Im RC-Modellbau nennt man das Servosaver

p.S. Was ist Weiche „aufschneiden“?

ElEspanol:
p.S. Was ist Weiche „aufschneiden“?

Wenn ein Zug aus der Gegenrichtung - also der Verzweigungseite der Weiche - kommt, die Weiche aber nicht für diese Richtung eingestellt ist. Dann müssen die Spurkränze der Räder die anliegende Zunge zur Seite drücken - 'aufschneiden'. Ist die Zunge zu stark angedrückt, schaffen die Räder das nicht, und der Wagen entgleist. Ich denke, das ist das was Du beschrieben hast, nur nicht unter diesem Begriff.

Hallo,

muss nochmal nachfragen. Was habt ihr für Servos? Wenn ich mein analoges Conrad Servo RS-2 nur 3x einen Puls gleicher Länge gebe, dann ist nicht garantiert das er danach richtig steht. Mache ich 20 Wiederholungen passt es. 10 sind noch zu wenig. Dann dreht er beim komplett zurück über seine 1ms Position hinaus. Also Richtung kleiner 1ms Position.

Gehe ich richtig in der Annahme das ihr den Puls mehrfach rausgebt bevor ihr die Pulse stoppt?
mein einfacher Testcode:

const byte Servo1 = 29;
const byte w = 20;        // Puls Wiederholungen
unsigned int t = 1000;    // Pulslänge

void setup()  {
  pinMode(Servo1, OUTPUT);
}

void loop() {

  for (int i=0; i<w; i++) {
    Servos(t);
    delay(20);
  } 
  delay(2000);            // Pause zwischen Positionänderung
  t += 100;
  if (t>2000) t=1000;
  
} // loop Ende


void Servos(unsigned int zeit)
{ 
  digitalWrite(Servo1, HIGH);
  delayMicroseconds(zeit);
  digitalWrite(Servo1, LOW);
}

Abschalten darf man die Impuse erst, wenn das Servo seine Position erreicht hat und sich nicht mehr bewegt. In meiner Lib, die das Abschalten automatisch machen kann, wird der Impuls erst 1sec. nach Erreichen der Zielposition abgeschaltet. Das funktioniert zuverlässig.

Hallo,

okay, na dann muss das so sein. Ich dachte du hast vielleicht digitale Servos und musst das nur einmal ausgeben.
Danke.