Elektroda.pl
Elektroda.pl
X
Mitronik
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

Duży 7-segmentowy LED - który układ? ULN2804, UDN 2981, ULN2004 - wspólna anoda

kashue 26 Kwi 2013 13:38 8058 16
  • #1 26 Kwi 2013 13:38
    kashue
    Poziom 9  

    Witam.

    Który układ z wymienionych w temacie powinienem zastosować do zasilenia dużego wyświetlacza 7-segmentowego LED.
    Pobór prądu na każdym z segmentów to ok 30mA, napięcie zasilające 10V.
    Na układzie testowym użyłem małych wyświetlaczy LED, więc mogłem je zasilić bezpośrednio z rejestrów HCF4094 niestety ze względu na prąd duży wyświetlacz LED spaliłby mi układy. W związku z czym zwracam się do Was o pomoc w doborze odpowiedniego sterownika. takiego by wytrzymał 10V oraz prąd ciągły do 300mA łącznie, oraz by po podaniu stanu wysokiego bądź niskiego na wejście wyjście przepuszczałoby prąd do masy(wartość logiczną mogę zmienić w programie).
    Oczywiście mogę zmienić układ na multipleksowanie + kluczowanie tranzystorami, wyrzucając rejestry (11 sztuk) ale chciałem je zostawić a wizja dołączania 77 tranzystorów nie do końca mi odpowiada.
    Pozdrawiam

    0 16
  • Mitronik
  • #2 26 Kwi 2013 20:53
    kspro
    Poziom 27  

    UDN2981 się nie nadaje do wspólnej anody, bo zawiera drivery high side, czyli Darlingtony typu pnp, natomiast ULN 2004 i ULN2804 zawierają odpowiednio 7 i 8 Darlingtonów npn do 500mA każdy, więc się nadają. Z danych katalogowych wynika, że nawet jak wszystkie kanały są włączone to mogą przewodzić ponad 100mA każdy (obudowa DIP), więc przy 30mA nic im się nie stanie (oczywiście niezbędne są oporniki szeregowe wyznaczające prąd każdego drivera/segmentu).

    0
  • #3 27 Kwi 2013 13:59
    kashue
    Poziom 9  

    Dziękuję za sugestie.
    Niestety w lokalnym sklepie udało mi się dostać jedynie ULN2003. Ponieważ czas mnie goni muszę spróbować właśnie ich użyć, zobaczymy co się stanie.

    Pozdrawiam

    0
  • Mitronik
  • #4 27 Kwi 2013 23:43
    kspro
    Poziom 27  

    ULN2003 jest taki sam jak ULN2004 z wyjątkiem wartości oporników szeregowych w bazach Darlingtonów. ULN2003 jest przeznaczony do bezpośredniego sterowania z wyjść TTL i CMOS zasilanych z 5V, natomiast ULN2004 ma zwiększone wartości oporności i jest przeznaczony do sterowania z układów CMOS z zasilaniem od 6V do 15V.

    0
  • #5 27 Kwi 2013 23:48
    kashue
    Poziom 9  

    Układ działa z ULN2003, niestety pojawił mi się kolejny problem.
    Ponieważ docelowo będę zasilał 11 wyświetlaczy LED, więc nie chcę zasilać tego równocześnie więc planowałem użyć tranzystorów by załączać tylko jeden wyświetlacz na raz, niestety gdy na emiter daję 12V nie mogę wysterować z 5V z arduino. Bazę do arduino podłączam rezystorem 1k.
    Tranzystory które posiadam to BC327-25 PNP oraz BC337-25 NPN.

    Jest jakiś sprytny sposób by w prosty sposób móc sterować tymi tranzystorami?

    0
  • #6 28 Kwi 2013 00:04
    kspro
    Poziom 27  

    Nie rozumiem. Na początku pisałeś, że sterowałeś małe wyświetlacze wprost z HCF4094 ale duże wyświetlacze będą pracować z 30mA i że nie chcesz multipleksować. To o jakie tranzystory i o jakie 12V teraz chodzi? O co w ogóle chodzi z tym włączaniem jednego wyświetlacza na raz skoro nie ma multipleksu?

    0
  • #7 28 Kwi 2013 00:11
    kashue
    Poziom 9  

    Małe wyświetlacze były do testowania programu. Program napisałem wszystko działało.
    Zmiana czasu z keypada, melodie, alarmy, zmiana czasu alarmu, itp.
    Zabrałem się za realizację na docelowych elementach i pojawiły się problemy.
    Rzeczywiście dzięki ULN2003 miałem zrezygnować z multipleksowania, ale jak policzyłem 11 cyfr które w przypadku cyfry "8"pobierają ok 210 mA wyszło mi więcej niż zasilacz który akurat planowałem użyć. Więc przetestowałem dziś układ z multipleksowaniem na tranzystorach NPN używając tych małych wyświetlaczach LED, oczywiście wszystko działała. Problem pojawia się gdy chcę użyć tych dużych wyświetlaczy.
    Zasilam ich anody przez tranzystory, katody steruje przez ULN2003, niestety tranzystor ciągle trzyma nie mogę nim sterować za pomocą 5V z pinu arduino.

    Rzeczywiście z pierwszego postu wyszło masło-maślane, ale niestety projekt cały czas się zmienia.

    Pozdrawiam

    0
  • #8 28 Kwi 2013 01:16
    kspro
    Poziom 27  

    Domyślam się, że wydajność prądowa stabilizatora 5V dla dużych wyświetlaczy jest niewystarczająca, więc chcesz użyć napięcia 12V (niestabilizowanego). Nie rozumiem tylko dlaczego chcesz użyć multipleksu, chyba nie wydaje Ci się, że zaoszczędzisz w ten sposób dużo prądu? Owszem, wyświetlacze będą pracować w wypełnieniem 1/11 ale trzeba będzie to skompensować zwiększając odpowiednio prąd segmentów, inaczej jasność będzie niewystarczająca. Co prawda gdzieś czytałem, że ponoć właściwości oka są takie, że prąd nie będzie musiał być zwielokrotniony proporcjonalnie do ilości cyfr, czyli aż 11 razy, ale jednak dużo się w ten sposób nie zaoszczędzi. I tu pojawia się od razu problem, bo w multipleksie pojedynczy ULN2003 będzie sterował katodami segmentów nie na poziomie 30mA tylko dużo większym, pewnie za dużym w przypadku gdy wyświetlane są te same segmenty we wszystkich 11 cyfrach.

    Jeżeli chodzi o samo sterowanie tranzystorami PNP z emiterami dołączonymi do 12V kluczującymi anody to nie ma problemu, po prostu użyj ULN2003. Każdy tranzystor wyposaż w dwa oporniki: jeden (np. 10kΩ) pomiędzy bazą a emiterem, a drugi (np. 1kΩ) od bazy do wyjścia ULN2003. Tranzystor BC327-25 powinien być w sam raz, dobrze się nasyca, zwłaszcza że ma β=250, i wytrzymuje do 800mA (miejmy nadzieję, że to wystarczy).

    0
  • #9 28 Kwi 2013 01:27
    kashue
    Poziom 9  

    Dziękuję za odpowiedź.
    Podstawy teorii z elektroniki jakieś posiadam...ale gdy przyszło do zmierzenia się z praktyką to wychodzi jak bardzo jestem zielony.
    Lepiej idzie mi strona programowa.

    Multipleks sprawdziłem na tych małych wyświetlaczach, więc nie wiem jak będzie z jasnością tych dużych. Co do poboru prądu sprawdzałem te duże z wpiętym amperomierzem i choćbym nie wiem co robił nie przekroczyłem 30mA na segment.
    Poza tym oszczędność prądu nie ma znaczenia, chciałem wywarzać troszkę mniej ciepła, przez wszystkie układy, przez co zwiększyć ich żywotność.
    Dlaczego uważasz, że ULN2003 będzie sterował segmentami na poziomie wyższym niż 30mA?
    Przecież nigdy nie dojdzie do sytuacji, by we wszystkich cyfrach paliło się więcej niż 7 segmentów.
    Dziś już jest późno więc raczej nie będę szukał rezystorów, ale z samego rana sprawdzę Twoją propozycję co do podłączenia.
    Jeśli nie poradzę Sobie z tranzystorami to zakupie jakiś zasilacz do 4A i wrócę do 1 wersji projektu na HCF4094+ULN2003 do każdego.

    Chodzi Ci o coś takiego?
    Oczywiście wejścia ULN2003 są odpowiednio podłączone do arduino, i pin 8 ULN
    (którego dziwnym trafem nie ma na schematach) jest podłączony do masy.

    Duży 7-segmentowy LED - który układ? ULN2804, UDN 2981, ULN2004 - wspólna anoda

    0
  • #10 28 Kwi 2013 02:04
    kspro
    Poziom 27  

    Sądziłem, że sprawdzałeś jaki prąd na jeden segment jest potrzebny żeby osiągnąć żądaną jasność i wyszło Ci 30mA prądu stałego, a więc przy pracy statycznej. Skoro tak to przy pracy multipleksowej, kiedy współczynnik wypełnienia dla jednej cyfry wynosi 1/11, prąd segmentu powinien być zwiększony 11 razy (lub trochę mniej), a więc pod 300mA, a ponieważ ULN2003 nie pauzuje w multipleksie tak jak cyfra, to musiałby non-stop tyle przewodzić jeśli ten sam segment jest włączony na wszystkich cyfrach (a więc np. same jedynki - segmenty a i b).

    Nie bardzo rozumiem co to znaczy, że choćby nie wiem co to 30mA nie mogłeś przekroczyć. Czyżby te wyświetlacze miały segmenty złożone z więcej niż jednej struktury LED połączonych szeregowo i te 30mA to prąd płynący przy napięciu 12V bez żadnego opornika w szereg? Jeśli tak, to rzeczywiście nie ma problemu, bo wyświetlacze są bardzo jaskrawe i nie potrzebują dużo prądu, chociaż jakieś oporniki szeregowe i tak należałoby dać na wypadek gdyby napięcie 12V się z jakiegoś powodu zwiększyło (choćby po kilkadziesiąt omów w szereg z wyjściami ULN2003 sterującego katodami).

    Teraz dopiero widzę schemat, bo się pojawił jak pisałem. Tak, właśnie o to mi chodzi. BC327 z opornikami narysowałeś dobrze, dodałbym oporniki w szereg z wyjściami ULN2003 sterującego katodami (kilkadziesiąt omów każdy) żeby ograniczyć prąd na wypadek wzrostu napięcia 12V ponad normę (jak już napisałem). Pin 8 jest ale na schemacie go nie widać, bo pewnie jest zaetykietowany jako GND tak samo jak w przypadku układów cyfrowych. Pin 9 COM to diody zabezpieczające przed przepięciami od obciążeń indukcyjnych, np. przekaźników, powinien być dołączony do 12V w obu driverach, wtedy diody będą na pewno odcięte.

    0
  • #11 28 Kwi 2013 09:05
    kashue
    Poziom 9  

    Układ który zaproponowałeś działa,tylko muszę go dopracować.
    Podczas składania tego złamał mi się w końcówce z zasilacza bolec + i testy musiałem przeprowadzić na zasilaczu 9V. Oczywiście segment LED nie zapalił się, ale woltomierz pokazuje na zmianę 4.49V i 7.74V co zgadza się z programem.
    Podejrzewam, że gdy wrócę do zasilacza 12V napięcie będzie odpowiednie.
    Zabrakło mi rezystorów w okolicy 10k, więc między bazą a emiterem zastosowałem 22k. Dzięki Twojej pomocy wszystko idzie w dobrą stronę.

    Co do wyświetlacza LED miałeś rację.

    Duży 7-segmentowy LED - który układ? ULN2804, UDN 2981, ULN2004 - wspólna anoda

    0
  • #12 28 Kwi 2013 10:03
    szod
    Poziom 33  

    Maksymalny prąd to one mają 30mA. Próbowałeś jak świecą przy np. 10mA? Bo się może okazać, że różnica praktycznie niewielka. Jak zastosujesz multipleks i dasz prąd w impulsie x 11, to wyświetlacze mogą oberwać po strukturach. Diody LED także mają ograniczenia co do wielkości prądu impulsowego. Nie można dawać ile się chce. Dlatego lepiej przetestować go na 10mA i w razie konieczności multipleksu wychodzi mniejszy prąd w impulsie. Można też podzielić wyświetlacze na dwie grupy i je oddzielnie multipleksować.

    0
  • #13 28 Kwi 2013 11:35
    kashue
    Poziom 9  

    Testowałem, zmieniając napięcie.
    Prawidłowe wartości świecenia uzyskałem dopiero od napięcia 9.0V pobór prądu wynosi wtedy ok. 18mA, przy napięciu 10V - 30mA , wyświetlacz daje się odczytywać bez problemu nawet w dzień.
    Przed chwilą podłączyłem do układu zasilacz 12V - 2A, wyświetlaczem testowo steruje przez połączone ze sobą tranzystory PNP i NPN, LED świeci tak Sobie. Zmierzone napięcie między anodą wyświetlacza a GND to 8,53V dla załączonego i 1,93V dla wyłączonego.
    Prawdopodobnie muszę zmienić wartość rezystorów, lub ponownie spróbować użyć układu z ULN + PNP. Z ciekawości podłączyłem do anody wyświetlacza bezpośrednio 12V i ten zaświecił jak światła STOP w aucie.
    Rozważam 2-3 grupy multipleksu jeśli przy 11 LED będzie widoczne migotanie.
    Czy na podstawie zebranych danych ktoś z Was, mógłby mi pomóc dobrać odpowiednie rezystory lub zasugerować inaczej zbudowany układ zasilania LED by zwiększyć napięcie podawane na anodę?

    Pozdrawiam

    EDIT
    Dla wersji z ULN napięcia 8.53V i 2V. Rezystory użyte to BE - 22k , B-ULN - 1k.
    Wcześniej tego nie wspominałem ale tranzystory zasilam z portu VIN za arduino,
    może sytuacja poprawi się gdy arduino zasilę osobno, a 12V podam bezpośrednio na układ tranzystorów.

    Układ obecnie wygląda tak*.

    Duży 7-segmentowy LED - który układ? ULN2804, UDN 2981, ULN2004 - wspólna anoda


    *piny w LED mam inaczej, bo moje mają zasilanie na pinie 1 i 8.

    EDIT2

    Gdy podłączyłem do układu osobne 12V i Arduino zasiliłem 9V, wyświetlacz nie chciał świecić. Na katodach pojawiło się dziwne napięcie ok 20V, co raczej jest jakiś błędem w moich połączeniach.

    EDIT3
    Mam dostęp do porządnego zasilacza dającego 13.8V oczywiście to troszkę za dużo, więc mam pytanie czy prawidłowo wyglądałby dzielnik napięcia do niego?

    Duży 7-segmentowy LED - który układ? ULN2804, UDN 2981, ULN2004 - wspólna anoda

    0
  • #14 28 Kwi 2013 23:53
    kspro
    Poziom 27  

    Opornik pomiędzy bazą a emiterem BC327 ma tylko zapewniać pewne wyłączenie tranzystora, nie ma znaczenia czy ma on 10kΩ czy 22kΩ, może mieć nawet 100kΩ. Opornik pomiędzy wyjściem ULN2003 a bazą ustala prąd bazy. Przy napięciu 12V będzie na nim około 10V (bo odchodzi napięcie baza-emiter ok. 0.7V i napięcie nasycenia Darlingtona w ULN2003 ok. 0.9V), więc prąd bazy włączonego BC327 będzie ok. 10mA. Specjalnie tak dużo, bo tranzystor ma przewodzić spory prąd. Możliwe, że trzeba będzie jeszcze zwiększyć prąd bazy zmieniając 1kΩ na mniej.
    Z datasheet wynika, że łączne napięcie LED-ów segmentu wyświetlacza może osiągać nawet 12.5V (zależy od prądu i temperatury), teraz jest jasne dlaczego nie mogłeś osiągnąć więcej niż 30mA z 12V. Wynika stąd, że 12V zasilania to za mało dla tych wyświetlaczy, powinno być jakieś 15V lub więcej plus oporniki ustalające prąd w szereg z segmentami (tak jak już pisałem). Jak nie zwiększysz napięcia i nie dasz tych oporników to nie opanujesz świecenia (w sensie osiągnięcia stabilnej jasności).
    Dalej w datasheet podano, że prąd ciągły wynosi 30mA max, a prąd impulsowy 200mA, więc jeżeli nie przekroczysz 200mA na segment to nie zniszczysz wyświetlaczy multiplesem przy współczynniku wypełnienia 1/11, bo prąd średni będzie niższy niż 30mA.

    Do zmierzonych przez Ciebie napięć trudno mi się odnieść, bo nie bardzo wiem jak mierzyłeś i dlaczego Ci takie wartości wyszły. O Arduino i jego portach też nic nie wiem, a o tym dzielniku do wytworzenia 12V to lepiej zapomnij. Przecież on w ogóle prądu nie da na wyjściu. Zasilacz 13.8V jest do prób OK, tylko dobierz oporniki w szereg z segmentami (na początek jakieś 10-22Ω), żeby przypadkiem prąd za duży nie popłynął.

    Jak robiłem multipleks na 8048, to miałem przerwanie co 400µs i to w zupełności wystarczało dla wyświetlacza 4 lub 6 cyfr, migotanie było widoczne tylko jak się nim pomachało przed oczami (jak kalkulatorem). Dla 11 cyfr sytuacja byłaby dwa razy gorsza, ale myślę, że stać Cie na szybsze przerwanie, np. 200µs. Jak używasz wyjść równoległych to możesz zrobić dwie grupy multipleksowe, ale przy HCF4094 musiałbyś wydłużyć ich łańcuch i wówczas może się okazać, że przedłużone wbijanie danych nie bardzo się opłaca.

    0
  • #15 29 Kwi 2013 07:35
    kashue
    Poziom 9  

    Dziękuję Ci za odpowiedź.
    Każdy post uczy mnie czegoś nowego. W moim przypadku zmierzenie się teorii z praktyką okazało się brutalne. Uczyłem się elektrotechniki przez 3 semestry, wiedza ta wybiegała tak w teorię, że zbudowanie prostego układu jak ten stwarza mi problem.
    Wracając do ukłądu to sądzę, że z czasem przerwania będzie dobrze, w przeciwnym wypadku podzielę to na 3 grupy 4/4/3, mam na tyle zapas elementów by tak to zrobić.
    Rozważam, czy to nie byłoby z założenia korzystniejsze użyć 3x(ULN2003+HCF4094) do sterowania katodami, plus w tym czasie kluczowanie osobne na te 3 segmenty , mógłbym dzięki temu zwiększyć czas świecenia każdego znaku 3-razy.
    Na szczęście urządzenie będzie przyczepione na stałe do sufitu hali więc na szczęście nikt nim nie będzie machał.
    Wczoraj zrobiłem 315 punktów lutowniczych, przylutowałem złącza do wyświetlaczy i połączyłem je na razie 4/4/3 i rozważam czy zrobić jako jeden szereg.
    W torze katod na obecną chwilę dane są 40Ω rezystory. Spróbuje tak jak napisałeś zastosować ten zasilacz 13.8V uwzględniając spadki napięcia na B-E i prąd nasycenia ULN.

    PS
    kspro Za Twoje porady wiszę Ci jakiś dobry 6-pak...

    Pozdrawiam

    0
  • #16 29 Kwi 2013 23:55
    kspro
    Poziom 27  

    Spadki napięcia na B-E i prąd nasycenia ULN? Zmiana zasilania z 12V na 13.8V czy 15V nie pociąga za sobą wymiany oporników 1kΩ pomiędzy ULN2003 a BC327, bo to że popłynie tam powiedzmy 13mA zamiast 10mA nie ma większego znaczenia, chodzi tylko o to żeby BC327 dobrze kluczowały wspólne anody, których prąd jest 100-200mA. Za to oporniki (obecnie 40Ω) włączone w szereg z katodami należy dobrać starannie, bo właśnie one decydują o prądzie pojedynczego segmentu. I tu jest problem, bo napięcie zasilania niewiele przewyższa napięcie łańcucha LED tworzącego pojedynczy segment. W datasheet podano, że dla prądu 30mA napięcie to może wynosić typowo 9.0V a maksymalnie 12.5V przy 25°C, co już jest sporym rozrzutem, a co więcej napięcie to będzie zależne od temperatury. Mając zasilacz o napięciu 13.8V lub niewiele wyższym zostaje bardzo mało napięcia do odłożenia się na opornikach szeregowych i prąd może zmieniać się znacznie. Na przykład zakładając, że łączne napięcia nasycenia ULN2003 i BC327 wynosi 1V, mamy 13.8-1.0-9.0=3.8V lub 13.8-1.0-12.5=0.3V, a więc zmianę ponad 10 razy napięcia na opornikach i prądu uwzględniając tylko i wyłącznie napięcie przewodzenia segmentu typowe i maksymalne. Im większe napięcie zasilacza tym mniejsza zmiana, dlatego pisałem, że zasilacz powinien mieć jakieś 15V lub więcej. Z drugiej strony zbyt duże napięcie zasilania spowodowałoby niepotrzebne straty, więc nie należy przesadzać.
    Formalnie rzecz biorąc:
    R = (US - USAT - ULED)/ILED
    więc gdy różnica w nawiasie jest mała to jakiekolwiek zmiany napięcia zasilacza czy LED mocno rzutują na prąd.

    Zazwyczaj jednak nie jest tak źle, bo wyświetlacze z tej samej partii na ogół nie różnią się specjalnie między sobą pod względem napięcia przewodzenia, jednak z pewnymi zmianami jasności świecenia w funkcji temperatury czy wahań napięcia zasilającego trzeba się liczyć. Po prostu musisz wypróbować i jeśli trzeba podnieść napięcie zasilające wyświetlacze i zwiększyć oporniki szeregowe. Przy okazji, jakbyś chciał użyć Decimal Point, to weź pod uwagę, że ma on tylko jeden LED, więc opornik szeregowy musi być odpowiednio większy. Nadawałby się wówczas ULN2803 będący ośmiokrotną wersją siedmiokrotnego ULN2003.

    Mam też nadzieję, że stosując HCF4094 używasz strobu przepisującego hurtem rejestry przesuwne do wyjściowych, bo inaczej pojawią się "duchy" na wyświetlaczu.

    0
  • #17 30 Kwi 2013 07:36
    kashue
    Poziom 9  

    Witam.

    Cytat:
    Spadki napięcia na B-E i prąd nasycenia ULN?
    Chodziło mi o zmniejszenie napięcia na wyjściu przez napięcie baza-emiter i darlingtona z ULN, a wyszedł mi taki niefachowy skrót myślowy.
    Rejestry prawidłowo opanowałem, gdy układ był w fazie prototypu na małych wyświetlaczach LED. Wczoraj prawidłowo multipleksowałem 4 cyfry, były małe problemy na początku gdy zapomniałem, że ULN działa jak inwerter, przez co pojawiały się właśnie duchy i o ile na katodach z automatu dałem wartości przeciwne bo tam musi być stan niski by coś świeciło, to dla anod zrobiłem ten sam numer, a tu akurat odwrotnie miało być, ale w dość krótkim czasie błąd logiczny został usunięty, ustawiłem delay(1000) i powolutku zobaczyłem, że wszystkie anody są zapalone, tylko ta co miała jako jedyna nie świecić gasła.
    Dziś do południa spróbuje uruchomić 8 cyfr, zobaczymy czy multipleks nadąży.

    Pozdrawiam

    0