- 12V Akku mit 280 Ah bauen         
Ergebnis 1 bis 10 von 27

Thema: Adafruit_PWMServoDriver

Baum-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #9
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    05.11.2007
    Beiträge
    1.076
    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

    Klicke auf die Grafik für eine größere Ansicht

Name:	900us.jpg
Hits:	3
Größe:	68,5 KB
ID:	34148 Klicke auf die Grafik für eine größere Ansicht

Name:	2100us.jpg
Hits:	2
Größe:	68,1 KB
ID:	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.
    Geändert von Siro (03.05.2019 um 10:45 Uhr)

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

fchao-Sinus-Wechselrichter AliExpress