아두이노 풀업저항.. 내부저항 또는 외부저항??

Posted by 곰도리네
2018.04.25 11:47 Electronics DIY/기계식키보드 만들기

아두이노로 키보드를 만드는 것을 알아보던 중 흥미로운 문제점을 발견했다.


아두이노에 포함된 ATMega 칩들은 내부 풀업저항 (internal pullup resistor)을 제공한다.


혹시 풀업저항이 무엇인지 모르는 분들이라면 이것을 읽어보기를 권한다.


그런데 아두이노의 digital pin과 관련한 tutorial 페이지를 읽어보면 아래와 같은 글이 있다.


Often it is useful to steer an input pin to a known state if no input is present. This can be done by adding a pullup resistor (to +5V), or a pulldown resistor (resistor to ground) on the input. A 10K resistor is a good value for a pullup or pulldown resistor.


pullup resistor를 +5V에 연결을 하거나 pulldown 레지스터를 연결하라면서 10K 옴 레지스터가 괜찮을거라고 하는거다.


이미 아두이노는 아래의 코드를 이용하는 방식으로 pullup resistor를 제공하는데 말이다.


참고로, 위의 pinMode(pin, INPUT); 및 digitalWrite를 사용하는 방식보다 아래 INPUT_PULLUP 방식이 좀 더 최신 버전이다.


pinMode(pin, INPUT);           // set pin to input
digitalWrite(pin, HIGH);       // turn on pullup resistors
pinMode(pin, INPUT_PULLUP)



실제로 해외 DIY 사이트에서 키보드를 구현한 예를 찾아보거나, 심지어 국내 블로거들 사이에서 키보드 구현한 예를 보면


아두이노 내부의 pullup resistor와 외부 pullup resistor를 일관성없이 혼용하는 모습을 종종 볼 수 있었다.


두가지의 차이점이 뭘까 알아보니 답이 나오더라.



어차피 전자공학을 잘 모르니까 단편적으로 지식들을 받아들일 수 밖에 없으니 이론적으로 해석할 수는 없지만


정리해보면


1. 간단하게 구현할때, 회로 복잡도가 높지 않고 부하가 높지 않은 경우는 내부 풀업저항을 쓴다.


2. 권장하지는 않지만 풀다운 저항으로 구성하고자 할때는 외부에 풀다운저항을 쓴다.


3. I2C 장치를 이용할 때에는 I2C에서 정한 바에 따라서 1K~10K 옴의 풀업저항을 쓸 수 밖에 없는데 아두이노 내부 풀업저항은 이에 적합하지 않다.


4. 모터 구동 등의 경우에는 내부 풀업저항보다 외부 풀업저항을 사용한다. 이 경우에는 보통 1K 정도로 낮은 저항을 사용함.


5. 배터리를 사용하는 경우, 내부의 풀업저항을 사용하는 경우 배터리 효율이 떨어진다고 한다. 그래서 1M정도 옴을 사용하면 배터리의 수명은 오래간다고 함. 그런데 이것도 문제가 있는 것이, 이 경우 회로의 노이즈 민감성이 높아지게 된다고 함..





결론적으로 키보드 하나 만드는 정도 수준에서는 


그냥 internal pullup resistor 사용해도 될 것 같다.



이 댓글을 비밀 댓글로

티스토리 툴바