우선 도트매트릭스의 앞뒤 생김새를 살펴보면 아래와 같다.


 도트매트릭스는 LED를 연결하여 잘 배열하여 놓은 것으로 내부에는 아무 것도 없다. 정말 LED빼곤 아무것도 없다. 도트매트릭스 가격이 부담스럽다면 직접 LED를 한땀한땀 땜질하여 사용해도 무방하다.(하지만 땜질하다 보면 내가 이걸 왜 하고 있지..하는 생각이 2천번 정도 들 것이다.)
 사실 도트매트릭스 모듈 중에는 미리 땜질이 다 되어 있고, 안에 Driver Chip들을 내장해놓아서 데이터시트대로 신호만 주면 별 어려움 없이 전광판을 만들 수도 있는 것도 있다. 하지만 우리는 도트매트릭스의 원리를 알아야 하기 때문에 쌩(?)도트매트릭스를 사용하도록 한다.
 위 사진의 8X8 도트매트릭스 회로도를 보면 아래와 같다.


 회로도를 봐도 역시 LED밖에 없다. 나와있는 핀은 사진과 같이 24개이고, 그중 8개는 ROW라고 써있고 가로 줄 LED의 (+)극 끼리 쫘라락 연결해 놓았다(커먼 애노드). 그럼 이제 이 도트매트릭스를 켜기 위한 방법을 알아보기 위해 ROW1만 있다고 생각해보자. LED 8개 제어하는건 참 쉽다. (1, 1)의 GREEN LED를 켜기 위해선 ROW1에 5V를 주고, COL24번핀을 0V를 주면 된다. 23번핀을 0V를 주면 빨간색이 들어올 것이고, 23번과 24번핀이 모두 0V일 경우엔 GREEN과 RED가 모두 켜져 주황색으로 켜진것처럼 보일 것이다. 


 그럼 이제 (1, 1)과 (2, 2)를 동시에 켜보도록 하자. 어떻게 하면 될까? ROW1을 1로 놓고 COL24는 0으로 놓고, ROW2는 1로 놓고 COL21을 0으로 놓으면 될까? 회로도를 자세히 살펴 보면 LED의 (-)부분 역시 세로로 연결이 되어 있어서 왼쪽 구석의 LED 4개가 모두 들어오게 될 것이다.
그럼 어떻게 해야할까?  이번에도 사람의 눈을 교묘히 속여서 원하는 대로 LED를 켜도록 하자.(잔상돼지편 참조)
 즉, 한꺼번에 모든 LED를 켜는 것이 아니라, 한줄한줄 돌아가면서 한번씩 켜주는 것이 포인트이다.
ROW1 켜주고 원하는 24번 0V 넣어주고, ROW2 켜주고 21번 0V 넣어주고를 반복하면 (1, 1)과 (2, 2)에 불이 켜진 것처럼 보일 것이다. 전체 8줄을 다 켠다면 ROW1 ~ ROW8까지 반복하며 원하는 데이터를 넣어주면 된다.
 그럼 이 방법을 사용한다면 I/O포트는 몇개나 필요할까?
ROW에 8개 필요할 것이고, COLUMN에는 빨강, 녹색 각각 8개의 LED가 있으므로 16 + 8 = 24개의 PORT가 필요하고, 이런게 16개 있으므로 24*16 = 384개의 I/O포트가 필요하다. 아까 2000개에 비하면 많이 줄었지만 384개도 역시 많다. 그럼 더 줄여 보도록 하자.
 우선 ROW에 8개 필요한 것을 3개로 줄여보자. ROW에 사용하는 포트가 하는 일은 뭘까? 
처음엔 ROW1에 1주고, 두번째엔 ROW2 1주고, 세번째엔 ROW3에 1주고... ROW8에 1주고, 또 ROW1에 1주고...
위의 작업을 표로 나타내면 아래와 같다.


이러한 출력을 내주는 녀석을 디코더라고 한다. 디코더는 입력에 따라 한개의 출력을 선택하게끔 하는 회로인데, n개의 입력으로 2 ⁿ 개의 출력을 내줄 수 있다. 우리에게 필요한 출력은 ROW1~8까지 8개의 선택이므로, 2의 3승이 8이므로 입력이 3개만 필요한 것을 알 수 있다.
수학적으로 구해보려면 2 ⁿ  = 8 양변에 로그를 취하면.. n log 2 = log 8 = 3 log 2, 즉 n = 3이 된다.
이말인 즉슨, 3개의 입력만 있으면 우리가 원하는 8개의 출력을 내줄 수 있다는 말씀.
실제 우리가 실제로 사용할 디코더 74138의 진리표는 다음과 같다.


 여기서 H는 High 즉, 1을 나타내고 L은 Low, 0을 나타낸다. 위에 그림과 1과 0이 바뀌었는데 그 이유는 뒤에서 보도록 하자.

자, 그럼 이제 ROW를 제어하기 위한 포트도 줄였겠다, 가속도를 더 붙여 Column에 대한 포트도 줄여 보도록 하자.
래치라는 것을 들어보았는가? 래치는 이전의 데이터를 저장할 수 있는 일종의 메모리 회로이다. 이 메모리 기능을 이용하여 우리의 사리사욕을 채워보자.


위 표는 래치 74573의 Function Table이다(라고 적혀있다). LE(Latch Enable을 보면 High일 경우, 입력(D)가 그대로 출력으로 나가고 LE가 Low일 경우에는 출력이 Q0로 되어있다. 즉, LE가 Low일 경우에는 뭘 입력으로 넣어도 상관없이 이전에 넣었던 내용만 출력한다라는 뜻이다. 래치의 이러한 특성을 이용하면, 포트의 사용을 획기적으로 줄일 수가 있다.
 자세한 설명은 회로도를 보면서 하도록 하자.



우선은 위에 74138 디코더가 보인다. 디코더 출력(OUTx)부분 핀에 보면 빨간버블이 붙어있는데 이는 0이 활성화 상태라는 뜻이다. 아까 위에서 살펴봤던 디코더의 진리표가 출력이 반대로 되어 있었던 이유이기도 하다. 
 디코더에서 나온 신호는 PNP형 트랜지스터의 입력으로 들어간다. 위 회로에서 PNP TR은 스위치로 사용되고, 입력이 0일때 도트매트릭스의 COMMON단에 VCC전압을 공급하여 주는 역할을 한다. 즉, 디코더의 입력 ABC에 신호를 순차적으로 주게되면 도트매트릭스의 COM1~8에 차례로 VCC 전원을 공급하여, 도트매트릭스의 한줄한줄을 순차적으로 스캔할 수 있도록 해준다.
 그 다음으로, 래치회로를 살펴보도록 하자. 래치는 우리가 입력한 데이터를 저장하기 위한 용도로 사용한다. LE(Latch Enable)을 1로 주고 래치에 원하는 신호를 준 후에, LE를 0으로 주면, 래치 입력(Dn) 신호에 상관없이 래치의 출력(Qn)에는 이전에 입력한 값만 나타나게 된다. 래치의 이러한 특성을 이용하여 GREEN과 RED에 각각 다른 값을 넣어줄 수가 있다.
 RED 데이터를 넣어주기 위해 두 래치의 LE를 1로 셋해주고 RED에 해당하는 데이터를 넣어주고, 오른쪽 래치의 LE를 0으로 해주고, 다시 GREEN에 해당하는 데이터를 넣어주면 GREEN과 RED에서는 각각 저장된 데이터가 출력되게 될 것이다.
이것이 I/O Port하나로 RED와 GREEN LED를 제어할 수 있게 하는 원리이다.
 이 회로를 여러개의 도트매트릭스에 대해  확장을 하면, 하나의 포트로 모든 도트매트릭스의 RED와 GREEN 포트에 신호를 넣어줄 수가 있게 된다.

이 원리를 이용하여 도트매트릭스에 글자를 넣어보자.
 


 위 이미지는 래치를 이용하여 각각의 도트에 데이터를 넣는 그림이다. 위에서는 3색에 대한 Latch는 고려하지 않았지만 같은 원리로 RED/GREEN에 대한 Latch에 데이터를 넣어놓을 수가 있을 것이다.
 이런 식으로 각각의 래치에 데이터를 저장하고, 디코더를 이용해 한줄한줄을 차례로 표시해준다.


위의 작업을 빠른속도로 반복하게 되면 실제 눈에 보이는 이미지는 아래와 같을 것이다.


 이러한 원리로 도트매트릭스를 적은 포트로 제어할 수 있게 된다. 도트매트릭스가 더 추가한다고 해도 실제 추가해야할 I/O포트는 LE신호를 제어할 한핀 뿐이므로 포트 갯수에 대한 부담없이(물론 땜질의 부담은 증가하겠지만..) 도트매트릭스를 추가할 수가 있을 것이다.

전원을 안정적으로 공급하자. 전원부의 원리에 대해 알아보자.
-레귤레이터, 캐패시터(콘덴서 충전시간), 디커플링. 3.3v regulator

우리가 일반적으로 사용하는 소자, 칩 등에는 사용 가능한 전압 범위가 있다.
우리가 사용할 메인 칩(마이크로 프로세서)은 DC 전압을 전원으로 사용하는데, 보통 5V, 3.3V등의 사용전압이 정해져있다.
(뭐 5v짜리 칩에 3.3v를 공급해도 기본적인 동작은 한다. 1과 0을 구분짓는 기준전압이 3.3v이하이기 때문에...)
어떤 외부 혹은 내부의 요인으로 인해 전압이 높아진다면 어떨까?
칩이 죽어버리고 말 것이다. 칩이 죽으면 내 마음은 어떨까? 가격이야 둘째치고 소켓없이 바로 기판에 땜질을 했다면 같이 죽고 싶을 것이다. 이러한 사고를 미연에 방지하고, 안정적인 전원을 공급하기 위해 보통 레귤레이터라고 하는 소자를 사용하게 된다.


5V를 얻기 위해 흔히 사용하는 레귤레이터인 7805는 위의 그림과 같이 생겼으며, 보통 열이 많이 발생하기 때문에 오른쪽 그림과 같이 방열판을 달아주기도 한다.
 7805에 열이 많이 발생하는 이유는 입력 전원을 5V로 낮추기 위해 5V 이상의 전원은 열로써 소모하기 때문이다.
예를 들어, 8V의 전원을 공급하면 3번 출력포트로 5V가 나오고 나머지 3V에 대한 에너지는 열로써 소모시킨다. 입력전압이 높을수록 레귤레이터는 더욱 뜨거워지고, 그만큼 열로 손실되는 전력이 많아진다는 얘기(뭐 난방기기로 쓰려면 상관없다)
하지만 어떤 요인에 의해 전압이 휘청되는 부분을 레귤레이터에서 잡아주어 칩에 안정적인 전원을 공급하기 위해선 꼭 달아주어야 한다.(내가 죽어도 칩, 너만큼은 내가 구해주겠다. 레귤레이터의 역할이다.)

7805의 이름은 7~8V정도 입력하면 5V가 잘 나온다는 뜻이라고 생각하자.
(원래는 78은 플러스전압, 79는 마이너스전압, 뒤에 두자리수는 출력 전압을 나타내지만 그러려니 하고 넘어간다.)

7805 역시 다리가 세개 밖에 되지 않아 회로 구성이 상당히 쉽다. 1번은 입력전원, 2번은 그라운드, 3번은 출력전원이다.


상기 회로도에서 캐패시터는 디커플링의 용도로 사용된다.
캐패시터는 무엇일까.? 쉽게 말해 배터리이다. 작은 배터리. 캐패시터(콘덴서)의 종류에는 전해콘덴서와 세라믹콘덴서가 있다. 전해콘덴서는 디커플링 용도로 사용하고, 세라믹콘덴서 역시.. 디커플링 용도로 사용할 것이다.
일단 디커플링란, 쉽게 말해 노이즈 필터링이라고 보면 된다.
그럼 차이가 뭐냐? 전해콘덴서는 (세라믹콘덴서에 비해)용량이 크고, 세라믹 콘덴서는 용량이 작다. 그니깐 세라믹 콘덴서가 더 고주파스러운 노이즈를 필터링 한다는 얘기다.

 역시 전원이 불안정한 경우를 대비해 사용한 것인데, 레귤레이터는 입력 전압이 높아지는 것을 막아주는 역할을 한다. 그렇다면 반대로 전압이 떨어진다면 어떨까? 칩에 공급되는 전압이 적정수준보다 낮다면 역시 정상적인 동작을 보장하지 못하는데. 순간적으로 전압이 떨어지는 경우를 대비해 충전해 놓았다가 떨어질 때, 전압을 보상해주는 보조배터리의 역할을 하는 것이다.
그럼 보조배터리는 용량이 무조건 크면 좋겠네, 하는 생각을 하는 사람들도 있겠지만 그렇지 않다.
용량 큰 캐패시터가 회로에 많다면, 전원을 공급하는 순간에 충전을 해야하기 때문에 실질적으로 정상적인 전원을 사용할 수 있게 되는 시간을 더뎌진다. 또한 전원을 차단하였을 경우에도 충전된 캐패시터가 모두 방전되어야 하므로 반응속도가 늦어진다고 할 수 있다.(하이/로우패스 필터의 위상이 늦어지는 예..등은 나중에 센서의 노이즈 제거에서 보도록 하자.)
 용도는 교류성분을 제거하고, 전압강하시에 전력을 보충 해준다.

오른쪽 끝의 LED는 전원이 제대로 공급되는지 확인하기 위한 용도로 달아주었다. 다른 칩등에 5V의 전압을 공급해주기위해서 7805의 OUTPUT인 3번 핀과 연결하면 된다.

캐패시터의 충방전 시간.

캐패시터 참고 사이트
http://ghebook.blogspot.com/2011/06/capacitor.html



7805는 위에 알아봤듯이, 5V이외의 전압은 열로 소모하기 때문에 전원을 많이 소모하게된다. 
그렇기 때문에 배터리를 사용한다거나 할 경우, 에너지의 효율을 높일 수 있도록 남는 전원을 피드백시켜 주는 레귤레이터가 있는데, 그것이 바로 LM2575이다.








 예전에 만들었던 작품(作品)들을 토대로 기본적으로 저런 것들은 어떻게 만들어지는지 알고 싶거나 만들어 보고 싶어 하는 분들을 위해 포스팅을 하려합니다. 저도 체계적인 교육없이, 깊은 지식을 가지고 만든 것이 아니기 때문에 전문적인 설명보다는 만들면서 알게된 부분들과 어떻게 하면 동작을 하게 할 수 있는지 등을 원리 위주로 써내려 가도록 하겠습니다.
이 포스팅을 위해 예전에 만들었던 것들에 대한 자료들을 정리하다 보니 제대로 정리를 하지 않아 남아있는 것이 별로 없어 아쉽네요.

 

전자회로 기초 - 기본기를 다져보자

내가 원하는 무언가를 만들기 위해선
회로를 구상해야하고 원하는대로 동작하도록 프로그램을 작성해야한다.

어렸을 때 건전지와 꼬마전구, 스위치를 이용해 불이 켜졌다 꺼졌다 하는 놀이를 해봤을 것이다.
건전지를 전구에 연결해서 스위치를 누르면 불이 들어오고, 손을 떼면 불이 꺼지는 어찌보면 당연한 실험이지만 모든 전자기기는 이런 원리를 이용하여 동작하게 된다.
우선 꼬마전구를 회로도로 그려보면 다음과 같다.


건전지가 사라지고 꼬마전구는 LED로 바꼈지만 기본 골격은 같다.
위 회로도에서 VCC는 건전지의 (+)부분을 나타내고
접지모양으로 되어있는 부분이 Ground가 건전지의 (-)부분을 나타낸다.
(용어 사용에 있어서는 그냥 그러려니 하고 지나치도록 한다.)
//(+), (-)를 저렇게 표현한 것은 회로가 복잡해지게 되면 와이어가 얼키고 설켜 눈으로 보기 힘들기 때문에 회로를 간단하게 표현하기 위하여 전원부는 따로 그려준다.
(-)를 ground라고 부르는 이유는 전압의 기준이 되기 때문이다. ground를 기준으로 (+)전압이 몇 볼트이냐가 정해지기 때문에 기준전위라고도 부르고, 기준전위를 0V로 본다.
(전압은 상대적이다. 각자 독립된 회로로 구성된 기기가 내가 몇볼트니하는 것은 의미 없는 행동이다. 비유를 하자면, 서로 다른 반 혹은 다른 학교의 학생이 내가 반에서 몇등이다, 넌 몇등이냐 하고 비슷하다고 할 수 있다. 두 학생이 수능을 보면서 결정이된다고 볼 수 있다. 회로에서는 두 독립된 회로의 Ground만 서로 연결을 하면  된다. 자세한 얘기는 나중에 하던가 하겠다.)

그럼 이제 저 회로도대로 회로를 구성하여 LED를 켜보자.


우선 5V의 전원을 만들기 위해서 집에서 보통 사용하지 않아 지하창고에서 먼지만 쌓이고 있는 아래와 같은 파워서플라이를 이용하여 출력을 5V로 맞춰주기만 하면 되므로 사용하기에 편리하다.
 집에 저런 것이 없다해도 걱정할 건 없다. 돈주고 사면 된다. 얼마 안한다.
그래도 인테리어에 도움 안될 법한 디자인의 덩치 큰 기계를 집안에 들여 놓기가 꺼려진다 하는 분들은 컴퓨터에 있는 파워서플라이를 뜯어서 사용하도록 한다. 위에 것보단 불편할테지만 3.3V, 5V, 12V가 분리되어 전원을 제공해주니 그런대로 쓸만 하다. 컴퓨터가 안켜진다는 단점이 있다.
 그 다음으로 생각할 수 있는게 아답터를 이용하는 방법이다. 예전에 지금 사용하지 않는 핸드폰의 아답터나 다른 가전기기의 아답터를 보면 출력 전압과 허용전류가 표시되어 있다. 아답터에 적혀 있는 전원을 참고하여 전원을 공급할 수 있다.
이도 저도 안되겠다 하는 분들은 그냥 1.5V짜리 손가락 건전지 3개를 직렬 연결하도록 한다. 전압이 0.5V 모자라지만 LED는 관대하므로 이 정도는 허용해줄 것이다.
 이제 각자 준비한 전원과 LED를 연결해야 한다. LED 역시 거의 모든 전자기기에 들어가므로 사용하지 않는 기기에서 뜯어서 재활용하도록 한다.
이제 전원과 LED를 구했으면 전원부의 +부분과 LED의 +부분을 연결하도록 한다. 일반적으로 LED는 다리가 긴쪽이 +이다. 재활용했다면 다리 길이로는 구분이 안될테니 LED를 빛에 비춰보아 아래 그림과 같이 모양으로 구분을 하도록 한다.


(스위치는 귀찮으니 손으로 선을 붙였다 떼는 것으로 대체하도록 한다.)
이제 LED의 +와 전원의 +를 연결해놓은 상태로 LED의 -와 전원의 -를 연결해본다.
불이 안들어 오는가? 그렇다면 LED가 죽었을 것이므로 갖다 버리도록 한다.
이제 새로운 LED로 아래와 같은 회로를 다시 구성하여 LED를 켜보도록 하자.


회로도에서 새로추가된 R로 표시된 저항은 아래 그림 처럼 생겼다. 저항은 전류 또는 전압을 조절할 수 있는 역할을 한다. 저항은 +, -의 구분이 없으므로 부담없이 미관상 보기 좋게 연결하도록 한다.


위의 회로도로 LED의 불이 들어온다면 성공이다!

LED는 다이오드의 한 종류이다. 다이오드는 전류가 +에서 -로 흐르는 것만 허용하고, 그 반대로 흐르는 것은 허용하지 않는 특성이 있다. 이러한 특성때문에 DC모터 등의 구동회로에서 역전류 방지를 위해 사용한다.(실제 사용에 대한 얘기는 나중에 하도록 한다.)
전류가 +에서 -로 흐를 경우 다이오드 자체의 저항은 (이론적으로) 0이므로 5V의 전원에 LED를 직접연결 하였을 경우
옴의 법칙 I = V/R 에 의해 다이오드에 흐르는 전류가 무한대가 된다. 그래서 저항이 없던 회로에선 LED에 전류가 너무 많이 흘러 LED가 죽었던 것이다.
 330Ω의 저항을 연결하게 되면 약 1.7V정도의 전압을 LED가 먹게 된다.(다른말로 전압강하라고 한다. 전류가 다이오드를 통해 흐르게 되면 다이오드는 일정한 양의 전압을 떨어뜨리는데, 이 특성을 이용하여 낮은 전압을 얻기도 한다.)
그래서 실제 저항에 가해지는 전압은 3.3V정도이고, 역시 옴의 법칙을 이용해보면
I = V/R = 3.3V / 330Ω = 10mA의 전류가 LED를 통해 흐르게 되고 그 전류로 불이 들어오게 되는 원리이다.