Files
ambium/README.md
T
2026-07-16 15:14:53 +10:00

339 lines
13 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# ambium
Analog **brown-noise generator** with a slow amplitude swell (LFO). All-analog,
breadboard-friendly, single **+12 V** supply. Deep, drifting rumble that slowly
breathes in and out over ~20 s.
Each stage is drawn as ASCII below. **Reference designators and model numbers are
consistent across every diagram, the BOM, and the connection list** — that list is
the authoritative netlist.
## Parts used (model numbers)
- **U1, U2** = **LM358** (dual op-amp, DIP-8). U1 = amp + integrator; U2 = LFO + buffer.
(LM258P is the same part — fine.)
- **Q1, Q2** = **2N3904** (NPN). Q1 = avalanche noise source; Q2 = shunt VCA.
## Nets
`+12V` · `GND` · `VREF` (6 V mid-supply) · `NOISE` · `AMP` · `BROWN` · `LFO` ·
`LFO_CV` · `VCA` · `AUDIO_OUT`
## Signal chain
```
[noise] [amplify] [integrate] [VCA] [buffer]
Q1 2N3904 → U1A LM358 ×1000 → U1B LM358 −6dB/oct → Q2 2N3904 → U2B LM358 → AUDIO_OUT
NOISE AMP BROWN VCA (line out)
▲
swell
U2A LM358 LFO (~0.05 Hz)
```
Legend for the diagrams:
```
[Rxx val] resistor ──┤├── film / non-polar cap ● junction (connected)
──+┤├── polarised cap × no-connect
│\ (the + marks the + terminal) ► net continues (label)
────┤−\ op-amp: IN− top, IN+ bottom, OUT right.
│ >── Powered from +12V / GND via LM358 pins 8 / 4 (see Power).
────┤+ /
│/
E transistor box — E / B / C labels sit OUTSIDE the box:
│
┌──┴──┐
B ───┤ Qx │ NPN 2N3904
└──┬──┘
│
C
```
---
## Power · VREF divider (R2, R3, Cref)
```
+12V
│
[R2 10k]
│
●───────────────┬────────► VREF (6 V)
│ + Cref 10µF (+ terminal → VREF)
[R3 10k] ──┤├──
│ −
│ │
GND GND
```
`R2`/`R3` = 20 kΩ across 12 V → 0.6 mA, midpoint = **6 V**. `Cref` holds VREF steady.
VREF is the AC ground every stage rides on (single supply, no negative rail).
---
## Stage 1 — White noise (R1, Q1, C1)
Reverse-biased base–emitter junction of `Q1` driven into avalanche = broadband white
noise. `R1` limits current; `C1` couples the noise out.
```
+12V
│
[R1 100k]
│
●──+┤├──────────► NOISE (stage-1 output → Stage 2)
│ C1 10µF
│ (+ terminal → emitter side; − → NOISE)
E
┌──┴──┐
GND─B─┤ Q1 │ 2N3904
└──┬──┘
│
C
× collector: no connect
The ● node (R1 / Q1 emitter) is the raw noise on a DC pedestal — internal, don't
label it NOISE. `C1` strips the DC; **NOISE = the AC-coupled output after C1.**
```
> Avalanche quality varies part-to-part. Try one 2N3904; if quiet, swap for another.
> Needs the full +12 V (9 V is often too low to avalanche).
---
## Stage 2 — Amplifier ×1000 (U1 unit B, Rin1, Rf1)
Inverting amp, gain ≈ −Rf1/Rin1 = **×1000**. Output centred on VREF.
```
┌───[Rf1 1M]────┐
├───[Cf1 22pF]──┤ Cf1 ∥ Rf1 — kills oscillation, limits BW
│ │
NOISE ─[Rin1 1k]───● │
pin 6 │ │\ │
(IN−) ───────┴───┤−\ │
│ >──● pin 7 (OUT) ──► AMP
(IN+) ───────────┤+ /
pin 5 VREF │/ U1 = LM358 (unit B)
Power + decoupling (whole LM358 U1 — wired ONCE, not per unit):
pin 8 (V+) ── +12V pin 4 (V−) ── GND
+12V ──+┤├── GND 47µF +12V ──┤├── GND 10nF (or 0.1µF)
(bulk electro, (HF ceramic,
+ to +12V, near U1) right at pin 8)
```
> This stage uses **unit B** (pins 5/6/7) — as built. The integrator (Stage 3) uses
> the **other half, unit A** (pins 1/2/3). Power (8/4) + decoupling are shared by both
> halves — wire them once. To use unit A here instead: IN− = **2**, IN+ = **3**, OUT = **1**.
---
## Stage 3 — Integrator → brown (U1 unit A, Rin2, Cint, Rf2)
Leaky integrator = **−6 dB/octave** → turns white into brown. `Rf2` bounds DC so the
output can't rail. Corner ≈ 1/(2π·Rf2·Cint) ≈ 1.6 Hz.
```
┌──────[Rf2 1M]──────┐
│ │
├───────┤├───────────┤ Cint 100nF (Rf2 ∥ Cint)
│ │
AMP ─[Rin2 10k]───● │
pin 2 │ │\ │
(IN−) ───────┴───┤−\ │
│ >──● pin 1 (OUT) ──► BROWN
(IN+) ───────────┤+ /
pin 3 VREF │/ U1 = LM358 (unit A)
```
Darker/deeper: ↑ Cint or Rf2. Lighter (toward pink): ↓ Cint.
---
## Stage 4 — LFO (U2A, Rt, Ct, Ra, Rh)
Single-op-amp relaxation oscillator. Period ≈ 2.2·Rt·Ct ≈ **~22 s**. The control
voltage is the ramp on `Ct` (net `LFO_CV`) — it drives the VCA in Stage 5.
```
┌──────────[Rt 1M]──────────┐
│ │
●──────┤├──── VREF │ Ct 10µF (non-polar)
│ Ct │
│ │\ │
LFO_CV ●──────┤−\ │
│ │ >──●──────────────┴──► LFO (and to Rh)
┌──────┤+ / │ U2A
│ │/ │ (LM358, unit A)
●──[Ra 100k]──┤
│ └── VREF
[Rh 100k]
│
└───────────────────────────────────► LFO (hysteresis feedback)
```
`Ra`/`Rh` set the hysteresis (both 100k). `LFO_CV` ramps ~3.5–8.5 V.
> `Ct` sees a bipolar swing about VREF — use a **non-polar** 10 µF (film or bipolar
> electrolytic), not a standard polarised cap.
---
## Stage 5 — VCA + buffer + output (Rs, Q2, Rb2, U2B, Cout, Rvol)
`Q2` shunts the brown-noise signal to VREF (AC ground) by an amount set by `LFO_CV` →
amplitude swells and fades. `U2B` buffers; `Cout` blocks DC; `Rvol` sets level.
```
VCA
│
C
┌──┴──┐
LFO_CV ─[Rb2 100k]─B─┤ Q2 │ 2N3904
└──┬──┘
│
E
│
VREF
BROWN ──[Rs 47k]────────► VCA (Rs feeds VCA; Q2 shunts VCA to VREF)
VCA ───┤+\
│ >──●──+┤├──●──[Rvol 10k]──► AUDIO_OUT
┌─────┤−/ │ Cout │ (wiper)
│ │/ U2B 10µF GND
│ LM358
│ unit B
└─────────● (OUT → IN− = unity buffer; Cout + → buffer out)
```
When `LFO_CV` is low → Q2 off → signal passes (loud). High → Q2 conducts → shunts to
VREF (quiet). ~20 s swell. Soften the swell: 1 µF from `LFO_CV` to VREF.
---
## Output driver — LM386 (U3), for the 4Ω speaker
`AUDIO_OUT` is **line level** — the LM358 **cannot** drive a speaker. Add an **LM386**
power amp for a 4 Ω / 8 Ω speaker. (For bring-up you can feed it from `AMP` or `BROWN`
instead of `AUDIO_OUT`.)
```
+12V
│
●──────┤ pin 6 (V+)
──+┤├── ──┤├──
47µF 0.1µF (→ GND, at the chip)
│ │
GND GND
AUDIO_OUT ─+┤├─[VOL 10k]────► pin 3 (+IN) pin 5 (OUT) ─+┤├──► SPKR ─ GND
Cc 1µF (wiper) 470µF 4Ω
pin 5 ─[10Ω]─┤├─ GND (Zobel)
pin 2 (−IN) ── GND 10nF
pin 4 ── GND
pin 7 (BYPASS) ─+┤├─ GND (10µF)
pins 1 & 8 ── OPEN (gain ×20)
```
LM386 pinout: `1` gain · `2` IN− · `3` IN+ · `4` GND · `5` OUT · `6` V+ · `7` bypass · `8` gain.
**Notes**
- **Output cap must be big (~470µF, ≥16V).** Into 4 Ω, 47µF high-passes at ~850 Hz →
kills the bass (brown noise is all lows). Fat electrolytic, **+ → pin 5**.
- **Gain ×20** (pins 1 & 8 open). Back off with VOL to avoid clipping. A 10µF between
pins 1 & 8 gives ×200 — usually not needed.
- **On +12 V the LM386 runs warm into 4 Ω** (LM386N-1 max = 12 V). OK for testing;
for cooler running feed it from ~9 V.
---
## LM358 power + decoupling
Each LM358 (U1, U2) is powered once via its package pins — **not** per op-amp unit:
```
+12V ──┬── U1 pin 8 (V+) GND ──┬── U1 pin 4 (V−)
│ │
└── U2 pin 8 (V+) └── U2 pin 4 (V−)
Decoupling: 0.1µF from +12V to GND at EACH chip, plus one 47µF bulk on the +12V rail.
```
LM358 unit A = pins 1(OUT) 2(IN−) 3(IN+); unit B = 7(OUT) 6(IN−) 5(IN+); power 8(V+) 4(V−).
---
## Bill of materials
| Ref | Value | Part / model | Function |
|-----|-------|--------------|----------|
| U1 | — | **LM358** (DIP-8) | U1A amp, U1B integrator |
| U2 | — | **LM358** (DIP-8) | U2A LFO, U2B buffer |
| Q1 | — | **2N3904** | avalanche white-noise source |
| Q2 | — | **2N3904** | shunt VCA |
| R1 | 100k | resistor | avalanche current limit |
| R2, R3 | 10k | resistor | VREF divider |
| Rin1 | 1k | resistor | amp input |
| Rf1 | 1M | resistor | amp feedback (×1000) |
| Rin2 | 10k | resistor | integrator input |
| Rf2 | 1M | resistor | integrator leak / brown corner |
| Rs | 47k | resistor | VCA series |
| Rb2 | 100k | resistor | LFO_CV → Q2 base |
| Rt | 1M | resistor | LFO timing |
| Ra, Rh | 100k | resistor | LFO hysteresis |
| Rvol | 10k | potentiometer | output level |
| C1 | 10µF | electrolytic | noise coupling |
| Cref | 10µF | electrolytic | VREF bypass |
| Cf1 | 22–100pF | ceramic | amp feedback — **stops oscillation**, limits BW |
| Cint | 100nF | film | integrator (brown shaping) |
| Cout | 10µF | electrolytic | output coupling |
| Ct | 10µF | **non-polar** | LFO timing (bipolar swing) |
| U3 | — | **LM386** | speaker power amp (drives 4Ω/8Ω) |
| Cc | 1µF | film/electro | LM386 input coupling |
| Cout2 | **470µF** ≥16V | electrolytic | speaker output coupling — **big, for bass** |
| — | 10Ω + 10nF | — | LM386 Zobel network (stability) |
| — | 10µF | electro | LM386 pin 7 bypass |
| — | 0.1µF ×3 | ceramic | chip decoupling (one per LM358 + one at LM386 pin 6) |
| — | 47µF ×2 | electrolytic | +12V bulk (main rail + at LM386) |
**Chip count: 2× LM358 + 1× LM386 + 2× 2N3904.** Single +12 V supply
(feed the LM386 from ~9 V if it runs hot into 4 Ω).
---
## Connection list (authoritative netlist)
```
+12V : R1.1, R2.1, U1.8, U2.8, (47µF+)
GND : R3.2, Q1.base, Cref.−, U1.4, U2.4, Rvol.3, (47µF−), (0.1µF ×2)
VREF : R2.2, R3.1, Cref.+, U1A.IN+(3), U1B.IN+(5), Ct(VREF end), Ra.1, Q2.emitter
(src) : R1.2, Q1.emitter, C1.+ (internal raw-noise node, DC pedestal)
NOISE : C1.−, Rin1.1 (stage-1 output, AC-coupled — after C1)
AMP : U1A.OUT(1), Rf1, Rin2.1 (Rin1.2, Rf1, U1A.IN−(2) = summing node)
BROWN : U1B.OUT(7), Cint, Rf2, Rs.1 (Rin2.2, Cint, Rf2, U1B.IN−(6) = summing)
LFO : U2A.OUT(1), Rt, Rh
LFO_CV : Rt, Ct(CV end), U2A.IN−(2), Rb2 (ramp that swells the VCA)
VCA : Rs.2, Q2.collector, U2B.IN+(5)
(U2B.OUT(7) = U2B.IN−(6) = Cout.+ → buffer)
AUDIO_OUT : Rvol.wiper(2) (Cout.− → Rvol.1; Rvol.3 → GND)
Q1 : collector = no-connect
```
---
## Build & test order
Build one stage at a time — verify before adding the next.
1. **VREF** — R2/R3/Cref up. Confirm ~6.0 V.
2. **Noise (R1 + Q1)** — scope Q1 node → hiss (~mV). No noise? swap the 2N3904 or nudge supply to 12–15 V.
3. **Amp (U1A)** — scope AMP → loud hiss (~volts).
4. **Integrator (U1B)** — BROWN sounds darker/deeper than AMP. That's brown noise.
5. **LFO (U2A)** — scope LFO_CV → slow ramp, ~20 s.
6. **VCA + buffer (Q2, U2B)** — full chain: noise swells and fades on the LFO cycle.
## Tuning
| Want | Change |
|------|--------|
| Deeper/darker | ↑ Cint or Rf2 |
| Lighter (toward pink) | ↓ Cint |
| Slower swell | ↑ Rt or Ct |
| Faster swell | ↓ Rt or Ct |
| Softer swell onset | 1µF from LFO_CV to VREF |
| Louder | ↑ Rf1 (watch clipping) |