안녕하세요. 오늘은 채터링(chattering) 현상에 대해 알아보겠습니다.
채터링현상은 기계적 버튼이 눌리거나 떼어졌을때, 신호가 빠르게 여러번 튕기거나 흔들리는 현상을 의미합니다.
채터링의 원인은 접점의 마모나 전기적인 노이즈 등 다양한 원인이 있습니다.
이러한 현상을 막기위해 디바운싱(Debouncing)방법을 사용하게 됩니다.
우선 채터링현상은 버튼을 사용할때 많이 경험하므로 버튼이 어떻게 동작하는지 알아보겠습니다.
아래의 그림을보면 버튼을 눌렀을때 동그란 금속재질이 움직여서 버튼의 회로가 연결되게 해줍니다.
채터링현상을 직접 확인해보겠습니다.
회로는 아래처럼 구성했습니다.
INPUT PORT는 실제로 아무것도 연결이 되어있지 않고, 풀업저항을 사용하는 모습으로 구성했습니다.
point 부분을 측정하였고, 버튼이 눌리지않을때는 HIGH가 측정되다가 버튼을 누르면 GND가 측정되게 되는데 이때 튀는 신호가 있습니다.
이러한 신호가 발생한다면 사용자는 버튼을 한번 클릭했는데 MCU에서는 여러번 클릭했다고 인식할가능성이 있습니다.
이러한 현상은 디바운싱방법을 사용하면 막을 수 있습니다. 방법은 Hardware debouncing과 Software debouncing이 있습니다.
*Hardware Debouncing
Hardware Debouncing을 하기위해 캐패시터(capacitor)를 사용하게 됩니다. 캐패시터는 전기적인 에너지를 저장할수있고 전압이 변화하면 저장된 에너지를 방출합니다. 캐패시터는 충전과 방전을하고 충전 시 캐패시터의 전압은 서서히 증가하고, 방전시 캐패시터의 전압은 서서히 감소합니다. 이러한 특성으로 버튼이 눌리거나 떼어졌을 때 발생하는 신호의 급격한 변화를 부드럽게 만들어서 채터링 현상을 제거하게 됩니다.
캐패시터가 충전&방전할때 파형을 측정해보겠습니다.
충전과 방전할때의 그래프입니다.
충전방법 : 위의 회로도대로 연결
방전방법 : 위의 회로도에서 R3위에를 GND로 연결
충전과 방전시간은 RC시간상수를 통해 계산할 수 있습니다.
τ =R×C
R=10kΩ
C=100μF
τ = 1초
캐패시터의 99%까지 도달하거나 0%까지 도달하는시간 = 5초
이러한 특징을 이용하면 버튼을 눌렀을때 방전이 서서히 일어나므로 전압 변화가 급격하지 않고 부드럽게 변하게 됩니다.
버튼을 뗄 때도 서서히 캐패시터가 충전되므로 전압이 급격하게 변하지 않습니다.
이제 캐패시터를 버튼회로에 적용시켜보겠습니다.
채터링은 보통 1~10ms에서 나타나는 경우가 많으므로 1uF을 사용하겠습니다.
아래의 회로에서는 τ 가 10ms이므로 10ms까지 채터링을 방어 할 수 있습니다.
(만약 100uF를 사용한다고하면 충전이 오래걸리게됩니다.)
캐패시터를 이용하여 채터링현상이 제거되었습니다.
* Software debouncing
소프트웨어에서도 디바운싱 현상을 막을 수 있습니다. 막는 방법은 채터링이 발생되는 상황에서 아무 동작도 안 하면 됩니다.
(방법1)
우선 가장 쉬운 방법입니다. 버튼이 press가 됐다고 인식을 하고나서 채터링발생가능 시간만큼 delay를 주고나서 그 다음에 이벤트를 수행하면 됩니다.
(방법2)
가장 많이 사용하는 방법인것같습니다.
debounce delay를 정해놓고 버튼이 눌렸을때의 시간을 비교해서 debounce delay만큼 지나지않았으면 채터링으로 생각해서 아무이벤트도 안하게 됩니다.
'지식 > MCU지식' 카테고리의 다른 글
MCU-Open drain 알아보기 (0) | 2023.10.15 |
---|---|
ARM 명령어 아키텍처 (1) | 2023.04.23 |
엔디안이란?(빅엔디안, 리틀엔디안) (0) | 2023.03.26 |
MCU GPIO 전류 측정하기 (0) | 2023.01.23 |
UART통신 알아보기 (1) | 2022.12.24 |