ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [MCU] Push-Pull , Open-Drain
    Software/RTOS 2024. 8. 22. 14:30
    728x90
    개요

    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 회로

     

     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 동작 원리

    Internal pull-up resistor로 구성된 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