2023년 6월 18일 일요일

[SPICE기초] 컨덴서와 코일의 주파수 특성

[SPICE기초]  컨덴서와 코일의 주파수 특성

SPICE 회로 시뮬레이터의 기초 사용법 학습의 두번째로써 회로 내에서 컨덴서와 코일이 어떤 역활을 하는지 알아보자. '봐야 믿는 법(Seeing is Believing)'이라고 하지 않던가. 회로를 꾸며서 시뮬레이션을 통해 그 역활을 눈으로 보자. 

첫번째 강의[링크]에서 SPICE 회로 시뮬레이터의 사용법을 조금 배웠다. 내용은 조금일지 모르지만 SPICE로 무엇을 할 수 있는지 거의 배운 셈이다.

  • 회로 시뮬레이터 LT-Spice 의 설치
  • LT-Spice의 창(Window) 종류별 단축키(Hot-Keys)와 제어키(CTRL, ALT)의 용도
    - 회로 그리기 창(Schematic Window)
    - 파형보기 창(Wave Window)
  • SPICE의 언어
    - 네트리스트(netlist): 회로 기술(description)
    - 시뮬레이션 명령(simulation commands)과 지시자(directives)
    - DUT 와 Testbench
  • 시뮬레이션 지시자(Simulation directives/Dot Commands)
    .trans 시간축 상의 시뮬레이션 (transient analysis)
    .step 변수 사용 반복 실행(parameter weeps)
    .measure 사용자 정의 식 측정(evaluate user-defined electrical quantities)
  • 사용자 정의식 신호발생기(Bhavioral voltage source)
    - 사용자 정의 수식(expression)
    - 수학 함수 제공(mathematical functions)

오피스 소프트웨어 패키지의 모든 기능을 다 알고 사용하지 않듯이 SPICE 회로 시뮬레이터도 기초와 그 가능성(이것으로 무엇을 할 수 있는지)만 알아챘다면 그것으로 충분하다. 그 이상은 그저 기법에 불과할 뿐이다. 회로를 그리면서(설계 하면서) 목적에 맞게 무엇을 어떻게 측정할지 질문이 생기면 도움말이 잘 준비되어 있으니 찾아보면 된다. 게다가 인터넷 시대다. 검색창에 무엇을 넣어야 할지 모를 뿐이지 검색하면 다 나온다. 적확한 검색어를 써야 답을 얻을 수 있다. 검색결과를 읽을 줄 알아야 함은 물론이다. 제아무리 훌륭한 답을 앞에 뒀어도 무슨 뜻인지 이해하지 못하면 무슨 소용인가. 전자회로 까막눈은 면해 보자는 것이 이 학습의 목표이기도 하다.

 ---------------------------------------------------------------------

회로 이해는 저항의 이해다.

전자회로는 전류와 전압으로 말한다. 전류와 전압을 조절하여 의미를 표현한다. 전류와 전압을 조절하는 법칙은 오직 하나다. 옴의 법칙.

    V = I * R

저항치를 바꾸면 전압이 변동한다. 저항치를 내리면 전류가 많이 흐르게 되어 고여있던 전압이 떨어진다. 저항치를 올리면 흘러야 할 전류가 한쪽에 여전히 몰려 있으므로 전압이 떨어진다. 결국 전류에 대한 저항의 역활을 이해하는 것이 바로 회로의 이해다. 전압을 조절하여 전류를 통제하는 회로를 전자회로라 한다. 저항체(resistor)는 저항치를 가지고 전류 흐름을 억제 시킬 수 있다. 저항치는 고정되었거나 혹은 물리적, 전기적 힘으로 변경 할 수 있다.

[토론] 물리적으로 혹은 전기적으로 저항치를 변경 시킬수 있는 장치의 예를 각각 들어보라.

전류는 방향이 있다. 전류는 전압이 높은 곳에서 낮은 곳으로 흐른다. 당연한 이야기지만 낮은 곳이 어딘지 지정하지 않으면 전류는 흐르지 않는다. 즉, 폐회로(closed circuit) 이어야 한다.

[토론] DC(direct current)와 AC(acternating current)의 차이를 설명해 보자.

-------------------------------------------------------------------------

컨덴서 (Condensor, Capacitor)

컨던서의 작동원리를 정성적으로 설명하면 전류의 저수지와 같다. 금속판 두장을 마주 향해 놓으면 전기 에너지가 고인다. 무한정 고일 수 없다. 충분히 고이면 더 이상 전류가 저수지로 흘러들어가지 못한다. 저수지 수문을 열어 고인 전류를 빼주면 다시 전류가 흘러 들어갈 수 있다. 빼주는 만큼 찬다. 결국 컨덴서에 흐르는 전류의 양은 컨덴서의 용량과 빼주는 출구의 여닫는 주기에 비례한다.

컨덴서에 흐르는 전류의 양을 제한하는 요인인은 저항과는 달리 두가지다. 컨덴서 용량 L과 주기의 역수 주파수 f 다. 두가지 요인을 묶어 컨덴서를 통하여 흐르는 전류를 제한하는 저항값이라고 하고 이를 임피던스(impedance)라고 부르자. 단위는 저항과 마찬가지로 옴(Ohm)이다.

직렬연결 된 컨덴서의 용량계산

    1/C = 1/C1 + 1/C2 + 1/C3 + ......

병렬연결 된 컨덴서의 용량계산

    C = C1 + C2 + C3 + ......

[읽어보기] 컨덴서[링크]

-----------------------------------------------------------------------

코일(Coil, Inductor)

말 뜻대로 전선을 둘둘 말아놓은 것이다. 직류 전원을 넣으면 자기장이 생겨 전자석이 된다. 전류의 흐름 방향이 바뀌면 자기장의 극성도 바뀐다. 이 자기장은 철 성분을 끌어 당기기도 하지만 전류의 흐름도 방해한다. 전류의 방향이 바뀌고 자기장의 극성이 교대로 바뀌면서 교류 전류의 흐름을 맹렬히 억제하는데 그 힘을 역기전력이라고 한다. 코일에 기전력과 역기전력이 생기는 이유는 전류의 방향이 바뀌었기 때문 이라는 점을 기억해 두라.

직렬연결 된 코일의 용량계산

    L = L1 + L2 + L3 + ......

병렬연결 된 코일의 용량계산

    1/L = 1/L1 + 1/L2 + 1/L3 + ......

[읽어보기] 코일 [링크]

-----------------------------------------------------------------------------------

임피던스(Impedance)

전류의 흐름을 제한하는 현상을 통털어 임피던스(impedance)라고 부른다. 저항은 직류든 교류든 상관 없이 동일하게, 방향성도 없이 전류를 제한한다. 저항의 전류제한을 레지스턴스(resistance, 직접저항)라고 한다. 이와 달리 교류에 대한 전류 흐름의 제한을 리액턴스(reactance, 반응저항)라고 부른다. 리액턴스는 전류가 흐르는 방향에 영향을 받는다.

컨덴서는 전류가 고이고 빠짐에 의해 전류 흐름이 제한 된다. 컨덴서 처럼 전류를 고였다 빼기를 반복하면서 전류흐름을 제한하는 현상을 용량성 리액턴스(capacitive reactance)라고 한다.

코일에 전류를 흘리면 자기장이 유도(induct)된다. 이 자기장의 극성이 바뀌면서 전류를 제한하므로 유도성 리액턴스(inductive reactance)라고 한다.

주파수와 임피던스의 관계를 정성적으로 보면 아래와 같다.

옴의 법칙은 컨덴서와 코일에도 동일하게 적용된다.

    V = I * |Z|

[토론] 임피던스 |Z|에 절대값을 취한 이유를 설명해 보자. 음의 저항치?

[문제] 아래 세가지 분압 회로에서 Vout을 계산하라.

[문제] 위의 분압 회로에서 전압원에 사인파를 적용해 보고 코일과 컨덴서의 경우 위상차 변화를 설명해 보라.

-----------------------------------------------------------------------------------

Impedance(Z): Resistance + Reactance

  • Resistance(R): constant resistivity, independent to frequency, voltage form in amplitude
  • Reactance(X): instant resistivity, dependent to frequency, voltage form in amplitude & phase
    - Capacitive
    : Negative Reactance, Phase Lag
    - Inductive: Positive Reactance, Phase Lead

[잠깐!] 갑자기 복소수. 이게 다~ 2차 미분 방정식의 해를 파동함수로 구하려다 보니 이렇게 된 것은 다~~ 아시죠~~~?

읽어보기:

1] 공학도를 위한 미분 방정식: 응용 RLC 회로 [링크]

-----------------------------------------------------------------------------------

컨덴서의 시간축 시뮬레이션: .tran (Transient analysis)

컨덴서는 일종의 축전지다. 전자회로에 쓰이는 컨덴서는 모아 둘 수 있는 전하의 양이 매우 작고 담아두는 기간도 매우 짧다. 외부에서 충전(charge)해 주지 않으면 이내 방전(dis-charge)한다. 용량이 작기 때문에 충전은 순식간에 일어난다. 그리고 충전은 시간상 선형적이 아니다.

컨덴서는 직류에 대한 분압회로에 아무런 영향을 주지 못하는 것처럼 보인다. 분압 회로의 Vout에 지속적으로 전압이 걸려 있으므로 C1이 충전되면 더이상 전류가 흐르지 못하기 때문이다. 컨덴서가 완전히 충전되면 더이상 전류가 흐르지 않는다. 이를 두고 '컨덴서는 직류를 흐르지 못하게 한다'고 말한다. (직류는 주파수가 0에 가까운 신호다. 직류에 대한 컨덴서의 임피던스는 무한대에 근접한다.)

C1이 충전되는 모습을 보기위해 시뮬레이션 명령을 실행 할 때 처음부터 전압원(voltage source) V1에 전압이 걸려 있지 않고 서서히 증가하도록 지정할 수 있다.

    .tran 0.5 startup

[문제] C1의 용량을 바꿔가며 충전되는 모습을 관찰하고 충전시간과 컨덴서의 용량 관계를 설명하라. 컨덴서 용량 변화에 시뮬레이션 명령 .step 을 사용할 것

-----------------------------------------------------------------------------------

컨덴서와 코일의 주파수 축 시뮬레이션: .ac (AC analysis)

회로 시뮬레이터의 상이한 관찰방식이 있다. 시간상 변화 '관찰'과 주파수 성분 '분석'이다.

[주] 전자 계측기 중, 시간상 변화 '관찰'하는 장치를 오실로스코프(osciloscope)라 하고 주파수 성분을 '분석'하는 장치를 스펙트럼 아날라이져(spectrum analyzer)라고 한다.

시뮬레이션 명령 .tran 은 회로에 인가된 전압(DC operating voltage)에 대해 시간상 변화를 관찰 하는 것이었다. 가로축이 시간, 세로축은 전압(또는 전류)이다[오실로스코프].

시뮬레이션 명령 .ac 는 주기적으로 변하는 교류 신호에 회로가 어떻게 반응 하는지 관찰할 때 사용한다. 가로축은 주파수 이며 세로축은 이득(gain)이다[스펙트럼 아날라이져]. 이 시뮬레이션 작동을 AC 분석(AC analysis)라고 한다. 언뜻 감이 잘 안온다면 도움말에서 찾아보자.

LT-Spice는 도움말이 잘 정리되어 있고 수많은 예제들을 제공한다. 'F1' 키를 눌러 도움말 창을 열어 .ac를 검색하면 아래와 같은 설명을 볼 수 있다.


.AC -- Perform an Small Signal AC Analysis Linearized About the DC Operating Point

The small signal(linear) AC analysis of LTspice computes the AC complex node voltages as a function of frequency.

설명이 '도움'이 되기는 커녕 오히려 난감하다. 사실 이 도움말을 이해하고 설명할 수 있는 사람이 몇이나 될지 의문 스럽다. 이럴때 경험에 기반한 직관이 필요한 때다. 위의 설명문에서 밑줄 친 '주파수의 함수로' 라는 문구에 주목하자. 주파수를 변경해 가면서 그 반응을 살펴보겠다는 뜻이다.

컨덴서와 코일의 저항(임피던스)는 전압 신호원의 주파수에 따라 달라진다는 점은 이미 알고 있다. 주파수에 대해 어떻게 반응 하는지 알아보기 위해 .ac 시뮬레이션 명령을 사용해 보자.

    .ac <oct, dec, lin> <Nsteps> <StartFreq> <EndFreq>

시뮬레이션은 시작 주파수 <StartFreq> 에서 <EndFreq> 까지 훑어가며 회로의 반응을 보겠다는 뜻이다. 회로에 인가할 주파수 구간의 등분은 <Nsteps> 다. 등분하는 방식은 <oct, dec, lin> 이중 하나를 고를 수 있다. 시뮬레이션 동작 명령에서 .tran.ac 는 동시에 줄 수 없다. (당연!) 컨덴서와 코일의 주파수 특성을 AC 분석 시뮬레이션으로 알아보자.

쉽게 예상되었던 결과다. 컨덴서는 주파수가 낮은 쪽에서 임피던스가 커지므로 소멸(shunt)되지 않는다. 따라서 저역 필터(Low-Pass Filter)로 작동한다. 코일은 높은 주파수에서 임피던스 역시 높아져 소멸되지 않는다. 따라서 고역 필터(High-Pass Filter)로 작동한다.

[참조] RC Circuit [Link] / RL Circuit [Link] / LC Circuit [Link] / RLC Circuit [Link]

컨덴서와 코일을 모두 동원하면 좀더 극적인 모습을 볼 수 있다. 컨덴서의 용량성 리약턴스와 코일의 유도성 리액턴스가 일치하는 지점의 주파수에서 차단과 통과의 극대점이 있다. 컨덴서와 코일의 조합 방법에 따라 각각 대역 통과, 대역 차단 필터의 기능을 한다. 대역 통과 필터는 공진회로의 원리 이기도 하다.

데시벨(dB, decibel): 이득의 표현법

주파수 분석에서 가로축은 주파수 세로축은 이득(gain)이다. '이득'이라는 표현이 얼른 와닿지 않는 것을 보면 적절한 표현인지 모를 일이다. 그렇다고 달리 내세울 말도 없다. 백여년 내외의 짧은 역사를 가진 공학 분야의 용어들이 대부분 이렇게 기존의 단어에서 적당히 차용해온 데다 우리말로는 더욱(일본이나 한자를 거쳐 들어왔으니 더욱더!) 난감하다.

한마디로 '이득'은 전압의 비율이다. 아무런 방해를 받지 않았을 경우를 1로 잡고 방해를 받았을 경우 감쇄된 전압을 비율을 보여준다. 전자회로에서 다루는 비율치가 워낙 편차가 크다. 비율을 "원래 신호의 전압대비 천분의 일" 또는 "영쩜 영영일" 이라고 하려니 번거롭기도 하고 어쩐지 모양이 안선다. 그래서 "이 회로의 이득은 -30dB" 라고 표현하면 뭔가 멋져 보인다. 데시벨은 편의상 정한 표기법 일 뿐이다.

[참조] https://math-mass-goodkook.blogspot.com/2023/04/1.html
[참조] Gain(Electronics) [Link]

[주] 데시벨 표현에 무슨 심오한 뜻이 있는 것이 아니다! "리튬 건전지 전압은 3.7볼트"라는 이야길 들었을 때 태연 하듯이 이 "송신기 출력은 10dBm"이라고 한다면 그런가 보다 하자. 10mW 니까 쫄지말자.

------------------------------------------------------------------------------------

컨덴서에 구형파 흘리기

전압원을 고정 전압 대신 구형파 펄스로 변경하여 충전과 방전을 반복시켜보자.

컨덴서의 용량에 따라 충전과 방전의 모습이 달라진다. 또한 전하를 담아두는 컨덴서는 전류를 제한하는 저항에 의해 충방전 시간이 변화한다.

[문제] 컨덴서에 흐르는 전류를 함께 관찰하라. 구형파의 각진 부분이 일그러지는 이유를 컨덴서의 주파수 특성과 연관하여 정성적으로 설명 하라.

[문제] 컨덴서 용량이 늘면서 전압의 최대점이 낮아지는 이유를 설명하라.

[문제] 분압 저항을 바꿔가며 전압 변화를 관찰 하라. 저항의 역활을 설명하라.

[문제] 구형파 펄스와 정현파 펄스에 대한 컨덴서의 반응을 시뮬레이션으로 비교해 보라.

[문제] 컨덴서를 흐르는 교류 신호의 위상 지연 현상을 설명하라.

[문제] 교류 정현파에 대한 컨덴서의 반응을 정현파 펄스와 비교하라.

--------------------------------------------------------------------------------

박산달 음색 조절회로(Baxandall Tone Control)

Baxandall 회로는 컨덴서의 주파수 특성을 활용해 음향 증폭기(오디오 앰프)의 음색 제어용(audio tone control)으로 널리 사용된다[링크]. 따져보면 저항과 컨덴서를 결합한 필터다.

이 회로의 주파수 특성을 살펴보기로 하자. SPICE는 VR1과 VR2 같은 가변저항(포텐쇼메터)의 모델이 없다. [SPICE 뿐만 아니라 대부분 전자회로 시뮬레이터 들은 대화형 인터페이스를 가지고 있지 않다.]

위의 회로에서 포텐쇼메터(potentiometer) 대신 두개의 저항을 두고 비율로 조절한다. 가변하는 저항치를 .param 지시자를 사용하였다.

.PARAM -- User-Defined Parameters

The .param directive allows the creation of user-defined variables. This is useful for associating a name with a value for the sake of clarity and parameterizing subcircuits so that abstract circuits can be saved in libraries.

이 지시자는 사용자 변수를 정의 할 수 있다. 수식표현 뿐만 아니라 하위 회로(sub-circuit)에 전달할 인수의 정의도 가능하다. 단, 이 변수는 고급 프로그래밍 언어처럼 지역변수와 전역변수를 구분하지 못하므로 동일한 이름이 있으면 오류를 내므로 주의하자. [단순한 SPICE 문법에 모듈화 개념은 없다.] 수식에 LT-SPICE에서 제공하는 각종 수학 함수들(mathmatical functions)을 사용하여 표현할 수 있다. 회로 내의 각 부품에 대한 시정수 값을 변수로 지정하려면 중괄호 않에 이름을 {parameter_name} 선언한다. 인수(변수)는 .step 지시자를 통해 회로의 시정수 값을 바꿔가며 반복 실행시키는데 활용된다.

.STEP -- Parameter Sweeps

This command causes an analysis to be repeatedly performed while stepping the temperature, a model parameter, a global parameter, or an independent source. Steps may be linear, logarithmic, or specified as a list of values.

위의 예에서 사용자 정의 인수 Pot1_Tot 는 변수를 정의 했다. 이 변수를 활용하여 부품 R2와 R3의 시정수 값 {Pot1_Lo}{Pot1_Hi}을 수식으로 변경 시킨다.  지시자 .param 과 함께 사용하면 .step 은 프로그래밍 언어의 반복문과 같다. SPICE도 단순하지만 프로그래밍 언어로서 면모를 갖추고 있다. 테스트 환경을 SPICE 코딩으로 구현해 보자.

수식으로 기술한(Behavioral description) AM 변복조기 모형의 예 [링크]

-----------------------------------------------------------------------------------

퓨리어 분석(Fourier Analysis)

시간의 흐름에 따라 요동치는 전압을 관찰(transient simulation) 하면서 의문을 품기 마련이다. (전류량이 요동친다는 의미로 맥동류라고 하자.) 저 요동치는 신호는 어디서 왔을까? 저 요동을 제압 혹은 증폭 할 수 있을까? 컨덴서와 코일이 주파수에 관계되었다고 했으므로 요동치는 전압을 제어할 수 있겠다. 그러려면 먼저 요동치는 전압의 모습을 분석 해보기로 하자. 우리는 테일러 급수(Taylor seriese)를 배우면서 변화하는 모든 것은 주기함수의 급수합으로 근사 될 수 있다고 배웠다. 달리 말하면 시간상 전압 변화는 주파수상 성분으로도 표현 할 수 있다는 뜻이다.

아래와 같은 DC 구형파 신호에 대한 LPF를 적용한 회로에 대해 퓨리어 변환과 분석 시뮬레이션을 보고 물음에 답하라.

[문제] 시뮬레이션 옵션 .options 의 역활에 대해 설명 하시오.

[문제] C4의 용도에 대해 설명 하시오.

[문제] 구형파 발생기 V1의 주파수를 2Mhz 로 변경하고 LPF를 적용한 후 정현파 왜곡율을 계산 하시오. 시뮬레이션 명령 .four (Fourier Analysis)를 변경 할 것.

[문제] 고주파(전파)에 대하여 구형파에 LPF를 적용하여 정현파로 변환하는 필요성에 대해 토론해 보자.

----------------------------------------------------------------------------------

SPICE 기초 사용법 <목차>


2023년 6월 14일 수요일

[SystemC기초] 디지털 반도체 설계자가 알아야할 C++ 언어

[SystemC기초] 디지털 반도체 설계자가 알아야할 C++ 언어

당신이 디지털 반도체 설계자라면 Verilog, VHDL 따위의 설계언어는 이미 알고 있으리라. 그렇다면 SystemC 를 들어 봤는가? 위키 사전에는 이렇게 소개하고 있다[Link].

SystemC is a set of C++ classes and macros which provide an event-driven simulation interface. These facilities enable a designer to simulate concurrent processes, each described using plain C++ syntax. SystemC processes can communicate in a simulated real-time environment, using signals of all the datatypes offered by C++, some additional ones offered by the SystemC library, as well as user defined. In certain respects, SystemC deliberately mimics the hardware description languages VHDL and Verilog, but is more aptly described as a system-level modeling language.

SystemC is applied to system-level modeling, architectural exploration, performance modeling, software development, functional verification, and high-level synthesis.

SystemC is often associated with electronic system-level (ESL) design, and with transaction-level modeling (TLM).

한글 위키사전에 이 항목이 없는 것을 보면, SystemC가 등장하여 IEEE-1666 표준으로 지정된지 십여년이 지났지만 여전히 우리에게는 생소한 모양이다.

시스템 반도체의 설계규모가 커지면서 가장 크게 대두되었던 문제는 검증(verification)이다. 반도체 회로 설계물을 검증하는 첫번째 목적은 목표한 사양의 기능을 수행하는지 확인하는 것이다. 이에 덧붙여 해당 설계물이 시스템에 결합되었을 때 예상치 못한 입력에 대해서도 적절히 대응하는지 확인되어야 한다. 결국 설계물을 검증하기 위한 테스트 벤치의 작성이 설계 자체보다 더 어려운 과제가 될 것은 뻔하다.

HDL언어로 설계한 설계물을 검증하기 위한 시뮬레이션 테스트 벤치역시 동일한 HDL 언어로 작성하기 마련이다. 문제는 이 HDL 언어가 RTL의 하드웨어 기술용 이라서 시스템 수준의 테스트 벤치 작성에는 그리 잘 준비되어 있지 않다. 설계가 복잡(복합)한 만큼 검증에 사용될 시험입력 자료(input test vector)도 실제와 가깝도록 준비되어야 한다. 일예로 멀티미디어나 통신 처리용 알고리즘을 구현한 설계물의 검증에 사용되어야 할 자료의 양은 매우 방대하다. 일일이 테스트 벡터를 작성해 주기보다 시뮬레이션 수행 중 동적 테스트 입력을 수행 해줘야 한다. HDL 언어로 이미지나 음성 데이터 파일 입출력이 포함된 테스트 벤치를 만들어 본적이 있는가?

검증의 두번째 어려움은 시뮬레이션 실행 시간이다. 설계가 복잡해지고 검증에 사용될 자료가 방대해진 만큼 시뮬레이션을 완료하기 까지 엄청난 시간이 소요된다. 이를 극복할 방법으로 널리 사용되는 기법이 고속 프로토 타이핑(fast prototyping)이다. 대규모 FPGA를 사용해 RTL 설계물을 실시간에 조금 못미치는 속도로 작동을 검증해 볼 수 있다. 하지만 이는 설계가 완료되었을 때나 가능한 일이다. 설계 오류를 찾고 고치는 반복적인 개발과정에서 FPGA 프로토 타이핑을 할 수는 없다. 결국 시뮬레이션의 수행시간을 줄여야 하는데 이를 위해 채택한 방법이 트랜잭션 수준(TLM, Transaction Level Modeling) 검증 기법이다. 시뮬레이션 시간이 오래 걸리는 이유는 클럭 마다 HDL 모델의 작동을 처리하기 때문이다. 이미 검증된 설계부분과 개발중인 부분을 분리해 놓고 검증된 부분은 알고리즘을 시험했던 언어(C++)의 모형을 사용하기로 한다. 단지 알고리즘을 기술한 함수(소프트웨어 모델)를 호출하면 되므로 시뮬레이션 작동 시간이 빨라진다. 이 방법을 쓰려면 TLM 과 RTL 사이의 수준을 맞춰줘야 하고 시뮬레이션을 위해 이종 언어를 통합해 줘야 하는 과제가 있다.

이제 하드웨어 RTL 설계자들도 알고리즘 언어를 배워야 하는 압박을 받고 있다. 물론 하위 설계자라면 무시해도 좋으나 장래 시스템 구성자(system architect) 급으로 발돋움 하려면 피하지 말자. 그렇다고 C++를 배우는데 너무 두려워 할 일도 아니다. C++언어를 소프트웨어 기술자 만큼 알아야 할 이유도 없다. 게다가 C++의 언어 구성에서 하드웨어 설계자들을 위해 필요한 매크로와 크래스 그리고 사건 기반의 시뮬레이션 커널을 라이브러리로 잘 정리해서 표준화 시켜 놓은 SystemC가 있기 때문이다.

SystemC 기초 과정은 하드웨어 설계자가 알아야 할 C++언어의 기본사항을 학습 하고 시뮬레이터의 동작 원리를 배운다.

  • 프로그래밍 언어와 하드웨어 언어의 차이
  • 하드웨어 기술의 수준: RTL 과 TLM의 차이
  • C++ 언어의 기본: 크래스와 구조체
  • SystemC의 작동 방식
  • HDL과 SystemC의 혼합 테스트 벤치

학습에 사용될 실습 예제 (수강생의 이해도에 따라 변경될 수 있음)

  • 2D-DCT
  • Canny Edge Detector
  • FIR Filter

실습 도구

  • SystemC Library
  • Microsoft Visual Studio C/C++ Compiler Community Edition
  • ModelSim/QuestSim

학습기간 (수강생의 이해도에 따라 변경될 수 있음)

  • 6주


2023년 6월 13일 화요일

[SPICE기초] 저항과 분압회로

[SPICE기초] 저항과 분압회로

-----------------------------------------------------------------------

앞으로 무엇을 배우려 하나?

우리는 '설계(design)'라는 말에 매력을 느낀다. 뭔가 의미있는 일을 하는 듯한 느낌이 드는 것은 아마도 원하던 바를 성취했다는 기분이 들기 때문이리라. 어쩌면 전자부품이라는 미물들을 지배해서 생명을 불어 넣었다는, 마치 신이된 느낌 마져 들기 때문일지도 모른다.

전자회로를 배웠지만 막상 행사하려니 막막하지 않았던가? 그 막막함을 해소하기 위한 첫걸음을 떼보자. 전자부품의 기능을 이해하고 활용하려면 수많은 시행착오를 격는다. 값비싼 부품들을 구입하여 기판에 땜질을 하고 전원을 넣는 순간 연기가 모락모락 피어난다. 때로는 원하는 동작을 하지 않을 땐 깝깝하다. 일일이 땜질을 하고 수정 하는 지난한 과정을 반복하기 보다 회로 시뮬레이터라는 소프트웨어를 활용해 가상으로 먼저 작동 시켜 보고자 한다. 아무래도 땜질 하기보다야 훨씬 수월할 테니까.

앞으로 SPICE 라는 전자회로 시뮬레이터를 살펴볼 텐데 '도구의 사용법'에 그치지 않기 바란다. 한때는 소프트웨어를 설치하고 켜는 법 조차 기술자의 영역이던 시절이 있었다. 더욱이 전자회로 시뮬레이터라니 뭔가 거창하기까지 했다.

현대 컴퓨터 시스템의 강력한 그래픽 사용자 인터페이스로 인해 도구의 사용법은 매우 직관적이 되었다. 그만큼 컴퓨터 시스템에 익숙해진 지금 도구의 사용법은 상식에 기반한다. [안타 깝게도 여전히 리눅스라는 운영체제와 명령줄 인터페이스와 그래픽 터미널 띄우는 방법을 가르치는데 상당한 시간을 할애하고 있긴하다.] 특정 도구의 사용법보다 전자회로 시뮬레이터가 작동하는 방식을 이해하기 바란다. 원하는 측정을 위한 기법을 배우고 수많은 옵션을 어떻게 주어야 하며 에러 로그와 결과 리포트에 대처 할 줄 알아야 한다. [로그 기록에 나오는 기술적 용어(jargon)의 의미만 알아도 충분히 대처 할 수 있다.] 그러려면 다양한 경우를 접해봐야 한다. SPICE 라는 도구 사용법과 함께 전자회로의 직관적인 경험을 쌓는데 집중하기로 하자.

[주] jargon: '전문 용어'라는 뜻도 있지만 '허튼소리'라는 뜻도 있다. 전문가 입네 하면서 자기들끼리 만들어 쓴 용어들이 상당수다. 알고보면 별게 아니어서 허탈 할 수도 있다. 상식으로 충분히 이해할 수 있는 말들이니 겁먹지 말자!

[읽어보기]

  1. 이 글을 쓰게된 동기 [링크]
  2. 회로 시뮬레이션 소프트웨어, LT-Spice [링크]

-----------------------------------------------------------------------

전기전자 회로는 무엇으로 말하는가?

우리가 회로(electronic circuit)라는 것을 꾸며놓고 관찰하고자 하는 물리량은 전압(voltage)과 전류(current)다. 회로에 입력으로 이 물리량을 주입하고 그 출력으로 기대하는 것 역시 전압과 전류다. 증폭회로니 발진회로니 하는 것들을 꾸미는 이유를 생각해 보자. 무엇인가 기대하는 목표가 있을 텐데 그 기대치란 바로 입력과 출력 사이의 전압과 전류 변화량을 뜻한다.

[읽어보기]

  1. 전류와 전압 [링크]
  2. 직류와 교류, 그리고 맥동류? [링크]

회로의 입출력 사이의 변화는 시간과 주파수라는 두가지 측면에서 관찰한다. 시간이 지나면서 아무런 전압변화가 없다면 회로를 꾸민 이유가 불분명 해진다. 마치 '상수'에서 어떤 의미도 찾아볼 수 없는 것과 같다. 증폭회로는 입력으로 주어진 전압과 출력되는 전압이 다르다. 입출력되는 전압의 비를 증폭도라고 한다. 멀쩡하던 전압이 시간에 따라 너울댈 때 무슨 의미가 있었을까? 전압이 변하는 양상을 주파수의 관점에서 회로의 관찰은 나중에 따져 볼 것이다.

전압을 관찰 했으니 이제 전류를 관찰해 보자. 전도체를 통해 시간당 흐르는 전하의 양을 전류량 이라고 배웠다. 맞는 말이지만 딱히 그게 뭔지 떠오르지 않는다. 전압은 볼트 미터로 찍어보면 금방 몇 볼트라고 알려준다. 전구에 전압을 걸어주면 불을 밝힌다. 고압 전선에 몸이 닿으면 죽을 수도 있다. 이 얼마나 직관적인가. 그런데 전류를 얘기 하려면 직관성이 떨어진다. 왜 그럴까? 우리는 도체를 따라 흐르는 전하의 갯수를 세어본 적이 없기 때문이다. 전하는 눈에 보이는 존재가 아니라서 그런가? 그럼 전압은 봤나? 전압을 본적이 없지만 직관적이라고 느끼는 이유는 쉽게 재볼 수 있고 몸으로 느낄 수 조차 있다. 이에 비해 전류를 재보려면 아주 특별한 조치를 취해줘야 한다. 전기가 흐르는 도체에 전하의 양을 측정하려면 중간을 끊고 전하량 측정기를 들이대야 한다. '전류를 측정한다'는 말에는 두가지 요건이 있다. 첫째, 전하가 흘러야 한다. 둘째, 회로를 끊고 양을 재야 한다. 그런데 전압은 어떤가? 그냥 전원의 양단에 측정기만 들이대면 된다.

전압은 아직 실현되지 않은 물리량이다. 우리는 이를 잠재능력 혹은 포텐셜 이라고 한다. 전류는 전압이 실현되어 전하가 저항체에 흐르기 때문에 비로소 실체를 보여주는 물리현상이다. 이 저항체가 전류의 흐름을 많이 방해하면 전류가 적게 흐를 것이다. 다행히 전류는 전압과 저항의 간단한 비례 관계가 있어서 그리 어렵지 않게 측정 할 수 있다. 하지만 옴의 법칙 이라는 전압과 전류 관계식에 따라 계산이 필요하다. 단순한 1차함수 식이니 걱정할것은 없다. 2차 방정식도술술 다루는데 1차 함수 쯤이야!

--------------------------------------------------------------------------

저항

저항은 전류가 흐르는 것을 제한 한다. 이쯤해서 논리적으로 생각해 보자. 전류가 흐르는 통로를 많이 만들어 놓으면 전류가 많이 흐를 것다. 저항을 직렬로 연결하면 더 많은 전류를 제한한다. 저항치가 증가한다는 뜻이다. 저항을 병렬로 연결하면 전류가 흐르는 통로를 늘려 줬으므로 저항치는 감소한다. 그래서 합성저항 계산식이 나왔다.

직렬연결 저항 계산

    R = R1 + R2 + R3 + ......

병렬연결 계산

    1/R = 1/R1 + 1/R2 + 1/R3 + ......

전류가 많이 흐르면 저항의 양단에 걸리게될 전압도 높아진다. 저항에 흐르는 전류와 전압의 관계는 옴의 법칙을 따른다.

    V = I * R

정해놓은 저항에 전류가 제한되면 당연히 옴의 법칙에 따라 전압이 떨어진다. 저항 몇개를 연결해 놓고 분압회로(Voltage Divider)라고 부른다.

--------------------------------------------------------------------------

[시뮬레이션]

1. 회로 시뮬레이터 LT-Spice 설치

회로 시뮬레이터 LT-SPICE는 아래 링크에서 LT-SPICE를 다운 받아 설치한다.

LT-Spice Download [Link]

2. 회로 그리기

LT-Spice의 [메뉴]에서 File -> New Schematic 회로 그림판 창을 열어 회로를 그려보자. 먼저 간단하게 저항 두개와 전원을 회로판에 배치하고 결선한다. 회로 그리기는 워낙 직관적이라 별도의 설명이 필요 없을 것이다.

일일이 메뉴나 메뉴-바를 눌러가며 부품을 불러오고 결선하고 편집하기 번거롭다. 아래의 단축키를 익혀두면 편리하다.

단축키는 몇개 안된다. 네가지 용도의 창에서 기능이 다르다. LT-Spice에서 보게될 창의 종류는 아래와 같이 4가지다.

  • Schematic: 회로도를 그리는 용도의 창이다.
  • Waveform: 시뮬레이션을 마친 후 출력 파형을 보여주는 창이다. 파형은 전압과 전류의 시간 축상에서 보여준다. 파형의 가로축은 시간, 세로축은 전압 혹은 전류를 표시한다. 사용자 정의식도 가능 하다.
  • Symbol: 기초 부품의 경우 부품의 모습에 대한 규정이 있다. 만일 사용자 정의 부품(하위회로)의 경우 그 부품을 상징하는 외형을 그릴 수 있다.
  • Netlist: 회로는 Schematic 창에서 그림으로 그릴 수 있다. 매우 편리하긴 하겠지만 그림을 가지고 시뮬레이션을 할 수는 없다. Spice는 자체 문법을 가진 언어로서 회로를 문자로 서술한다. 이 부품의 연결을 문서로 서술한 것을 Netlist 라 한다. 당연히 문서편집기(text editor, i.e. Notepad)로 회로를 설계 편집 할 수 있다.

회로를 구성하는 각 부품에 값을 넣는 방법:

  1. 해당 부품에 마우스 커서를 올려 놓으면 커서 모양이 손가락으로 바뀐다.
  2. 오른쪽 마우스를 클릭 하면 입력용 팝-업 창이 뜬다.
  3. 값을 입력 한다.

완성된 분압(Voltage Divider) 회로는 다음과 같다.

회로에 부품을 배치(place)하면 각 부품마다 이름(label)이 붙는다. 회로도에 직접 표시되지는 않지만 배선에도 이름이 자동으로 붙는다. 측정하고자 하는 배선에 의미를 담은 이름(net label)을 붙여 놓으면 찾아보기 쉽다. 부품을 배치하고 배선하는 행위를 P&R(피앤알) 이라고 하는데 Place and Route를 줄인 말이다.

그림으로 그린 회로를 문서로 표현한 것을 네트 리스트(Net List)라 한다. 위의 회로의 네트리스트를 보자.

모든 설계 도구들은 고유 언어체계(language)를 가지고 기능과 현상을 묘사한다. 합성기(synthesizer), 혹은 컴파일러(compiler)라고 하는 도구는 인간의 설계물을 실물 제작 기계의 부호(code)로 변환해준다. 이 부호를 읽고 작동하는 기계를 통해 비로서 우리는 실물(실체)를 마주하게 된다.

기계는 인간이 작성한 문장을 이해하지 못한다. 컴파일러는 기계가 이해할 수 있는 부호(대개 2진 숫자의 모습으로 매우 단순하다)로 바꿔 준다. 컴파일러와 합성기는 인간 언어와 기계 부호 사이의 변환(translation)을 넘어 논리적 오류를 찾아 알려주고 최적화(optimization)를 수행한다. 해석이 애매한 경우 되묻기도 한다(error, warning, recomendation). 따라서 변환기가 내뱉는 각종 메시지(로그)를 읽고 이에 적절한 대응을 해줘야 바른 결과를 얻을 수 있다.

언어(Language)는 미리 정의된 키-워드(key word)와 보유어(reserved word)가 있고 사용자는 변수(variable)와 상수(constant)를 동원하여 행위(behavior)를 기술(description)한다. 여러 문장(statement)이 모여 고도의 기능(function)을 기술할 수 있다. 한 문장은 주체와 객체의 관계를 맺는 표현식(expressions)을 가지며 반드시 종지부를 찍어야 한다.

언어의 문장들은 고도의 추상성을 갖기 때문에 해석하는 방법은 다양할 수 있다. 추상성 높은 문장에 애매함이 내포하고 있기도 한다. 해석이 달라 질 수 있으므로 작성자의 의도를 명확히 해줄 필요도 있다. 지시자(directives)는 변환 도구(시뮬레이터, 혹은 컴파일러 같은 소프트웨어)가 어떻게 해석할 지 지시할 때 사용한다. 컴파일러 옵션(compiler option)은 설계 전체에 영향을 주지만 지시자는 설계의 특정 부분에 영향을 줄 수 있도록 켜거나 끌 수(directives on and off) 있다.

회로를 가상으로 작동 시키려면 그에 맞는 동작 환경(testbench)도 함께 구축해야 한다. 이를 위해 회로 시뮬레이터들은 시뮬레이션 전용의 지시구문(simulation commands)과 다양한 지원 기능들을 제공한다. 그 기능 중에는 강력한 수학 함수(mathematical functions)들이 모두 포함된다.

전자회로를 기술하는 Spice도 언어체계를 가지고 있고 그 문법은 매우 단순하고 직관적이다. 아래의 간단한 예에서 보유어와 사용자 정의어 그리고 지시자를 찾아보라. 그리고 그 기능을 설명해 보라.

3. 시뮬레이션 수행

회로가 완성 되었다면 시뮬레이션을 수행한다. 이때 어떤 조건으로 시뮬레이션을 수행 할지, 그리고 무엇을 살펴볼지 지정해 주어야 한다. 이를 시뮬레이터에게 '지시'하게 되는데 말 그대로 지시자(directives)다. 위의 '단축키' 표에서 Spice의 다양한 지시자들을 볼 수 있다. Spice의 회로 기술 언어에서 지시자는 점(.)으로 시작 한다. 주석문은 별(*)로 시작한다. 한 문장의 끝은 줄바꿈(enter)이다.

지시자를 이용해 조성한 시뮬레이션 환경을 테스트벤치(Testbench) 라고 한다. 그리고 시뮬레이션의 대상이 되는 회로를 DUT(Design Under Test)라고 한다.

위의 예에서는 시뮬레이션을 시간 상에서 1 미리초(mili-second) 동안 수행하라는 지시를 하고 있다. 시뮬레이션 명령 .tran 은 transient analysis로 '시간진행 분석'의 영어다.

메뉴-바에서 'Run' 버튼을 누르면 지시한 대로 1미리초 동안 시뮬레이션을 진행 한다. 시뮬레이션이 끝나면 파형을 보여주는 창(Waveform window)이 뜬다. 회로에서 어느 지점을 살펴볼지 지정하지 않았으므로 파형이 없다. 시간분석을 위한 파형창이므로 가로축은 시간(TIME)이다.

회로창(Schematic window)에서 관찰을 원하는 회로지점(net)으로 옮기면 커서가 오실로 스코프의 탐침(probe) 모양으로 변한다. 마우스 왼쪽 버튼을 누르면 전압을 관찰 할 수 있다.

LT-Spice에서 기본적으로 보여주는 파형관찰 창의 수직축 표시눈금(vertical scale)은 유효한 범위로 확대하여 표시한다. 위의 회로에서 측정한 전압이 각각 5V와 1.666V 다. 이에따라 표시한 수직축 눈금의 범위는 1.5V 에서 5.1V 로 확대되어 보여준다. 보기 어색하다. 파형창에서 수직축 눈금에 마우스 커서를 올려 놓으면 자 모양으로 바뀐다. 오른쪽 버튼을 누르면 뜨는 표시범위 조절창에서 수직축 눈금 볌위를 0V에서 5.1V로 바꿀 수 있다. 측정 치를 도식화 할때 범위와 단위(선형 혹은 로그)를 적절히 지정하므로써 결과를 돋보이게 할 뿐 만 아니라 문제를 추적하기도 수월 하다.

네트 위에 마우스 커서를 놓고 마우스 오른쪽 버튼을 누르면 마치 디지탈 볼트 미터 처럼 시뮬레이션이 끝난 후 최종 전압을 보여준다. 오실로 스코프와 멀티메터의 사용이 다르듯이 굳이 시간상 전압 변화를 살펴볼 것이 아니라면 파형을 볼 필요는 없다.

회로를 구성하는 부품에 흐르는 전류를 관찰해보자. 마우스 커서를 해당 부품위에 올려 놓으면 클램프 모양으로 바뀐다. 마우스 왼쪽 버튼을 누르면 시간 축으로 변화하는 전류를 보여준다.

-------------------------------------------------------------------

[결론]

저항을 가지고 LT-Spice의 기초적인 사용법을 살펴봤다. 사실 도구의 사용법은 별 것 아니라고 생각할 수 있다. 하지만 한가지 기억해 두자. 시뮬레이션도 계측기의 사용법과 다를바 없다. 아무리 좋은 계측기라도 바르게 사용할 줄 모르면 측정은 엉터리가 된다는 말을 하듯이 시뮬레이션도 적절한 관찰과 분석을 할 줄 모르면 헛짓일 뿐이다.

-----------------------------------------------------------------------------

[검토/토론]

1. 저항가지고 무슨 시뮬레이션 씩이나?

전자회로라는 공부를 하면서 저항을 난해하게 연결해 놓고는 각 저항의 양단에 걸리는 전압을 계산하라는 문제를 많이 접했을 것이다. 여기에 커쵸프의 전류법칙(Kirchhoff's Current Law)이니 데브난의 정리(Thevenin's Theorem) 따위를 들이대곤 한다. 참으로 고약하다. 실제로 저항을 그렇게 연결할 일이 있을까 싶다. 학습자를 골탕 먹일 뿐 아니라 성적으로 줄세우기 위한 심사라고 감히 말하고 싶다. 한가지만 기억해 두자. 저항을 제아무리 얼기설기 연결 했더라도 회로 전체에 흐르는 전류는 하나다.

R1에 흐르는 전류나 R2에 흐르는 전류나 동일하다. 이 회로 전체에 흐르는 전류는 3.33mA다. Vout은 R2의 양단에 걸리는 전압차이므로,

    V1/(R1+R2) = Vout/R2

따라서,

    Vout = V1*[R2/(R1+R2)]

저항 분압기를 무슨 공식인양 외울 필요가 있을까?

저항 두개를 연결하여 분압회로라고 했다. 이 분압회로는 어디에 쓰일까?

2. 저항 브릿지 회로

저항을 조금 더 복잡하게 연결해 보자. 소위 저항 브릿지 회로다. 각 저항의 양단에 걸리는 전압을 구해보자.

(A)라고 표시된 것은 전류계다. 위의 브릿지 회로에는 두개의 전류경로가 있다. 두 전류 경로는 서로 분리되어 있으므로 옴의 법칙에 따라 각 경로의 전류가 계산된다. 그리고 전체 회로에 흐르는 전류는 두 경로로 흐르는 전류의 합이다.

위의 브릿지 회로는 마치 두개의 병렬 분압기와 같다. 분압된 두 전압 V1과 V2가 같다면 전류는 0 이다.

저항 브릿지 회로를 미지의 저항을 측정할 때 사용한다고 한다. R1, R2 그리고 R3를 알고 있고 R4가 미지 저항이라고 하자. V1과 V2의 전압차를 근거로 미지 저항 R4를 계산 할 수 있을까?

3. 저항 브릿지회로에 흐르는 전류/전압 구하기

저항 브릿지회로에 약간 변화를 줬다. 두 분압회로의 출력지점 양단에 저항을 추가한 것 뿐이다. 이제 두 분압회로가 서로 영향을 주게 생겼다. 만일 두 경로상 저항의 곱이 전류가 0일 조건을 만족한다면, 다시말해 V1과 V2가 동일 하다면 저항 RG에 전류가 흐르지 않는다.

하지만 회로의 저항값이 위 조건을 만족하지 않는다면, 다시말해 V1≠V2 라고 해보자. RG에 흐르는 전류는 어떻게 될까? 커초프의 전류와 전압 보존법칙을 동원해야 하는데 심상치 않다. 참고로 "휘트스톤 브릿지의 키르히호프 법칙 및 평형조건 [링크]", 골아프다. 일단 커초프 만 믿고 정성적으로 살펴보고 시뮬레이션으로 확인해 보도록 하자.

회로를 구성하는 저항이 모두 지나도록 전류의 경로를 그려보면 위와 같다. 마치 한붓 그리기와 같은데 주의할 점은 폐회로가 되도록 하며 그리는 도중 (회전)방향을 바꾸면 않된다. 세개의 전류 경로가 만들어 졌다. 옴의 법칙 V=R*I 과 전압/전류 보전법칙을 적용하여 저항에 흐를 전류와 전압의 관계식을 구한다. (1)과 (2)번 경로의 전압차는 1볼트다. (3)번 경로의 전압차는 0볼트다. 세개의 관계식은 연립방정식(systems of equations)으로 풀수 있다. 가우스 소거법이니 뭐니 하는 거창한(?) 수학적 방법들이 있지만 그것 때문에 골치 썩이지 말고  울프람 언어(Wolfram language)를 쓰자. [참고] 신호처리 '자기주도' 학습 도구, 울프람 언어(Wolfram Language)[링크]

Solve[{16*i1 - 11*i3 == 1, 10*i2 + 7*i3 == 1, -11*i1 + 7*i2 + 20*i3 == 0}, {i1, i2, i3}]

저항에 흐르는 전류를 구했으므로 저항의 양단에 걸릴 전압은 쉽게 구할 수 있다. 굳이 계산을 하지 않고도 시뮬레이션으로 구할 수 있다.  

저항 몇개 엮어놓고 시뮬레이션 씩이나? 맞다! 실제로 이런 저항 회로를 꾸밀 일이 그리 흔치 않다. 하지만 개발 과정에서 적절한 부품이 없을 때 부품의 시정수를 맞추기 위해 요긴하게 응용될 일이 있으니 알아두면 잘난척 하기 좋다. 별것 아닌걸로 누군가의 눈에 띈다는 것은 기회가 될 수 있다. 인생 별거아니다.

사진출처: Basic RF Attenuators - Design, Construction, Testing - PI and T style - A Tutorial[Link], w2aew Channel

4. 저항 브릿지 회로는 어디에 쓸까?

휘트스톤 브릿지(Wheatstone Bridge [Link])라고도 하는 이 저항 회로는 미지 저항을 측정할 때 쓴다. 저항은 직류는 물론 교류에 대해서도 동일한 법칙에 따라 저항체로서 작용한다. 미지의 임피던스(impedance)를 갖는 안테나가 50옴의 임피던스를 갖는지 확인할 때 이 브릿지 회로가 사용된다.

5. 고주파 전력 측정: 더미로드(Dummy Load)

전력(electric power)은 전기 에너지가 물리적 현상으로 발현될 수 있는 능력을 말한다. 운동에서 에너지는 속도와 무게로 표현한다. 전기 에너지는 전압과 전류로 표현한다. 전력의 식은 다음과 같다.

    P = I*V

또는

    P = (V^2)/R

어떤 전기 에너지원(전원 공급장치, 전파 송신기 같은)이 구동할 수 있는 능력을 보통 전력(전압과 전류)으로 표시한다. 전기 에너지원의 전력을 측정할 때 두번째 식을 선호한다. 눈치 챘겠지만 전류를 측정하기는 매우 어렵기 때문에 부하저항 R 을 달고 양단의 전압을 측정하여 전력을 계산한다.

무선 송신기의 출력 증폭기를 시험할 때 안테나 대신 사용하는 저항체를 더미 로드(dummy load), '가짜 부하'라 한다. 더미로드의 저항치는 송신기의 내부저항(임피던스)과 일치할 때 온 전력을 부하에 전달 할 수 있다.

고주파 송신기에 부하저항을 달아서 최대전력 전달 조건을 알아보는 실험을 해보자. 답은 이미 나와 있지만 SPICE 가 회로 기술 언어로서 프로그래밍 기능이 있음을 보고자 한다.

먼저 전압원(voltage source)으로 고주파 신호 발생기(RF Signal Generator) 모형을 만든다. 사인 파 발생기에 주파수, 진폭 을 지정해 주었다.

더미 로드를 달아 시험 회로를 완성한다. 더미로드의 저항값을 바꿔가며 시뮬레이션을 수행하기 위해 .sweep 명령을 사용했다. 인수(param)로 지정한 XL_Val 에 줄 값을 10, 50, 100으로 나열하여 반복 시뮬레이션을 실시한다.

.sweep param XL_val list 10 50 100

값을 나열하는 대신 증감량을 주어 반복 시킬 수도 있다.

.sweep param XL_val 10 100 40

인수 XL_Val 을 10 에서 시작하여 100 이 될 때까지 증감량은 40 이다. 마치 프로그래밍 언어의 for(...) 반복문과 같다.

시뮬레이션의 결과를 보여주는 파형 창에 여러개의 신호를 동시에 보기에 혼란 스럽다. 별도의 파형 그래프로 분리할 수 있다. 파형창의 메뉴에서 Plot Setting -> Add Plot Pane 이다. 더미저항 R1에 걸린 전압, 흐르는 전류 그리고 전력의 관계를 보자.

예상대로 송신기의 내부저항(Rser=50)과 부하저항이 일치할 때 가장 큰 전력이 전송된다. 고주파 교류 신호 이므로 전압과 전류는 음과 양을 오간다. 전력은 전류와 전압의 곱이므로 항상 양의 값을 갖는다. 전류와 전압은 방향성을 가지는 벡터량 이다. 전력(power)는 스칼라 량이다.

그런데, 뭔가 이상한 점을 찾았나? 앞서 전력을 측정할 때 부하저항의 양단에 걸린 전압으로 전력을 측정 한다고 했었다. 하지만 부하저항이 송신기의 임피던스와 일치하지 않을 경우 전압만을 재서 전력을 계산하면 틀린 측정이 된다. 위의 전압 곡선에서도 봤듯이 부하저항이 100일때 오히려 전압이 더 높다. 임피던스 매칭이 된 상태에서 전압을 측정해야 바르게 전력을 계산 할 수 있다.

두번째 고려할 사항은 교류 전력의 표시법이다. 교류는 시시각각 흐르는 전류의 방향이 바뀐다. 전력도 그렇다. 이 고주파 송신기의 출력 표시에 "시시각각 다른데 최대는 5mW 쯤"이라고 할텐가? 그리하여 교류 전압(전력)을 측정하는 여러 기준들이 나왔다. 첨두치(peak), 평균(average), 자승평균(root mean square) 이다.

[출처] https://byjus.com/physics/rms-value-alternating-current/

평균(average)과 자승평균(root-mean-square) 전압에서 첨두치 전압에 딸려 붙은 숫자들의 의미는 ?

[출처] 진폭 변조(AM, SSB)된 파형의 모습과 출력[링크]

시뮬레이션 결과를 파형으로 관찰하면 전체 윤곽을 파악할 때 유리할지 몰라도 매우 어지럽다. 측정치를 수식으로 표현한 후 문서로 측정결과를 볼때 사용하는 시뮬레이션 명령은 .measure(Evaluate User-Defined Electrical Quantities).

세개의 사용자 정의 측정치를 계산해 봤다.

.measure P_pp PP I(R1)*V(V_Load)
.measure P_avg AVG I(R1)*V(V_Load)
.measure P_rms RMS I(R1)*V(V_Load)

표현식 I(R1)*V(V_Load)은 R1에 흐르는 전류 I(R1)와 V_Load 의 전압 V(V_Load)을 곱하여 각각 첨두치 PP (Peak-to-Peak), 평균치 AVG(average), 자승 평균치 RMS(root-mean-square)를 문서로 보고해준다. 보고 문서는 메뉴의 View -> SPICE Error Log 를 선택하면 볼 수 있다.

6. 고주파 전압 측정기(RF Vole-meter)는 정류기(Rectifier)?

교류 신호를 다루기 시작 하면서 생각할 것들이 늘어나기 시작 했다. 교류의 전압은 최대치로 측정 하기로 하자. 전압계는 고주파 교류 전압을 측정 할 수 있을까? 가동철편형 이라고 불리는 전압계는 요동치는 전압을 측정하지 못한다. 바늘이 따라가질 못할 뿐더러 시시각각 변하는 전압치를 읽을 재간도 없다. 교류전압 측정기로 작동 시키려면 피측정 교류전원을 정류 시켜 직류화 시킨 후 전압을 측정 한다.

정류 회로는 다이오드와 컨덴서의 조합으로 작동한다. 다이오드는 한방향으로 전류를 흐르게 해준다고 한다. 과연 그런가? 시뮬레이션으로 보자.

다이오드를 지나며 전압 강하가 있었지만 양의 전압을 잘 걸러냈다. 요동치는 컨덴서를 추가하면 걸러낸 직류분의 파형을 평활화 하여 안정된 전압을 곡선을 만들어 낸다. 컨덴서는 충전과 방전을 반복하면서 부하저항 R1에 안정된 직류를 공급한다.

위의 정류회로에서 시험입력으로 사용한 사인파의 주파수는 매우 낮은 100Hz 였다. 이번에는 주파수를 고주파(전파)로 올려보자.

회로에 사용한 다이오드는 1N914 다. SPICE에서 제공된 이상적인 다이오드와 비교해 보라! 1N914는 고주파에서 제역활을 못하고 있다. 왜그런가? 저 다이오드는 고주파 회로에는 쓸모가 없을까?

정류회로에서 그랬던 것처럼 '평활' 컨덴서를 달아보자.

다이오드 1N914는 제 역활을 한다. 충전과 방전을 통해 전압을 평활화 하는 것을 넘어 교류(역전압)를 적극적으로 제거(?)한다. 이런 역활을 하는 '우회(shunt)' 컨덴서라 한다.

그나저나 1N914라는 '상용' 다이오드는 왜 그랬을까?

7. 고주파 AM 변조와 복조(포락선 검출기)

고주파 신호(전파)의 전압을 측정하는 회로는 다음과 같다. 다이오드를 통과시켜 양의 전압 변동분을 걸러낸 후(정말?) 컨덴서로 고주파 성분을 빼냈다(shunt).

다이오드와 컨덴서의 조합은 선형 검파기로도 잘 알려져 있다. 변조된 고주파 신호의 포락선 검출기(envelope detector)다. 광석 라디오(crystal radio)에서도 볼 수 있는 AM 수신기의 기본 검파 회로다.

그림출처: http://techlib.com/electronics/crystal.html

회로를 만들어 시험하려면 시험용 파형이 필요하다. 이때 사용되는 신호 발생기가 말그대로 시그널 제네레이터(signal generator)다. 단순 파형은 물론 변조된 신호 생성도 가능하다. 모든 신호는 수학을 동원하면 모델링 가능하다. 회로 시뮬레이터 LT-Spice는 임의 신호 생성을 위해 각종 수학 함수(삼각함수, 지수함수 등)를 제공한다. 수식을 사용해 시험용 파형을 만들어내는 전압 발생기를 Behavioral Voltage Sources라 한다. 수학식 신호 발생기는 만드는 방법은 아래와 같다. 전압소스(전기 신호는 전압의 변화로 표현되므로, voltage source) 심볼의 속성을 수학식으로 변경해 주자.

참고: LTspice: Behavioral Voltage Sources [Link]

이제 수학식 신호 발생기법을 써서 진폭 변조 신호를 생성(시간 영역에서 곱하기)하고 선형 복조기(AM detector, de-modulator)를 시뮬레이션으로 구현해 보자. 말은 거창하지만 간단하다. 어디가서 SPICE 좀 쓴다고 뽐내기 좋다.

이제 SPICE 덕분에 진폭변조, 선형 검파 따위는 별거 아니게 됐다.

--------------------------------------------------------------

[참고]

1] LT-Spice Commands Short cut PDF [Link]
2] FesZ Electronics Channel/LT-Spice Tutorial [Link]

---------------------------------------------------------------

SPICE 기초 사용법 <목차>