KAGAN A1: DSP efektli EL34 tüp amfi pedalı, KiCad dosyaları ve firmware
MOSFET'lerle kurulmuş iki katlı bir tüp preamp'ı, EL34 power amp ve 4x12 kabin simülasyonu, arkasında STM32G473 ve ES8388 ile sekiz DSP efekti. 6 katmanlı, JLCPCB'ye hazır SMD kart; KiCad projesi, Gerber/BOM/CPL ve firmware kaynak kodu indirilebilir.

KAGAN A1, iki katlı yüksek kazançlı bir tüp preamp'ını, EL34 power amp'ı ve 4×12 kabini tek bir pedal kutusuna sığdıran analog bir amp-in-a-box. Bilgisayar gerektirmiyor: ses kartına, aktif hoparlöre, kulaklığa ya da gerçek bir amfinin girişine bağlanıyor. Bu yazı kartın SMD sürümünü anlatıyor. Bu sürümde analog amfinin arkasında bir STM32G473 ve bir ES8388 codec'ten oluşan DSP bloğu da var: noise gate, phaser, vibe, flanger, chorus, delay, reverb ve tremolo.
KiCad dosyaları, Gerber/BOM/CPL ve firmware'in kaynak kodu yazının sonunda indirilebilir.


Sinyal yolu
GİRİŞ (1 MΩ) → tampon
→ V1a 2N7002, 680 Ω + 1k‖2.2µ source [BOOST: +8 dB]
→ GAIN + 100 pF bright
→ V1b soğuk clipper (düşük bias, bypass'sız source)
→ V2a ×5 → V2b source follower
→ pasif ton katı: TREBLE / BASS / MIDDLE
→ MASTER
→ EL34 power amp: ×2 (orta) / ×4 (bas, ~100 Hz rezonans), PRESENCE,
simetrik diyot kırpma (push-pull gibi tek harmonikler)
→ LEVEL → DSP (gate, phaser, vibe, flanger, chorus, delay, reverb, tremolo)
├─ AMP OUT (kabin sim yok, gerçek amfiye)
└─ kabin sim: 93 Hz HPF Q1.8 + 5. derece LPF (6 kHz'te −19 dB)
→ LINE OUT, PHONES
Triode katları MOSFET'lerle kuruldu. Her katın drain direnci, source direnci ve bypass kondansatörü, karşılık geldiği tüp katının davranışına göre seçildi: V1a'nın source'undaki 1k‖2.2µ en alt basları biraz kesiyor; V1b bias'ı düşük ve bypass'sız bir "soğuk" kat, amfinin karakteristik kırpması bu kattan geliyor. Ton katı klasik üç düğmeli pasif ton katı (33k, 470p, 22n, 22n; TREBLE ve BASS 250k, MIDDLE 25k).
BOOST footswitch'i ses yolundan geçmiyor. Anahtar yalnızca bir DC kontrol hattını değiştiriyor ve bu hat bir MOSFET üzerinden V1a'nın source'una 220 Ω + 22 µF bağlıyor. 50 ms'lik bir RC geçişi var, bu yüzden basınca pop sesi çıkmıyor.
Simülasyon
Analog devrenin tamamı ngspice ile simüle edildi (sim/kagan.py). 220 Hz, 200 mV giriş ile:
| Ayar | LINE OUT | THD |
|---|---|---|
| GAIN 1 / MASTER 2 | 65 mVrms | %0.7 (temiz) |
| GAIN 5 / MASTER 5 | 166 mVrms | %15 (crunch) |
| GAIN 10 / MASTER 8 | 240 mVrms | %35 |
| GAIN 10 / MASTER 10 / BOOST, 1 V giriş | 430 mVrms | %39 |

2N7002'nin eşik gerilimi 1.0 ile 2.5 V arasında değişebiliyor; bu aralığın tamamı simüle edildi ve drain gerilimleri ayar gerektirmeden çalışma bölgesinde kalıyor. Kartta trimpot yok.
DSP bloğu
LEVEL tamponundan sonraki sinyal yarıya bölünüp ES8388'in sol ADC kanalına gidiyor. Sağ kanala girişteki temiz DI sinyali bağlı; noise gate eşiği distorsiyonlu sinyale göre değil, bu temiz sinyale göre karar veriyor. Böylece gate, kırpılmış ve sıkıştırılmış bir sinyalin zarfına değil, gitarın gerçekten ne kadar çaldığına bakıyor.
- MCU: STM32G473CEU6, 150 MHz Cortex-M4F. 128 KB RAM'in büyük kısmı delay hattına gidiyor.
- Codec: ES8388, I2S, 24 bit, Fs = 48.828 kHz (12 MHz kristal → PLL → 150 MHz → SAI MCLK 12.5 MHz).
- DMA ile 32 örneklik ping-pong tamponlar.
- Delay fs/4'te çalışıyor ve BBD gibi davranıyor: her tekrar biraz daha koyulaşıyor (2.8 kHz alçak geçiren), altı inceliyor (120 Hz), yumuşak doyuma giriyor. D.TIME çevrilince süre 0.25 s'de kayıyor, bant gibi bir pitch kayması duyuluyor.
- Reverb fs/2'de, 8 hatlı bir FDN. T60 düğmeyle 1.5 ile 3 s arasında.
- Bütün efektler tek düğmeli, düğme en soldayken kapalı. Düğmenin ilk %10'unda efekt yumuşakça açılıyor ve phaser, flanger, chorus ve vibe'da seviye telafisi var: açıp kapatınca ses seviyesi ±0.7 dB'den fazla değişmiyor.
En sevdiğim parça vibe. Orijinal Uni-Vibe'da dört faz kaydırıcı kademenin kondansatörleri farklı, hepsini tek bir ampul ve LDR'ler sürüyor. Ampul hızlı ısınıp yavaş soğuduğu için modülasyon sinüs değil, yamuk bir nabız. Firmware bunu doğrudan modelliyor:
float drive = 0.5f + 0.5f * sinf(6.2831853f * vb_lfo);
vb_lamp += (drive > vb_lamp ? vb_up : vb_dn) * (drive - vb_lamp); /* 5 ms ısınma, 25 ms soğuma */
/* LDR: iletkenlik ~ ışık^0.6, tam derinlikte ~2.5 oktav tarama */
float m = exp2f(depth * 2.5f * (powf(vb_lamp, 0.6f) - 0.66f));
for (int i = 0; i < 4; i++) { /* 90, 240, 1100, 3600 Hz */
float t = tanf(3.14159265f * VB_F[i] * m / fs_main);
vb_a[i] = (t - 1.f) / (t + 1.f);
}
Analog bypass
Bütün efektler 300 ms boyunca kapalı kaldığında MCU, DSP'yi devreden çıkarıyor ve sinyal analog yoldan gidiyor. Açılışta ve MCU programlanmamışken de durum aynı: DSP_EN pini 100k ile toprağa çekili. Yani firmware hiç yüklenmemiş ya da codec cevap vermiyorsa bile pedal analog amfi olarak çalışmaya devam ediyor. Simülasyonda iki yolun kazancı eşit, kapalı yoldan sızıntı −57 dB ile −75 dB arasında.
Düğme LED'leri
DSP düğmelerinin her birinin üstünde 3 mm bir LED var. Seviye düğmeleri değerleriyle (gamma 2.2) parlıyor, D.TIME LED'i her yankıda 40 ms çakıyor, TREMOLO LED'i tremoloyla, VIBE LED'i sanal ampulle birlikte nefes alıyor. LED'ler PWM ile sürülüyor ve PWM frekansı tam olarak 2·Fs: 150 MHz / 1536 = 97.66 kHz. Toprak üzerinden codec'e sızan bir PWM bileşeni olursa örneklemede DC'ye katlanıyor, duyulabilir bir ton üretmiyor.
Kart

- 110 × 132 mm, 6 katman, Hammond 1590XX kutu. Altta iki footswitch için bir çentik var.
- 17 WH148 pot kartın panel tarafında: üstteki iki sıra analog amfi (GAIN, BASS, MIDDLE, TREBLE, PRESENCE, MASTER, LEVEL), alttaki iki sıra DSP (GATE, REVERB, D.TIME, D.REPEATS, D.MIX, VIBE, PHASER, CHORUS, FLANGER, TREMOLO).
- İki footswitch: BOOST ve 3PDT true bypass. True bypass yalnızca AMP OUT için; LINE OUT ve kulaklık çıkışı bypass'ta susuyor, çünkü işlenmemiş gitar sinyali kulaklıkta iyi duyulmuyor.
- SMD parçaların hepsi üst yüzde, JLCPCB tek taraflı montajına uygun: 75 farklı parça, 251 yerleşim. Elle lehimlenecek 36 parça var (potlar, LED'ler, kablo pedleri, SWD başlığı).
- Kondansatörler: ton katı, kabin sim, presence ve resonance yolunda C0G; kuplaj ve dekuplajda X7R/X5R.
Şema elle çizilmedi. Parça ve net listesi bir Python dosyasında (tools/parts.py) duruyor, tools/mksch.py KiCad şemasını bundan üretiyor. Yerleşimi tools/mkpcb.py sinyal sırasına göre yapıyor, sonra simulated annealing ile iyileştiriyor: yüksek empedanslı düğümler ağır, toprak ve besleme hafif ağırlıklı. Routing'i kendi autorouter'ım fastroute yaptı. Sonuç KiCad DRC'de 0 ihlal, 0 bağlanmamış pad ve şemayla tam eşleşme.
Bir not: KiCad, kartı pcbnew'den kaydedince projedeki tasarım kurallarını varsayılan değerlere (0.2 mm) döndürüyor ve DRC yüzlerce ihlal gösteriyor. Kartın kuralları Default sınıf için 0.15/0.15 mm, besleme hatları için 0.3 mm. DRC'den önce python3 tools/rules.py çalıştırmak bunları geri yazıyor. İndirme paketindeki proje dosyasında doğru kurallar zaten var.
Firmware
C ile yazıldı, HAL ya da CubeMX kullanılmıyor: register'lar CMSIS başlıklarıyla doğrudan ayarlanıyor. Derlenmiş hali yaklaşık 19 KB flash ve 103 KB RAM kullanıyor.
make TOOLCHAIN=/yol/arm-gnu-toolchain/bin/ # build/kagan_dsp.bin
make host-test # DSP testleri bilgisayarda
st-flash write build/kagan_dsp.bin 0x08000000 # ST-Link ile, SWD başlığı J6
make host-test, DSP kodunu bilgisayarda derleyip test ediyor: efektler kapalıyken çıkış girişle bit bit aynı mı, reverb'ün T60'ı, delay'in zamanlaması ve tekrar oranı, en yüksek geri beslemede kararlılık, efektlerin seviye telafisi. Testler WAV dosyaları da yazıyor. Giriş gerçek bir gitar kaydı değil, sentetik bir sinyal: iki tını, aşırı kırpılmış ve üstüne preamp hışırtısı eklenmiş. Yine de efektlerin nasıl davrandığını duymak için yeterli:
- Kuru sinyal
- Bütün zincir: gate + chorus + delay + reverb
- Vibe, Phaser, Flanger, Chorus, Tremolo
- Çalarken D.TIME çevrilen delay, Reverb dürtü yanıtı
Durum
Devre simüle edildi, kart çizildi ve DRC'den geçti, firmware derleniyor ve DSP testleri bilgisayarda geçiyor. Kart henüz üretilmedi. Sipariş vermeden önce yapılacaklar:
- WH148 potun mil merkezinin pin sırasına uzaklığını kumpasla ölçmek (footprint 7.5 mm varsayıyor).
- JLCPCB montaj önizlemesinde bütün entegre, transistör, diyot ve elektrolitik kondansatörlerin yönünü kontrol etmek.
- İlk açılışta: kart üstündeki LED 1 Hz yanıp sönmeli (hızlı yanıp sönüyorsa codec I2C'de cevap vermiyor), efektler kapalıyken DSP yolu ile analog yolun seviyesi aynı olmalı.
Kartı yapan olursa sonucu duymak isterim.
İndir
| Dosya | İçerik | Boyut |
|---|---|---|
| kagan-a1-smd-kicad.zip | KiCad 10 projesi: şema, PCB, footprint'ler, şema ve montaj PDF'leri, katman çıktıları, üretim dosyaları, üretim script'leri, tasarım notları | 4.2 MB |
| kagan-a1-smd-gerber.zip | Yalnızca Gerber + Excellon, JLCPCB'ye doğrudan yüklenebilir | 0.9 MB |
| kagan-a1-firmware.zip | Firmware kaynak kodu, Makefile, CMSIS başlıkları, host testleri ve derlenmiş kagan_dsp.bin | 0.6 MB |
JLCPCB'nin BOM ve CPL dosyaları (kagan_smd_bom_jlc.csv, kagan_smd_cpl_jlc.csv) KiCad paketinin fab/ klasöründe.