전류가 핀에서 나오는지, 핀으로 들어가는지 봅니다
GPIO(General-Purpose Input/Output)는 프로그램으로 입력이나 출력을 설정하는 범용 입출력 핀입니다. MCU(Microcontroller Unit)는 이런 핀과 연산·메모리 기능을 갖춘 마이크로컨트롤러입니다. 출력 핀은 제어 신호를 내보내는 곳이므로 작은 전원 공급기처럼 임의의 부하를 연결할 수는 없습니다.
LED(Light-Emitting Diode)는 순방향으로 전류가 흐를 때 빛을 내는 다이오드입니다. 애노드(anode)에서 캐소드(cathode)로 흐르는 전류를 직렬 저항으로 제한합니다. 캐소드를 가리키는 회로 기호의 막대와 부품 자체의 극성 표시를 대조해야 합니다.
소스 전류(source current)는 출력 핀에서 외부 회로로 나가는 전류이고, 싱크 전류(sink current)는 외부 회로에서 출력 핀으로 들어오는 전류입니다. 아래의 화살표는 관례적인 전류 방향이며 전자의 이동 방향과 반대입니다.
| 연결 | LED가 켜지는 출력 | 전류가 지나는 경로 |
|---|---|---|
| GPIO → 저항 → LED → 접지 | HIGH | MCU의 전원에서 내부 출력 회로와 GPIO를 거쳐 LED로 흐릅니다. |
| 전원 → 저항 → LED → GPIO | LOW | 전원에서 LED와 GPIO를 거쳐 MCU의 내부 출력 회로를 통해 접지로 흐릅니다. |
여기서는 LED 전원과 GPIO의 전압 범위가 맞고, 두 회로가 같은 접지 기준을 사용하는 경우를 다룹니다. 첫 번째는 HIGH일 때 켜지는 액티브 하이(active-high), 두 번째는 LOW일 때 켜지는 액티브 로우(active-low) 연결입니다. 두 번째 연결에서는 LED를 켜려면 프로그램에서 핀을 LOW로 만들어야 합니다.
최대 전류 숫자보다 먼저 출력 전압의 보장 조건을 읽습니다
부하 전류가 커지면 HIGH 출력은 이상적인 전원 전압보다 낮아지고, LOW 출력은 이상적인 0 V보다 높아질 수 있습니다. 따라서 한 핀의 절대최대정격(absolute maximum rating)만 보고 그 전류를 평상시 설계값으로 잡으면 안 됩니다. 절대최대정격은 정상 동작을 보장하는 조건표가 아닙니다.
데이터시트의 전기적 특성에서 V_OH는 HIGH 출력 전압, V_OL은 LOW 출력 전압입니다. 그 값이 어떤 전류에서 보장되는지도 함께 읽습니다. I_OH는 HIGH일 때의 출력 전류, I_OL은 LOW일 때의 출력 전류를 나타냅니다. 핀 밖으로 나가는 전류를 음수로 적는 표도 있으므로 부호 정의를 읽고 전류의 크기를 비교합니다. 전압의 단위 V는 볼트, 전류의 단위 mA는 밀리암페어이며 1 mA는 0.001 A입니다.
- 사용할 GPIO가 실제로 지원하는 출력 방식과 전원 전압을 확인합니다.
- 필요한 LED 전류에서 V_OH의 최솟값 또는 V_OL의 최댓값이 어떻게 보장되는지 확인합니다.
- 핀 하나의 전류뿐 아니라, 동시에 켜지는 핀들의 합과 해당 포트·전원·접지 핀에 적용되는 전류 제한도 확인합니다. 포트별 제한의 유무와 묶음은 제품마다 다릅니다.
- 여유가 부족하면 LED 전류를 줄이거나 외부 트랜지스터·LED 드라이버를 사용합니다. 싱크 방식이 언제나 더 강하다고 가정하지 않습니다.
예를 들어 핀 하나에 연결한 LED는 잘 켜져도 같은 그룹의 여러 LED를 동시에 켜면 합산 제한을 넘을 수 있습니다. 개별 LED만 확인하지 말고 실제로 동시에 켜질 수 있는 조합으로 검사해야 합니다.
7세그먼트 표시기(seven-segment display)에서도 이 차이가 드러납니다. 공통 애노드(common anode, 여러 세그먼트 LED의 애노드를 함께 묶은 단자)에 저항을 하나만 넣으면 그 저항은 켜진 세그먼트들의 합계 전류를 제한할 뿐, 각 세그먼트의 전류를 따로 정하지 못합니다. 표시할 숫자가 바뀌어 켜진 세그먼트 수가 달라지면 전류 분배와 밝기도 달라질 수 있습니다. 각 세그먼트 경로에 저항을 하나씩 두고, 실제 표시기의 공통 애노드·공통 캐소드(common cathode, 여러 LED의 캐소드를 묶은 단자) 극성과 GPIO의 소스·싱크 방향을 맞춘 뒤 가장 많은 세그먼트가 켜지는 상태에서 각 저항 전압과 핀별·합계 전류를 확인하세요. 공통 단자에 놓인 저항 하나를 세그먼트별 전류 제한 저항으로 간주하지 않습니다.
저항은 LED와 출력 핀 사이에 남는 전압으로 정합니다
직렬 저항 R의 단위는 Ω(옴)이고, I는 LED에 흐르는 전류입니다. V_F는 그 전류에서의 LED 순방향 전압(forward voltage), V_DD는 LED에 공급하는 전원 전압입니다. 저항 양끝 전압을 전류로 나누는 옴의 법칙을 적용하면 다음과 같습니다.
- 소스 연결: R = (V_OH − V_F) / I입니다.
- 싱크 연결: R = (V_DD − V_F − V_OL) / I입니다.
LED의 색은 빛을 내는 반도체 재료와 발광 방식에 영향을 받습니다. 백색 LED에는 청색 칩의 빛 일부를 다른 색으로 바꾸는 형광체(phosphor)를 쓰는 방식도 있어, 발광색만으로 순방향 전압을 하나의 값으로 정할 수 없습니다. 같은 색의 LED라도 품번·전류·온도에 따라 순방향 전압이 달라집니다. 색상표의 숫자로 저항을 정하지 말고, 사용할 품번의 데이터시트에서 순방향 전압의 보장값과 시험 조건을 먼저 확인합니다. 목표 전류·사용 온도의 특성 곡선은 참고값으로 보고 필요한 여유를 둡니다.
이 식의 출력 전압은 부하가 걸린 상태의 값입니다. HIGH를 무조건 V_DD, LOW를 무조건 0 V로 놓으면 계산과 실제 밝기가 달라질 수 있습니다. 반대로 LED의 순방향 전압이 너무 높아 저항에 남는 전압이 거의 없다면, 저항을 계속 줄이는 방식으로 해결하지 않습니다.
설명용으로 V_DD = 3.3 V, V_F = 2.0 V, V_OL = 0.2 V이며 목표 전류가 2 mA인 싱크 연결을 가정하겠습니다. 계산하면 R = (3.3 − 2.0 − 0.2) / 0.002 = 550 Ω입니다. 560 Ω을 사용하고 앞의 전압들이 그대로 유지된다고 가정하면 약 1.96 mA가 흐릅니다. 이 수치는 특정 MCU나 LED의 검증 결과가 아닙니다.
실제 저항을 정할 때는 전압과 부품 오차를 포함해야 합니다. 싱크 연결의 최대 전류는 전원이 높고 LED 순방향 전압과 LOW 출력 전압, 저항값이 낮을 때 커집니다. 보장되는 V_OL 최솟값이 없다면 최대 전류 계산에서는 0 V를 보수적으로 사용할 수 있습니다. 반면 켜질 때의 최소 밝기를 검토할 때는 낮은 전원, 높은 V_F와 V_OL, 높은 저항값을 살펴봅니다. V_OL 최댓값 하나를 양쪽 검사에 똑같이 넣지 않습니다. 소스 연결도 최대 전류와 최소 밝기를 서로 다른 조건으로 확인합니다.
출력 모드와 전원이 켜지는 순서까지 확인합니다
push-pull 출력은 내부 회로가 HIGH와 LOW를 모두 구동합니다. 오픈드레인(open-drain) 출력은 LOW로 당기는 경로를 켜거나 끄는 방식입니다. 오픈드레인에서 HIGH를 썼다고 해서 핀이 LED로 전류를 내보내는 상태가 되는 것은 아닙니다. 회로를 소스 연결로 바꾸려면 프로그램의 논리값뿐 아니라 출력 모드도 맞는지 확인해야 합니다.
LED 전원이 MCU보다 먼저 들어오거나 전압이 서로 다르면, 핀에 허용되지 않는 전압이 걸리거나 내부 보호 경로로 전류가 흘러갈 수 있습니다. MCU가 꺼진 상태의 핀 허용 조건도 확인합니다. 리셋 직후 입력 상태인 핀에서 LED가 잠깐 켜지는 문제라면, 초기 핀 상태와 회로의 바이어스를 함께 검토합니다.
완성한 회로에서는 HIGH와 LOW를 각각 고정한 상태에서 핀 전압과 저항 양끝 전압을 측정합니다. 저항 전압을 저항값으로 나누면 LED 전류를 구할 수 있습니다. 켜짐·꺼짐 방향, 단독 점등, 동시 점등, 전원 투입과 리셋 순서까지 확인하면 단순한 코드 반전 문제와 전기적 구동 능력 부족을 구분할 수 있습니다.
RGB LED도 세 가지 전류를 따로 제한합니다
공통 애노드 RGB LED는 세 색 소자의 애노드를 함께 묶고 각 캐소드 가지의 전류를 제어하는 방식입니다. 앞의 싱크 구동 조건처럼 가지마다 별도의 전류 제한을 두고, 실제 품번의 공통 단자·색상별 핀·순방향 전압을 확인합니다. 공통 캐소드나 내부 구동기가 있는 주소 지정 LED에는 같은 배선을 그대로 옮기지 않습니다. 같은 저항값 세 개라도 색상별 전류나 밝기가 같아지는 것은 아닙니다.
위상차가 있는 세 AC 전압원과 저항을 연결한 시뮬레이션에서 색이 바뀌어도 실제 LED의 안전한 구동이 입증되지는 않습니다. 각 가지의 순간 전류, 공통 단자의 기준 전압, 역전압 정격과 드라이버 전압 범위를 확인해야 합니다. 100 Hz와 500 Ω이라는 표기만으로는 진폭·극성·전류를 정할 수 없습니다.
LED의 빛과 논리 함수의 참을 구별합니다
두 입력 A·B의 OR을 검증한다면 예상 논리는 00→0, 01→1, 10→1, 11→1입니다. 1비트 크기 비교의 (A>B, A<B, A=B) 출력 순서를 직접 정했다면 00→001, 01→010, 10→100, 11→001입니다. 이 순서는 출력의 의미를 명시한 표이지 불명확한 G·S·E 표기를 실제 회로에서 확인했다는 뜻은 아닙니다.
네 입력 조합마다 실제 입력·출력 핀 전압을 그 부품의 High·Low 임계값과 대조하고, LED가 active-low이면 빛과 논리값을 반대로 해석합니다. 원리를 설명하는 진리표만으로 부품값·핀 연결이 불명확한 트랜지스터 회로가 그 함수를 구현한다고 판정하지 않습니다.
LED를 기준 전압으로 쓰는 외부 NPN 싱크는 GPIO 직접 구동과 다릅니다
앞 절의 GPIO 핀 대신 외부 NPN 트랜지스터로 부하 전류를 받는 다른 구성을 생각해 보겠습니다. 전원에서 R_B를 거쳐 베이스 노드로 가고, 그 노드에서 LED가 접지로 이어지며, 이미터는 R_E를 거쳐 접지로 연결됩니다. 부하는 전원과 컬렉터 사이에 놓입니다. 이때 LED는 표시 부하가 아니라 베이스 기준 전압을 만드는 가지입니다. 별도 컬렉터 저항이 없는 도면에 계산 편의로 그 저항이 있다고 가정하지 않습니다.
LED가 순방향으로 정상 동작하고 NPN이 활성 영역에 머문다는 조건에서 V_E≈V_LED−V_BE, I_E≈(V_LED−V_BE)/R_E, I_C=I_E−I_B입니다. 설명용으로 V_LED=2 V, V_BE=0.7 V, R_E=68 Ω를 놓으면 I_E는 약 19.1 mA입니다. 이는 특정 부품의 일정 전류 보장값이 아니며 부하의 컬렉터 전류는 베이스 전류만큼 다릅니다.
R_B 전류는 LED 전류와 베이스 전류로 나뉩니다. 최저 전원에서 두 가지에 필요한 전류와 부하 전압·V_CE 여유가 남는지, 최고 전원에서 R_B·LED·트랜지스터 손실을 넘지 않는지 확인합니다. LED의 온도·전류에 따른 순방향 전압과 BJT의 V_BE 변화도 오차가 됩니다. GPIO 직접 싱크의 정격을 이 외부 회로의 정격으로 옮기거나, 계산값만으로 5–24 V 전체 범위·배터리 충전 용도를 보장하지 않습니다.
English summary. An LED-referenced external NPN current sink is not direct GPIO drive. RB supplies both LED and base currents; the emitter-resistor estimate assumes a biased LED and an active transistor. Load headroom, current error and component dissipation must be checked separately.