LED i wzmacniacz operacyjny (pin d13 w Arduino)

Podłączanie LED do Arduino to jedno z pierwszych ćwiczeń, od którego zaczynają adepci programowania tej płytki. Sprawa jest prosta –  wystarczy wolny port, dioda świecąca i rezystor o odpowiedniej wartości. Manipulując sygnałem z portu można diodę zapalać i gasić. Zabawa na 3 minuty.

Zdarzają się jednak sytuacje, gdy takie proste podłączenie nie jest możliwe. Dioda „wisząca” na porcie pobiera z niego prąd (zależny od rezystora). Czasami takie obciążanie portu nie  jest pożądane. Za przykład mogą tu posłużyć np. diody sygnalizujące transmisję na portach TX/RX.

W związku z tym powstaje problem: czy można zapalać diodę w reakcji na stan wysoki portu – bez pobierania z niego prądu? Tak, a najłatwiej wykorzystać do tego… wzmacniacz operacyjny.

Klasycznie

Klasyczne zadanie podłączenia diody świecącej D do portu Arduino Px sprowadza się do obliczenia wartości rezystora R łączonego szeregowo z diodą. Wykorzystujemy do tego wzór:

{I} = {{U_p - U_d} \over {R}}

gdzie:

  • I: natężenie prądu, jaki ma przepłynąć przez diodę,
  • Up: napięcie portu,
  • Ud: napięcie przewodzenia diody,
  • R: wartość rezystora.

Wartość R rezystora trzeba tak dobrać, żeby przez diodę popłynął prąd o natężeniu odpowiedniej wartości.  Wartość ta musi być na tyle duża, żeby dioda wyraźnie świeciła, ale na tyle mała – żeby nie uszkodzić diody czy portu. W praktyce dla mnie wystarcza prąd o natężeniu 5mA (czyli 0,005A).

Dla Arduino za napięcie portu Up w stanie wysokim przyjmuje się 5v. W praktyce jest ono trochę niższe, nawet 4.85v – chociaż widziałem i klony „wyciągające” jedynie 4.7v. Napięcie to może zmieniać się w zależności od obciążenia albo danego egzemplarza Arduino (klon/oryginał, poszczególna realizacja) – a właściwie zamontowanego na płytce stabilizatora.

Napięcie przewodzenia Ud diody to pewne napięcie progowe powyżej którego dioda w ogóle zacznie świecić. W wielkim przybliżeniu  można powiedzieć, że dioda je „połyka” – „zużywa” je, żeby w ogóle się „zapalić” (jakby odwrotnie spolaryzowane źródło napięcia). Każda dioda ma trochę inne napięcie przewodzenia. Napięcie to jest niższe dla diod czerwonych (1.8v), – najwyższe dla niebieskich i białych. Przykładowe wartości podaję za forbot:

  • Czerwona: 1.6 – 2.2
  • Źółta – 2.0 – 2.3,
  • Zielona – 2.0 – 3.7,
  • Niebieska – 2.9 – 4.0,
  • Biała – 3.0 – 3.6,

Napięcie to zależy również od przepływającego przez diodę prądu (i oczywiście jej realizacji) – stąd biorą się pewne przedziały. Dla uproszczenia załóżmy, że dla niebieskiej diody napięcie to ma wartość 3v. Powyższy wzór można więc trochę przekształcić:

{R} = {{U_p - U_d} \over {I}}

Podstawiając pewne założone dane:

{R} = {{5 - 3} \over {0.005}} = 400 \Omega

Czyli 400Ω powinno wystarczyć, żeby dioda zaświeciła z całkiem rozsądną jasnością (5mA). Mniejsza wartość rezystora – zwiększy przepływający przez diodę prąd – czyli zaświeci jaśniej. Dla standardowych diod 3.5mm raczej nie przekraczajcie 20mA, przy czym już powyżej 10mA – zmiana jasności będzie ledwie zauważalna (przynajmniej dla mnie:)). Im wyższym prądem potraktujecie diodę, tym krótsza będzie jej żywotność.

Zawsze stosujcie rezystor ograniczający prąd. Wiem, że AtMega (napędza Arduino) ogranicza prąd na portach – ale w żadnym wypadku poleganie na tym mechanizmie nie wpływa pozytywnie na żywotność kontrolera…

A gdyby tak… ograniczyć prąd pobierany z portu?

Można. Najprostszą realizacją są takie oparte na tranzystorze. Wtedy port kontrolera steruje jedynie bazą tranzystora. Nadal, trochę prądu musi być z niego pobrane.

A gdyby tak… nie pobierać prądu z portu?

I tu dochodzimy do sedna: do zasilenia diody można użyć… wzmacniacza operacyjnego. Wzmacniacze operacyjne (ang. operational amplifier, op-amp) to jedne z podstawowych układów aktywnych. Pracują w wielu konfiguracjach. Na podstawowe potrzeby, ich działanie można sprowadzić do kilku prostych zasad:

  • Przez wzmacniacz nie „przechodzi” prąd (wejścia mają bardzo wysoką rezystancję),
  • Wzmacniacz, który „zamknięto” sprzężeniem zwrotnym, dąży do wyrównania napięcia między wejściem odwracającym i nieodwracającym,
  • Wzmocnienie wzmacniacza jest prawie nieskończone – w praktyce ograniczone do zasilania wzmacniacza.

Spójrzcie na taki układ:

Układ ten wykorzystuje kilka właściwości wzmacniacza operacyjnego. Załóżmy, że sygnał V+ ma wartość 5v (standardowy sygnał z Arduino), zasilanie wzmacniacza to 9v a spadek napięcia na diodzie D to 3v (napięcie przewodzenia diody). Wtedy:

  • Wzmacniacz będzie regulował napięcie na jego wyjściu A tak, żeby napięcia na wejściu V+ (nieodwracającym) i V- (odwracającym) były takie same,
  • …stąd napięcie w punkcie B powinno być jak najbliższe napięciu V+ – czyli 5v,
  • Ponieważ na diodzie mamy spadek napięcia o 3v, napięcie w punkcie A będzie miało 8v – zasilanie Vcc ma wartość 9v – więc powinno się udać,
  • Jeżeli wybierzemy rezystor 400Ω –  przez diodę popłynie prąd 12.5mA.

Zauważcie: przy tym samym rezystorze, w porównaniu do układu klasycznego, przez diodę popłynie znacznie większy prąd, zamiast 5mA- 12.5mA. Ale – sam wzmacniacz wymaga zasilania 9v.

Załóżmy, że mamy tylko 5v:

  • napięcie w punkcie B powinno być jak najbliższe napięciu V+ – czyli 5v,
  • …ale ponieważ na diodzie mamy spadek napięcia o 3v, a wzmacniacz nie może dać z siebie więcej niż 5v… napięcie w punkcie A będzie miało 5v a B: 2v,
  • Jeżeli wybierzemy rezystor 400Ω –  przez diodę popłynie prąd 5mA

Ok, uzyskujemy jasność identyczną jak w przypadku zwykłego układu port-rezystor-dioda, ale dzięki wzmacniaczowi – port nie jest obciążony.

LM324

Scalone wzmacniacze operacyjne mają swoje ograniczenia. Idealny wzmacniacz ma nieskończone wzmocnienie. „Prawdziwy” – nie większe niż jego zasilanie. Prawdziwy wzmacniacz zawsze będzie miał pewne przesunięcie między wejściami – rzędu kilku miliwoltów.

LM324

Przede wszystkim istnieją konkretne ograniczenia na maksymalne natężenie prądu, który możecie pobrać z ich nóżek. Parametr Power dissipation określa, ile chip może rozproszyć mocy (ciepła). Dla LM324, parametr ten wynosi P = 1110mW.

Sam chip nie jest specjalnie prądożerny, pobiera maksymalnie 3mA (supply current). Przy zasilaniu 9v, daje to jakieś 27mW (P=U*I). Zostaje 1080mW.

LM324 ma w środku 4  wzmacniacze, co daje około 270mW na jeden wzmacniacz.    Na wyjściu (w punkcie A) mieliśmy 8v i natężenie prądu 12.5mA – co daje 100mW. Wydaje się więc, że moglibyśmy zwiększyć natężenie nawet do 30mA (30*8=240mW). Przy 4 diodach chip grzałby się okrutnie – ale przeżyłby. Jakiś czas:)

Praktycznie…

Podobny układ zasilania diody oparty na wzmacniaczu operacyjnym znajdziecie w samym Arduino (mówię o UNO rev3).

SCK to inaczej linia pinu D13, ale i część nagłówka ICSP. W ten sposób dioda może sygnalizować transmisję danych przy programowaniu Ardunio zewnętrznym programatorem.

Skomentuj ten tekst na facebook.

Źródła

  • https://forbot.pl/blog/jak-dobrac-rezystor-do-diody-rozne-metody-zasilania-led-id14482
  • https://pl.wikibooks.org/wiki/Wprowadzenie_do_elektroniki/P%C3%B3%C5%82przewodniki/Wzmacniacze_Operacyjne
  • https://en-support.renesas.com/knowledgeBase/16980915
  • https://www.arduino.cc/en/uploads/Main/Arduino_Uno_Rev3-schematic.pdf