Liste der Anhänge anzeigen (Anzahl: 1)
Ich verwende zunächst mal so was hier, da sieht man auch schon, wieviel ich probiert habe :)
.....Anhang 34147
Jetzt muss man trotzdem noch ein gutes Augenmaß anlegen. Seitdem ich Brille brauche, ist es manchmal etwas verzerrt :-$
Ich habe aber schon den Anspruch, dass der Servo die einzelnen 10°-Striche sauber erreicht, beim Durchprobieren. Also wenn ich dann im Programm meine Funktion/Methode mit 10, 20 30, 40 .... 80,90, .... 120,130, ....160,170,180° aufrufe.
Unten im Halbkreis der Schablone sieht man Werte, die ich einsetzen musste, um in der Software die Stellwinkel zu erreichen. Zum Beispiel einen Wert von 170 für einen Winkel von 165°. Wenn man die Abstände der Werte untereinander vergleicht, sieht man, dass die unterschiedlich sind.
MfG
Liste der Anhänge anzeigen (Anzahl: 2)
Hallo Moppi,
ich sitze auch grad am PCA9685.
Vorab: Ich benutze keine Bibliotheken sondern wühle mich grad selbst durch die Programmierung des Chips, daher kann ich natürlich nicht sagen wie deine Bibliotheken funktionieren,
aber ich habe einige Erfahrungen gesammelt und es werden stündlich mehr.
Das lohnt eventuell sogar einen eigenen Thread dafür aufzumachen, aber vorab kann ich folgende Information liefern,
die Dich evtl. weiterbringen:
Ganz entscheidend bei diesem Chip ist der eingestellte PreScale.
Der steht nach einem Reset auf dem Wert 30 dezimal.
Vermutlich wird der in der Bibliothek umgestelt ??? kein Ahnung
Im Chip selbst befindet sich ein Oszillator, der schwingt mit 25 MHz. (wie genau der ist, konnte ich dem Datenblatt NOCH nicht entlocken)
Der gemeinsame Clock für die 16 Zähler ist also 25.000.000 / 30 = 833333,33 Hz.
damit beträgt die Zeit für einen Zählerschritt 1,2 Mikrosekunden.
Das ist, wie gesagt die Standardeinstellung nach eine Power On.
Da die Zähler 12 Bit sind, haben wir eine Wiederholrate von 4096 * 1,2µs = 0,0049152 Sekunden = 202,45 Hz.
Es gibt Servos die können damit arbeiten, modernere Servos werden sogar bis 333 Hz Wiederholrate angegeben.
Der Standardservo (ehemals Analog) wird mit 50 Hz (20ms) angegeben.
Wiederholrate:
Der Chip lässt es zu die Wiederholrate zwischen 24 Hz to 1526 einzustellen.
Ob Du das in der Bibliothek einstellen kann weis ich nicht.
Ich vermute aber, dass der Prescale Wert auf 121 eingestellt wird, dann hat man eine Widerholrate von rund 50 Hz (20ms)
rechnerisch 50,0288166 also 19,98848ms
diesen Wert teilen wir durch 4096 (12 Bit) und haben den Zeitwert für einen Schritt: 4,88µs
Für einen 1500µs (mitte) Impuls benötigen wir demnach 307 Schritte
für 900µs 184 Schritte Servo links
für 2100µs 430 Schritte Servo rechts
Code:
25.000.000
Prescale = --------------------- -1
4096 * Wiederholrate
25.000.000
Wiederholrate = -------------------
4096 * (prescale+1)
Das habe ich auch so ausprobiert und das stimmt ganz exakt.
Natürlich kannst Du auch kleinere oder auch größere Werte angeben,
aber irgendwann läuft dein Servo entweder intern oder extern gegen einen Anschlag und im schlimmsten Falle blockert er, zieht Strom und raucht ab.
Die meisten Servos die ich kenne können auch unterhalb oder oberhalb der angegebenen Pulsbreiten gefahren werden,
das muss man dann ermitteln was er zulässt ohne zu blockieren. Immer Strommessung im Auge behalten :-)
Die ermittelten Werte werden, wie Du schon erwähnt hast, werden in das 2te Register geschrieben,
im ersten Register kann man eine 0 schreiben.
!! Achtung: wenn man die Wiederholrate ändern will (Prescale Wert)
Wenn man es direkt über die Register machen möchte, muss man einiges beachten,
das funktionierte bei mir nämlich nicht auf Anhieb.
Der Prescale(Vorteiler) befindet sich an der Aderesse 0xFE im Chip.
Man kann aber nicht so ohne weiteres darauf zugreifen, dazu muss der Chip erst in den Sleep Mode versetzt werden.
Dazu muss das Bit 4 im Mode 1 Register, welches sich an Adresse 0 im Chip befindet, auf "1" gesetzt werden. (Low power mode. Oscillator off)
Nun kann man auf das Prescale Register zugreifen.
!!! der kleinste Wert ist wohl 3 laut Datenblatt.
Ich habe es ausprobiert mit 0 1 2 3 da ändert sich dann nichts mehr.
PreScale: 121
Zählwerte: 184 für 900µs und 430 für 2100µs
Anhang 34148 Anhang 34149
Siro
PS: wie ich sehe bist Du aber schon weiter gekommen ;)
Theoretisch müsste der Winkel ja proportional zur Schrittweite sein...
Unterschiede bekommst Du wenn Du von links oder rechts deine Position anfährst, durch das Getriebespiel
Das habe ich bemerkt bei einer Blende für eine Beleuchtung.
Ich bin dann in der einen Richtung immer etwas weiter gefahren und dann wieder zurück, damit die Position immer von gleicher Richtung angefahren wird.