저항의 모든 것 4편 | 풀업/풀다운 저항 원리와 사용법

저항 하나 값을 잘못 잡아서 I2C 통신이 간헐적으로 끊기는 걸 며칠 동안 못 찾은 적이 있습니다. 스코프로 파형을 찍어보니 신호가 High로 올라가는 속도가 너무 느려서, 클럭이 빨라지는 구간에서 데이터가 깨지고 있었습니다. 원인은 다름 아닌 풀업 저항값이었고, 그때 저는 풀업 저항이 "그냥 아무 값이나 달아두면 되는 부품"이 아니라는 걸 제대로 배웠습니다. 디지털 회로에서 가장 기본이면서도 가장 만만하게 보는 이 부품, 오늘은 풀업과 풀다운 저항의 원리부터 실무 주의사항까지 정리해보겠습니다.

풀업·풀다운 저항을 쓰는 이유와 원리

[풀업/풀다운 저항의 개념 정리]

디지털 입력핀은 전원(VCC)이나 그라운드(GND) 어느 쪽에도 연결되지 않으면 전압이 정해지지 않은 상태가 됩니다. 이걸 플로팅(Floating) 상태라고 부르는데, 이 상태에서는 주변 노이즈나 정전기만으로도 핀의 전압이 흔들려서 High와 Low가 랜덤하게 읽힐 수 있습니다(출처: 그래블로 도움말, 풀업/풀다운 저항).

이 문제를 해결하는 방법이 풀업(Pull-up)과 풀다운(Pull-down) 저항입니다. 풀업 저항은 전원과 입력핀 사이에 저항을 넣어서, 아무것도 안 눌렀을 때는 High로 고정하고 스위치가 눌리면 GND로 전류가 흘러 Low가 되게 만듭니다. 풀다운은 반대로 저항을 GND 쪽에 걸어서 평상시 Low를 유지하다가 스위치가 눌리면 High가 되게 합니다.

여기서 핵심은 입력핀의 임피던스가 풀업 저항보다 훨씬 크다는 점입니다. 일반적으로 마이크로컨트롤러 입력핀의 임피던스는 100k~1M옴 수준으로 알려져 있는데, 이게 풀업 저항값보다 훨씬 크기 때문에 스위치가 열린 상태에서는 풀업 저항 양단에 전압강하가 거의 없이 핀 전압이 전원전압에 가깝게 유지됩니다. 저는 신입 엔지니어에게 이 개념을 설명할 때 항상 "전류가 흐를 수 있는 가장 쉬운 길을 만들어주는 것"이라고 표현합니다.

요약 — 풀업/풀다운 저항은 디지털 입력핀이 플로팅 상태에 빠지지 않도록 전원 또는 GND 쪽으로 미리 전압을 고정시켜주는 역할을 합니다.

풀업·풀다운 저항의 종류와 값 선정법

용도에 따라 저항값을 다르게 잡아야 합니다. 단순 버튼 입력용은 크게 신경 쓸 필요가 없지만, I2C 같은 통신용은 계산이 필요합니다.

용도 일반적인 값 비고
단순 버튼/스위치 10K 가장 무난한 표준값
I2C 표준모드(100kHz) 4.7K 5V 기준 통상값
I2C 고속모드(400kHz) 1K~2.2K 상승시간 단축 필요
저전력/배터리 회로 100K~1M 전류소모 최소화 우선

I2C 풀업저항은 버스 주파수와 직접 연관되어 있는데, 표준 모드에서는 대략 10K, 고속 모드에서는 클럭 상승 시간을 줄이기 위해 1K 안팎의 값을 흔히 사용하며 공급전압이 5V일 때는 4.7K, 3.3V일 때는 3.3K 정도가 통상적인 기준값으로 알려져 있습니다(출처: GNS Components, 풀업/풀다운 저항의 정의와 응용).

저는 값을 고를 때 두 가지를 동시에 봅니다. 값이 너무 작으면 전류소모가 늘고, 값이 너무 크면 노이즈에 약해지고 신호 상승속도가 느려집니다. 배터리로 동작하는 저전력 기기는 소비전류를 우선해서 큰 값을 쓰고, 통신 라인은 속도와 노이즈 내성을 우선해서 작은 값을 씁니다.

현장 팁 — MCU 내장 풀업으로 해결 가능한 자리라면 외부 저항을 굳이 추가하지 않습니다. 다만 I2C처럼 여러 노드가 붙는 버스는 내장 풀업만으로는 부족한 경우가 많아 외부 저항을 별도로 계산해서 넣습니다.

대표적인 풀업용 부품, 저항 어레이의 내부 구조

채널이 많은 보드에서는 낱개 저항 대신 어레이저항(저항 네트워크)을 씁니다. 3편에서 다룬 정밀 정합쌍과 부품 형태 자체는 같지만, 풀업용 어레이는 정밀도보다 실장 밀도가 목적이라 내부 설계 포인트가 조금 다릅니다.

구조를 보면 하나의 세라믹 기판 위에 저항체막을 여러 줄로 인쇄하고, 한쪽 끝을 공통 핀(Common Pin)으로 묶어서 전원이나 GND에 한 번에 연결할 수 있게 만듭니다. 이 공통 핀 구조 덕분에 8채널짜리 풀업이라도 부품 하나, 배선 한 줄로 처리가 가능해 PCB 면적을 크게 절약할 수 있습니다. 각 저항의 다른 쪽 끝은 각각의 GPIO 라인에 개별로 연결됩니다.

제가 검사지그의 다채널 디지털 입력보드를 설계할 때 이 어레이저항을 자주 씁니다. 채널이 16개, 32개로 늘어나는 보드에서 낱개 저항을 하나씩 배치하면 실장 시간과 불량률이 함께 늘어나는데, 어레이저항 하나로 묶으면 자재관리와 조립 공정 모두 단순해집니다. 다만 공통 핀 구조라는 걸 놓치고 서로 다른 전압 레벨의 채널에 같은 어레이를 물렸다가 예상치 못한 크로스토크가 생긴 경험도 있어서, 지금은 전압 레벨이 섞인 보드에서는 어레이 대신 개별 저항으로 분리해서 씁니다.

요약 — 풀업용 어레이저항은 공통 핀 구조로 여러 채널을 한 번에 묶어 실장 밀도를 높이는 부품입니다. 다만 전압 레벨이 다른 채널을 함께 묶으면 문제가 생길 수 있어 주의가 필요합니다.

풀업·풀다운 저항 사용시 주의사항

첫째, RC 시정수(시간상수)를 고려해야 합니다. 풀업 저항과 배선의 기생 정전용량이 만나면 RC 시정수가 생기는데, 저항이 클수록 노이즈로 흔들린 전압이 원상태로 돌아오는 데 시간이 더 걸립니다. 배선 정전용량을 25pF 정도로 잡으면 1K옴에서는 약 25나노초, 100K옴에서는 약 2.5마이크로초가 걸린다는 계산이 실무에서 자주 인용되는 기준입니다(출처: Chaos and Order, 풀업 풀다운과 플로팅 핀).

둘째, 오픈드레인(Open Drain) 방식에서는 풀업 저항이 선택이 아니라 필수입니다. I2C처럼 오픈드레인 출력을 쓰는 인터페이스는 Low만 능동적으로 만들 수 있고 High는 외부 풀업이 없으면 아예 만들 수 없습니다. 이 구조를 모르고 풀업을 빠뜨리면 통신 자체가 안 됩니다. 저도 프로토타입 단계에서 급하게 배선하다가 I2C 풀업을 빼먹고 왜 통신이 아예 안 뜨는지 한참 헤맨 적이 있습니다.

셋째, 다중 노드 버스에서는 로딩(부하)을 계산해야 합니다. I2C처럼 여러 장치가 한 라인에 붙는 버스는 각 장치의 입력 정전용량이 누적되면서 전체 버스 정전용량이 커지고, 그만큼 신호 상승시간도 느려집니다. 장치 수가 늘어날수록 풀업 저항값을 낮춰야 하는 이유가 여기 있습니다.

넷째, 구동능력(Drive Capability)도 함께 봐야 합니다. 풀업 저항값을 무작정 낮추면 Low 구동측 트랜지스터가 그 전류를 다 받아내지 못해 Low 레벨 전압이 예상보다 높게 뜨는 현상이 생깁니다. 실제로 저항을 너무 낮춰서 로우레벨 전압이 기준치를 넘어버리는 경우가 있는데, 이럴 땐 저항값을 더 낮추기보다 통신 클럭 자체를 낮춰서 여유를 만드는 방법이 흔히 쓰입니다(출처: Basic4MCU, I2C 통신의 풀업저항 크기).

현장 팁 — I2C 풀업저항 문제가 의심되면 저는 항상 오실로스코프로 신호의 상승 엣지 기울기부터 확인합니다. 값 계산보다 실측 파형이 훨씬 빠른 진단 수단입니다.

풀업·풀다운 저항에 얽힌 부수적인 이야기

내장 풀업이 있는데 왜 외부 저항을 또 다나요?
MCU 내장 풀업은 보통 20K~50K 정도로 값이 고정되어 있어서 세밀한 조정이 안 됩니다. 통신 속도나 버스 부하 조건에 맞춰 값을 바꿔야 하는 자리에서는 결국 외부 저항이 필요합니다.

버스 컨텐션(Bus Contention)이 뭔가요?
두 장치가 동시에 같은 라인을 서로 다른 레벨로 강하게 밀어붙이면 전원과 GND가 사실상 직결되는 상황이 생기는데, 이걸 버스 컨텐션이라고 부릅니다. 오픈드레인 방식과 외부 풀업 조합이 바로 이 문제를 원천적으로 막아주는 구조입니다.

풀업 저항 값을 왜 하필 4.7K로 많이 쓸까요?
뚜렷한 물리 법칙이라기보다는 오랜 세월 여러 통신 규격과 표준전압 조건에서 노이즈 내성과 전류소모의 균형점으로 굳어진 관행값에 가깝습니다. 그래서 저도 특별한 이유가 없으면 검증된 관행값부터 시작하고, 실측해서 문제가 있을 때만 조정합니다.

풀업·풀다운 저항 관련 자주 묻는 질문 Q&A

Q1. 풀업과 풀다운, 아무거나 골라 써도 되나요?
아닙니다. 스위치를 눌렀을 때 GND로 흐르게 할지, 전원으로 흐르게 할지에 따라 소프트웨어 로직(High/Low 판정)도 반대로 짜야 합니다. 회로와 코드가 항상 짝을 이뤄야 합니다.

Q2. I2C 통신이 가끔씩만 끊기는데 풀업저항 문제일 수 있나요?
네, 저도 비슷한 사례를 겪었습니다. 값이 너무 크면 버스 부하가 늘어날 때 간헐적으로 상승시간이 늦어져 특정 조건에서만 오류가 나는 경우가 흔합니다.

Q3. 풀업저항 없이 그냥 코드로 처리하면 안 되나요?
일부 MCU는 내장 풀업을 소프트웨어로 켤 수 있지만, 오픈드레인 통신처럼 물리적으로 저항이 있어야만 동작하는 구조에서는 소프트웨어만으로 대체할 수 없습니다.

Q4. 버튼 채터링(Chattering)도 풀업 저항과 관련 있나요?
직접적인 원인은 아니지만, 풀업 저항값이 너무 크면 RC 시정수가 늘어나 채터링에 더 취약해질 수 있어 함께 고려하는 게 좋습니다.

Q5. 저항값을 낮췄더니 오히려 통신이 더 불안정해졌어요.
구동측의 Low 레벨 구동능력을 초과했을 가능성이 있습니다. 저항을 무조건 낮추기보다 통신 클럭을 함께 조정해보시길 권합니다.

정리하며

풀업과 풀다운 저항은 디지털 회로의 가장 기초적인 개념이지만, 값 하나 잘못 잡으면 통신 오류로 바로 이어지는 예민한 부품이기도 합니다. 플로팅 상태의 원리부터 RC 시정수, 버스 로딩, 구동능력까지 함께 이해하고 있어야 실제 문제가 생겼을 때 빠르게 원인을 찾을 수 있습니다. 다음 편에서는 전류감지(션트)용 저항을 실무 계산 노하우 위주로 다뤄보겠습니다.

오늘 확인해볼 것 3가지
1. 내 회로의 I2C 풀업저항값이 버스 속도와 노드 수에 맞는지 다시 계산해보기
2. 오픈드레인 출력단에 풀업저항이 빠진 곳은 없는지 점검하기
3. 다채널 보드라면 어레이저항 적용 시 전압 레벨이 섞이지 않았는지 확인하기

함께 보면 좋은 글

본 글은 필자의 실무 경험과 공개된 기술 자료를 바탕으로 작성되었으며, 특정 제품의 설계나 구매를 권유하는 내용이 아닙니다. 실제 부품 선정 시에는 반드시 제조사의 데이터시트를 확인하시기 바랍니다.