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

[Rozwiązano] BC337 sterowany z 5V [Arduino], przełączający 12V

05 Wrz 2018 09:29 1590 68
  • Poziom 35  
    BC337 sterowany z 5V [Arduino], przełączający 12V
    Próbuję z Arduino sterować załączeniem innego urządzenia.
    Wyjście Arduino podaje stan wysoki na bazę BC337.
    I teraz dziwna (dla mnie) sprawa, bo bez obciążenia pięknie steruje. Na gniazdo urządzenia idzie pełne 12V.
    Ale pod obciążeniem załączane urządzenie dostaje około 4,5V.
    Próbowałem rezystorów 1k oraz 0,1k na bazie, ale nie pomaga bo przy 0,1k jest tak samo, ale przy 1k jest jeszcze gorzej, bo napięcie jeszcze bardziej spada.

    Co robię nie tak? :-D
  • Relpol przekaźniki
  • Poziom 35  
    Sprawdzałem dwa razy czy nóżek nie pomyliłem. Chyba, że mam jakiś egzemplarz niezgodny z notą katalogową.
  • Pomocny post
    Poziom 36  
    Witam,
    w bazie powinien byc rezystor, jakie prady chesz przelaczac ?
    Zrob prosty test, baze wysteruj nie z mikrokontrolera ale z 3.3V poprzez rezystor,
    jak napisales z 1k w bazie "jest gorzej" jakiego pradu oczekujesz ? wzmocnienie tranzystora, pomysl o innym tranzystorze czy wrecz ukladzie darlingtona.
    Pozdrawiam
  • Poziom 37  
    Jedną z opcji jest za mały prąd bazy, żeby wysterować w pełni tranzystorem, a to z kolei oznacza że wyjście z arduino nie jest typowym wyjściem.
    Drugą z opcji jest, że odbiornik 12V pobiera za duży prąd - wtedy sporo napięcia z tych 12V zostaje na tranzystorze (C-E), wtedy mocno on się grzeje.
    Porada z postu wyżej jak najbardziej prawidłowa.
  • Poziom 35  
    Prąd odbiornika niewielki, max 0,5A.
    Chcę nim sterować na zasadzie, włącz/wyłącz. A więc po prostu nasycenie tranzystora.

    Dlaczego bez obciążenia działa jak powinien, a obciążony nie?

    Dodano po 9 [minuty]:

    Chris_W napisał:
    Jedną z opcji jest za mały prąd bazy, żeby wysterować w pełni tranzystorem, a to z kolei oznacza że wyjście z arduino nie jest typowym wyjściem.

    Sprawdzę zatem jak się zachowa gdy na bazę podam +12V przez rezystor 1k.
    Chris_W napisał:
    Drugą z opcji jest, że odbiornik 12V pobiera za duży prąd - wtedy sporo napięcia z tych 12V zostaje na tranzystorze (C-E), wtedy mocno on się grzeje.

    Sprawdzę to jeszcze, bo rzeczywiście tranzystor jest dobrze ciepły.
  • Poziom 37  
    Po chłopsku:
    Ic = hFE * IB taki jest wzór na liniową pracę.
    Chcesz mieć prąd kolektora 0,5A, sprawdzasz wzmocnienie hfe które jest np. 200x - czyli prąd bazy powinien być 200x mniejszy od kolektora - czyli 2,5mA - żeby uzyskać te 0,5A - w pracy liniowej. Jak chcesz nasycić (praca jako klucz) to trzeba więcej prądu na bazie niż wynika z liniowości.
    Jeśli nie uzyskasz z bazy więcej jak 2,5mA to nie nasycisz tranzystora.
  • Pomocny post
    Poziom 30  
    Może nie ustawiłeś pinu jako wyjście i przez to tylko włączasz rezystor pull up w procesorze co nie daje wystarczającego prądu.
  • Pomocny post
    Poziom 36  
    Przy 0.5A lepszy będzie NMOS niż npn tylko żeby załączał się przy 3.3V,
    musi być z niskim napięciem bramki.
  • Relpol przekaźniki
  • Pomocny post
    Poziom 37  
    Podnosicie poprzeczkę ;)
    Autor niech rozkmini program, bo ma chyba źle ustawione wyjście, a jak tranzystor będzie wymiękał to zobaczy to na własne oczy, wtedy da większy.
  • Poziom 35  
    danthe napisał:
    Może nie ustawiłeś pinu jako wyjście i przez to tylko włączasz rezystor pull up w procesorze co nie daje wystarczającego prądu.

    W odpowiednim miejscu kodu wstawiłem linijkę:
    digitalWrite(5, HIGH);
    a w innym:
    digitalWrite(5, LOW);
  • Poziom 35  
    Cytat:
    If you do not set the pinMode() to OUTPUT, and connect an LED to a pin, when calling digitalWrite(HIGH), the LED may appear dim. Without explicitly setting pinMode(), digitalWrite() will have enabled the internal pull-up resistor, which acts like a large current-limiting resistor.

    No pewnie, że o tym zapomniałem :-D
    To teraz jak ustawię pinMode to jaki rezystor dać na bazę? 1k?
  • Pomocny post
    Poziom 37  
    Chris_W napisał:
    Po chłopsku:
    Ic = hFE * IB taki jest wzór na liniową pracę.
    Chcesz mieć prąd kolektora 0,5A, sprawdzasz wzmocnienie hfe które jest np. 200x - czyli prąd bazy powinien być 200x mniejszy od kolektora - czyli 2,5mA - żeby uzyskać te 0,5A - w pracy liniowej. Jak chcesz nasycić (praca jako klucz) to trzeba więcej prądu na bazie niż wynika z liniowości.
    Jeśli nie uzyskasz z bazy więcej jak 2,5mA to nie nasycisz tranzystora.

    Rzuć okiem w DS tego tranzystora, niestety w nasyceniu beta jest znacznie mniejsza.
    Jak już napisano, najlepszy będzie mosfet.
  • Pomocny post
    Poziom 37  
    Szyszkownik Kilkujadek napisał:
    Cytat:
    If you do not set the pinMode() to OUTPUT, and connect an LED to a pin, when calling digitalWrite(HIGH), the LED may appear dim. Without explicitly setting pinMode(), digitalWrite() will have enabled the internal pull-up resistor, which acts like a large current-limiting resistor.

    No pewnie, że o tym zapomniałem :-D
    To teraz jak ustawię pinMode to jaki rezystor dać na bazę? 1k?

    Mniej, ze 300 omów.

    krzysiek_krm napisał:
    Chris_W napisał:
    Po chłopsku:
    Ic = hFE * IB taki jest wzór na liniową pracę.
    Chcesz mieć prąd kolektora 0,5A, sprawdzasz wzmocnienie hfe które jest np. 200x - czyli prąd bazy powinien być 200x mniejszy od kolektora - czyli 2,5mA - żeby uzyskać te 0,5A - w pracy liniowej. Jak chcesz nasycić (praca jako klucz) to trzeba więcej prądu na bazie niż wynika z liniowości.
    Jeśli nie uzyskasz z bazy więcej jak 2,5mA to nie nasycisz tranzystora.

    Rzuć okiem w DS tego tranzystora, niestety w nasyceniu beta jest znacznie mniejsza.
    Jak już napisano, najlepszy będzie mosfet.

    To dla edukacji - robi się takie kroki, żeby się nie przewrócić. Czyli poganianie za mocno do przodu nie daje efektu.
  • Poziom 35  
    Bardzo dziękuję za podpowiedzi. Wieczorem testy i dam znać.
    Jak BC337 będzie za słaby to pójdę w MOSFETa jakiegoś. Czy w moim przypadku musi być rezystor między bramką a źródłem?
  • Pomocny post
    Poziom 37  
    Szyszkownik Kilkujadek napisał:
    Czy w moim przypadku musi być rezystor między bramką a źródłem?

    Powinien być, zabezpiecza przed przypadkowym wysterowaniem tranzystora w sytuacji gdy sterujące Arduino jest wyłączone, akurat się podnosi albo właśnie doznało jakiegoś zawieszenia, itp, krótko mówiąc nie ma kontroli nad wyjściem, które steruje tranzystorem.
  • Pomocny post
    Moderator Projektowanie
    Dla 0,5A tranzystor BC337 jest za słaby. Potrzebny taki o Icmax01A minimum.
    Nie słuchaj głupstw na temat bety. Tranzystor ma być w nasyceniu i trzeba mu dać prąd bazy dużo większy niż wynikający z bety (która jest nieznana) Ib=(5-10%)Ic=(Uster-Ube)\Rb.
    Rb musisz wstawić bo spalisz tranzystor albo uC, wylicz go z powyższego wzoru Ic=0,5A więc Ib=25-50mA (uC raczej tyle nie da, więc lepiej MOSFET, albo darlington) i Rb=(3,3V-0,8V)\(25-50mA)=50-100 Ohm. To bez sensu - tylko MOSFET.
    Bez obciążenia Ic=0, więc minimalny Ib go otwiera, ale dla Ic=500mA potrzebuje duży Ib rzędu 25-50mA. Dałeś mu zapewne kilka mA (źle ustawione wyjście i na szczęście bo bez Rb mogłeś spalić uC) co otworzyło go tylko trochę i jest na nim ok.7,5V (zamiast Ucesat= ok.0,5V), aa na obciążeniu masz resztę, czyli 12-7,5=4,5V.
    Dlaczego na schemacie uC jest zasilany z 12V ?
  • Pomocny post
    Poziom 31  
  • Pomocny post
    Specjalista elektronik
    Bodajże BC635/637/639 to "mocniejsze wersje" BC337 - ale pewnie Arduino da mu za mały prąd bazy, więc można zrobić układ z dwoma tranzystorami: baza BC337 przez 1k do pinu Arduino, kolektor przez 150R do +12V, emiter do bazy BC635, emiter BC635 do masy, kolektor do obciążenia. Można też spróbować z BD135 (albo 137/139) zamiast BC635; można połączyć ze 2-3 tranzystory równolegle (ale wtedy wypada dać oporniki wyrównujące po 51R w bazach).

    MOSFET Logic Levels - do sterowania z 3.3V trzeba by poszukać jakiegoś odpowiedniego, bo typowe do pełnego otwarcia potrzebują ze 4.5V; można by użyć i zwykłego MOSFET-a, plus translator napięć (np. na BC547, baza przez 10k do +3.3V, emiter do pinu Arduino, kolektor do bramki MOSFET-a, i opornik kilka k między tą bramką, a +12V).
  • Poziom 31  
    _jta_ napisał:
    MOSFET Logic Levels

    Zgodnie z notacją : MOSFET Logic-Level, jakoś drażni ta liczba mnoga w nazwie ;)

    Pozdr
  • Poziom 35  
    Po korekcie programu i dodaniu Rb=0,33k sytuacja wygląda następująco:
    Arduino rusza i wykonuje część programu i reset. I tak w koło.
    Natomiast, gdy zewrę kolektor z emiterem na kilka sekund to urządzenie się uruchamia i Arduino wykonuje cały program jak trzeba. Po tych kilku sekundach zdejmuję zworę E-K i już działa i cały program ładnie się wykonuje, a zasilane urządzenie pracuje poprawnie.
    Wygląda to trochę jakby brakowało prądu na rozruch urządzenia. Tylko dlaczego Arduino się resetuje?

    To co, MOSFET? :-)
    Co powiecie na STP16NF06?
  • Poziom 37  
    Szyszkownik Kilkujadek napisał:
    Po korekcie programu i dodaniu Rb=0,33k sytuacja wygląda następująco:
    Arduino rusza i wykonuje część programu i reset. I tak w koło.
    Natomiast, gdy zewrę kolektor z emiterem na kilka sekund to urządzenie się uruchamia i Arduino wykonuje cały program jak trzeba. Po tych kilku sekundach zdejmuję zworę E-K i już działa i cały program ładnie się wykonuje, a zasilane urządzenie pracuje poprawnie.
    Wygląda to trochę jakby brakowało prądu na rozruch urządzenia. Tylko dlaczego Arduino się resetuje?

    To co, MOSFET? :-)
    Co powiecie na STP16NF06?

    A więc co to za odbiornik?
    Ma prawdopodobnie duże kondensatory w swoim zasilaniu, a Ty masz za słaby zasilacz.
  • Specjalista elektronik
    A co się dzieje z Arduino przy takim zwieraniu kolektora z emiterem? Resetuje się, czy nie?

    Można poszukać sposobu, żeby uniknąć tego resetowania, ale trzeba ustalić mechanizm wpływu włączania urządzenia na Arduino.

    Jeśli to urządzenie przeciąża zasilacz tak, że powoduje to resetowanie Arduino, to można zasilać Arduino poprzez diodę, za którą będzie kondensator podtrzymujący napięcie - nawet jeśli napięcie zasilacza zmaleje na chwilę prawie do zera, Arduino będzie miało prawidłowe napięcie zasilania.

    Jeśli to sprawa indukowania zakłóceń przez szybkie włączanie prądu, to można je nieco spowolnić.

    Może niezależnie od przyczyny można zrobić jakiś soft-start - no, o ile to nie jest tak, że przy powolnym włączaniu urządzenie generuje zakłócenia, które resetują Arduino.
  • Poziom 35  
    Chris_W napisał:
    A więc co to za odbiornik?
    Ma prawdopodobnie duże kondensatory w swoim zasilaniu, a Ty masz za słaby zasilacz.

    Urządzenie to to moduł Bluetooth. Zasilanie na pewno daje radę, bo wcześniej było tak, że Arduino i moduł BT startowały razem i nie było problemu.
    _jta_ napisał:
    A co się dzieje z Arduino przy takim zwieraniu kolektora z emiterem? Resetuje się, czy nie?

    Pracuje poprawnie.
    _jta_ napisał:
    Jeśli to urządzenie przeciąża zasilacz tak, że powoduje to resetowanie Arduino, to można zasilać Arduino poprzez diodę, za którą będzie kondensator podtrzymujący napięcie - nawet jeśli napięcie zasilacza zmaleje na chwilę prawie do zera, Arduino będzie miało prawidłowe napięcie zasilania.

    Za małą wydajność prądową zasilania można z całą pewnością wykluczyć.
    _jta_ napisał:
    Jeśli to sprawa indukowania zakłóceń przez szybkie włączanie prądu, to można je nieco spowolnić.

    Może niezależnie od przyczyny można zrobić jakiś soft-start - no, o ile to nie jest tak, że przy powolnym włączaniu urządzenie generuje zakłócenia, które resetują Arduino.

    To wydaje mi się bardzo mało prawdopodobne. Wcześniej Arduino i moduł BT pracowały razem, zasilane równolegle z tego samego źródła napięcia. Teraz chcę zrobić aby to Arduino decydowało o włączeniu modułu BT.
  • Specjalista elektryk
    Szyszkownik Kilkujadek napisał:
    Wcześniej Arduino i moduł BT pracowały razem, zasilane równolegle z tego samego źródła napięcia.

    Start był razem, zatem nie było impulsu prądowego, który mógłby zrestartować arduino (tzn mógł być zanim arduino sie podniosło).
    Spróbuj, jak radzi _jta_, dać diodę i kondensator - to najprostsze rozwiązanie
  • Specjalista elektronik
    A np. ładowanie kondensatora w zasilaniu modułu BT, które na ułamek sekundy przeciąża zasilacz?

    Może spróbuj podłączyć BD135 tak, jak pisałem, i dodaj kondensator (np. 50uF) między bazą BC337, a kolektorem BD135.
  • Poziom 35  
    kj1 napisał:
    Szyszkownik Kilkujadek napisał:
    Wcześniej Arduino i moduł BT pracowały razem, zasilane równolegle z tego samego źródła napięcia.

    Start był razem, zatem nie było impulsu prądowego, który mógłby zrestartować arduino (tzn mógł być zanim arduino sie podniosło).
    Spróbuj, jak radzi _jta_, dać diodę i kondensator - to najprostsze rozwiązanie

    Nadal uważam to za bardzo mało prawdopodobne. Zwracam uwagę na to, że po zwarciu kolektor-emiter (czyli de facto ominięciu tranzystora) moduł BT uruchamia się. Zwarcia tego dokonywałem zarówno przez jak i po podaniu zasilania. Czyli gdy Arduino się cyklicznie resetowało to wystarczyło zewrzeć K-E i jak ręką odjął. Moduł BT rusza, Arduino przestaje się resetować. Po dosłownie dwóch sekundach zdejmuję zworę i całość pracuje nadal poprawnie.

    Dodano po 3 [minuty]:

    _jta_ napisał:
    A np. ładowanie kondensatora w zasilaniu modułu BT, które na ułamek sekundy przeciąża zasilacz?

    Nie sądzę. Kondensator na wejściu w module BT ma raptem 100uF. Ładowany jest przez diodę.

    Dodano po 12 [minuty]:

    _jta_ napisał:
    Może spróbuj podłączyć BD135 tak, jak pisałem, i dodaj kondensator (np. 50uF) między bazą BC337, a kolektorem BD135.

    To już wolę iść od razu w MOSFETA.
    Co sądzicie o MOSFET STP16NF06L? Nada się?
  • Specjalista elektronik
    On potrzebuje sporego napięcia bramki - sam Adruino tyle nie da. I pewnie nie rozwiąże problemu.