본 게시물은 2017-추계 한국항공우주공학회 학술대회에 투고한 논문의 연구노트 일부이며, 무단 전제 및 재배포시 문제가 될 수 있습니다. |
디지털 회로를 설계하다 보면 전압 레벨이 서로 다른 부품을 혼용해서 사용해야 하는 경우가 있습니다. 정격 전압이 다르다면 LDO 하나만 추가로 달아주면 되지만, 로직 전압이 서로 다른 칩셋간에 통신을 해야 하는 경우 이 문제를 인지한 순간부터 숨이 턱턱 막히면서 여러가지 애로사항이 꽃피게 됩니다.
예전에 MP3를 설계할 때와, Bluetooth Module을 사용할 때 신호 레벨 차이를 고려해야 하는 상황이 있었습니다. 프로세서는 5.0V를 사용하는데, MP3 코덱 칩과 Bluetooth 모듈은 정격 전압이 3.3V인 상황이었습니다.
아예 프로젝트에 사용하는 모든 부품을 같은 전압을 사용하는 제품으로 통일해 버린다면 이런 고려를 할 필요가 없겠지만, 설계상의 문제 등으로 인하여 피치못하게 신호 레벨이 서로 다른 회로를 연결해야 하는 경우가 있습니다.
신호 레벨이 다른 칩이나 회로 단을 서로 연결할 때 그 사이에서 신호 레벨을 변환시켜주는 회로나 칩셋을 Level Transceiver 또는 Level Translator, 혹은 Level Shifter라 합니다. (같은 회로를 가리키는 말이 여러가지여서 그런지, 구글 등에서 관련 자료를 찾을 때도 많이 힘들었던 기억이 스칩니다...ㅠㅠ)
▶ 이 글에서는 범용 트랜지스터(General Purpose Transistor)들을 조합하여 Level Transceiver 회로를 구성하는 방법에 대해 중점적으로 다룹니다. 그리고 패키지 형태로 판매되는 Level Transceiver IC 몇 가지를 소개합니다. 끝으로, Level Transceiver를 사용하지 않고 신호 레벨이 서로 다른 회로를 접합하는 꼼수(?)에 대해 설명하며 글을 마치도록 하겠습니다.
※ 이 글에 등장하는 모든 예시 회로는 다음 신호 레벨 변환에서 정상 동작함을 검증하였습니다.
- 3.3V ↔ 5.0V
- 5.0V ↔ 12.0V
- 3.3V ↔ 12.0V
물론, 입/출력 단자의 임피던스와 같은 주변 회로 상황에 따라 올바르게 동작하지 않을 가능성도 존재하므로, 실제 회로에 적용하기 전에 빵판에 테스트해 보고 사용할 것을 권장합니다.ㅎㅎ
(+) 추가적으로 팁을 드리자면, 양단 신호 전압을 동일하게 인가하면 모든 신호 레벨 변환 회로는 단순 버퍼(Buffer)로 동작합니다. 이 버퍼 회로도 유용하게 활용되는 곳이 많으므로 기억해 두면 유용합니다.
승압 신호 레벨 변환 회로(Boosting Level Transceiver)
낮은 전압의 신호를 높은 전압의 신호로 변환하는 회로입니다.
출력 포트가 VCC로 풀 업(Pull-Up)되어있는지, GND로 풀 다운(Pull-Down)되어있는지 여부에 따라 두 가지 형태로 구분해서 설계해 보았습니다. 트랜지스터 한 개로 간단히 구성된 풀 업 방식에 비해, 풀 다운 방식은 트랜지스터 한 개가 더 필요한 2-Stage로 구성해야 합니다. 디지털 회로를 설계할 때 풀 다운보다 풀 업이 월등히 많이 사용되는 이유를 알 수 있는 대목입니다.
[TIP] 출력 포트의 로직 레벨에 관계없이 VCC와 GND방향 모두 낮은 임피던스가 필요한 경우, 트랜지스터 2개를 직렬로 연결한 푸시-풀 회로(Push-Pull Circuit)를 출력 포트 다음단에 연결하면 됩니다. 푸시-풀 회로는 DC모터 정/역회전 제어와 같이 출력 포트가 항상 VCC나 GND 어느 한쪽에 '달라붙어' 있어야 하는 경우 유용하게 사용할 수 있습니다.
Pull-Up Boosting Level Transceiver
▲ 풀 업 방식 승압 신호 레벨 변환 회로
Pull-Down Boosting Level Transceiver
▲ 풀 다운 방식 승압 신호 레벨 변환 회로
감압 신호 레벨 변환 회로(Reducing Level Transceiver)
높은 전압의 신호를 낮은 전압의 신호로 변환하는 회로입니다.
Pull-Up Reducing Level Transceiver
▲ 풀 업 방식 감압 신호 레벨 변환 회로
Pull-Down Reducing Level Transceiver
▲ 풀 다운 방식 감압 신호 레벨 변환 회로
양방향 신호 레벨 변환 회로(Bidirectional Level Transceiver)
낮은 전압의 신호를 높은 전압의 신호로, 높은 전압의 신호를 낮은 전압의 신호로 변환하는 회로입니다.
별도의 Direction 제어 신호 없이 신호가 인가되는 포트에서 반대쪽 포트로 신호 레벨이 변환되어 전달되므로, I2C(TWI)통신이나 메모리 인터페이스와 같이 신호선의 Data흐름 방향이 수시로 변하면서 양방향 통신을 해야 하는 경우 유용하게 활용할 수 있습니다.
회로도를 자세히 보면 알 수 있겠지만, 양방향이라고 해서 무슨 원기옥을 갈아넣은 게 아니라, 단지 위에서 설명한 승압 회로와 감압 회로를 서로 반대 방향으로 접붙여 놓은 회로입니다. 신호가 인가된 포트에 해당하는 방향의 신호 레벨 변환 회로만 활성화되어 동작하므로 양방향 통신이 가능합니다.
양쪽 입출력 포트 모두 풀 업이거나 풀 다운이므로 양쪽 포트에서 동시에 신호가 인가되더라도 회로가 망가지지 않습니다. (직접 실험해 보았습니다...^^)
여기에 올리지는 않았지만, 풀 업 방식과 풀 다운 방식을 조합한 양방향 회로도 설계가 가능합니다. 단, 이 경우 양쪽 포트에서 동시에 서로 다른 로직 신호를 인가하면... 화려한 트랜지스터 불꽃놀이 쑈를 보실 수 있을 것입니다.ㄷㄷ
Pull-Up Bidirectional Level Transceiver
▲ 풀 업 방식 양방향 신호 레벨 변환 회로
R18(100Ω)은 양단간 신호 전압차가 클 경우 (9V 이상) 트랜지스터의 Breakdown 현상으로 인해 낮은 전압의 신호선에서 높은 전압의 신호선 방향으로 0V(Logical '0')가 제대로 전달되지 않는 현상을 방지하기 위해 추가한 것입니다. 이 저항값은 양단간 신호 전압차와 사용하는 범용 트랜지스터의 종류에 따라 실험에 의거하여 적절히 수정되어야 합니다. 100Ω일 때 {3.3V, 5.0V, 12.0V}의 신호 레벨 변환 모든 조합에서 올바르게 동작함을 실험적으로 검증하였습니다.
Pull-Down Bidirectional Level Transceiver
▲ 풀 다운 방식 양방향 신호 레벨 변환 회로
신호 레벨 변환 IC (Level Transceiver IC)
신호 레벨을 변환해야되는 신호선의 갯수가 몇 개 안된다면 위에서 소개할 것처럼 범용 트랜지스터와 저항으로 Level Transceiver 회로를 직접 만들어서 사용해도 무방합니다. 하지만 메모리 버스에서와 같이 대량으로(?) 신호 레벨 변환을 해야 한다면 신호 레벨 변환 IC를 사용하는 것이 좋습니다.
74ALVC164245
이 칩은 두 가지 전압 입력을 제공하여, 서로 다른 전압을 사용하는 두 회로를 접합하기 위한 신호 레벨 변환 브릿지로 사용할 수 있습니다.
▲ 74ALVC164245 Level Transceiver IC
하지만 이 IC는 DIP타입으로 된 것은 찾아보기 힘들며, 위 사진처럼 핀 간격이 약 0.5mm정도 되는 등 사용하기 상당히 난감한 모양새입니다. PCB를 찍어내는 등 대량 생산의 목적이 아니라면 멘탈 보존을 위해 아래에서 소개하는 IC를 사용하는 편이 좋습니다.
GTL2003
신호 레벨 변환 IC를 사용할 계획이라면, TI에서 생산하는 GTL2003과 같은 칩셋을 사용할 것을 권장합니다.
보통 다른 회사의 Level Transceiver 칩은 신호 흐름의 방향을 제어하는 Direction핀이 따로 있는데 반해, 이 칩에는 Voltage Reference 핀만 있을 뿐 Direction 핀은 찾아볼 수 없습니다.
▲ GTL2003 칩셋의 Unit Diagram
이 Level Transceiver IC는 어느 위에서 소개한 범용 트랜지스터를 활용한 신호 레벨 변환 회로에서와 같이 어느쪽이 Driver인지 파악해서 신호 흐름의 방향을 자동으로 감지합니다.
Level Transceiver 없이 신호 전압이 다른 칩셋 연결하기 (꼼수)
대개 많은 경우 위에서 소개한 Level Transceiver 회로나 IC를 사용하지 않고도 신호 레벨이 서로 다른 칩셋을 연결시킬 수 있는 방법이 존재합니다. 그 방법의 핵심은, TTL로직의 규격을 살펴보면 사용 신호 레벨의 60%이상을 Logical '1'로 인식하게 되어 있다는 점입니다.
TTL로직을 사용하는 칩셋은 대부분 이 규격에 맞도록 회로가 설계되어 있습니다. 즉, 5.0V 칩셋인 경우 그 60%인 3.0V 이상만 인가되더라도 Logical '1'로 인식합니다. 이러한 규격 특성을 활용하면 위에서 언급한 심란한(?) 회로나 IC를 사용하지 않고도 서로 다른 신호 레벨의 칩셋을 연결할 수 있습니다.
5.0V 칩셋(예: MCU)과 3.3V 칩셋(예: 블루투스 모뎀)을 서로 연결하려 할 때 상황을 예로 들어보겠습니다.
1. 우선, TTL규격에 의해서 5.0V의 60%는 3.0V 이므로 3.3V 칩셋에서 5.0V 칩셋으로(3.3V → 5.0V) 입력되는 신호는 그냥 연결해도 0과 1이 제대로 구분되므로 문제가 없습니다.
단, 정격 신호 전압보다 낮은 전압을 통신 용도로 사용하는 만큼, 통신 오류율이 증가한다는 점은 감안해야 합니다. Logical '0'의 오류율은 변동이 없겠지만, Logical '1'은 이를 나타내는 전압이 낮아진 만큼 0으로 잘못 인식될 가능성이 높아집니다.
2. 문제는 5.0V 칩셋에서 3.3V 칩셋으로 입력되는 신호입니다.
ⅰ) 간혹 3.3V 칩셋의 데이터시트를 잘 살펴보면 통신을 위한 신호선들은 정격 전압(VCC=3.3V)보다 높은 전압에서도 사용할 수 있도록 되어 있는 경우가 종종 있습니다. 보통 3.3V 칩셋의 경우 그 허용전압 범위가 통상 3.15V~3.45V 이지만, 때때로 다른 신호 레벨의 칩셋과 통신시 회로 구성을 간단하게 하기 위해 허용전압이 낮게는 2.5V, 높게는 5.5V까지 되는 소자도 존재합니다.
데이터시트에 기술되어 있는 신호선의 최대 입력전압(Absolute Maximum Voltage)이 5.0V를 커버하는 경우 제조사에서 보증한 사양이므로 신호 레벨 변환 회로 없이 그냥 두 칩셋을 직결하면 됩니다.
ⅱ) 반면, 데이터시트상의 신호 전압에 자비가 없는 경우 그냥 연결하면 5.0V 칩셋에서 3.3V 칩셋으로 Logical '1'을 보내는 순간 3.3V 칩셋은 더 이상 이 세상 칩셋이 아니게 됩니다.[...] 따라서, 반드시 신호 레벨을 낮춰서 입력 해야 합니다.
이 때 사용할 수 있는 간단한 회로가 바로 저항 분압 회로입니다. 칩셋의의 I/O핀은 보통 Impedance가 높기 때문에 단순한 저항 분압 회로를 사용하여 신호 레벨을 조정할 수 있습니다.
예시로 든 5.0V를 1.7V와 3.3V로 분압하기 위해서는 17:33의 비율을 갖는 두 개의 저항을 사용하면 됩니다. 다음은 예전에 MP3를 만들 때 5.0V 칩셋인 MCU와 3.3V 칩셋인 Codec간 신호 전압 매칭을 위해 실제로 사용했던 저항분압 Level Transceiver 회로입니다.
1.7kΩ과 3.3kΩ의 저항을 사용하여 5V에서 3.3V로 입력되는 신호(좌→우)는 3.3V로 낮춰져서 입력되고, 3.3V에서 5V로 입력되는 신호(우→좌)는 그대로 입력되도록 하였습니다.
그런 경우는 드물겠지만, 만약 입력핀의 Impedance가 낮아서 저항 분압 회로가 올바르게 동작하지 않는다면, 다소 귀찮더라도 Level Transceiver 회로나 IC를 사용해야 합니다.
그 외에도, 양방향 통신선인데 신호 레벨 변환이 반드시 필요한 경우 반드시 Level Transceiver 회로나 IC를 사용해야 합니다. 저항 분압 회로는 단방향 통신에서만 사용할 수 있습니다. (위의 예시 회로에서 MOSI_BR핀에 3.3V가 입력되더라도 MOSI핀에 5.0V가 나오는 일은 없을 것입니다.)
Level Transceiver를 사용하지 않고 신호 전압이 서로 다른 칩셋을 연결하는 꼼수(?)에 관한 자세한 내용은 다음 문서를 참조해 주세요.