일반적으로 지금까지는 아래 회로와 같이 led를 연결할때 +를 핀에 -를 GND에 연결해 왔습니다.

적은 갯수의 led를 연결할때는 문제가 없지만 도트매트릭스같이 led의 개수가 많아지면 점점 led가 흐려지게 됩니다.
원인은 아두이노나 AVR의 각 핀에서 출력되는 전류는 고작 2~30mA정도 밖에 되지않는다는데 있습니다.
AVR 전체로 따지면 100mA 정도 밖에 나오지않습니다.
led하나에 보통 20mA정도 소모하니 5개정도를 겨우 돌릴만한 전류 밖에 안되는 겁니다.
이 전류 이상 소모하게 되면 AVR이 망가질수도 있답니다.




이문제를 해결하기 위해서는 소스전류가 아닌 싱크전류를 제어 하는 방식으로 바꿔야합니다.
지금까지는 led의 +를 연결한 핀에 1(HIGH)을 주어 led를 겼지만 그와 반대로 led의 -를 핀에 연결하고 +는 Vin(또는 별도의 전원에 입력 받는 것을 권장)에 연결합니다. 그러면 핀에 0(LOW)을 주면 불이 켜지게 됩니다.

이렇게 함으로써 전류는 AVR과 별도의 안정된 전원에서 공급하고 AVR은 LED 구동에 전류를 뺏기지 않아 서로 안정된 동작을 보장할수 있게 되는 겁니다.

저는 처음에 이 (핀이 GND역할도 할수 있다는)개념이 이해되지 않아 무지 고생했는데 이해하고 나니 무척 유용한것 같습니다.

* 싱크제어라는 용어가 맞는지 모르겠네요. 잘못되었으면 댓글로 지적바랍니다.

  1. BlogIcon 나우테스 2009.07.25 04:56 신고

    말씀하신 방법도 유사한 문제가 있습니다. ATMEGA칩 스펙을 보시면 I/O포트의 sink current, source current라는걸 찾아보실 수 있습니다.
    위쪽의 방법을 사용하는 경우 I/O핀이 current source가 되고 아래쪽 방법을 사용하는 경우는 I/O핀이 current sink가 됩니다.
    I/O핀이 전류를 공급하는데도 한계가 있는것처럼 전류를 흘려보내는데에도 한계가 있습니다.
    물로 이야기하자면 파이프 굵기가 정해져있는데 거기에 파이프가 흘려보낼 수 있는 양 이상의 물을 흘려보내면 물이 제대로 빠지지 않거나 파이프가 터져버리게 되는것과 마찮가지입니다.
    칩 스펙에 보면 source/sink 모두 40 mA로 되어 있습니다. 즉 I/O핀이 전류를 공급하거나 전류를 흘려보내는 역할을 하거나 40mA이상의 전류를 흘리면 정상동작을 하지 않거나 칩이 망가질 수 있다는겁니다.

    스펙 이상의 전류를 흘려주려면 로드(여기서는 LED)를 직접 연결하면 안되고 TR,FET,릴레이 같은걸 사용해줘야 합니다.

    • BlogIcon pepsiman 2009.07.28 06:45 신고

      조언 감사합니다.
      제가 잘 몰라서 그러는데...그러면 위에 제가 이해한 내용이 완전히 틀린건가요?

    • 미니 2010.05.23 17:28 신고

      다틀리신것은 아니구요 ^^ 싱크제어 또한 소스제어와 같은 것이죠..
      나우테스님 말씀처럼 핀당 흘릴수 있는 전류를 초과해서 사용할수는 없는 거죠. 트랜지스터로 예를 들면 +가 나올때는 PNP TR 을 사용한것과 같구요, -로 빨아드릴때(Sink) 는 NPN TR 을 사용한것과 똑 같습니다.. AVR 출력 핀 내부도 이와 같다고 보면 될것 같습니다.

+ Recent posts