Forum: Mikrocontroller und Digitale Elektronik Servo-Ansteuerung via PCA9685 an IOWarrior 24


von Nick L. (Gast)


Lesenswert?

Hallo Leute,

ich arbeite derzeit an einem Schulprojekt bei dem ich mittels IOWarrior 
24 im I2C-Mode und dem PCA9685 mehrere Servos ansteuern muss.
Nun habe ich bereits die letzten Tage etwas herumprobiert und geschaut 
mit welchen notwendigen Schritten und Daten ich eine Servo ansteuern 
kann.
Dazu habe ich mich etwas in der Dokumentation zum PCA9685 belesen und 
gesehen, dass ich die Prescale vorher einmal setzen muss.
Was mir jetzt noch fehlt ist, mit welchen Daten ich eine Servo an die 
und die Stelle fahren kann.

Nehmen wir an ich möchte am LED0 vom PCA9685 die Servo betreiben, dann 
müsste ich laut Doku die Register 0x08 (LED0_OFF_LOW) und 0x09 
(LED_OFF_HIGH) mit Daten beschreiben und genau hier fängt es dann auch 
mit meinem Problem an.
Welche Daten muss ich nun genau an diese Register übergeben damit ich 
die Servo bewegen kann.
Sind noch vorherige Schritte oder Schritte nach dem schreiben in die 
Register notwendig, damit ich dies realisieren kann?

Ich würde mich um eine Hilfestellung dazu freuen!

Gruss Nick

von heax00 (Gast)


Lesenswert?

Hallo Nick... bin grad über deinen thread gestolpert... ist 
wahrscheinlich outdatet...

Um mit dem PCA9685 Servos anzusteuern, musst du den Prescaler 
folgendermassen setzen:

ca.20ms Takt = 50Hz -> interne Clock: 25000000
25000000  4096  50
das ganze -1 da der Zähler von 0-4095 läuft und dann den gerundeten 
Wert:

int(((25000000  4096  50) -1) + 0.5)

ACHTUNG: Der Prescaler lässt sich nur setzen, wenn MODE1 sleep gesetzt 
ist
0x00 -> 0x10
0xfe -> Prescaler
0x00 -> 0x01
sleep 5us
0x00 -> 0xa1 ( Danach einen Soft Reset ausführen )

der PCA9685 hat 2 Modi, wie er Daten in die Led Register übernimmt:
Default: STOP Alternativ: ACK
ich machs normalerweise so ( Servo 0 )
Reg: 0x06 -> 0x00, 0x00, 0x3d, 0x01 d.H. Ich schreibe immer ONL, ONH, 
OFFL, OFFH und sende dann ein STOP nach...

Ich hoffe du kannst damit was anfangen

von Nick Lubisch (Gast)


Lesenswert?

Hallo heax00,

vielen Dank für deine Antwort - helfen kann Sie mir aufjedenfall, wenn 
auch nur noch Privat :) Werde es aber an meine alte Schule weiterleiten, 
damit diese auch einen Nutzen haben!

Viele Grüße
Nick Lubisch

von Dominik F. (Firma: non) (sieds)


Lesenswert?

Hallo,

ich versuche im Moment mit dem PCA9685 zwei Servo anzusteuern.

0x00, 0x10 // Modus1 aktivieren
0xfe, 0xFE // Prescaler setzen, sprich Periode 50Hz bzw. 20ms
0x00, 0x01 // Was macht das?
sleep 5us
0x06 // Reg. für PWM1 Ausgang
0x00, 0x00 // 12Bit 0x0000 Power On, sprich schalte bei 0% ein
0x99, 0x01 // 12Bit 0x0199 Power Off, sprich schalte bei 10% ab
sleep 5us
0x07 // Reg. für PWM2 Ausgang
0x00, 0x00 // 12Bit 0x0000 Power On, sprich schalte bei 0% ein
0xCB, 0x00 // 12Bit 0x00CB Power Off, sprich schalte bei 5% ab
sleep 5us
0x00, 0xA1 // Danach einen Soft Reset um PWM zu starten


Für ein Neustellen des PWM benötige ich dann nur:
0x07 // Reg. für PWM2 Ausgang
0x00, 0x00 // 12Bit 0x0000 Power On, sprich schalte bei 0% ein
0x1E, 0x01 // 12Bit 0x011E Power Off, sprich schalte bei 7% ab

Hab ich das so richtig verstanden oder gibt es daran was auszusetzen?

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.