PWM Chaos mit Arduino und PCA9685

OP #7108919
Lesenswert?

Hallo,

ich will mehrere 12 V LED Streifen mit einem Arduino Dimmen. Da mir die 
PWM Pins des Arduinos nicht ausreichen habe ich mir das PCA9685 Board 
von Az-Delivery geholt 
(https://www.az-delivery.de/products/pca9685-servotreiber).
mit dem wollte ich dann MOSFETS ansteuern. Nun habe ich das Problem, 
dass ich nicht weiß wie ich das Projekt umsetzen kann. Wenn ich mit der 
Adafruit Libary versuche den ersten pin mit
1
pwm.setPWM(0, 4096, 0);       // turns pin fully on
2
delay(1000);
3
pwm.setPWM(0, 0, 4096);       // turns pin fully off
4
delay(1000);
zu schalten zeigt mein Multimeter zwischen dem gelben und dem roten Pin 
abwechselnd 3,9 und 4,9 V🤔 die LED geht auch nicht ganz aus. Zwischen 
dem gelben und dem schwarzen Pin wechselt die Spannung zwischen 1 und 0 
V...
Kann mir irgendjemand ansatzweise sagen was da abgeht oder wie ich mein 
Projekt umsetzen kann?

Liebe Grüße, Marcel.
Gast #7108930
Lesenswert?

Marcel V. schrieb:
> Kann mir irgendjemand ansatzweise sagen was da abgeht oder wie ich mein
> Projekt umsetzen kann?

Da das Board als Servotreiber beworben wird, könnte es sein, dass die 
Bibliothek auf die Ansteuerung von Servos mit ihrem relativ kleinen 
DC-Bereich ausgelegt ist. Bist du sicher, dass die den Bereich 0 bis 
100% abdeckt?
#7109401
Lesenswert?

Hallo,

sieht nach dieser Lib aus. Hätten wir das Erste schon einmal erraten. 
Die verwenden tatsächlich den Wert 4096 im Bsp., hmm, naja.

Jetzt müßte Marcel (TO) seinen Schaltplan zeigen. Der Eingangstext lässt 
zu viel Interpretationsspielraum zu zwischen Wunsch und was wirklich 
aktuell wie angeschlossen ist.
Gast #7109514
Lesenswert?

Veit D. schrieb:
> und was wirklich
> aktuell wie angeschlossen ist.

Zumindest macht ein Multimeter an PWM Pins erstmal wenig Sinn.

Als stolzer Besitzer eines UNO, eines solchen PCA9685 Boards und eines 
LA, konnte ich die Funktion bei mir sichtbar machen.
Damit kann ich die Kommentare in folgendem Code als Wahr bestätigen.
1
#include <Wire.h>
2
#include <Adafruit_PWMServoDriver.h>
3
Adafruit_PWMServoDriver pwm = Adafruit_PWMServoDriver();
4

5

6
void setup() 
7
{
8
  pwm.begin();
9
  pwm.setOscillatorFrequency(26300000); //  // experimentell angenähert
10
  pwm.setPWMFreq(1600); 
11
  Wire.setClock(400000);
12

13
  pwm.setPWM(0, 4096, 0);       // turns pin fully on
14
  pwm.setPWM(1, 0, 4096);       // turns pin fully off
15
  pwm.setPWM(2, 0, 2047);       // 50%
16
}
17

18
void loop() {}
OP #7109890
Lesenswert?

Moin Moin,

ja richtig, ich verwende die adafruit Libary für Servos etc, die ich im 
ersten Beitrag verlinkt habe. Ich habe das PCA Board an SCL, CLA, V+ und 
GND angeschlossen. Das funktioniert ja. erste Kuriosität: Ich schließe 
eine weiße LED an den roten und den Gelben Kanal des ersten Servo Ports 
an. (Wirlich kein Schaltplan nötig, einfach der gelbe und rote Kontakt 
vom ersten Servo Anschluss). Und was muss ich feststellen? Mit dem 
Beispielcode der libary, der den Kanal angeblich ganz aus und anschalten 
würde:
1
#include <Wire.h>
2
#include <Adafruit_PWMServoDriver.h>
3

4
Adafruit_PWMServoDriver pwm = Adafruit_PWMServoDriver();
5

6
void setup() {
7
  Serial.begin(9600);
8
  Serial.println("GPIO test!");
9

10
  pwm.begin();
11
  pwm.setPWMFreq(1000);
12

13
  Wire.setClock(400000);
14
}
15

16
void loop() {
17
    pwm.setPWM(0, 4096, 0);       // turns pin fully on
18
    delay(1000);
19
    pwm.setPWM(0, 0, 4096);       // turns pin fully off
20
    delay(1000);
21
}
Blinkt die LED zwar, jedoch glimmt sie auch im Aus Zustand ein 
bisschen...
Auch wenn Messgeräte vielleicht nix bringen beobachte ich ein Wechsel 
zwischen 3,9 und 4,9 V. Zweite Beobachtung: Schließe ich die LED 
zwischen Gelb und Schwarz anstatt Gelb und Rot passiert nichts. Ich 
tausche die LED gegen das Spannungsmessgerät und sehe wie zwischen Gelb 
und Rot jede sekunde einen Spannungswechsel. Aber diesmal zwischen 0 und 
1 V. Beide Wechsel funktonieren wie im Programm angegeben mit einem 
Delay von 1er Sekunde. Aber warun nicht einfach zwischen 0 und 5 V??😥 
Auch mit dem Servo Beispiel aus der Libary erziehle ich keine anderen 
Erdebnisse.

Hoffe es war diesmal genau genug, bei Fragen Fragen Fragen, Liebe Grüße 
und schönen Abend.
Gast #7109898
Lesenswert?

Marcel V. schrieb:
> Aber warum nicht einfach zwischen 0 und 5 V?

Vermutlich weil der Ausgang als LED Treiber konfiguriert ist, anstatt 
als Totem-Pole.

"The LED output driver is programmed to be either open-drain with a 25 
mA current sink capability at 5 V or totem pole with a 25 mA sink, 10 mA 
source capability at 5 "

https://www.nxp.com/docs/en/data-sheet/PCA9685.pdf

Die Funktion dazu ist setOutputMode(true)

https://github.com/adafruit/Adafruit-PWM-Servo-Driver-Library/blob/master/Adafruit_PWMServoDriver.cpp
Gast #7109976
Lesenswert?

Marcel V. schrieb:
> ja richtig, ich verwende die adafruit Libary für Servos etc, die ich im
> ersten Beitrag verlinkt habe.

Man achte auf die sprachliche Mehrdeutigkeit.
Das "die" im Relativsatz hast du auf die Servos bezogen, aber nicht auf 
die Library. Genau genommen hast du auch nicht auf irgendwelche Servos 
verlinkt, sondern auf eine Treiberkarte. Und wenn man sich auf der 
verlinkten Seite durch die ganze Blinkerei und Aufpopperei bis zum 
Library-Link durchgesucht hat, stellt man fest, dass in dem RAR-File 
vier verschiedene Libs enthalten sind.

Da ist man klug als wie zuvor und fragt sich: Welchen Code verwendest 
du?
Angehängte Dateien:
OP #7110039
Lesenswert?

Oh nein, bin ich so blöd 😁 hab ganz selbstverständlich vcc auf v+ 
gesteckt ohne einen Unterschied zu vermuten... Jetzt gehts un es geht 
super, ich hoffe der Beitrag hilft noch jemand weiter, ich verwende 
IRLZ44N MOSFETS für 12V LED.

Vielen dank an euch alle, ohne dieses Forum wär ich nicht mehr froh 
geworden :)

Liebe Grüße, Marcel

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren