Ansteuerung Adafruit PWM 6 Kanal funktioniert nicht

2015-06-08
2022-05-07
  • joerg.esser - 2015-06-08

    Hallo zusammen,

    letzte Woche habe ich mir das Paket für den Raspi und auch die Entwicklungsumgebung herunter geladen und installiert. Der erste Einstieg hat mir sehr gut gefallen und fiel mir auch recht leicht, da ich Vorkenntnisse vom Arduino und aus der Simatic S5/S7 Welt mitbringe.

    Jetzt versuche ich an meinem Raspi Model 2 das Adafruit 16 Kanal PWM Modul per I²C anzusteuern. Leider komme ich mit dem Beispielprojekt nicht wirklich weiter.
    Die Adresse habe ich auf "40" gestellt. Ich habe am ersten Anschluss eine LED angeschlossen, welche aber ständig leuchtet.
    Hätte da jemand einen Ansatz für mich, wie ich dem Fehler auf die Schliche kommen kann?

    Wenn ich die Leitungen SDA, SCL, 5V und GND vom Raspi auf einen Arduino umstecke, funktioniert das PWM Modul einwandfrei.

    Danke

    Gruß Jörg

     
  • eschwellinger

    eschwellinger - 2015-06-08

    Hi Jörg,

    hast du das Beispiel:
    "c:\Users\deinWindowsUsername\CODESYS Control for Raspberry PI\2.1.1.0\SoftMotion Servo Example.project"
    getestet?
    Warum und wo musst du Adresse 40 einstellen?
    Mit diesem Projekt und dem ersten angeschlossenen Servo müsste das "out of the box" funktionieren.

    Grüße
    Edwin

     
  • joerg.esser - 2015-06-08

    Hallo Edwin,

    mit diesem Demo Projekt macht die angeschlossene LED, was das Programm vorgibt. Ich hatte dieses Beispiel nur nicht verwendet, da ich keinen Servo sondern nur eine LED damit ansteuern wollte, aber bei genauerem Nachdenken wird natürlich klar, dass damit trotzdem ein erster Funktionstest möglich ist.
    Jetzt muss ich nur noch aus dem Beispiel die grundsätzliche Ansteuerung "auslesen", damit ich auch verstehe, wie das funktioniert.
    Erst einmal vielen Dank für Deine schnelle Hilfe.

    edit Die Adresse "40" hatte ich aus dem Adafruit Beispielprojekt für den Arduino ausgelesen. Dort ist die Standard Adresse "0x40". Warum unter CODESYS die Adresse dann "0" ist, erschliesst sich mir noch nicht.

    Gruß Jörg

     
  • joerg.esser - 2015-06-09

    Hallo Edwin,

    ich habe versucht, aus dem Beispielprojekt auszulesen, wie die eingentliche Ansteuerung des PWM-Ausgangs funktioniert, bzw. wie der Befehl dafür aussieht.
    Ich habe zuerst die Aktion, in der eine Position angefahren wird, geöffnet. Dort wird ein Objekt aufgerufen (MC_MoveAbsolute). Wenn ich versuche, dieses Objekt zu öffnen, startet der Bibliotheksverwalter und zeigt mir nur leere Fenster.
    Meine Frage ist, wo ich die eigentliche Ansteuerung des PWM-Ausgangs sehen können müsste.
    Ich möchte mit dem PWM-Modul nur die Helligkeit von LED's einstellen können.
    Für einen Schubser in die richtige Richtung wäre ich dankbar.

    Gruß Jörg

     
  • eschwellinger

    eschwellinger - 2015-06-10

    Hallo Jörg,

    häng mal unterhalb des I2C Masters den Adafruit_PWM (also den ohne SoftMotion (für RC Servos))
    dann in PLC_PRG schreibst du

    Adafruit_PWM.setPWM(0,rValue);
    //oder alternativ
    Adafruit_PWM.setPWMRaw(0, uiValue);

    Grüße
    Edwin

    IMG: PWMRaw.jpg

    IMG: Pwm.jpg

     
  • joerg.esser - 2015-06-11

    Hallo Edwin,

    das war genau der Hinweis, den ich gebraucht habe Vielen Dank.

    Auf welchem Weg hätte ich das selber in Erfahrung bringen können, welche Methoden Adafruit_PWM mitbringt und wie diese genutzt werden können? Habe ich eine Dokumentation übersehen oder gibt die Hilfe etwas darüber preis?

    Viele Grüße
    Jörg

     
  • eschwellinger

    eschwellinger - 2015-06-11

    Hallo Joerg,

    gebe zu da muss man schon paar generelle Dinge wissen die aber CODESYS übergreifend immer gleich sind.
    Für die Slaves die man einhängt, wird ja implizit eine FB Instanz angelegt die dann automatisch vom System aufgerufen wird.
    Das ist eigentlich bei nahezu allen Feldbussen und auch I2C und SPI devices so...
    d.h den InstanzName findet man hier (Screenshot).
    Dann gehst du z.B in deinen POU (oder von mir aus auch im Watchfenster) und Schreibst Instanzname. nun zeigt Intellisense welche Methoden der FB hat.
    Das sollte immer zum Ziel führen... klar ne Dokumentationm findest du generell schon auch in der Bibliothek.

    Grüße
    Edwin

    IMG: InstanceName.jpg

     
  • alexander - 2022-05-07

    Vielen Dank auch von mir. Genau diese Info habe ich auch gesucht und nun in diesem knapp sieben Jahre alten Thread gefunden.

    Auch möchte das Modul nur zur Erzeugung einer PWM nutzen, ohne Rampe, Winkel oder sonstiges, was man evtl. für die Ansteurung von Servos braucht.

    Jetzt muss ich mir "nur" noch einen FB zusammensetzen, der die "RAW"-Werte an den PCA schickt aber das sollte machbar sein.
    In meinem Projekt, benötige ich nur den einen PCA9685 aber ich frage mich, wie Codesys zwischen verschiedenen PCA9685 unterscheiden würde, da die Aufrufe ja nur lauten "Adafruit_PWM.setPWMRaw(0, uiValue);" Würden die Kanäle einfach weiter hochgezählt oder ändert sich etwas im Text ausserhalb der Klammer. Sorry, falls die Frage zu naiv sein sollte.

     

    Last edit: alexander 2022-05-07

Log in to post a comment.