# 발진기를 만드는 것은 어렵다

> Clean Markdown view of GeekNews topic #24545. Use the original source for factual precision when an external source URL is present.

## Metadata

- GeekNews HTML: [https://news.hada.io/topic?id=24545](https://news.hada.io/topic?id=24545)
- GeekNews Markdown: [https://news.hada.io/topic/24545.md](https://news.hada.io/topic/24545.md)
- Type: GN+
- Author: [neo](https://news.hada.io/@neo)
- Published: 2025-11-23T06:34:23+09:00
- Updated: 2025-11-23T06:34:23+09:00
- Original source: [lcamtuf.substack.com](https://lcamtuf.substack.com/p/its-hard-to-build-an-oscillator)
- Points: 4
- Comments: 1

## Topic Body

- **발진기 회로 설계의 핵심 원리**와 실제 구현의 어려움을 단계적으로 설명  
- 단일 **MOSFET 회로**가 안정점 때문에 발진하지 않는 이유를 분석하고, 이를 해결하기 위한 **Schmitt 트리거 구조** 제시  
- Schmitt 트리거를 기반으로 한 **릴랙세이션 발진기**를 구성해 약 **3 kHz**의 안정적 주파수를 구현  
- 이후 **연산 증폭기(op-amp)** 를 이용한 간단한 발진 회로를 소개하고, 이론 계산과 실제 측정값의 차이를 비교  
- 마지막으로 **위상 이동(phase-shift) 발진기**를 통해 RC 필터의 위상 변화로 **사인파형 생성 원리**를 설명하며, 아날로그 회로 설계의 정밀성과 실험적 검증의 중요성 강조  

---

### 발진기의 기본 개념과 어려움
- 발진기의 핵심 조건은 **신호 이득(gain)** 존재이며, 이득이 없으면 진동이 감쇠함  
- 증폭 회로가 우연히 발진하는 경우도 있으나, **안정적 아날로그 발진기**를 직접 설계하기는 어렵다고 설명  
- 인터넷에서 흔히 볼 수 있는 발진 회로는 **불안정하거나 특수 부품**(센터탭 인덕터, 백열전구 등)을 필요로 함  
- 목표는 **이해하기 쉽고 주파수가 예측 가능한 발진기**를 외부 참고 없이 직접 구성하는 것  

### 단일 MOSFET 발진 시도의 한계
- n채널 **MOSFET**을 스위치처럼 사용해 발진을 시도하지만, 실제로는 **안정 평형점**이 존재해 진동이 멈춤  
- 예시로 BS170 트랜지스터의 **Vgs–Id 곡선**을 제시하며, 약 2 V 부근에서 300 µA 전류가 흐르는 안정 상태 형성  
- 이 상태는 “스위치가 반쯤 켜진” 상태와 같아 발진이 지속되지 않음  

### Schmitt 트리거를 이용한 안정적 스위칭
- **중간 안정점이 없는 전자 스위치**로서 Schmitt 트리거 회로를 제시  
- 입력이 0 V일 때 오른쪽 트랜지스터가 도통하며, 입력이 약 2.6 V를 넘으면 왼쪽 트랜지스터가 켜지고 오른쪽이 꺼짐  
- 이 과정에서 **양의 피드백**이 발생해 회로가 중간 상태에 머무르지 않음  
- 입력 전압이 2.6 V에서 켜지고 2.2 V에서 꺼지는 **400 mV 히스테리시스** 형성  

### Schmitt 트리거 기반 릴랙세이션 발진기
- Schmitt 트리거 출력 신호를 입력으로 되먹임하고, **저항–커패시터(RC)** 지연을 추가해 발진 주파수 제어  
- 5 V 전원에서 약 **3 kHz**의 발진 주파수 관측  
- 커패시터 전압이 2.2 V~2.6 V 사이에서 진동하며, 충전·방전 시간은 각각 154 µs, 167 µs로 계산  
- 회로를 단순화할 수 있으나, 더 적은 부품으로는 **연산 증폭기(op-amp)** 사용이 효율적임  

### 연산 증폭기 릴랙세이션 발진기
- R1 = R2 = R3 구성 시, 비반전 입력은 **전원·접지·출력의 평균 전압**(⅓~⅔ Vsupply) 유지  
- 초기 상태에서 커패시터가 0 V이므로 출력이 상승하고, 이후 커패시터가 충전되며 ⅔ Vsupply에 도달하면 출력이 반전  
- 커패시터가 ⅔ → ⅓ Vsupply로 방전되며 주기적 발진 발생  
- 5 V 회로, Rcap = 10 kΩ, C = 1 µF일 때 이론상 **75 Hz**, 실제 측정은 **70 Hz**  
- 오차 원인은 **비상수 전류 근사**의 한계이며, R3를 47 kΩ으로 조정하면 더 정확한 결과 도출  

### 주파수 계산과 일반식
- R1 = R2일 때 두 저항을 병합해 **전압 분배식**으로 단순화 가능  
- 커패시터 전압이 ½ Vsupply 중심에서 진동하므로, 평균 전류를 이용해 **t = Δv · C / I** 형태로 주기 계산  
- 예시 값(R1 = R2 = 10 kΩ, R3 = 47 kΩ)으로 실제 주파수 도출  

### 위상 이동(Phase-Shift) 발진기
- **연산 증폭기 전압 팔로워**의 음의 피드백을 변형해 특정 주파수에서 **위상 반전**을 유도  
- RC 저역통과 필터를 연속 연결해 각 단계에서 -60°씩, 총 -180° 위상 이동을 달성  
- 각 RC 단계의 **아크탄젠트(Arctan)** 관계식을 이용해 해당 주파수 계산  
- 세 단계 모두 동일한 결과를 가지며, **위상 반전 주파수**에서 발진 발생  

### 파형 특성과 시뮬레이션
- 증폭기 이득이 제한되지 않아 출력은 **사각파** 형태지만, RC 필터를 거친 파형은 **사인파에 근접**  
- 시뮬레이션 결과, 사각파(파란색)와 사인파(회색)의 거동이 거의 일치  
- 출력 파형을 순수 사인파로 만들려면 이득을 조정하거나 **비반전 입력 신호를 증폭**하는 방법 사용  

### 회로 설계상의 고려
- 각 RC 단계의 임피던스를 10배씩 증가시켜 **상호 부하 효과**를 최소화  
- 동일 임피던스일 경우, 전체 여섯 부품의 **전달 함수 계산이 복잡**해짐  
- 문헌에서는 고역통과(high-pass) 필터와 단일 트랜지스터를 사용하는 방식도 있으나, **실제 구현은 까다로움**  
- 본문 회로는 Electronic Design 기사에서 논의된 **저왜곡 사인·사각파 발생기** 구조 기반  

---

## Comments



### Comment 46683

- Author: neo
- Created: 2025-11-23T06:34:24+09:00
- Points: 1

###### [Hacker News 의견](https://news.ycombinator.com/item?id=46002161) 
- 오래된 전자공학 농담 중에 “발진기를 만들고 싶으면 증폭기를 만들어보라”는 말이 있음  
  80년대에 읽은 **Television Magazine** 기사에서 Philips 라디오의 서비스 노트를 다루던 글이 떠올랐음  
  거기엔 “Fix VIUPS”라는 수리 지시가 있었는데, 저항 몇 개와 커패시터 몇 개를 바꾸는 정도였음  
  저자는 그게 뭔지 궁금해서 Philips 본사까지 연락했는데, 결국 엔지니어가 “VIUPS는 고장 났을 때 나는 소리 이름임”이라고 답했다고 함 — “VIUPS VIUPS VIUPS”  
  - 내가 들은 버전은 “**증폭기는 발진하고, 발진기는 발진하지 않는다**”였음  
  - 이건 **no-input 테크닉**으로 쉽게 시연할 수 있음. 오디오 믹서의 출력을 입력으로 다시 연결하면 피드백이 생기고, 그로부터 다양한 톤을 만들 수 있음  
    다만 조심해서 해야 함 — [시연 영상](https://www.youtube.com/watch?v=H-7kQmpjBds&t=2s)  
  - 공감됨, 진짜 **공명(resonates)** 하는 이야기임  
  - AM 라디오로 이웃을 괴롭히는 가장 쉬운 방법은 **재생형 AM 수신기**의 이득을 너무 높이는 것임  
    그러면 발진해서 같은 주파수로 소음을 방출함. 여기에 탄소 마이크를 추가하고 게인을 최대로 하면 간단한 AM 송신기가 됨  

- **LC 발진기**는 만들기 꽤 쉬움  
  나는 무작위 회로 토폴로지를 생성하고 **SPICE 시뮬레이션**으로 발진 여부를 찾는 프로그램을 만들었음  
  그 결과, 가장 단순한 형태는 인덕터 1개, 커패시터 2개, 저항 1개, 트랜지스터 1개로 구성된다는 걸 발견했음  
  이 회로군을 “**LCCRT 발진기**”라 부르고, 가능한 조합을 모두 생성해보니 12개의 고유한 토폴로지가 있었음  
  실제로 테스트해보니 안정적이었고, 금속 탐지기에도 사용했음 — [프로젝트 링크](https://github.com/dvhx/lc-oscillator-finder)  
  - “새로운” 발진기라지만 사실 전부 **콜피츠(Collpitts)** 발진기의 변형임. 이미 100년 전에 연구된 구조들이라 겸손이 필요함  
  - CS 전공자로서 전자공학 입문 수준인데, 왜 글이 LC 발진기가 아닌 트랜지스터 중심인지 궁금했음  
  - 멋짐! **Q-팩터** 기준으로 분류해보면 더 흥미로울 듯함  
  - 접근 방식이 인상적이었음. 저장소를 구경하면서 영감을 많이 받았음  
  - Hacker News에 글 올리면 항상 이런 일 생김 — 누군가가 **지식으로 압도**함  

- 어릴 때 전자공학을 시작했을 때, 발진기를 만들려면 증폭기를 만들고, 증폭기를 만들려면 발진기를 만들게 됐음  
  7살짜리의 **야망은 기술보다 컸음**. 수많은 시도 끝에야 증폭기가 발진하지 않게 만들 수 있었음  
  저항 색 코드를 읽는 법도 몰랐지만, 안다고 착각했음  
  - “7살의 야망”이라는 말이 너무 좋음. 절대 잃지 말아야 할 태도임  
  - 종종 우리를 막는 건 “이건 불가능하다”는 **성숙한 이해심**임  
  - 3살짜리의 “왜?”와 7살짜리의 야망을 합치면 세상에서 가장 생산적인 천재가 나올지도 모름  

- 기사에 나온 **전구(lightbulb)** 이야기를 짧게 설명하고 싶음  
  발진기에서 깨끗한 사인파를 얻는 게 어려운 이유는 **이득 안정화** 때문임  
  이득이 너무 낮으면 진동이 사라지고, 너무 높으면 포화되어 고조파가 생김  
  전구는 짧은 시간에는 선형 저항처럼, 긴 시간에는 비선형 저항처럼 동작함  
  필라멘트가 가열되면 저항이 증가하므로, 이를 이용해 **자기 안정화 발진기**를 만들 수 있음  
  전구를 증폭기의 이득 조정 저항으로 사용하면 거의 완벽한 사인파를 얻을 수 있음  

- 발진기는 단순히 **이득을 위상 지연(>90도)** 주위에 걸어주는 것임  
  문제는 얼마나 **예측 가능하고 안정적**이게 만들 수 있느냐임  
  외부 요인(온도, 전압, 시간 등)에 덜 민감하게 만드는 게 핵심이며, 이를 위해선 Allan Variance 같은 개념을 참고하면 좋음  
  - “부엉이의 나머지를 그려라” 밈처럼, 발진기 만드는 건 말처럼 쉽지 않음  
    진공관 발명 이후에도 안정적인 발진기를 만드는 데 오랜 시간이 걸렸음  
    결국 성공한 회사가 있었는데, 그게 바로 **Hewlett-Packard**였음  

- 발진기의 발명은 사실 **우연한 사고**였다고 읽은 적 있음  
  누군가 증폭기를 만들다 입력과 출력을 잘못 연결해 “삐익” 소리를 냈고, 그게 발진기의 시작이었음  
  당시엔 고주파를 만들기 위해 AC 발전기를 사용했는데, 15kHz 정도가 한계였음  
  이 실수로부터 **양의 피드백** 개념이 생겼고, 이후 고전적인 발진기 회로들이 등장했음  

- 언급되지 않은 두 가지 회로가 있음  
  하나는 “**Two Transistor Metronome**”으로, 아버지와 함께 7~8살 때 만들었음  
  두 트랜지스터가 일종의 SCR처럼 동작하는 **릴랙세이션 발진기**임 — [회로 링크](https://tinyurl.com/22qjecj7)  
  Roland TB303이나 Korg MS 시리즈의 발진기도 이와 유사한 구조를 사용함  
  - 내가 생각한 건 **Astable Multivibrator**였음. 아마 같은 회로일 듯  
    일반적으로 NPN 트랜지스터 두 개를 사용하는 버전이 많음 — [참고 링크](https://www.electronics-tutorials.ws/waveforms/astable.html)  

- 기타 이펙터를 디버깅하려고 **신호 인젝터**를 만들어봤음  
  Astable Multivibrator가 너무 많은 고조파를 만들어서 입력단에서도 들릴 정도였음  
  거의 **Juggernaut처럼 신호를 밀어붙이는 느낌**이었음  
  필터를 배우는 좋은 계기였고, 결국 깨끗한 사인파를 만들어낼 수 있었음  

- 발진기가 어려운 이유는 우리가 요구하는 **정확도(spec)** 가 너무 높기 때문임  
  예를 들어 시계용 발진기는 단 5개의 부품으로 구성되지만, 하루에 1초 오차 이내(100ppm)를 요구함  
  전력, 시동, 온도 안정성 등 모든 조건을 만족시키는 게 어렵음  
  단순히 진동만 원한다면 **노이즈 제너레이터**를 만들면 됨  
  초보자에게는 **555 타이머**가 가장 쉬운 발진기임. ±10% 정도의 오차는 있지만 대부분의 용도엔 충분함  
  555는 비교기 2개, 전압 분배기, 커패시터로 구성된 단순한 구조임  
  하지만 현대 회로는 더 빠르고 정확해야 하므로, 초보자용 글이라면 555 중심으로 설명하는 게 좋음  

- 음악 중심의 전자공학에 관심 있다면 **Moritz Klein**의 [YouTube 채널](https://www.youtube.com/@MoritzKlein0/)을 추천함  
  - 링크를 보자마자 Moritz Klein일 거라고 바로 알았음
