ULN2803 Darlington array31. Oct '13

ULN2803 on kaheksast Darlington transistorist koosnev mikroskeem, mis võimaldab nii TTL (3.3V) kui ka CMOS (5V) pingetasemega loogika abil juhtida kaheksat kuni 50V 0.5A ahelat.

img/uln2803.jpg

ULN2803 mikroskeem

ULN2803 datasheet annab meile ka väljaviikude tähistused:

      +---\__/---+
 1B --| 1     18 |-- 1C
 2B --| 2     17 |-- 2C
 3B --| 3     16 |-- 3C
 4B --| 4     15 |-- 4C
 5B --| 5     14 |-- 5C
 6B --| 6     13 |-- 6C
 7B --| 7     12 |-- 7C
 8B --| 8     11 |-- 8C
GND --| 9     10 |-- COMM
      +----------+

Nimetatud dokumendist leiab ka mikroskeemis realiseeritud komponentide skeemi, kus B-C jala paarile vastab järgnev:

img/uln2803-representative-schematic-diagram.png

Nagu näha koosneb üks Darlington transistor kahest NPN-transistorist. Kui tavalise transistori juhtimiseks näiteks 3.3V pingenivooga oleks tarvis takisti vahele panna, siis käesoleva mikroskeemi puhul on 2.7kΩ takisti juba mikroskeemis realiseeritud. See tähendab seda, et mikrokontrolleri ning ULN2803 vahele pole tarvis takisteid lisada. Mikroskeemis realiseeritud takistid 7.2kΩ ning 3.0kΩ garanteerivad, et sisendi puudumisel on sisendi pingenivoo 0V ringis, mis tähendab et väljund on justkui välja lülitatud.

Skeemi koostamine

Kõige lihtsamas näites ühendame ULN2803 mikroskeemi Arduino ning ühe 10W RGB LED-i ehk üpris võimsa värvilise valgusdioodiga, mis koosneb kolmest jadamisi ühendatud punasest, kolmest jadamisi ühendatud rohelisest ning kolmest jadamisi ühendatud sinisest valgusdioodist:

img/10w-rgb-led.jpg

10W RGB LED

Järgnevas skeemis olevad takistid on vajalikud selleks, et LED-id läbi ei põleks:

layer 21012345678910111213text:0A0text:1A1text:2A2text:3A3text:4A4text:5A5text:66text:7A7text:8A8text:9A9text:10A10text:11A11text:12A12text:13A13text:14A14text:15A15text:2222text:2424text:2626text:2828text:3030text:3131text:3232text:3333text:3434text:3535text:3636text:3737text:3838text:3939text:4141text:4040text:4343text:4242text:4545text:4747text:4949text:5151text:4444text:4646text:5050text:4848text:5353text:5252element:C1package:C0603-ROUNDelement:C2package:C0603-ROUNDelement:C3package:C0603-ROUNDelement:C4package:C0603-ROUNDelement:C5package:C0603-ROUNDelement:C6package:C0603-ROUNDelement:C7package:C0603-ROUNDelement:C8package:C0603-ROUNDelement:C9package:C0603-ROUNDelement:C10package:C0603-ROUNDelement:C11package:C0603-ROUNDelement:C12package:C0603-ROUNDelement:C13package:C0603-ROUNDelement:C14package:C0603-ROUNDelement:C15package:C0603-ROUNDelement:F1package:L1812element:FD1package:FIDUCIA-MOUNTelement:FD2package:FIDUCIA-MOUNTelement:FD3package:FIDUCIA-MOUNTelement:FD4package:FIDUCIA-MOUNTelement:GROUNDpackage:SJelement:Ltext:LLelement:R1package:R0603-ROUNDelement:R2package:R0603-ROUNDelement:RN1package:CAT16element:RN2package:CAY16element:RN3package:CAY16element:RN4package:CAY16element:RN5package:CAT16element:RXtext:RXRXelement:TXtext:TXTXelement:Z1package:CT/CN0603element:Z2package:CT/CN0603layer 25text:ANALOG INANALOG INCOMMUNICATIONtext:ANALOG INPOWERAREFGNDTX0RX0RESET3V35Vtext:VINVINtext:GNDGNDtext:GNDGNDSDA 20SCL 21TX2 16RX2 17RX3 15text:TX3TX3 14RX1 19TX1 18text:MADE INMADE INtext:ITALYITALYPWMtext:5V5Vtext:GNDGNDtext:DIGITALDIGITALtext:MEGA 2560MEGAtext:M.Banzitext:D.Cuartiellestext:D.Mellistext:G.Martinotext:T.IgoeIOREFtext:SDAtext:SCLelement:C1package:C0603-ROUNDelement:C2package:C0603-ROUNDelement:C3package:C0603-ROUNDelement:C4package:C0603-ROUNDelement:C5package:C0603-ROUNDelement:C6package:C0603-ROUNDelement:C7package:C0603-ROUNDelement:C8package:C0603-ROUNDelement:C9package:C0603-ROUNDelement:C10package:C0603-ROUNDelement:C11package:C0603-ROUNDelement:C12package:C0603-ROUNDelement:C13package:C0603-ROUNDelement:C14package:C0603-ROUNDelement:C15package:C0603-ROUNDelement:D1package:SMBelement:D2package:MINIMELFelement:D3package:MINIMELFelement:F1package:L1812element:FD1package:FIDUCIA-MOUNTelement:FD2package:FIDUCIA-MOUNTelement:FD3package:FIDUCIA-MOUNTelement:FD4package:FIDUCIA-MOUNTelement:GROUNDpackage:SJelement:IC3package:TQFP100element:IC4package:MLF32element:IC6package:SOT23-DBVelement:IC7package:MSOP08element:Lpackage:CHIP-LED0805element:L1package:0805element:ONtext:ONONelement:R1package:R0603-ROUNDelement:R2package:R0603-ROUNDelement:RN1package:CAT16element:RN2package:CAY16element:RN3package:CAY16element:RN4package:CAY16element:RN5package:CAT16element:RXpackage:CHIP-LED0805element:T1package:SOT-23element:TXpackage:CHIP-LED0805element:XIOpackage:2X18text:XIOelement:Y1package:RESONATORelement:Y2package:QSelement:Z1package:CT/CN0603element:Z2package:CT/CN0603ULN2803AR+R-B+B-

RGB LED-i juhtimine ULN2803 abil

Elu teeb oluliselt lihtsamaks Arduino prototüüpimisplaadi (breadboard) ning vastavate ühendusjuhtmete (jumper wires) olemasolu. Käesoleva skeemi takistite väärtuseks osutusid katsetamise käigus 5.6Ω punase värvuse jaoks ning 3.3Ω sinise-rohelise värvuse jaoks:

img/uln2803-rgb-led.jpg

Skeem töös

Takisti väärtuste leidmine

Valgusdioodi jaoks sobiva takisti leidmine pole niisama lihtne, tuleb arvestada seda, et valgusdioodi liiga suur vool ei läbiks ning ta läbi ei põleks, samas liiga suur pingelang takistil tähendab seda, et protsentuaalselt suur osa energiast läheb raisku kuna takisti kasulikku tööd naguinii ei tee.

Käesoleva näite puhul takistite väärtuste leidmise eelduseks olid olid RGB LED-i dokumentatsioonist leitud näitajad:

  • Maksimaalne võimsus kõigi kolme värvuse peale 10W;

  • Pingelang punase (forward voltage) värvuse jaoks 7V kuni 8V;

  • Pingelang rohelise ning sisise värvuse jaoks 10V kuni 11V;

  • Iga värvi jaoks pidev maksimaalne vool (max forward current) 300mA;

  • Iga värvi jaoks hetkeline maksimaalne vool (peak pulse forward current) 450mA, näiteks pulsilaiusmodulatsiooni rakendades.

Täiendavaks eelduseks oli see, et maksimaalse võimsuse juures oleks punane-roheline-sinine toidetud nõnda, et moodustuks valge värvus. Arduino toitmiseks oli plaanitud 12V, kuna 5V puhul ei oleks piisavalt pinget, et käesoleva valgusdioodi ükski värvus süttiks. Tähele tuleks panna ka seda, et Darglinton transistorit läbides rakendub pingelang sõltuvalt voolust 1.1V kuni 1.6V (collector-emitter saturation voltage).

Järgnevalt paneme formaalselt kirja olemasolevad andmed - toitepinge, pingelang punast värvi valgusdioodil ning pingelang ULN2803 mikroskeemil:

\begin{equation*} U = 12V \Delta U_{diode} = 7V ... 8V \Delta U_{uln2803} = 1.1V ... 1.6V \end{equation*}

Tuletame meelde, et antud juhul moodustavad vooluringi toiteallikas, üks Darlington transistor ULN2803 mikroskeemis, punast värvi valgusdiood ning takisti. Teades pingelangu ULN2803 mikroskeemis ning punasel valgusdioodil, saame arvutada pingelangu takistil ning sealt edasi takisti väärtuse:

\begin{equation*} U = \Delta U_{diode} + \Delta U_{uln2803} + \Delta U_{resistor} \rightarrow \end{equation*}
\begin{equation*} \Delta U_{resistor} = U - \Delta U_{diode} - \Delta U_{uln2803} \end{equation*}
\begin{equation*} \Delta U_{resistor(min)} = U - \Delta U_{diode(max)} - \Delta U_{uln2803(max)} = 12V - 8V - 1.6V = 2.4V \end{equation*}
\begin{equation*} \Delta U_{resistor(max)} = U - \Delta U_{diode(min)} - \Delta U_{uln2803(min)} = 12V - 7V - 1.1V = 3.9V \end{equation*}
\begin{equation*} R_{resistor(min)} = \frac{\Delta U_{resistor(min)}}{I_{diode(peak)}} = \frac{2.4V}{450mA}= 5.3\Omega \end{equation*}
\begin{equation*} R_{resistor(max)} = \frac{\Delta U_{resistor(max)}}{I_{diode(max)}} = \frac{3.9V}{300mA}= 13.0\Omega \end{equation*}
\begin{equation*} R_{resistor} = 5.3\Omega ... 13.0\Omega \end{equation*}

Analoogselt leiame rohelise ning sinise värvuse jaoks takisti väärtuse, teades et pingelang selle värvuse puhul on 10V kuni 11V.

\begin{equation*} \Delta U_{diode} = 10V ... 11V \end{equation*}
\begin{equation*} \Delta U_{resistor(min)} = 12V - 11V - 1.6V = -0.6V \rightarrow takisti\ pole\ vajalik \end{equation*}
\begin{equation*} \Delta U_{resistor(max)} = 12V - 10V - 1.1V = 0.9V \end{equation*}
\begin{equation*} R_{resistor(max)} = \frac{\Delta U_{resistor(max)}}{I_{diode(max)}} = \frac{0.9V}{300mA}= 3.0\Omega \end{equation*}
\begin{equation*} R_{resistor} = pole\ vajalik ... 3.0\Omega \end{equation*}

Kui nüüd tähelepanelikult viimast arvutuskäiku lugeda, siis rohelise-sinise värvuse puhul peaks valgusdioodi enda ning Darlington transistori peale tekkima juba üle 12V pingelangu, kuid ilma takistita ühendades ilmneb hoopiski, et valgusdioodi läbiv vool on märgatavalt üle 450mA, seda selgitab asjaolu, et RGB valgusdioodi spetsifikatsioonis välja toodud numbrid on orienteeruvad ning sõltuvad konkreetsest isendist, toitepingest, kombineeritud komponentidest jne. Kõige mõistlikum viis on ikkagi pisut loominguliselt probleemile läheneda ning multimeetriga üle kontrollida, et ühte värvust läbiv vool ei ületaks 300mA.

Arvutuste tulemusena ilmnes, et punase värvuse jaoks oleks tarvis takistit vahemikus 5.3Ω kuni 13Ω ning rohelise-sinise jaoks 3Ω kuni 0Ω. Arvutuskäik annab lihtsalt takistuste vahemiku, mida proovima hakata, tähele tuleks panna ka seda, et elektroonikakauplusest ei saa suvalise väärtusega takisteid osta. Vahemikus 1Ω kuni 15Ω on reaalselt saada 1W võimsusega takisteid väärtusega: 1Ω, 1.2Ω, 1.5Ω, 2Ω, 2.2Ω, 2.7Ω, 3.3Ω, 3.9Ω, 4.7Ω, 5.6Ω, 6.8Ω, 8.2Ω.

// Pulsilausmodulatsiooni võimekusega jalad
int redPin = 11;
int greenPin = 10;
int bluePin = 3;

void setup() {};

void setHSV(unsigned int h, unsigned char s, unsigned char v)
{
    int f, p, q, t, r, g, b, i;
    if(s == 0) {
        r = g = b = v;
    } else {
        i = h / 43;
        f = (h - (i * 43)) * 6;
        p = (v * (255 - s)) >> 8;
        q = (v * (255 - ((s * f) >> 8))) >> 8;
        t = (v * (255 - ((s * (255 - f)) >> 8))) >> 8;
            switch( i ) {
                case 0:
                    r = v; g = t; b = p; break;
                case 1:
                    r = q; g = v; b = p; break;
                case 2:
                    r = p; g = v; b = t; break;
                case 3:
                    r = p; g = q; b = v; break;
                case 4:
                    r = t; g = p; b = v; break;
                default:
                    r = v; g = p; b = q; break;
        }
    }
    analogWrite(redPin, r);
    analogWrite(greenPin, g);
    analogWrite(bluePin, b);
}

void loop() {
    for(int hue = 0; hue < 255; hue++) {
        setHSV(hue, 255, 50);
        delay(20);
    }
}
Arduino Tiigriülikool Estonian IT College