-
[MCU] Push-Pull , Open-DrainSoftware/RTOS 2024. 8. 22. 14:30728x90
개요
GPIO 핀을 출력으로 사용하고 싶을 경우 꼭 설정해줘야 하는 부분이 Push-pull, Open-Drain 설정이다. 아래 코드를 보자.
// // 'Step 2. Initialize GPIO: // This example function is found in the F2837xS_Gpio.c file and // illustrates how to set the GPIO to its default state.' InitGpio(); GPIO_SetupPinMux(31, GPIO_MUX_CPU1, 0); GPIO_SetupPinOptions(31, GPIO_OUTPUT, GPIO_PUSHPULL); '
위의 TI사에서 제공하는 ControlSuit의 기본 함수인 GPIO_SetupPinOption은 다음과 같은 인자를 가지고 있다.
1. 몇 번 핀을 설정할 것인가.
2. 해당 핀이 입력 혹은 출력 중 어느 것으로 사용되는가.
3. (입력일 경우)Pullup / Invert / Sync / Async (출력일 경우) Push-pull / Open-Drain 중 어느 회로로 동작하는가.GPIO를 출력핀으로 쓰고 싶을 경우 마지막 인자인 Push-pull / Open-Drain을 설정하기 위해서는 아래 회로에 대한 이해가 필요하다.
Push-pull
먼저 Push-Pull 회로는 MCU 내부의 VDD를 그대로 입출력으로 사용할 경우 설정하는 회로이다. 거의 대부분의 GPIO의 경우 Push-pull로 설정을 구성한다.
Push-pull 동작 원리
Push-pull 회로는 N-MOSFET 한개와 P-MOSFET 한개로 구성되어 있다. P-MOS의 특징은 입력 전압이 0이면 드레인과 소스가 붙는다. N-MOS는 반대로 입력 전압이 1일 때 드레인과 소스가 붙는다.
따라서 위의 Push-pull 회로는 입력 신호가 0일 때 ( Low ), Outpin으로 VDD가 Push되고, 입력 신호가 1일 때( High ) Outpin으로 Gnd가 Pull되어 출력된다. GPIO로 Low든 High든 신호를 입력하면 VDD와 GND가 번갈아가며 출력신호로 빠진다.
Open-Drain
Open-Drain 회로는 해당 GPIO핀과 연결된 회로(IC나 MCU 등)가 내 MCU의 VDD와 전압차가 날 경우 사용한다. 만약 내 MCU가 5볼트의 VDD를 가지고 있는 데, 연결된 회로가 3.3V의 입력 전압으로 동작하는 회로라면 Push-pull을 써서 그대로 VDD를 내보낼 경우 연결된 회로의 입력 단자에서 문제가 생길 수 있기 때문이다.
Open-Drain 동작 원리
Open-Drain회로는 N-MOS 한개로 구성된다. push-pull에서 알아본 것 처럼 NMOS는 Vgs가 1일 때 붙고, 0일 때 단락된다.
즉, 위의 회로에서는 Gate에 High 신호가 들어오면 NMOS가 연결될 것이고, Low신호가 들어오면 NMOS가 떨어질 것이다.위 회로에서 그럼 Pin으로 VCC가 붙었다가 떨어졌다가 하면서 출력으로 나가야 한다는 것인데, 문제는 VCC가 Floating 상태라는 것이다. 이유는 NMOS가 단락 상태일 경우 VCC가 Pin으로 들어가고 있는 지 아닌 지 확인할 방법이 없다는 것이다. NMOS가 붙었을 경우도 마찬가지이다. VCC가 Pin으로 가는지 Gnd로 빠지는 지 확인할 방법이 없다.
이 문제를 해결하기 위해 연결 되는 것이 Pull-up 저항이다. Pull-up 저항을 VCC와 Drain 사이에 달아줌으로써, NMOS가 단락일 경우 Pin에 VCC에서 Pull-up 저항을 통과한 만큼의 전압이 흐르게 될 것이다. 반대로 NMOS가 연결 됐을 경우에는 Gnd쪽이 쇼트이므로 거의 모든 전류가 Gnd로 흘러가고 Pin에는 0V가 걸리게 되는 것이다.이 Pull-up 저항의 값을 조절하여 Pin(다음 회로)에 인가되는 전압의 양도 적절하게 조정할 수 있기 때문에 전압 차 문제도 해결 될 수 있다. 이 Pull-up 저항은 MCU 내부에 각 핀마다 부착된 가변저항을 활용하는 Internal pull-up 저항이 있고, 사용자가 직접 핀 외부 PCB에 부착하는 External pull-up 저항이 있다. 각각의 장단점이 있는 데 다음과 같다.
장점 단점 내부 풀업 저항
(Internal Pull-up Resistor)
- 소스코드만으로 저항 값을 변화 시킬 수 있다.
- PCB 크기를 줄일 수 있다.
- 코스트를 저항 가격만큼 줄일 수 있다.(눈꼽만큼)- MCU의 발열이 커질 수 있다. 외부 풀업 저항
(External Pull-up Resistor)- MCU에 열이 덜 난다. - Built-in PCB에서는 수정이 쉽지 않다.
- PCB 사이즈가 커질 수 있다.결론
GPIO 출력 설정에 있어서 가장 중요한 부분 중 하나인 Push-pull 과 Open-Drain 회로에 대해 자세하게 알아보았다. 해당 부분들은 소스코드 뿐만 아니라 MCU 외부 회로와도 밀접한 연관이 있기 때문에 회로를 같이 참조하는 데 꼭 필요한 지식이므로 펌웨어 개발자들은 필히 숙지해 두어야 하는 내용일 것이다.
728x90'Software > RTOS' 카테고리의 다른 글
MUX (Multiplexer) (0) 2024.08.22 JTAG (Joint Test Action Group) (0) 2024.08.21 Peripheral ( 주변 장치 ) (0) 2024.08.20 [TMS320F28377D] 개요 (0) 2024.08.20 [TI] SDFM (Sigma Delta Filter Module) (0) 2024.08.19