본문 바로가기

전자공학을 즐겁게/누구나 취미전자공학

스위치로서의 MOSFET

728x90
반응형

라즈베리 파이 GPIO의 Driver Stength에 대해서 이야기한 적이 있습니다.

디지털 신호를 나타내는 GPIO에 부하가 가해져서 그 전압이 떨어지면 원하는 동작을 예측하기가 어려워질 뿐만 아니라 원하는 동작을 제대로 만들어 낼 수가 없습니다. 전자회로를 꾸밀 때에는 모든 상황을 내가 원하는 대로 통제할 수가 있어야 합니다. 그러니까, 전류가 어느 정도 되는 필요한 부하를 연결할 때에는 직접 GPIO에 연결하는 것이 좋은 아이디어는 아닌 것이죠. 소스의 전압이 마구 떨어져 버릴 테니까요. 그러면 어떤 방법이 있을까 생각해 보겠습니다.

스위치 모델

그림 같은 장치가 있으면 참 좋겠는데요. 그림처럼 스위치를 켜는 신호를 주면 스위치를 연결해 주고, 그렇지 않으면 스위치를 끊어주어서 전원이 연결되었다가 끊어졌다가 하게 되면, 신호 V는 그냥 스위치를 켜고 끄는 신호만 하고, 실제로 에너지는 전원에서 받아 오니 부하에 대한 걱정을 덜 수가 있습니다. 신호 V가 받는 영향은 줄어들뿐더러 전원 VDD는 충분히 에너지를 공급할 수 있는 전원이니 모두 알고 있는 값으로부터 내 회로를 통제할 수가 있게 됩니다.

이러한 스위치 모델을 구현하는 여러 가지가 있겠지만, 반도체 소자 중에 MOSFET(Metal Oxide Semiconductor Field Effect Transistor)이라는 소자를 사용하여 스위치 모델을 구현할 수가 있습니다. 트랜지스터(Transistor)라는 반도체 소자의 하나입니다. "모스펫"이라고 읽습니다.

제가 자주 들르는 온라인 쇼핑 사이트에도 여러 모양의 MOSFET을 찾을 수 있습니다.

Transistor나 MOSFET의 물리적인 원리는 다른 좋은 자료들이 많으니 그것들을 참조하시구요, 우리는 여기에서 MOSFET을 활용한 스위치 모델에 집중하여 살펴보도록 하겠습니다. 

MOSFET은 크게 N-Channel MOSFETP-Channel MOSFET이 있는데, 스위치 모델로 가장 쉽게 사용할 수 있는 것은 N-Channel MOSFET입니다. 

2N7000이라는 N-Channel MOSFET의 회로도 기호입니다.

위의 그림을 KiCad의 라이브러리에서 찾은 2N7000이라는 N-Channel Enhancement Mode MOSFET의 회로 기호입니다. 1번으로 표시된 단자를 소스(Source), 2번으로 표시된 단자를 게이트(Gate), 3번으로 표시된 단자를 드레인(Drain)이라고 부릅니다. 수도꼭지처럼 게이트에서 물줄기를 조절하면 소스로부터 드레인으로 전하의 이동이 만들어지는 것으로부터 이름이 만들어졌다고 합니다. 이것은 N-Channel MOSFET이기 때문에 음전하(-)를 띈 전자가 소스로부터 드레인으로, 즉 전류는 드레인으로부터 소스로 흐르게 됩니다. 전류는 양전하의 흐름을 기준으로 하기 때문에 그렇습니다. 이것을 드레인 전류(Drain Current)라고 하고 $I_D$로 보통 표기합니다. P-Channel MOSFET은 그 반대겠죠? 게이트에서는 전압으로 조절을 합니다. 그래서 흔히 FET은 전압 제어 전류원(Voltage-Controlled Current Source)라고 부릅니다.

728x90

좀 더 구체적으로 이야기해 보겠습니다. N-Channel MOSFET은 소스 기준 게이트에 가해지는 전압에 따라서 드레인으로부터 소스 방향으로 전류가 흐르게 됩니다. N-Channel MOSFET에 있어서는 게이트의 전압이 소스보다 높아야 하기 때문에, 우선  $V_G-V_S=V_{GS} > 0$이어야 합니다. 그리고, Enhancement Mode MOSFET의 경우에는 이 $V_{GS}$가 어떤 전압 $V_{th}$보다 높게 되면 전류가 흐르기 시작합니다. Depletion Mode MOSFET이라고 해서 처음부터 어느 정도 전류가 흐르는 종류도 있지만, 지금 우리가 사용하는 용도에는 Enhancement Mode MOSFET이 좋은 것 같네요. 즉, $V_{GS}>V_{th}$가 되면 스위치가 켜진다고 보면 됩니다. 

 

간단한 것인데 말로만 이야기하니 무슨 말인지 모르겠죠? 우리가 원하는 동작을 하는 회로를 만들어 놓고 살펴보죠.

QUCS라는 회로 시뮬레이션 프로그램으로 MOSFET을 시뮬레이션 해 보았습니다.

위의 그림은 QUCS라는 프로그램에서 시뮬레이션을 해 본 것입니다. 우리가 생각했던 스위치 모델을 그대로 시뮬레이션했습니다. $V_{GS}=3V$, $VDD=3V$로 했지만, 실제 시뮬레이션은 $V1$을 $2V$~$3V$까지 변화시키면서 살펴본 것입니다. 오른쪽 그래프에서 X축은 $V1$의 변화를, 분홍색 선은 $Pr1$에 흐르는 전류, 즉 드레인 전류 $I_D$를 나타냅니다. 그리고, 파란색 선은 MOSFET의 드레인과 소스 사이의 전압, 즉 $V_{DS}$를 표시한 것입니다. 

$V1$이 증가하면서, 약 $2.5V$를 넘어서면서 분홍색 선, 즉 $I_D$가 흐르기 시작합니다. 이때의 전압이 문턱전압(Threshold Voltage) $V_{th}$입니다. 이 순간에 스위치는 $V1$이 이를 넘어 더 증가하면 $I_D$는 이에 따라 올라가죠. 이 상태가 스위치가 ON 된 상태입니다. 그런데, $V1>2.7V$가 되면서 전류의 증가가 둔해집니다. 왜냐구요? $V_{DS}$가 더 떨어질 수가 없거든요. 무슨 말이냐면, $3V$의 $V2$가 $D1$, $R1$, $V_{DS}$ 이렇게 나뉘어 전압 강하를 하는데, $D1$과 $R1$에서 모두 떨어져서 전류는 흐르지만 $V_{DS}$는 0으로 떨어지는 것입니다. 더 어려워요? 그럼 아예 수식으로 적어 볼까요?

$$ V2 = 3V = V_{F,D1} + V_{R1} + V_{DS}$$ $$V_{F,D1} + V_{R1} = V_{F,D1} + I_D{\times}R1 \longrightarrow3V{\Rightarrow}V_{DS}\longrightarrow0V $$

좀 나은가요? 이렇게 되면, $3V$는 온전히 $D1$과 $R1$에 걸려서 우리 스위치 모델처럼 되는 것입니다. 실제로 우리가 사용할 $V1=3V$인 경우를 보면 $V_{DS} \approx 0V$인 것을 알 수가 있습니다. 단, 드레인 전류 $I_D$에는 $V_{GS}$에 의하여 정해지는 만큼 해당 전류 내에서 부하에 모든 전원 전압이 가해지도록 하는 것이 중요합니다. 무작정 큰 전류를 흘릴 수는 없어요. MOSFET의 특성에 따라 전류가 다르지만, 지금은 이 정도로만 알아두죠. 

 

이젠 라즈베리 파이의 GPIO로 LED를 동작시켰던 글에서 사용했던 LED 회로 중에 하나만 살짝 바꾸어 볼까요? 이젠 손으로 그리기 귀찮아서 CAD를 사용해야겠어요. 

2개의 LED 중 하나의 연결은 N-Channel MOSFET을 사용하여 스위치 모델을 만들었습니다.

사용한 MOSFET은 2N7000입니다. TO-92라는 스루홀(Through-Hole) 형태의 MOSFET이고, 데이터시트를 살펴보면 단자의 위치를 알 수 있도록 표기가 되어 있습니다. 위의 그림의 왼쪽 아래에 데이터시트로부터 발췌한 그림이 있습니다. TO-92라는 형태는 위쪽에서 보면 반원 형태로 한쪽이 편평하게 되어 있습니다. 데이터시트를 살펴보면 알겠지만, 이 편평한 면을 앞에서 바라보았을 때, 왼쪽으로부터 차례대로 소스(Source), 게이트(Gate), 드레인(Drain)입니다. 데이터시트는 온라인에서 구매했다면 구매한 사이트에 연결이 되어 있거나, 없는 경우에는 제조사 웹페이지나, 혹은 그냥 검색을 해 보아도 찾을 수 있을 것입니다. 이런 부품을 다루다 보면 모든 내용은 데이터시트에서 찾아야 합니다. 항상 데이터시트를 반드시 참조하는 습관을 들여야 합니다. 

회로도에 라즈베리 파이의 40핀 헤더에서의 핀 번호와 신호의 이름을 적어 두었습니다.

전체 구성은 이와 같이 될 것입니다.

전체 구성의 사진은 위에 있습니다만, 선을 연결할 때에는 반드시 회로도를 참조하세요. 

 

코드는 전에 사용하던 것을 그대로 사용하죠.

https://github.com/sangyoungn/play_with_RPi/tree/main/led_control

 

GitHub - sangyoungn/play_with_RPi: Example Codes for Raspberry Pi

Example Codes for Raspberry Pi. Contribute to sangyoungn/play_with_RPi development by creating an account on GitHub.

github.com

지난번에 사용하던 것과 같고, 실행하는 방법도 동일합니다. 

python led_toggle.py

동작은 똑같아 보이죠? 당연히 같은 코드를 사용했으니 똑같습니다. 동작은 동일하여야 합니다. 

그럼 차이점이 무엇일까요? 

각 LED가 동작할 때, 신호의 전압을 확인해 보세요. 오실로스코프가 있으면 좋겠지만, 간단하게는 멀티미터로 전압을 측정해 보면 됩니다. 멀티미터로 전압 측정하는 법은 알고 있지요?

동작하는 상태에서 라즈베리 파이 40핀 헤더의 3번 핀과 6번 핀 사이의 전압5번 핀과 6번 핀 사이의 전압을 확인해 보세요. 그냥 3번 핀과 6번 핀의 신호를 확인하는 것입니다. 모든 전압은 GND 기준이니까 6번 핀을 기준으로 삼는 것이구요. 3번 핀의 전압은 MOSFET 스위치 모델에 연결된 LED가 켜질 때 HIGH 전압이 될 것이구요, 5번 핀은 나머지 LED가 켜질 때 HIGH 전압이 될 것입니다. 라즈베리 파이에서는 보통 3.3V가 HIGH 전압이라고 알고 있지요? 3번 핀의 전압은 HIGH가 되었을 때 거의 우리가 알고 있는 전압일 것입니다. 반면에 5번 핀은? 제 경우에는 2.9V 정도까지 떨어져서 측정이 되네요. 바로 전류 부하가 작용하는 GPIO의  Drive Strength 때문입니다. MOSFET으로 스위치 모델을 구현하면 아주 미세한 전류로 스위치를 켜는 동작을 하고, 전류 부하는 전원으로부터 공급받기 때문에 GPIO에는 전류 부하가 크게 걸리지 않는 것입니다. 

 

우리는 여기에서 그저 작은 LED 정도를 구동시켰지만, GPIO의 Drive Strength를 넘거나 영향을 주는 전류 부하를 다룰 때에는 이와 같은 고려를 해야지만, 전체 회로의 로직에 영향을 주어서 예기치 않는 동작을 하는 것을 방지할 수가 있습니다. 서두에도 이야기한 것처럼 하드웨어 동작의 모든 것을 통제할 수가 있어야 합니다. 그저 동작하네 하고 넘어가 버리면 안 돼요. 오늘은 여기까지 하겠습니다.

728x90
반응형