Hallo Elektronikgemeinde Ich möchte über einen ATTINY85 über 2 pwm-Ausgänge und jeweils über einen MOSFET IRLML2502, LED's ansteuern. Leider bin ich blutiger Anfänger, was Elektronik angeht. Die angehängte Schaltung hab ich mir nach verschiedenen Vorlagen aus dem Netz ausgedacht ist aber sicherlich nicht vollständig. Meine Fragen dazu wären, 1. Kann die Schaltung so grundsätzlich funktionieren? 2. Hab ich die richtigen MOSFET's ausgesucht? Aber die wichtigste Frage wäre, was muss alles noch verbaut werden, damit die Schaltung bzw, die Bauteile geschützt sind, ich habe zB irgendwas gelesen von einen Gate-Widerstand, aber was verbaut man da. Die Schaltung wird über ein 12V-Netzteil gespeißt, reicht es die Spannungsregler so wie im Schaltplan anzusteuern, dass die LED's mit 9V und der ATTINY mit 5V versorgt werden. Die Leistungsangaben der LED's sind gemessene Werte, auf den Stripes steht lediglich 10V. Diese Spannung von 10V hatte ich angelegt und den Strom dann so wie es im Schaltplan steht gemessen. Ich würde die Stripes aber gerne nur mit max. 9V betreiben. Viele Fragen, aber ich hoffe ihr könnt mir den ein oder anderen Tipp geben, und lasst mich bitte am Leben, wie ich schon schrieb, bin ich Anfänger! Danke schon mal im voraus.
Wenn die LED Streifen Widerstände zur Strombegrenzung enthalten, dann kannst du das so machen. Aber nur dann. Du solltest die Abblock-Kondensatoren am Mikrocontroller und um die Spannungsregler herum nicht weglassen. Die sind nicht zur Dekoration vorgesehen, sondern haben eine wichtige Funktion.
Danke für die schnelle Antwort. Meinst du einen 0,33µ Keramikkond. zwischen IN und GND, und einen 0,1µ Kramikkondensator nochmal zwischen OUT und GND? Reicht das als Schutzbeschaltung für die Spannungsregler aus?
:
Bearbeitet durch User
Andreas V. schrieb: > irgendwas gelesen von einen Gate-Widerstand mach 33Ohm bis 100Ohm dazwischen und gut ist. Vom Prinzip her ist das Gate eine Kondensator und beim Umladen, abhängig vom Laststrom, können enorme Umladströme auftreten welche dann die Ausgänge in Mileidenschaft ziehen können. FET-Treiber mal in die Suchmaschine eingeben. > reicht es die > Spannungsregler so wie im Schaltplan anzusteuern, dass die LED's mit 9V > und der ATTINY mit 5V versorgt werden. Ja das ist i.O. da der µC maximal 5V verträgt. LED's haben ihre Durchbruchsspannung und können nur indirekt, mit Widerstand einfachste Lösung, andere Spannungen als die Durchbruchsspannung vertragen. > Die Leistungsangaben der LED's sind gemessene Werte, auf den Stripes > steht lediglich 10V. Diese Spannung von 10V hatte ich angelegt und den > Strom dann so wie es im Schaltplan steht gemessen. Ich würde die Stripes > aber gerne nur mit max. 9V betreiben. Mutig dies so zu tätigen, wenn du mal eine Namen der Stripes hättest könnte man effektiver deine Frage beantworten. Stripes ohne intgrierte Vorwidertsände oder mit ? Wenn "mit" reichen auch 9V aus sollte dann ganz leicht dunkler sein als an 10V Wenn ohne hast du Glück gehabt das die LED's nicht abgraucht sind siehe dazu https://www.mikrocontroller.net/articles/LED
Die Stripes hängen im Moment noch an einem PIC. Ich hatte an den Stripes mal die Eingangsspannung gemessen und die war max. 9V. Ich hab mal ein Bild von den Stripes angehängt.
Stefan F. schrieb: > Du solltest die Abblock-Kondensatoren am Mikrocontroller und um die > Spannungsregler herum nicht weglassen. Andreas V. schrieb: > Meinst du einen 0,33µ Keramikkond. zwischen IN und GND, und einen 0,1µ > Kramikkondensator nochmal zwischen OUT und GND? Halte dich an dabei an die Vorgaben aus den Datenblättern der jeweiligen Spannungsregler. Am Mikrocontroller sind 100nF üblich. > Reicht das als Schutzbeschaltung für die Spannungsregler aus? Mit "Schutz" hat das nichts zu tun. Es geht darum, eine stabile Arbeitsweise zu erreichen. Spannungsregler können ohne Kondensatoren so gründlich versagen, dass sie sogar Überspannung ausgeben! Andreas V. schrieb: > Ich hab mal ein > Bild von den Stripes angehängt. Sieht aus, als seien da Widerstände drauf.
So hab jetzt mal den Schaltplan soweit ergänzt, wäre echt nett wenn ihr da nochmal drüber schauen könntet. In einigen Schaltungen hab ich gesehen, dass an den Fet's noch ein Widerstand vom Gate nach GND hängt (bei mir R4, R5). Braucht man den und wie groß sollte dieser sein? Hab ich die richtigen Fet's ausgewählt? Da kenn ich mich überhaupt nicht aus. Das Datenblatt ist hier: https://www.infineon.com/dgdl/irlml2502pbf.pdf?fileId=5546d462533600a401535668048e2606 Bei den Spannungsreglern bin ich mir eigentlich sicher das es passt. Der 5V-Regler bringt 500mA https://www.mouser.de/datasheet/2/389/l78m-974157.pdf und der 9V-Regler soll 1,5A bringen, https://www.mouser.de/datasheet/2/389/l78-974043.pdf Ausserdem habe ich den Reset-Eingang des ATTINY über einen 10k Widerstand nach +12V gezogen, sollte doch auch so passen.
:
Bearbeitet durch User
Andreas V. schrieb: > Ausserdem habe ich den Reset-Eingang des ATTINY über einen 10k > Widerstand nach +12V gezogen, Du meinst sicher +5V...
Die stripes scheinen 2 LEDs in Reihe und dann an einer einfachen konstant Stromquelle zu beinhalten also kein Problem so wie du es machen willst. Die pull down Widerstände von gate nach gnd sind dazu da, das hat auf einen definierten Pegel (hier gnd) zu ziehen falls der Controller pin im hochohmigen Zustand ist wie zb bei der Initialisierung des Controllers. Hier wurde ich welche verbauen... Wert abhängig vom mosfest oder pi mal daumen etwas zwischen 10k und 100k
Hallo, hast du paar mehr Details zu der Schaltung und vorallem zu dem Code? Ich suche was, um 24V LED-Streifen mit "softstart" und "softstop" anzusteuern. Die Steifen sollen beim enschalten langsam hochdimmen und beim ausschalten langsam wieder runterdimmen. (so. ca. 1-2s). Was noch interessant wäre, is eine einstellbare maximale (End)-Helligkeit. Ich denke die Schaltung aus Andreas' post sollte das gut schaffen, oder? Kann mir jemand mt dem Code behilflich sein? Danke und Gruß Bulli
Wenn du mal ein wenig googelst, findest du genug Code dafür.
Bulli schrieb: > Kann mir jemand mt dem Code behilflich sein? Aber klar doch. Willst du auch einen Attiny85 benutzen? Wie genau sieht deine Schaltung aktuell aus? Hast du schon Code erstellt oder beginnen wir bei 0?
Der aktuelle Code sieht im Moment so aus (nicht getestet ob es tatsächlich geht), dazu brauche ich euch.
1 | int pwmPin = 0; // PWM Pin5 Attiny85 ; A0 |
2 | int buttonPin = 3; // Tastereingang an Pin 2 |
3 | int PotiPin= 2; // Das Potientiometer für die maximale Helligkeit wird an Pin7 (A1) eingelesen |
4 | |
5 | int myDirection = -1; // die Richtung, in die die LED gedimmt werden soll, <0 = ausdimmen, >0 andimmen |
6 | bool lastButtonState = false; // der Zustand des Buttons beim letzten Schleifendurchlauf |
7 | int brightness = 0; // anfängliche Helligkeit |
8 | int delayTime = 10; // steuert die Geschwindigkeit des Dimmens, je höher, desto langsamer |
9 | int maxhell; // Maximale Helligkeit (über Potentiometer eingestellt) |
10 | |
11 | void setup() { |
12 | pinMode(buttonPin,INPUT); |
13 | pinMode(pwmPin,OUTPUT); |
14 | pinMode(PotiPin, INPUT); |
15 | }
|
16 | |
17 | void loop() { |
18 | maxhell=analogRead(PotiPin)/ 4; |
19 | |
20 | bool myCurrentButtonState = digitalRead(buttonPin); // liest den aktuellen Zustand des Tasters aus |
21 | if ((lastButtonState!=myCurrentButtonState)&&(myCurrentButtonState==LOW)){ // wenn dieser HIGH ist, aber beim letzten Durchlauf nicht |
22 | myDirection = myDirection * (-1); // ändere Dimm-Richtung |
23 | }
|
24 | brightness = brightness + myDirection; // zähle den Wert je nach dem hoch oder runter |
25 | if (brightness> maxhell) brightness = maxhell; // obere Grenze des Dimmens ist der Wert "maxhell" |
26 | else if (brightness<0) brightness = 0; // untere Grenze des Dimmens = 0 |
27 | |
28 | analogWrite(pwmPin, brightness); // sende den Leuchtwert an die LED's |
29 | |
30 | lastButtonState=myCurrentButtonState; // merke dir den aktuellen Tasterzustand für den nächsten Durchlauf |
31 | delay(delayTime); |
32 | }
|
Im groben sieht die Ausgangsbeschaltung so aus, sorry dass ich mit Paint gezeichnet habe, aber mit eagle brauche ich noch länger ;-o
Bulli schrieb: > Im groben sieht die Ausgangsbeschaltung so aus, sorry dass ich mit Paint > gezeichnet habe, aber mit eagle brauche ich noch länger ;-o Ganz ehrlich: Für mit Paint gezeichnet sieht das super aus! ;) Zu deinem Programm: Das sieht soweit schon nicht verkehrt aus aber der ein und andere Schnitzer ist noch drin versteckt. Die Variable brightness soll, so nehme ich an, die Pulsbreite des PWM-Signals darstellen (IMO macht es nur so Sinn wenn ich mir die Kommentare in deinem Code anschaue). Jetzt betrachte ich mir diese Zeile:
1 | brightness = brightness + myDirection; |
und stelle mir vor, dass brightness in einem Durchlauf schon den maximalen Wert (0xff) erreicht hatte. Kannst du dir vorstellen was dann im nächsten Durchlauf geschieht? Dann geht deine LED aus. Überlege dir mal warum und überlege dir, wie du das verhindern kannst dass brightness außerhalb des zulässigen Bereiches kommen kann. Und dann noch etwas, das mir auffiel, was man aber entweder mit Software oder mit Hardware lösen kann: Du hast einen Taster verbaut aber dieser hat keinerlei Maßnahmen bzgl. Prellen, weder in Hardware noch in Software. Eine einfache Hardware-Lösung, die einfachste Lösung, ist es, parallel zum Taster einen Kondensator zu verbauen, z.B. einen 100nf. Alternativ kannst du den Taster auch in Software entprellen (heute üblich soweit ich das beurteilen kann). Wie das geht kannst du hier anschauen (Beispiel für Arduino-Umgebung): https://www.youtube.com/watch?v=E6mAWhm8J-0
M. K. schrieb: > Eine einfache > Hardware-Lösung, die einfachste Lösung, ist es, parallel zum Taster > einen Kondensator zu verbauen, z.B. einen 100nf. Recycle dafür den 100nF, der am Gate des MosFet hängt. Der hat dort nichts verloren... Dem kannst du dann auch gleich den 100Ω in Reihe schalten, um die Kontakte deines Tasters nicht über Gebühr zu belasten, auch als Recycling.
M. K. schrieb: > und stelle mir vor, dass brightness in einem Durchlauf schon den > maximalen Wert (0xff) erreicht hatte. Kannst du dir vorstellen was dann > im nächsten Durchlauf geschieht? Dann geht deine LED aus. Überlege dir > mal warum und überlege dir, wie du das verhindern kannst dass brightness > außerhalb des zulässigen Bereiches kommen kann. Eigentlich dachte ich, dass genau
1 | if (brightness> maxhell) brightness = maxhell; // obere Grenze des Dimmens ist der Wert "maxhell" |
2 | else if (brightness<0) brightness = 0; // untere Grenze des Dimmens = 0 |
das ganze abfängt. Wenn der Wert über 255 geht, dann schreibe ich die 255 drauf. Den Kondensator zur entprellung recycle ich,... danke hierfür.
Da hast du recht, Bully, ich hab das
1 | .../4; |
beim Poti Auslesen nicht gesehen gehabt. ;)
Hallo! Ich habe die Schaltung nochmal angepasst (und den Arduino-Code auch). Könnt ihr bitte mal drüber schauen? Zur gewünschten Funktion: Der LED-Streifen soll langsam hochdimmen, sobald entweder Netzspannung erkannt wird, oder der PIR-Melder Bewegung erkennt. Der Streifen soll runterdimmen, wenn die Netzspannung aus ist, und wenn der PIR-Melder keine Bewegung mehr erkennt. Die Eingangssignal sind keine "Taster-Signale", sondern jeweils dauernd anstehende Spannung (Schalter). Zur Erklärung was ich da zusammengefrickel habe: -Den 230V-Teil habe ich hier aus dem Forum. -Die Schmelzsicherung in der Masse-Seite des LED-Streifens habe ich aufgrund des einfacheren Platinenlayouts so eingesetzt, da war am meisten Platz. Nicht ganz perfekt, aber ich denke das geht trotzdem, oder? -Die Schmelzsicherung im Netzspannungsteil würde ich als Printsicherung ausführen. OK? - Den Ausgang des PIR-Sensors ziehe ich über den 10k auf Masse, da nicht sicher ist, ob der PIR-Sensor überhaupt angeschlossen wird (ich mache da eine Pfostenleiste zum optionalen Anschluss hin). Der Code sieht mittlerweile so aus:
1 | int LowPin = 3; // Low-Signal von 230V Schaltung an Hardware-Pin 2 (LOW_AKTIV) |
2 | int PirPin= 4; // High-Signal von PIR-Melder an Hardware-Pin 3 (HIGH_AKTIV) |
3 | int PotiPin= 2; // Das Potentiometer für die maximale Helligkeit wird an Hardware-Pin 7 eingelesen |
4 | int PwmPin = 0; // PWM-Ausgang zu Mosfet zur LED-Ansteuerung an Hardware-Pin5 |
5 | |
6 | int brightness = 0; // anfängliche Helligkeit |
7 | int delayTime = 10; // steuert die Geschwindigkeit des Dimmens, je höher, desto langsamer |
8 | int maxhell; // Maximale Helligkeit (über Potentiometer eingestellt) |
9 | int laststate; // Beleuchtung schon ein? 1=eingeschaltet |
10 | |
11 | |
12 | void setup() { |
13 | pinMode(LowPin,INPUT); |
14 | pinMode(PirPin,INPUT); |
15 | pinMode(PotiPin,INPUT); |
16 | pinMode(PwmPin,OUTPUT); |
17 | } |
18 | |
19 | void loop() { |
20 | //Auswertung "Maximale Helligkeit" |
21 | maxhell=analogRead(PotiPin)/ 4; |
22 | if (maxhell >= 255) { |
23 | maxhell = 255; |
24 | } |
25 | |
26 | //Eingangssignal beim ein- und ausschalten entprellen |
27 | if ((((digitalRead(PirPin)==HIGH)||(digitalRead(LowPin)==LOW))&&(laststate = 0))||(((digitalRead(PirPin)==LOW)&&(digitalRead(LowPin)==HIGH))&&(laststate = 1))){ |
28 | delay(50); |
29 | } |
30 | |
31 | //LED hochdimmen |
32 | if (((digitalRead(PirPin)==HIGH)||(digitalRead(LowPin)==LOW))&&(brightness<maxhell)){ |
33 | brightness = brightness + 1; |
34 | } |
35 | //LED runterdimmen |
36 | else if (((digitalRead(PirPin)==LOW)&&(digitalRead(LowPin)==HIGH))&&(brightness>0)){ |
37 | brightness = brightness - 1; |
38 | } |
39 | |
40 | //Analogausgang beschreiben |
41 | analogWrite(PwmPin, brightness); |
42 | |
43 | //Speichern ob Beleuchtung bereits ein ist |
44 | if (brightness > 0) { |
45 | laststate = 1; |
46 | } |
47 | else { |
48 | laststate = 0; |
49 | } |
50 | delay(delayTime);} |
Beitrag #6472286 wurde von einem Moderator gelöscht.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.