Welcome to our new forum
All users of the legacy CODESYS Forums, please create a new account at account.codesys.com. But make sure to use the same E-Mail address as in the old Forum. Then your posts will be matched. Close

Servomotor mit Adafruit PCA9685 Servo-Shield

puma80801
2018-04-14
2018-08-21
  • puma80801 - 2018-04-14

    Hallo zusammen,

    ich habe eine hoffentlich einfache Frage zum i2c.example.

    Hab mir an meinen Raspy das PCA9685 Servo-Shield von Adafruit angebaut. Funktioniert soweit auch wenn ich auf der Konsole nach i2c-Geräten suche finde ich eines und wenn ich es in Codesys einhänge wird es auch grün.

    Problem an der ganzen Geschichte ist nur, dass sich mein Servo einfach nicht bewegen möchte. Den Code unten habe ich aus dem i2c-Beispiel entnommen und an meine Variablen angepasst. Die Adresse von meinem i2c-Gerät habe ich von 0 auf 40 geändert, da es mir so ja auf der Konsole angezeigt wird.

    Hier noch ein paar Screenshots.
    Kann mir bitte jemand sagen, woran es liegt, dass sich mein Servo nicht drehen möchte?

    Vielen Dank & Grüße
    Timo

    IMG: 3.JPG

    IMG: 2.JPG

    IMG: 1.JPG

     
  • eschwellinger

    eschwellinger - 2018-04-15

    Hi,
    das muss gehen mit der Default Einstellung des Beispiel Projekts. (also 0)

    Grüße
    Edwin

     
  • puma80801 - 2018-04-15

    Hallo Edwin,

    vielen lieben Dank für die schnelle Antwort!
    Leider klappt auch das nicht. Ich habe das i2cexample geladen und nichts verändert.
    Ich konnte ohne Fehler compilieren und übertragen.

    Mein Servo bewegt sich leider trotz allem keinen Millimeter.

    Hast du vielleicht noch einen Tipp an was es liegen könnte oder was ich kontrollieren kann?

    Warum muss ich die Adresse nicht verändern, wenn mir mit i2cdetect Adresse 40 angezeigt wird? Das habe ich nicht verstanden.

    IMG: 5.JPG

    IMG: 4.JPG

     
  • eschwellinger

    eschwellinger - 2018-04-16

    Hi,
    bei dem Adafruit Board Treiber wird wenn keine Adresse gesetzt wird der Default 16#40
    genommen.
    Sprich wenn du keine Adresse in dem Parameter setzt sind es die 0x40 und das muss dann mit deinem Board
    funktionieren.

    Grüße
    Edwin

    IMG: value.jpg

    IMG: 16#40.jpg

     
  • puma80801 - 2018-04-16

    Hallo Edwin,

    noch einmal danke schön!
    Es funktioniert leider immer noch nicht.

    Ich habe mich an das Tutorial bei Adafruit gehalten und das Beispiel zum testen der Library installiert und damit getestet

    Das Tutorial:
    https://learn.adafruit.com/adafruit-16-channel-servo-driver-with-raspberry-pi/using-the-adafruit-library

    Das Ergebnis:
    https://www.youtube.com/watch?v=1IYbup0aC3E

    Der Servo macht exakt was er soll. Nämlich lenken. Da Python geht. Bin ich mir sicher, dass meine Verdrahtung richtig ist.

    Unter Codesys öffne ich einfach nur das Beispiel und übertrage es auf den Raspberry. Aber es passiert einfach nichts. Ich bin gerade echt etwas frustriert.

    Als Adresse habe ich 0 eingetragen. Die Frequenz steht auf 50Hz. Im Gerätebaum ist alles Grün. Wenn ich den Servo auf einen anderen Kanal stecke bewegt er sich ein bisschen. Das war es aber auch schon.
    Ich benutze das aktuellste Codesys 3.5.12 SP2 und einen Raspberry Model B (also schon etwas älter) kann es daran liegen?

    Hast nicht noch irgend einen Tipp den ich probieren könnte?

    Lieben Dank & Grüße
    Timo

     
  • eschwellinger

    eschwellinger - 2018-04-16

    Hi,
    nimm bitte mal das andere Beispiel:

    "c:\Users\<deinwindowsusername>\CODESYS Control for Raspberry PI\3.5.12.10\Examples\SoftMotion Servo Example.project" </deinwindowsusername>

    Grüße
    Edwin

     
  • puma80801 - 2018-04-17

    Hallo Edwin,

    das Programm geht!
    Jetzt habe ich nur ein Problem: das ist nicht strukturierter Text und ich verstehe nicht was da gemacht wird!

    Kannst du bitte helfen?

    Lieben Dank & Grüße
    Timo

     
  • eschwellinger

    eschwellinger - 2018-04-27

    Hi,

    https://forum.codesys.com/viewtopic.php ... 212#p21212
    hier ist ein Beispiel basierend auf dem I2C ohne SoftMotion.
    Denke aber fast mit SoftMotion wäre zweckmäsig oder auch einfach weil du musst ja nur MC_Power aufrufen und dann
    mit MC_MoveAbs oder Relativ auf deine Stellung fahren...

    Grüße
    Edwin

     
  • JJoe - 2018-08-21

    Ich habe das gleiche Problem gehabt. Mit dieser Änderung funktioniert mein Programm:

    Adafruit_PWM.alrPWM[0] := 0.5 + 0.5*SIN(t);

     

Log in to post a comment.