먼저 알아둘 용어
바운스(bounce)·디바운스(debounce) — 기계 접점이 한 번 움직일 때 짧게 여러 번 붙었다 떨어지는 현상이 바운스입니다. 이를 하나의 의도한 입력으로 처리하는 것이 디바운스입니다.
RC(Resistor-Capacitor)·시정수 — 저항 R과 커패시터(capacitor) C로 구성한 필터(filter)입니다. 시정수 τ=RC는 전압 변화의 시간 규모이며 R의 단위 Ω, C의 단위 F를 쓰면 τ는 초(s)입니다.
슈미트 트리거(Schmitt trigger)·히스테리시스(hysteresis) — 슈미트 입력은 전압이 올라갈 때와 내려갈 때의 전환 문턱이 다릅니다. 이 문턱 차이가 히스테리시스로, 전압이 문턱 근처에서 조금 오르내릴 때 출력이 반복해서 바뀌는 현상을 줄입니다.

작동 원리
RC는 짧은 변화의 영향을 줄이지만 출력이 임계 부근을 천천히 지나게 합니다. 잡음이 겹치면 일반 입력이 여러 번 전환하거나 허용 입력 전이 조건을 벗어날 수 있습니다. 슈미트 입력은 올라갈 때와 내려갈 때의 문턱이 달라 작은 되돌림에 덜 민감합니다. 다만 히스테리시스만 있고 바운스가 두 문턱을 모두 넘으면 여전히 여러 번 전환합니다. 필터 시간과 문턱을 함께 정해야 합니다.
적용 순서
- 눌림과 해제 파형을 각각 확인합니다. 실제 접점의 반복 전환 시간과 폭을 보고 부품·운용 조건의 범위를 조사합니다. 특정 예의 5 ms를 모든 스위치(switch)의 최대 바운스로 사용하지 않습니다.
- 사용 입력이 실제로 슈미트 입력인지 확인합니다. 상·하 문턱, 히스테리시스, 누설, 공급 전압별 보장값과 입력 전이 제한을 찾습니다. 일반 GPIO(General-Purpose Input/Output)라고 해서 필요한 히스테리시스가 있다고 가정하지 말고, 해당 핀(pin)의 입력 특성을 확인합니다.
- RC의 눌림·해제 경로를 따로 계산합니다. 충전과 방전이 서로 다른 저항을 통과한다면 시간도 다릅니다. 커패시터 방전 전류가 스위치·입력 구조를 과도하게 흐르지 않게 경로를 정합니다. 허용 응답 지연과 가장 빠른 의도된 연속 입력을 함께 고려합니다.
- RC 노드(node)와 슈미트 출력을 동시에 관찰하며 천천히 누르기, 빠른 반복, 해제, 전원 투입을 시험합니다. 바운스 중 출력이 한 번만 전환하고, 필요한 정상 입력은 빠뜨리지 않는지 확인합니다.
계산과 판단 예
설명용으로 초기 0 V에서 3.3 V로 충전하는 이상적 RC와 상향 문턱 2.0 V, 시정수 10 ms를 가정하겠습니다. 충전식 V(t)=3.3×(1−exp(−t/RC))를 문턱에서 풀면 도달 시간은 −RC×ln(1−2.0/3.3)≈9.32 ms입니다. ln은 자연로그입니다. 시정수가 10 ms라고 곧바로 10 ms 디바운스가 되는 것은 아니며 초기 전압·문턱·부품 공차를 반영해야 합니다.
적용 조건과 한계
노이즈·긴 케이블(cable)·ESD(Electrostatic Discharge)·전원 순서 문제를 디바운스 하나로 해결하지 않습니다. 느린 입력에 대한 허용이 없는 게이트(gate)를 RC 뒤에 쓰지 않습니다. 소프트웨어 디바운스와 함께 쓴다면 두 지연을 더해 사용자가 기대하는 반응을 확인합니다.
확인과 기록
버튼을 한 번 누르거나 놓을 때 각각 한 번의 입력으로 인식되는지 확인합니다. 짧은 간격으로 다시 눌렀을 때도 제대로 인식하고, 부팅할 때 버튼을 누르지 않았는데 입력이 발생하지는 않는지 기록합니다. 파형이 매끈한 것과 실제 기능이 정확한 것을 모두 확인합니다.