블로그 첫글로 무엇을 적을 지 고민하다가, 간단한(?) 것 부터 적자는 생각에서 스위치에대한 글을 써보게 되었다.


스위치란?

위키피디아에 의하면 스위치는

전기 회로 의 전도 경로를 분리하거나 연결하여 전류 를 차단 하거나 한 전도체에서 다른 전도체로 전환할 수 있는 전기 부품

이다. 이 글에서는 전도 경로를 분리하거나 연결에 초점을 맞춰 전개해 나갈 생각이다. 따라서 기본적으로 스위치는 2가지 단위 상태를 가진다고 할 수 있겠다. 끊어져 있거나, 연결되어 있거나. 각각 단락회로short circuit개방 회로open circuit로 볼 수 있다.

  • 단락 회로: 회로의 두 노드가 저항값이 0[Ω]인 저항으로 연결되어 있을 때 단락 회로라고 부름.
    • 저항값이 0[Ω]인 저항.
    • 전압값이 0[V]인 전압전원.
  • 개방 회로: 회로의 두 노드가 연결되어 있지 않을 때 개방회로라고 부름.
    • 저항값이 ∞[Ω]인 저항.
    • 전류값이 0[A]인 전류전원.

단락회로와 개방회로


스위치는 가변저항이다

여기서 말하는 가변저항이란

저항값을 임의로 바꿀 수 있는 소자

이다. 스위치는 2가지상태, 즉 저항값이 0[Ω]일 때(단락)와 ∞[Ω]일 때(개방)를 가지므로 가변저항이라고 생각할 수 있다.


풀업 풀다운

스위치를 저항으로 생각한다면 풀업과 풀다운 회로를 간단한 저항 분배 회로로 생각할 수 있다. 사실 별로 간단하지 않은듯 하다. 차라리 전압원이나 전류원으로 생각하는 것이 해석이 훨씬 쉽다.

풀-업

무한대의 저항?

무한의 값을 가지는 저항을 사용하여 전압 분배를 계산하기 위해서는 무한에 대한 연산의 정의가 필요해 보인다. 따라서 무한의 저항에 어떤 연산이 정의될 수 있을지 찾아봤지만 아쉽게도 찾지 못했다. 만약에 아는것이 있다면 아래에 댓글을 남겨주기 바랍니다.

전류원과 전압원

풀업 회로에서 전류원과 전압원을 이용하여 \(V_o\)를 계산하여 보자.

전류원&전압원

  • 단락(전압원):
    \(V_a = V_o - 0\)
    \(V_o = 0\)
  • 개방(전류원):
    \(I_a = \frac{V_i - V_o}{R_1}\)
    \(0 = \frac{V_i - V_o}{R_1}\)
    \(V_o = V_i\)

저항값 정하는법

여기서 말하는 저항값의 저항은 ‘가변저항’이 아니라, 풀업이나 풀다운에 사용되는 저항을 말한다.

풀업이나 풀다운 회로에서 ‘가변저항’의 값이 0이 된다면, 전류가 흐를 것이다. 이 전류를 source하는 장치나 sink하는 장치에 최대 전류값이 정해져 있을 수 있으므로, 이 전류값을 넘지 않도록 저항값을 잘 조정하도록 하자.

\[\begin{aligned} R \geq \frac{V_i}{I_{max}} \end{aligned}\]
  • \(R\): 저항값
  • \(V_i\): logic high의 전압값[V]
  • \(I_{max}\): 최대로 source 또는 sink할 수 있는 전류값[A]

또한 저항이 클 수록 전류가 적게 흐르기 때문에 소모 전류가 줄어드는 이점이 있을 수 있다. 하지만 전류가 적게 흐른다는 것은 아래 “커패시터는 가변저항이다” 단락에서 \(V_c = V_i\)가 되기까지 오래 걸린다는 것이므로 저항이 너무 크다면 반응이 둔감해질 수 있다.


채터(chatter)

contact bounce라고도 한다. 기계적 스위치및 릴레이의 일반적인 문제이다. 스위치와 릴레이는 일반적으로 탄력있는 금속으로 만들어 지기 때문에 접점이 부딪히면 탄성에 의해 상태가 안정되기 전까지 스위치의 상태(이어져 있거나 끊어져 있거나) 불안정하게 계속 바뀐다.

bouncy_switch

따라서 스위치를 사용하여 입력을 받는 장치가 스위치가 여러번 눌린 것으로 인식하는 문제가 생길 수 있다.

채터 현상이 발생하는 시간의 길이를 채터링 시간이라 부르겠다.

디바운싱(debouncing)

입력을 받는 장치가 chatter의 영향을 받지 않게 하는 것을 디바운싱이라고 한다.

디바운싱 방식을 선택할때 고려할 사항은 다음과 같은 것들이 있다.

  • latency: 작은 것이 좋다. 하지만 디바운싱과 latency를 줄이는 것은 배타적인 관계를 가지고 있다. 따라서 디바운싱 효과를 해치지 않으면서도 latency를 줄일 수 있는 방법이 좋은 방법일 것이다.
  • BOM: latency는 작은것이 좋겠지만, latency보다 BOM이 중요할 때도 있을 것이다.
  • 부피, 무게, 전력 소모, 등등…

디바운싱은 크게 2가지 방법으로 나뉠 수 있다.

  • 하드웨어 디바운싱: 하드웨어를 통한 디바운싱. 소프트웨어 사용 안함
    • 장점:
      • 소프트웨어 디바운싱에 비해 비교적 간단한 편.
    • 단점:
      • BOM(Bill Of Material)에 부품이 하나 늘수도.
      • 제품의 무게와 부피가 늘어날 수도?
  • 소프트웨어 디바운싱: 스위치를 통한 입력을 받는 장치가 소프트웨어를 사용한다면, 소프트웨어에 디바운싱을 위한 코드를 삽입할 수 있다. 또한 디바운싱을 위한 부품이 따로 필요 없다.
    • 장점:
      • 부품에 쓸 돈을 아낄 수 있다.
      • 제품의 무게와 부피를 줄일 수 있다.
    • 단점:
      • 구현이 복잡해 질 수 있다.
      • 프로세서 오버헤드를 낳을 수 있다.

하드웨어 디바운싱

아래 나와있는 방법들 외에도 여러분이 사용하고 있는 칩에 디바운싱을 위한 기능이 들어가있을 수도 있다. 예를 들어 DLPF(Digital Low Pass Filter)라거나.

커패시터는 가변저항이다

제목만 봐도 알 수 있듯이 커패시터를 사용한 방법이다. 다음 회로를 보자.

커패시터 회로

커패시터에는 정전용량capacity이라는 것이 있다. 단위는 \([F]\)(farad)이며, 기호는 \(C\)이다.

\[\begin{aligned} C = \frac{Q}{V} \end{aligned}\]
  • \(Q\): 전하량
  • \(V\): 커패시터에 걸리는 전압.

위의 회로에서 커패시터 \(C_1\)의 초기 전하량이 0이라고 하자. 따라서 \(V = \frac{Q}{C}\)에 의해 \(V_c\)는 0이된다. 따라서 커패시터에는 \(\frac{V_i - V_c}{R_1}\)만큼의 전류가 흐르게 된다. 만약 2초동안 3[A]의 전류(\(Q = I \times T\))가 흐르게 된다면 \(V_c\)는 \(\frac{6}{C}\)가 된다. 따라서 커패시터에 흐르는 전류 \(\frac{V_i - V_c}{R_1}\)가 더 작아지게 되고, 그것이 반복되어 \(V_c = V_i\)가 되면 전류가 흐르지 않게 되며 \(V_c\)는 \(V_i\)로 유지된다.

아래의 그래프는 \(V_i = 5\)일 때의 그래프이다.

커패시터 그래프

커패시터에 걸리는 전압이 커지는 것이 마치 저항이 커지는 것이라고 생각해 본다면, 커패시터 또한 가변저항처럼 볼 수 있다.

아래 회로를 보자. ‘가변저항’ 2개를 병렬 연결해놓았다.

병렬 연결

스위치를 닫으면 바로 \(V_o = 0\)이 되겠지만, 스위치를 열때는 커패시터에 의해 \(V_o\)는 천천히 변하게 된다.

아래 그래프를 보자. capacitor는 스위치와 커패시터를 병렬연결 했을 때이고, switch는 스위치만 있을 때이다. 커패시터가 있어도 대략 1.3정도까지 \(V_o\)가 커지는 것을 볼 수 있는데, 저것은 보통 슈미트 트리거schimitt trigger로 거르게 된다.

cap&btn graph

소프트웨어 디바운싱

  • polling:
    • 일정 주기마다 검사하는 방식. 검사 주기는 채터링 시간보다 길어야 한다.
    • 검사는 계속 하면서, 입력이 바뀌면 일정 시간동안 입력을 유지한다. 유지하는 시간은 채터링 시간보다 길어야 한다.
  • interrupt:
    • 타이머 인터럽트를 사용하여 주기적으로 확인하는 방식. 당연히 검사 주기는 채터링 시간보다 길어야 한다. 말이 interrupt지 사실상 polling 방식…
    • gpio external interrupt를 사용한다. 일정 시간동안 intterupt를 무시할 수 있는 방법이 있어야 하겠다.

해결할 문제

  • ∞[Ω]값을 가지는 저항의 연산 정의

참조