LED szalag RGBW PWM

A meglévő hardware eszközök fejlesztési lehetőségei, módosítások, illetve új eszközök bevezetése
Válasz küldése
ferenckrizsan
Újonc
Újonc
Hozzászólások: 12
Csatlakozott: 2018. február 19. hétfő, 17:15

LED szalag RGBW PWM

Hozzászólás Szerző: ferenckrizsan »

Egy megbízás alapján ismerősnek led szalagokat üzemeltem be lakásának díszítésére. Ezek többsége RGB és RGBW szalagok voltak.
Vezérlésükhöz az MI-Light termékeit használtam (távirányító és csoport vezérlők [FUT038]. Volt olyan szakasz ahol vonal erősítőt használtam volna, [FC-AMF-RGBW] de sehogy se sikerült. Ez a vonal erősítő csatornánként vagyis színenként optocsatoló és egy (szerintem) mosfetből áll. és a megfelelő ellenállásokból nomeg polaritásvédő diódából. Tehát az optó vezérli a mosfeteket és azok meg az újabb tápról a következő led szalag szakaszt így lesz belőle jelismétlő, erősítő. A gond az volt hogy szinte mindig fehér akart maradni az utána lévő (erősített) led szalag, azaz minden szín mindig világítani akart. Csak akkor nem ha jelentős különbség volt a pwm jelek kitöltésében azaz ami már alig kellett szín, az nagy nehezen lehalványodott. Én ezt annak tudtam be hogy 1,5-es MBCU kábelekkel voltak a ledek betáplálásai és a sok kábel hossz miatt annyi kapacitás adódott hogy a vonalerősítő mosfetjei már alig alig zártak le mivel az optók még nyitottak annyira. Megoldást a vonalerősítők helyett csoport vezérlőkkel oldottam meg amelyeket ugyanarra a távirányítóra és ugyanarra a csoportra programoztam. Viszont így lett nekem egy pár vonalerősítőm amit megkaptam ismerősömtől.
Ez volt az előzmény a fő témához.
Saját magamnál ugyanezen vonalerősítőt egy ARDUINO UNO-val szerettem volna vezérelni. pontosabban "analóg" azaz PWM jelével. Egyenlőre egy csatornával próbálkozva.
A gond az volt hogy a 0-255 ig érték elég aránytalanul befolyásolta a fényerőt a led szalagon. 0-10 ig nagyon begyorsult a fényerő változás.
az 1.es értéknél nem volt fényerő 2. érték meg már sokkal több volt mint valami derengés, aztán megint sokkal fényesebb. stb... aztán 12-től sokáig észrevehetetlen a fényváltozás.

Ezért második megoldásként gondoltam csinálok én PWM jelet a delay és a delayMicroseconds utasításokkal kísérleteztem.
void loop() {
digitalWrite(led,HIGH); // bekapcsolva
delay(20);
digitalWrite(led,LOW); // kikapcsolva
delayMicroseconds(20);
}
Nos ennél az értéknél tudtam a legkisebb fényerőt elérni de itt már egy kicsit vibrált. (50Hz körül vagyunk.
Lejjebb nem tudok menni mert delayMicroseconds(18); ig tud az uno
Sőt még látszólag véletlenszerűen pulzáltan felerősödtek a ledek fénye amit tán a többi futó megszakításnak tudható be gondolom.

De kíváncsi vagyok a véleményetekre hogy van ez.

Harmadik lehetőségként merült fel bennem a Adafruit 24-Channel 12-bit PWM LED Driver - SPI Interface - TLC5947
Megoldása de ott meg attól félek hogy a PWM 4MHz frekije túl magas lesz a sok vezetéken. Mer mindez nálam is a lakás díszvilágítása lenne sok méterben.

Tehát egyrészt ötleteket szeretnék egy olcsó megoldásra amivel egy arduino tudna LED szalagok fényerejét színét vezérelni. A derengő fényerőtől egyenletesen a teljes fényerőig. A végső cél pedig több csatornával színeket keverjek a lehető legfinomabban. A már meglévő vonalerősítők felhasználásával.
(Mert hogy sok méter led szalag sok teljesítmény)


Másrészt érdekelne a felmerülő furcsaságok tényleges okai.
Sajnos oszcilloszkópom nincs de még egy frekvenciamérőm se.
De ha kölcsön ad valaki akkor.....
(Minden típus amit írtam gyorsan megtalálható a googléval)
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10191
Csatlakozott: 2005. december 9. péntek, 7:00

Re: LED szalag RGBW PWM

Hozzászólás Szerző: Robert »

Szoftveres PWM-et SOHA!
Bármilyen INT vagy egyéb beesik - azonnal széthullik.

Az SPI-s vezérlő jó, mert HWből adja a PWM-t. De van ilyen IIC buszosban is (Szervi/PWM vezérlőként)
Ezek az Arduino 0...255 helyett 0...4096-ig mennek.
Fontos!
Arduino alatt a TIMER1-re épülő PWM az lehet 8, 9 vagy 10 bites felbontású is!


Oszcilloszkópod van:
- hangkártya
- poor man's oscilloscope (8 bites)
http://www.tavir.hu - a gazda :)
vargham
Chipgyilok
Hozzászólások: 308
Csatlakozott: 2014. január 8. szerda, 8:32

Re: LED szalag RGBW PWM

Hozzászólás Szerző: vargham »

A Timer1 16 bites.
A különálló PWM vezérlő praktikus. Egy halom csatornán tartja a buszon (SPI/I2C) egyszer megadott kitöltési tényezőt. Általában konfigurálható a frekvencia is.
ferenckrizsan
Újonc
Újonc
Hozzászólások: 12
Csatlakozott: 2018. február 19. hétfő, 17:15

Re: LED szalag RGBW PWM

Hozzászólás Szerző: ferenckrizsan »

Köszönöm az eddigi hozzászólásokat
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10191
Csatlakozott: 2005. december 9. péntek, 7:00

Re: LED szalag RGBW PWM

Hozzászólás Szerző: Robert »

A 9 vagy 10 bites felbontás már regiszterszinten piszkálja a chipet (azaz nem a kezdő szint:) ):
https://www.arduino.cc/en/Tutorial/SecretsOfArduinoPWM
Pl.

Kód: Egész kijelölése

pinMode(3, OUTPUT);
  pinMode(11, OUTPUT);
  TCCR2A = _BV(COM2A1) | _BV(COM2B1) | _BV(WGM21) | _BV(WGM20);
  TCCR2B = _BV(CS22);
  OCR2A = 180;
  OCR2B = 50;
http://www.tavir.hu - a gazda :)
vargham
Chipgyilok
Hozzászólások: 308
Csatlakozott: 2014. január 8. szerda, 8:32

Re: LED szalag RGBW PWM

Hozzászólás Szerző: vargham »

Azt írtad "A Timer1 16 bites."
Azt hogy kell elérni hogy a pwm ne csak 0-255 tehát 8 bites legyen?
60 nap alatt Arduino ban csak ezt találtam:
A mikrokontrollerek egy részében belső hardware alapú egység segítségével is előállítható az impulzusszélesség-moduláció. Ekkor a moduláció szintén 0-255 érték közt állítható.
Szerintem ez másokat is érdekelhet.
Datasheet 111. oldal:
http://ww1.microchip.com/downloads/en/D ... asheet.pdf
16-bit Timer/Counter1 with PWM

Ennek alapján itt egy megvalósítás:

Kód: Egész kijelölése

/* Configure digital pins 9 and 10 as 16-bit PWM outputs. */
void setupPWM16() {
    DDRB |= _BV(PB1) | _BV(PB2);        /* set pins as outputs */
    TCCR1A = _BV(COM1A1) | _BV(COM1B1)  /* non-inverting PWM */
        | _BV(WGM11);                   /* mode 14: fast PWM, TOP=ICR1 */
    TCCR1B = _BV(WGM13) | _BV(WGM12)
        | _BV(CS10);                    /* no prescaling */
    ICR1 = 0xffff;                      /* TOP counter value */
}

/* 16-bit version of analogWrite(). Works only on pins 9 and 10. */
void analogWrite16(uint8_t pin, uint16_t val)
{
    switch (pin) {
        case  9: OCR1A = val; break;
        case 10: OCR1B = val; break;
    }
}
Forrás:
https://arduino.stackexchange.com/quest ... resolution

16 MHz órajelnél maximum 244 Hz lehet így a PWM frekvencia. A felbontás csökkentésével lehet növelni a frekvenciát.
Avatar
winnerbt
Elektronbűvölő
Hozzászólások: 907
Csatlakozott: 2007. március 25. vasárnap, 6:00

Re: LED szalag RGBW PWM

Hozzászólás Szerző: winnerbt »

Eddigi tapasztalatok alapján az ilyen távoli PWM vezérléseknél:
- Kell a stabil, gyors felfutású vezérlőjel (lesarkított, már-már majdnem szinusz nem jó)
- 8 biten is lehet "derengőtől-100%-ig" jelet csinálni alig észrevehető ugrásokkal, (sajnos
2 timer kell hozzá, és össze kell szorozni a jeleket az alsó tartományban), de
jobb megoldás a 10-12-bites felbontás (inkább 12). Ha optocsatolós jelerősítőt használsz, akkor nem árt szkóp és kimérni a minimális kapcsolási időt. Amiket én láttam, abban egy opto hajtotta (jobb esetben egy tranzisztorral) a kapcsoló FET-et, ami aztán alacsony kitöltésnél be is állt szinte analóg nyitásra. Szóval vannak turpisságok ebben a témában is.
Válasz küldése