Files
ambium/README.md
T
2026-07-15 17:23:23 +10:00

273 lines
10 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 ──┤├── capacitor ● junction (connected)
│\ × no-connect
────┤−\ op-amp: IN− top, IN+ bottom, ► net continues (same label)
│ >── OUT right. Powered from +12V/GND
────┤+ / via LM358 pins 8/4 (see Power).
│/
(C)
│
(B)┤< NPN 2N3904 (C=collector, B=base, E=emitter)
│
(E)
```
---
## Power · VREF divider (R2, R3, Cref)
```
+12V
│
[R2 10k]
│
●───────────────┬────────► VREF (6 V)
│ │
[R3 10k] ──┤├── Cref 10µF
│ │
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
│ C1 10µF
(C) × (collector: no connect)
│
(B)─┤< Q1 2N3904
│
(E)
│
GND ← base to GND; avalanche appears across B-E, out at the R1/collector node
```
> 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 (U1A, Rin1, Rf1)
Inverting amp, gain ≈ −Rf1/Rin1 = **×1000**. Output centred on VREF.
```
┌──────[Rf1 1M]──────┐
│ │
NOISE ──[Rin1 1k]──● │
│ │\ │
└───┤−\ │
│ >──●───────┴────► AMP
VREF ───────┤+ / U1A
│/ (LM358, unit A)
```
---
## Stage 3 — Integrator → brown (U1B, 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]──● │
│ │\ │
└───┤−\ │
│ >──●───────┴────► BROWN
VREF ───────┤+ / U1B
│/ (LM358, unit B)
```
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.
```
(C)
│
BROWN ──[Rs 47k]──●───────┤< Q2 2N3904
│ │
VCA (E)
│ │
│ VREF
│
LFO_CV ──[Rb2 100k]──(B) ← control voltage into Q2 base
│
│ │\
└───┤+\
│ >──●──────┤├──────●──[Rvol 10k]──► AUDIO_OUT
┌───┤−/ U2B Cout (wiper)
│ │/ (LM358 10µF │
│ unit B) GND
└──────────● (buffer: OUT tied back to IN−)
```
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.
---
## 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 |
| Cint | 100nF | film | integrator (brown shaping) |
| Cout | 10µF | electrolytic | output coupling |
| Ct | 10µF | **non-polar** | LFO timing (bipolar swing) |
| — | 0.1µF ×2 | ceramic | chip decoupling |
| — | 47µF | electrolytic | +12V bulk |
**Chip count: 2× LM358 + 2× 2N3904.** Single +12 V supply.
---
## 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
NOISE : R1.2 / Q1.emitter-node, C1.+ (C1.− → Rin1.1)
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) |