아두이노 회로를 구성할 때 PULL-UP저항이나 PULL-DOWN저항을 설치하는 이유는 플로팅상태를 방지하고 HIGH 또는 LOW값을 명확히 하기 위한 것이다. 

 

플로팅현상

 

 

 

스위치를 눌렀을 때 아두이노 D2 핀에 LOW신호를 입력하기 위해 위와 같은 회로를 구성했다고 가정해 본다.

 

스위치를 눌렀을 때 GND와 연결되므로 LOW신호가 D2핀에 입력되는 것은 맞다. 그런데 스위치를 누르지 않았을 때에는 D2핀은 아무 것과도 연결되어 있지 않아 있기 때문에 LOW가 아닌 HIGH라고 장담할 수 없는 상태이다.

 

실제로 테스트해 보면 스위치를 누르지 않은 상태에서는 불규칙적으로 HIGH 또는 LOW상태를 오가게 되는 데 이를 플로팅현상이라고 한다. 즉, 회로를 구성한 목적은 스위치를 눌렀을 때만 LOW이길 원하는데 스위치를 누르지 않은 상태에서도 불규칙적으로 LOW값이 입력되게 되므로 회로가 정상적으로 작동되지 않는다.    

 

 

PULL-UP저항

 

위와 같은 문제를 해결하기 위해 다음과 같이 5V와 D2단자를 연결하여 스위치를 누르지 않았을 때 HIGH신호를 입력되게 하면 되겠지만 이렇게 하면 5V와 D2 또는 5V와 GND가 직접 연결되어 너무 많은 전류가 흐르게 되므로 아두이노가 망가져 버린다.  

 

 

 

그래서 흐르는 전류량을 제한하기 위해 다음과 같이 10K옴 정도의 큰 저항을 통해 5V신호를 D2단자에 연결해서 스위치를 누르지 않을 때에 D2핀에 HIGH신호가 전달되도록 회로를 구성하는 방식을 사용하는데, 이를 PULL-UP 저항을 설치한다고 하는 것이다. 즉,스위치를 누르지 않은 평상시에 단자를 HIGH로 올려놓기 위한 회로에 들어가는 저항이라는 의미이다. 

 

 

    

PULL-DOWN저항 

 

위와는 반대로 스위치를 눌렀을 때 HIGH신호가 전달되기 원하는 회로에서는 스위치가 눌러지지 않은 상태에서 LOW신호가 전달되도록 하는 방식의 회로를 사용하는데 이를 PULL-DOWN저항 방식이라고 한다.

 

 

INPUT_PULLUP 모드 

 

그런데 이와 같이 회로를 구성할 때 마다 PULL-DOWN, PULL-UP 회로를 구성하는 것이 번거롭기 때문에 아두이노에서는 내부적으로 이를 지원하기 위한 기능이 있다.  

아두이노 pinMode에는 INPUT과 OUTPUT이외에 INPUT_PULLUP이라는 모드가 있어 INPUT_PULLUP을 지정하면 입력이 없을 때 내부 회로로 PULL-UP상태가 유지되도록 해주는 기능이 있으므로 외부 PULL-UP 저항을 생략하고 회로를 구성할 수도 있다.

 

+ Recent posts