BJT 스위치 설계

한 줄 요약 — MCU GPIO로 큰 부하를 켜고 끕니다. 베이스 저항 계산이 전부이고, 이걸 빼먹으면 GPIO가 탑니다.


기본 회로 (NPN 로우사이드)

NPN 로우사이드 스위치 회로도RB470ΩRL240Ω릴레이 코일VCC12VVG3.3VGPIOQ12N3904VPCOLBASEGPIOGND
NPN 로우사이드 스위치워크벤치에서 열기 →

로우사이드: 부하가 위, 트랜지스터(transistor)가 아래. NPN을 쓰며 가장 간단합니다.

부품어디에 붙나하는 일
부하 (RL)VCC와 컬렉터 사이실제로 켜고 끌 것 (릴레이 코일, LED 스트링, 모터)
RBR_BGPIO와 베이스 사이베이스 전류를 정한다. 이게 없으면 베이스가 GPIO를 직접 단락시켜 GPIO가 탄다
Q1 (NPN)컬렉터 위, 이미터 아래베이스에 전류를 넣으면 컬렉터–이미터가 도통(포화)해 부하에 전류가 흐른다
이미터GND에 직결이미터가 접지에 고정되어 있으므로 VBEV_{BE}가 GPIO 전압으로 그대로 결정된다 → 계산이 쉽다

💡 회로도에서 이미터가 GND에 붙어 있는 것이 “로우사이드”라는 이름의 뜻입니다. 스위치(트랜지스터)가 부하의 아래쪽(low side)에 있습니다.


설계 절차

1. 필요한 컬렉터 전류 확인

IC=VCC−VCE,satRload또는 부하 사양에서I_C = \frac{V_{CC} - V_{CE,sat}}{R_{load}} \quad\text{또는 부하 사양에서}
기호
I_C컬렉터 전류collector currentA
R_load부하 저항load resistanceΩ
V_CC전압 (CC)voltage (CC)V
V_CE,sat전압 (CE, 포화)voltage (CE, saturation)V

2. 필요한 베이스 전류 계산

포화시키려면 넉넉히 줘야 합니다.

IB=ICβmin×koverdriveI_B = \frac{I_C}{\beta_{min}} \times k_{overdrive}
기호
i전류 (순시값)instantaneous currentA
I_B베이스 전류base currentA
I_C컬렉터 전류collector currentA
k_overdrive결합 계수 또는 상수 (overdrive)coupling coefficient or constant (overdrive)
n비트 수 또는 개수number of bits or count

실무 관례: IB=IC/10I_B = I_C / 10 (즉 강제 β\beta를 10으로 잡음)

β\beta 데이터시트 최소값이 보통 50~100이므로, 10으로 잡으면 5~10배 과구동입니다. 확실히 포화합니다.

3. 베이스 저항 계산

RB=VGPIO−VBEIB\boxed{R_B = \frac{V_{GPIO} - V_{BE}}{I_B}}
기호
I_B베이스 전류base currentA
R_B베이스 저항base resistanceΩ
V_BE베이스–이미터 전압base-emitter voltageV
V_GPIO전압 (GPIO)voltage (GPIO)V

VBEV_{BE}는 포화(saturation) 시 약 0.8 V로 잡습니다.

4. 검증

  • GPIO 출력 전류가 한계 이내인가?
  • 트랜지스터 전력 손실: P=VCE,sat×ICP = V_{CE,sat} \times I_C
  • 부하가 유도성이면 플라이백 다이오드(flyback)플라이백 다이오드 flyback diode인덕터를 끌 때 튀어오르는 역기전력을 흘려보내 스위치를 지키는 다이오드입니다.자세히 보기 → 추가 (5-05)

계산 예제

예제 1 — 릴레이 구동

12 V 릴레이(코일 240 Ω), 3.3 V MCU GPIO.

1) 컬렉터(collector) 전류:

IC=12−0.2240≈49 mAI_C = \frac{12-0.2}{240} \approx 49\ \text{mA}
기호
I_C컬렉터 전류collector currentA

2) 베이스 전류:

IB=49 mA10=4.9 mAI_B = \frac{49\ \text{mA}}{10} = 4.9\ \text{mA}
기호
I_B베이스 전류base currentA

3) 베이스 저항:

RB=3.3−0.84.9 mA=510 ΩR_B = \frac{3.3-0.8}{4.9\ \text{mA}} = 510\ \Omega
기호
R_B베이스 저항base resistanceΩ

E24에서 470 Ω 선택 → IB=5.3I_B = 5.3 mA

4) 검증:

  • GPIO 전류 5.3 mA < 8 mA 한계 ✅
  • 트랜지스터 손실 0.2×0.049=9.80.2\times0.049 = 9.8 mW ✅ (2N3904는 625 mW 정격)
  • 플라이백 다이오드 필수 (릴레이는 유도성) ✅

예제 2 — GPIO로 직접 구동하면?

릴레이를 GPIO에 직접 연결하면 49 mA가 필요한데, GPIO 한계는 8 mA입니다. GPIO가 파괴되거나, 전압이 떨어져 릴레이가 동작하지 않습니다.

트랜지스터는 “GPIO의 약한 구동력을 증폭”하는 장치입니다. 5 mA로 49 mA를 제어합니다.


하이사이드 스위치 (PNP)

부하의 한쪽을 접지에 고정해야 할 때 씁니다.

PNP 하이사이드 스위치 회로도R110kΩQ1 베이스 저항R210kΩQ1 풀업RB24.7kΩQ2 베이스 저항VCC12VVG3.3VGPIORL240Ω부하Q12N3906하이사이드Q22N3904레벨 변환VPBASEDRVB2GPIOOUTGND
PNP 하이사이드 스위치워크벤치에서 열기 →
부품어디에 붙나하는 일
Q1 (PNP)이미터가 VCC, 컬렉터가 부하부하의 위쪽(high side)에서 전원을 끊는다 → 부하 한쪽을 GND에 고정할 수 있다
R2 (풀업)VCC ↔ Q1 베이스아무도 안 끌면 베이스를 VCC로 올려 기본 OFF로 만든다
R1Q1 베이스 ↔ Q2 컬렉터Q2가 켜졌을 때 베이스 전류를 제한한다
Q2 (NPN)컬렉터가 R1, 이미터가 GND레벨 변환. 3.3 V GPIO로 12 V 레일에 있는 Q1의 베이스를 끌어내린다
RB2R_{B2}GPIO ↔ Q2 베이스Q2의 베이스 전류 제한

⚠️ PNP 하이사이드는 주의가 필요합니다:

  • 베이스를 VCC−0.7V_{CC} - 0.7 V까지 끌어내려야 켜집니다
  • MCU가 3.3 V인데 VCCV_{CC}가 12 V면, GPIO를 High로 해도 베이스가 3.3 V라 여전히 켜져 있습니다
  • 해결: NPN 하나를 추가해 2단 구성하거나, P-MOSFET + 레벨 시프트를 씁니다

이 문제 때문에 실무에서는 하이사이드는 P-MOSFET + 드라이버를 더 많이 씁니다 (05).


시뮬레이션으로 확인

NPN 로우사이드 스위치 회로도RB470ΩRL240Ω릴레이 코일VCC12VVG3.3VGPIOQ12N3904VPCOLBASEGPIOGND
NPN 로우사이드 스위치워크벤치에서 열기 →
# examples/06-transistor/npn-switch.yaml
meta:
  name: NPN 로우사이드 스위치
  lesson: docs/06-transistor/02-bjt-switch.md
components:
  - {ref: VCC, type: vdc, value: 12}
  - {ref: VG,  type: vdc, value: 3.3, label: GPIO}
  - {ref: RB,  type: r,   value: 470}
  - {ref: RL,  type: r,   value: 240, label: 릴레이 코일}
  - {ref: Q1,  type: q_npn, model: 2N3904}
nets:
  VP:   [VCC.p, RL.1]
  COL:  [RL.2, Q1.c]
  BASE: [RB.2, Q1.b]
  GPIO: [VG.p, RB.1]
  GND:  [VCC.n, VG.n, Q1.e]
analyses:
  - {type: op}
expect:
  - {measure: v, node: COL, max: 0.4}          # 포화 확인
  - {measure: i, through: RL, value: 49m, tol: 10%}

COL 노드가 0.2 V 근처면 포화된 것입니다. 0.4 V를 넘으면 베이스 구동이 부족한 것입니다.


⚖️ 부품 트레이드오프

선택✅ 좋아지는 것⚠️ 나빠지는 것
RBR_B를 작게 (과구동↑)확실한 포화, VCE,satV_{CE,sat} 최소, β\beta 편차에 강함GPIO 전류 증가, 끄는 속도 느려짐(저장 시간), 소비 전력
RBR_B를 크게GPIO 부담 적음, 빠른 턴오프포화 불충분 → VCEV_{CE} 상승 → 발열, β\beta 편차에 취약
베이스-이미터 풀다운 저항 추가GPIO가 하이임피던스일 때 확실히 OFF, 누설 차단(cutoff), 턴오프 가속부품 추가, GPIO 전류 약간 증가
BJT 대신 MOSFET게이트 전류 0, 낮은 ON 저항, 빠름VGSV_{GS} 요구 확인 필요(로직 레벨), 게이트 용량 충전 전류
달링턴 (2단)매우 큰 전류 이득(current gain)VCE,satV_{CE,sat}이 0.9 V로 높아 발열 큼, 느림

💡 베이스-이미터 간 풀다운 저항(10 kΩ) 은 값싼 보험입니다. MCU 리셋 중이나 부팅 전에 GPIO가 하이임피던스가 되는데, 이때 노이즈로 트랜지스터가 켜질 수 있습니다. 릴레이나 모터가 의도치 않게 동작하면 위험합니다.

측정 회로 관점

문제대책
스위칭 순간의 di/dtdi/dt가 접지를 흔듦부하 전류 경로를 아날로그 접지에서 분리
베이스 저항을 통해 스위칭 노이즈가 MCU로 역류게이트/베이스 저항, MCU 전원 디커플링
유도성 부하의 역기전력플라이백 다이오드(diode)를 부하 바로 옆에 (루프 최소화)
큰 전류 루프가 자기장 발생부하 전류 루프 면적(loop area)루프 면적 loop area가는 길과 오는 길이 감싸는 넓이로, 이것이 곧 안테나 크기이므로 좁힐수록 잡음이 줍니다.자세히 보기 → 최소화, 아날로그부와 물리적 분리

🔌 실제 쓰임새

부하주의
LED (다수)GPIO 한계 초과 시
릴레이플라이백 다이오드 필수
솔레노이드·밸브플라이백 + 큰 전류
소형 모터플라이백 + 돌입 전류(inrush current)돌입 전류 inrush current전원을 켜는 순간 빈 커패시터로 쏟아져 들어가는 큰 전류로, 수십 A 에 이르기도 합니다.자세히 보기 → + 브러시 노이즈
부저유도성이면 플라이백
다른 전압 레일의 로직레벨 시프트 겸용 (9-05)

⚠️ 이상과 실제의 차이

이상실제
VCE,sat=0.2V_{CE,sat} = 0.2 V전류가 크면 0.3~0.6 V까지 올라감
즉시 ON/OFF저장 시간(µs급)으로 턴오프가 느림
β\beta가 데이터시트대로개체차·온도로 크게 변동 → 과구동 필수
GPIO가 3.3 V를 유지전류를 뽑으면 VOHV_{OH}가 떨어짐
부하가 순수 저항모터·릴레이는 유도성 + 돌입 전류

연습문제

문제 1. 5 V GPIO로 100 mA 부하를 스위칭합니다. RBR_B는? (IB=IC/10I_B = I_C/10)

연습 6-02-1 — GPIO 로 100 mA 를 스위칭할 때 R_B 회로도RB430Ω베이스 저항RL47Ω부하 100 mA 상당VCC5VVG5VGPIO HighQ12N3904VPCGBGND
연습 6-02-1 — GPIO 로 100 mA 를 스위칭할 때 R_B워크벤치에서 열기 →
풀이 IB=10 mAI_B = 10\ \text{mA}
기호
I_B베이스 전류base currentA
RB=5−0.80.010=420 ΩR_B = \frac{5-0.8}{0.010} = 420\ \Omega
기호
R_B베이스 저항base resistanceΩ

390 Ω 또는 430 Ω 선택.

⚠️ GPIO 전류 확인: 10 mA는 많은 MCU의 핀당 한계(8~20 mA)에 근접합니다. 데이터시트를 확인하고, 부족하면 MOSFET으로 바꾸거나 IBI_B를 줄이되 β\beta 여유를 확인해야 합니다.

문제 2. 12 V, 500 mA 부하를 2N3904로 스위칭하려 합니다. 문제가 있습니까?

exercises/06-02-2n3904-limit.yaml
풀이

여러 문제가 있습니다.

  1. 최대 컬렉터 전류 초과: 2N3904는 IC,max=200I_{C,max} = 200 mA입니다. 500 mA는 정격 초과입니다.

  2. 전력 손실: 500 mA에서 VCE,satV_{CE,sat}은 약 0.5 V까지 올라갑니다.

    P=0.5×0.5=0.25 WP = 0.5\times0.5 = 0.25\ \text{W}
    기호
    P전력powerW

    2N3904의 정격은 625 mW(자유공기, 25 °C)이지만, 실제로는 디레이팅해야 하고 TO-92 패키지는 방열이 나쁩니다.

  3. 베이스 전류: IB=50I_B = 50 mA가 필요한데, GPIO로는 불가능합니다.

해결:

  • MOSFET 사용 (예: AO3400, RDS(on)=30 mΩR_{DS(on)} = 30\ \text{m}\Omega → 손실 0.52×0.03=7.50.5^2\times0.03 = 7.5 mW) ← 최선
  • 또는 전력 BJT(TIP120 등) + 방열

문제 3. 스위칭 회로 옆에 µV 신호를 다루는 계측 증폭기(instrumentation amplifier)계측 증폭기 instrumentation amplifier두 입력 모두 임피던스가 높으면서 차동만 증폭하는 구조로, 전극 측정의 표준 첫 단입니다.자세히 보기 →가 있습니다. 어떤 대책이 필요합니까?

exercises/06-02-switch-crosstalk.yaml
풀이

1. 접지 분리 부하 전류(수백 mA)가 아날로그 접지를 통과하지 않도록, 부하의 접지 리턴을 전원 입구로 직접 보냅니다. 아날로그 접지와는 한 점(스타 포인트)에서만 만나게 합니다 (12-03).

2. 전류 루프 면적 최소화 전원 → 부하 → 트랜지스터 → 접지 → 전원의 루프가 만드는 자기장이 계측 증폭기의 입력 루프에 유도 전압을 만듭니다 (2-01 문제 4). 부하선과 리턴선을 나란히 붙이거나 꼬아서 면적을 줄입니다.

3. 플라이백 다이오드를 부하 바로 옆에 멀리 두면 그 사이 배선(trace) 인덕턴스(inductance)에서 큰 L di/dtL\,di/dt가 발생해 광대역 노이즈를 방사합니다.

4. 스위칭 속도를 늦춤 베이스/게이트 저항을 키워 di/dtdi/dt를 줄입니다. 스위칭 손실은 늘지만 노이즈가 크게 줄어듭니다. 저속 부하(릴레이)라면 빠를 이유가 없습니다.

5. 물리적 거리와 차폐(shielding)차폐 shielding도체로 감싸 전기장을 막는 것으로, 한쪽 끝만 접지해야 접지 루프가 생기지 않습니다.자세히 보기 → 계측 증폭기를 스위칭 회로에서 멀리, 가능하면 그라운드 플레인(plane)그라운드 플레인 ground plane한 층을 통째로 접지로 쓰는 것으로, 리턴 패스가 알아서 최단 경로를 찾게 해 줍니다.자세히 보기 →이나 차폐로 분리합니다 (15-06).

6. 측정 타이밍 동기화 가능하다면 스위칭이 없는 구간에서만 샘플링합니다. 이것이 가장 확실한 해법일 때가 많습니다.

자세한 사례 → 16-05 액추에이터 간섭


이전 ← 01 BJT의 동작 영역 | 다음 → 03 이미터 공통 증폭기