This commit is contained in:
Nathan Rashleigh committed 2026-07-22 14:53:56 +10:00
1 parent 956a72702b
commit 295391b119
4 files changed
+2828 -2975

No files matched your search

+80 -68
View File
@@ -1,16 +1,17 @@
# ambium # ambium
Analog brown-noise generator. Single **+12 V** supply, breadboard-friendly. Analog brown-noise generator. Single **+12 V** supply, breadboard-friendly.
Deep filtered rumble to a **4 Ω speaker** via a TIP120 driver. Deep filtered rumble to a **4 Ω speaker** via a cool-running **Class-AB push-pull** output.
Reference designators and model numbers are consistent across every diagram, the Reference designators and model numbers are consistent across every diagram, the
BOM, and the connection list — the connection list is the authoritative netlist. BOM, and the connection list — the connection list is the authoritative netlist.
## Parts ## Parts
- **U1** = LM358 (dual op-amp, DIP-8). U1B = amp + brown shaping. U1A unused (parked). - **U1** = LM358 (dual op-amp, DIP-8). U1B = amp + brown shaping. U1A = output driver.
- **Q1** = 2N3904 (NPN). Avalanche noise source. - **Q1** = 2N3904 (NPN). Avalanche noise source.
- **Q3** = TIP120 (NPN Darlington, TO-220). Class-A speaker driver. - **Q2** = PN2222 (NPN). Push-pull top half (sources +).
- **Q3** = PN2907 (PNP). Push-pull bottom half (sinks −).
## Nets ## Nets
@@ -19,27 +20,9 @@ BOM, and the connection list — the connection list is the authoritative netlis
## Signal chain ## Signal chain
``` ```
[noise] [amp + brown] [driver] [noise] [amp + brown] [push-pull driver]
Q1 2N3904 → U1B LM358 −6dB/oct → Q3 TIP120 → 4Ω speaker Q1 2N3904 → U1B LM358 −6dB/oct → U1A + Q2/Q3 → 4Ω speaker
NOISE AMP (class A) NOISE AMP OUT (Class AB, cool)
```
Legend:
```
[Rxx val] resistor ──┤├── film / non-polar cap ● junction
──+┤├── polarised cap (+ = + terminal)
│\ × no-connect
────┤−\ op-amp: IN− top, IN+ bottom, OUT right. ► net continues
│ >── Powered from +12V / GND (LM358 pins 8 / 4).
────┤+ /
│/
E transistor: E / B / C labels outside the box.
│
┌──┴──┐
B ───┤ Qx │ NPN
└──┬──┘
│
C
``` ```
--- ---
@@ -122,43 +105,73 @@ LM358 DIP-8, notch at top, pin 1 top-left. Amp = **unit B** (pins 5/6/7).
DC handling: C1 blocks DC into Rin1, so the op-amp's own offset sees unity gain — output DC handling: C1 blocks DC into Rin1, so the op-amp's own offset sees unity gain — output
sits at VREF (6 V), no railing. sits at VREF (6 V), no railing.
Unit A unused → park as a follower so it can't oscillate: pin 3 → VREF, pin 2 → pin 1. Unit A (pins 1/2/3) = the push-pull output driver — see next section.
Power/decoupling (whole chip, once): pin 8 → +12V, pin 4 → GND. 47µF bulk + 0.1µF at Power/decoupling (whole chip, once): pin 8 → +12V, pin 4 → GND. 47µF bulk + 0.1µF at
pin 8. pin 8.
--- ---
## Output driver — TIP120 class-A follower (Q3), 4Ω speaker ## Output driver — Class-AB push-pull (U1A + Q2/Q3), 4Ω speaker
AMP is line level; the LM358 can't drive a speaker. Q3 emitter follower supplies the AMP is line level; the LM358 can't drive a speaker alone. Complementary emitter-
current. Class A — needs a heatsink. followers **inside the U1A loop**: Q2 (NPN) pushes the positive half, Q3 (PNP) pulls
the negative half. Both halves are actively driven, so there's **no idle resistor and
near-zero quiescent current → it runs cool.** U1A drives both bases; global feedback
from OUT hides crossover distortion (no bias diodes needed).
Driver = LM358 **unit A** (pins 1/2/3), same chip as the amp.
``` ```
+12V +12V ┌─────∪────┐
│ │ bases ─ OUT A 1 ─┤ ├ 8 V+ ──── +12V
[Rb1 10k] C (collector) OUT ─ IN− A 2 ─┤ LM358 ├ 7 (OUT B → AMP, Stage 2)
│ ┌──┴──┐ AMP ─ IN+ A 3 ─┤ ├ 6
●───────●───────────────────B──┤ Q3 │ TIP120 V− 4 ─┤ ├ 5
│ │ └──┬──┘ └──────────┘
[Rb2 10k] │ │
│ │ E
GND │ │
│ ●──+┤├──► SPKR ─ GND
AMP ─+┤├───┘ │ Cout2 470µF (+ → emitter)
Cc 10µF [Re 22Ω 3W] 4Ω
│
(base node ● = Rb1/Rb2/Cc) GND
``` ```
The base node ● sits at ~6 V (Rb1/Rb2). Cc lands there and adds the AC — it never
connects to +12V.
- Rb1/Rb2 = 10k/10k → base ~6 V. Cc AC-couples AMP onto the base.
- Emitter ~4.5 V (base − ~1.5 V Darlington drop). Iq = 4.5V/Re ≈ 200 mA.
- Cout2 blocks DC; speaker sees AC only.
- **Heatsink Q3** (~1.5 W idle). Re ≥3 W.
- Cooler/quieter: Re = 47 Ω → Iq ~100 mA.
- Bias sag (hum/distortion): stiffen divider to 4.7k/4.7k.
TIP120 pinout (TO-220, face up, pins down): **1 Base · 2 Collector · 3 Emitter**. Push-pull output stage (totem pole):
```
+12V
│
C
┌───┴───┐
bases ──B──────┤ Q2 │ PN2222 (NPN — sources +half)
└───┬───┘
E
[Re1 10Ω]
│
●──────────► OUT ──+┤├──► SPKR ─ GND
│ Cout 470µF 4Ω
[Re2 10Ω] (+ → OUT)
E
┌───┴───┐
bases ──B──────┤ Q3 │ PN2907 (PNP — sinks −half)
└───┬───┘
C
│
GND
```
Connections:
```
input: AMP ─────────────● pin 3 (IN+ A)
drive: pin 1 (OUT A) ───● bases → Q2.base + Q3.base
feedback: OUT ─────────────● pin 2 (IN− A)
Q2: C → +12V B → bases E → Re1 → OUT
Q3: C → GND B → bases E → Re2 → OUT
OUT node = Re1 ● Re2 ● pin 2 (fb) ● Cout.+ ; Cout.− → speaker → GND
```
- Idle ≈ 0 → **cool, no heatsink.** Re1/Re2 = **10 Ω ¼ W** (4.7–10 Ω ok; carry only AC — not hot).
- OUT sits at ~6 V DC (follows AMP); **Cout 470 µF** blocks it, speaker sees AC only.
TO-92 pinout (flat face toward you, leads down): **PN2222 = E-B-C**, **PN2907 = E-B-C**
(confirm against your batch's datasheet).
- PN2222/PN2907 cap ~600 mA → ~1 W into 4 Ω before current-limiting. Plenty for the
rumble, and cool. Want more power → TIP120+TIP125 pair, or an amp chip.
- Crossover buzz at low level? Split the bases and add **2× 1N4148** between them for
bias. Usually unneeded — feedback handles it for a noise source.
--- ---
@@ -166,39 +179,38 @@ TIP120 pinout (TO-220, face up, pins down): **1 Base · 2 Collector · 3 Emitter
| Ref | Value | Part | Function | | Ref | Value | Part | Function |
|-----|-------|------|----------| |-----|-------|------|----------|
| U1 | — | LM358 (DIP-8) | U1B amp (U1A unused) | | U1 | — | LM358 (DIP-8) | U1B amp+brown, U1A output driver |
| Q1 | — | 2N3904 | avalanche noise source | | Q1 | — | 2N3904 | avalanche noise source |
| Q3 | — | TIP120 | class-A speaker driver | | Q2 | — | PN2222 (NPN) | push-pull top (source) |
| Q3 | — | PN2907 (PNP) | push-pull bottom (sink) |
| R1 | 100k | resistor | avalanche current limit | | R1 | 100k | resistor | avalanche current limit |
| R2, R3 | 10k | resistor | VREF divider | | R2, R3 | 10k | resistor | VREF divider |
| Rin1 | 1k | resistor | amp input | | Rin1 | 1k | resistor | amp input |
| Rf1 | 1M | resistor | amp feedback (low-freq gain ×1000) | | Rf1 | 1M | resistor | amp feedback (low-freq gain ×1000) |
| Rb1, Rb2 | 10k | resistor | Q3 base bias (~6 V) | | Re1, Re2 | 10Ω ¼W | resistor | push-pull emitter degeneration (4.7–10Ω ok) |
| Re | 22Ω 3W | resistor | Q3 idle-current set |
| C1 | 10µF | electrolytic | noise coupling | | C1 | 10µF | electrolytic | noise coupling |
| Cref | 10µF | electrolytic | VREF bypass | | Cref | 10µF | electrolytic | VREF bypass |
| Cf1 | 8.2nF | film / ceramic | feedback / brown shaping (−6dB/oct, corner ~19 Hz) | | Cf1 | 8.2nF | film / ceramic | feedback / brown shaping (−6dB/oct, corner ~19 Hz) |
| Cc | 10µF | electrolytic | AMP → base coupling | | Cout | 470µF ≥16V | electrolytic | speaker coupling (big, for lows) |
| Cout2 | 470µF ≥16V | electrolytic | speaker coupling (big, for lows) |
| — | 0.1µF | ceramic | LM358 decoupling | | — | 0.1µF | ceramic | LM358 decoupling |
| — | 47µF | electrolytic | +12V bulk | | — | 47µF | electrolytic | +12V bulk |
Chip count: 1× LM358 + 1× 2N3904 + 1× TIP120. Q3 needs a heatsink. Chip count: 1× LM358 + 1× 2N3904 + PN2222/PN2907 pair. **No heatsink needed** (Class AB).
--- ---
## Connection list (authoritative netlist) ## Connection list (authoritative netlist)
``` ```
+12V : R1.1, R2.1, U1.8, Rb1.1, Q3.collector, 47µF+ +12V : R1.1, R2.1, U1.8, Q2.collector, 47µF+
GND : R3.2, Q1.base, Cref.−, U1.4, Rb2.2, Re.2, 47µF−, 0.1µF GND : R3.2, Q1.base, Cref.−, U1.4, Q3.collector, 47µF−, 0.1µF
VREF : R2.2, R3.1, Cref.+, U1B.IN+(5), U1A.IN+(3) VREF : R2.2, R3.1, Cref.+, U1B.IN+(5)
U1A.OUT(1) = U1A.IN−(2) (spare amp parked as follower)
(src) : R1.2, Q1.emitter, C1.+ (internal raw-noise node) (src) : R1.2, Q1.emitter, C1.+ (internal raw-noise node)
NOISE : C1.−, Rin1.1 (after C1) NOISE : C1.−, Rin1.1 (after C1)
AMP : U1B.OUT(7), Rf1, Cf1, Cc.1 (Rin1.2, Rf1, Cf1, U1B.IN−(6) = summing) AMP : U1B.OUT(7), Rf1, Cf1, U1A.IN+(3) (Rin1.2, Rf1, Cf1, U1B.IN−(6) = summing)
base : Cc.2, Rb1.2, Rb2.1, Q3.base (~6 V bias) bases : U1A.OUT(1), Q2.base, Q3.base (driver output → both bases)
SPKR : Q3.emitter, Re.1, Cout2.+ ; Cout2.− → speaker → GND OUT : Q2.emitter→Re1 ; Q3.emitter→Re2 ; Re1.2 = Re2.2 = OUT node
OUT → U1A.IN−(2) (feedback) ; OUT → Cout.+ ; Cout.− → speaker → GND
Q1 : collector = no-connect Q1 : collector = no-connect
``` ```
@@ -209,7 +221,7 @@ Q1 : collector = no-connect
1. **VREF** — confirm ~6.0 V. 1. **VREF** — confirm ~6.0 V.
2. **Noise (R1, Q1)** — scope Q1 node → hiss (~mV). None? swap 2N3904 or raise supply to 12–15 V. 2. **Noise (R1, Q1)** — scope Q1 node → hiss (~mV). None? swap 2N3904 or raise supply to 12–15 V.
3. **Amp (U1B)** — scope AMP → deep rumble (~volts), darker than the raw Q1 hiss (that's the brown slope). 3. **Amp (U1B)** — scope AMP → deep rumble (~volts), darker than the raw Q1 hiss (that's the brown slope).
4. **Driver (Q3)** — feed AMP through Cc. Speaker hisses. Q3 warm, not hot; too hot → raise Re. 4. **Driver (Q2/Q3)** — wire push-pull + feedback. Speaker rumbles. Transistors stay **cool** (near-zero idle). OUT DC ~6 V.
## Tuning ## Tuning
@@ -218,5 +230,5 @@ Q1 : collector = no-connect
| Louder | ↑ Rf1 (raises low-freq gain; watch clipping) | | Louder | ↑ Rf1 (raises low-freq gain; watch clipping) |
| Darker / deeper | ↑ Cf1 (lowers corner, more brown) | | Darker / deeper | ↑ Cf1 (lowers corner, more brown) |
| Brighter (toward white) | ↓ Cf1 (raises corner) | | Brighter (toward white) | ↓ Cf1 (raises corner) |
| Cooler driver | ↑ Re | | Kill crossover buzz | add 2× 1N4148 base-bias diodes |
| More headroom | ↓ Re (hotter — bigger heatsink) | | More power | TIP120+TIP125 pair, or amp chip (PAM8403 / TDA2822) |
+105
View File
@@ -0,0 +1,105 @@
{
"board": {
"active_layer": 0,
"active_layer_preset": "",
"auto_track_width": true,
"hidden_netclasses": [],
"hidden_nets": [],
"high_contrast_mode": 0,
"net_color_mode": 1,
"opacity": {
"images": 0.6,
"pads": 1.0,
"shapes": 1.0,
"tracks": 1.0,
"vias": 1.0,
"zones": 0.6
},
"prototype_zone_fills": false,
"selection_filter": {
"dimensions": true,
"footprints": true,
"graphics": true,
"keepouts": true,
"lockedItems": false,
"otherItems": true,
"pads": true,
"text": true,
"tracks": true,
"vias": true,
"zones": true
},
"visible_items": [
"vias",
"footprint_text",
"footprint_anchors",
"ratsnest",
"grid",
"footprints_front",
"footprints_back",
"footprint_values",
"footprint_references",
"tracks",
"drc_errors",
"drawing_sheet",
"bitmaps",
"pads",
"zones",
"drc_warnings",
"drc_exclusions",
"locked_item_shadows",
"conflict_shadows",
"shapes",
"board_outline_area",
"ly_points"
],
"visible_layers": "ffffffff_ffffffff_ffffffff_ffffffff",
"zone_display_mode": 0
},
"git": {
"integration_disabled": false,
"repo_type": "",
"repo_username": "",
"ssh_key": ""
},
"meta": {
"filename": "ambium.kicad_prl",
"version": 5
},
"net_inspector_panel": {
"col_hidden": [],
"col_order": [],
"col_widths": [],
"custom_group_rules": [],
"expanded_rows": [],
"filter_by_net_name": true,
"filter_by_netclass": true,
"filter_text": "",
"group_by_constraint": false,
"group_by_netclass": false,
"show_time_domain_details": false,
"show_unconnected_nets": false,
"show_zero_pad_nets": false,
"sort_ascending": true,
"sorting_column": -1
},
"open_jobsets": [],
"project": {
"files": []
},
"schematic": {
"hierarchy_collapsed": [],
"selection_filter": {
"graphics": true,
"images": true,
"labels": true,
"lockedItems": false,
"otherItems": true,
"pins": true,
"ruleAreas": true,
"symbols": true,
"text": true,
"wires": true
}
}
}
+2629 -2888
View File
File diff suppressed because it is too large. Load diff
+14 -19
View File
@@ -1,25 +1,20 @@
.title KiCad schematic .title KiCad schematic
U1 __U1
Rf1 /VREF /AMP 1Meg
Cf1 /VREF /AMP 8.2n
Rin2 /AMP /VREF 10k
U2 __U2
Cout Net-_U2B--_ Net-_Cout-Pad2_ 10u
Rin1 Net-_C1-Pad2_ /VREF 1k
R2 +12V /VREF 10k R2 +12V /VREF 10k
Q1 __Q1 C3 +12V GND 47u
C1 Net-_Q1-E_ Net-_C1-Pad2_ 10u
R3 /VREF GND 10k R3 /VREF GND 10k
R1 +12V Net-_Q1-E_ 100k
Cref /VREF GND 10u Cref /VREF GND 10u
Ra /VREF Net-_U2A-+_ 100k C2 +12V GND 100n
Ct /LFO_CV /VREF 10u R1 +12V /SRC 100k
Rt /LFO_CV Net-_Rh-Pad2_ 1Meg C1 /SRC /NOISE 10u
Rb2 /LFO_CV Net-_Q2-B_ 100k Rin1 /NOISE /SUM 1k
Rs /BROWN Net-_Q2-C_ 47k Q1 __Q1
Rf1 /SUM /AMP 1Meg
Cf1 /SUM /AMP 8.2n
U1 __U1
Re2 Net-_Q3-E_ /OUT 10
Q3 __Q3
LS1 /SPKR GND Speaker
Cout /OUT /SPKR 470u
Re1 Net-_Q2-E_ /OUT 10
Q2 __Q2 Q2 __Q2
Rh Net-_U2A-+_ Net-_Rh-Pad2_ 100k
Cint /VREF /BROWN 100n
Rf2 /VREF /BROWN 1Meg
Rvol __Rvol
.end .end