풀업 저항은 왜 필요할까
MCU 입력 핀에 아무것도 연결하지 않으면 핀은 HIGH도 LOW도 아닌 떠 있는 상태(floating)가 됩니다. 이 상태의 핀은 주변 노이즈에 따라 0과 1을 제멋대로 오갑니다. 풀업 저항은 이 핀을 전원 쪽으로 약하게 붙잡아 두는 저항입니다.
버튼 회로로 보기
버튼 한쪽을 GND에, 다른 쪽을 입력 핀에 연결하고, 입력 핀과 VCC 사이에 풀업 저항을 답니다.
- 버튼을 누르지 않으면: 저항을 통해 핀이 VCC에 연결되어 HIGH
- 버튼을 누르면: 핀이 GND에 직접 연결되어 LOW
눌렀을 때 LOW가 되는 방식이라 처음에는 거꾸로 느껴지지만, 실무에서 가장 흔한 구성입니다.
저항 값 고르기
보통 4.7 kΩ에서 10 kΩ을 씁니다. 값에 따라 장단점이 갈립니다.
| 작은 값 (예: 1 kΩ) | 큰 값 (예: 100 kΩ) | |
|---|---|---|
| 버튼을 눌렀을 때 전류 | 큼 (3.3 V에서 3.3 mA) | 작음 (33 µA) |
| 노이즈에 버티는 힘 | 강함 | 약함 |
| 신호가 HIGH로 올라가는 속도 | 빠름 | 느림 |
3.3 V에 10 kΩ이면 버튼을 누르고 있는 동안 0.33 mA가 흐릅니다. 대부분의 버튼 입력에는 이 정도면 충분합니다.
내부 풀업
대부분의 MCU에는 핀마다 내부 풀업이 들어 있어 설정만으로 켤 수 있습니다. 다만 값이 수십 kΩ으로 큰 편이라, 선이 길거나 노이즈가 많은 환경에서는 외부 저항을 따로 다는 편이 안전합니다.
I2C에 풀업이 꼭 필요한 이유
I2C의 SDA, SCL은 오픈 드레인 방식입니다. 칩은 선을 LOW로 당기기만 할 수 있고, HIGH로 올리는 일은 풀업 저항이 맡습니다. 풀업이 없으면 선이 HIGH로 돌아오지 못해 통신 자체가 되지 않습니다.