Orgelska klaviatura

STM32 + ESP32S3 modularno zajemanje podatkov orgelske klaviature (pedala).

Koncept

STM32G431? - bere 1 oktavo (od petih) = 12 tipk linearnih HALL senzorjev (A1324 če ne najdemo cenejših)
    Zadnja peta oktava ima dodano 13to tipko (zgornji C) in se lahko konča/odlomi tudi po 6 tipki (do F) 8 tipki (do G) ali ima 13 tipk (zgornji C)

5 STM oktav pošilja MIDI podatke ki jih interno kalkulirajo ESP32S3 ki preko USB pošlje Midi komande računalniku.
ESP32 tudi preko interne WEB strani upravlja nastavitve STMov (po posameznih tipkah in po celi oktavi)
Branje tipk ima 3 različne MODE:

  • ON/OFF - ko se magnet na definirani poziciji približa HALL senzorju pošlje MIDI note ON - in ko se magnet oddalji od te pozicije - histereza (debouncing) pošlje Note OFF
  • Velocity - Podobno kot zgoraj, pri temu načinu imamo še zgornjo pozicijo, ko tipka potuje recimo 2mm HALL zazna predefinirano pozicijo in starta timer dokler ne doseže spodnje pozicije in iz hitrosti premikanja tipke izračuna moč udarca na tipko. Note OFF isto kot zgoraj s histerezo.
  • Proporcionalni - Podobno kot velocity, pri zgornji poziciji, začne pošiljat Polyphonic Aftertouch recimo 32/64 pozicij med zgornjim in spodnjim "kontaktom". Podatek proporcionalno odpira elektro magnete pod piščalmi.

Instructions

1
MIDI ukazi - struktura - STM > ESP > RAČ.

  • Note ON (številka tipke/tona, MIDI kanal, Velocity)
    3 bytes hex - 90 3C 64
      90 - 9=Note ON, 0 MIDI kanal (0-F, kanal 1 do 16)
      3C - 3C - Ton/tipka (0-127) - 3C=60=srednji C
      64 - Velocity (pri ON/OFF je fixna) kalkulirana iz pretečenega časa med zgornjim in spodnjim "kontaktom"/pozicijo (1-127)
  • Note OFF (številka tipke/tona, MIDI kanal, Velocity 0)
    3 bytes hex - 80 3C 00
      80 - 8=Note OFF, 0 MIDI kanal (0-F, kanal 1 do 16)
      3C - 3C - Ton/tipka (0-127) - 3C=60=srednji C
      00 - Velocity fiksna na 00
  • Polyphonic Aftertouch (številka tipke/tona, MIDI kanal, Aftertouch)
    3 bytes hex - A0 3C 7F
      A0 - A=Aftertouch, 0 MIDI kanal (0-F, kanal 1 do 16)
      3C - 3C - Ton/tipka (0-127) - 3C=60=srednji C
      00 - Presure - pritisk na tipko - trenutna pozicija med potovanjem med zgornjim in spodnjim kontaktom (0-127). Realna resolucija 32 oz 64 bi bila dovolj.

Zaželjen čim krajši "Latency" max 20 ms.
2
STM - nastavitve

Vsaka tipka posebej.

  • Številka tipke/tona - 3C (2nd byte MIDI) (0-127)
  • Zgornja pozicija (2048-4095*) (prim 2400)
  • Spodnja pozicija (2048-4095*) (prim 3900)
  • Histereza OFF (prim 100) (@ 3800)
Celotna oktava.
  • MIDI kanal - 90 (1st byte/2half MIDI) (1-16)
  • MODE Način delovanja: ON/OFF + fixna Velocity (1-127) ki naj jo pošilja, Velocity - meri hitrost, Proporcionalna - sporoča pozicijo tipke
  • Invert signala opicja kjer se magnet približuje HALLu (pod tipko) ali oddaljuje (montaža nad tipko)
  • Sezonska korekcija zaradi deformacije lesa v različnih sezonah lahko vse Zgornje in spodnje pozicije premaknemo + - (-300 do +300)
  • I2C adresa 5 adres na manual - GPIO ali serijska številka STMa

* resolucija STM HALL senzorja (@3V3) 12bit ADC - (0V - 3V3) 0-4095 steps
ker se približujemo (ali oddaljujemo pri invert) samo z enim polom magneta je resolucija polovična 2048
približevanje z južnim polom S - value 2048-4095
približevanje s severnim polom N - value 2048-0
ko je magnet izven dosega = 2048
3
Communication STM > ESP

Najprej sem rezmišljal o I2C.
Mislim pa da bi bilo boljše CAN
Oba rabita 4 žice/povezave med PCBji
Za CAN rabimo še transciver TJA1050 ali MCP2551
GND, 5V, CAN_H in L
vsaka oktava ima še LDO (AP2112K-3.3 ali MCP1700) za stabilno voltažo na HALLih

Mislim da bi bil dovolj 1 x ESP32S3 za do 28 oktav (28 x STM32G431)
5 x manualov (MIDI kanali 1-5) s po 5 oktavami + 3 oktave za pedal(MIDI kanal 6).

ESP ima lahko preko GPIO switch da ga postavi v Setup, zažene web interface in omogoči nastavljanje STMov.
Na klaviaturi pritisnemo tipko ki jo želimo nastavjati. STM pošilja podatke o poziciji magneta, lako imamo na webu gumbe ki shranijo zgornjo, spodnjo pozicijo - z možnostjo editiranja.
hkrati lahko nastavimo parametre za celo oktavo
lahko naredimo avto nastavitve za oktavo (recimo C = 60, naslednja nota bo 61, 62,63,...) in MIDI kanal.
Ko končamo z nastavitvami za določeno oktavo SAVE pošlje nastavitve na STM in jih shrani v STM Flash/NV memory.

CAN Node ID: Pri prvi instalaciji (oz. če se določen modul/oktava zamenja) ESP preko web UI zahteva da pritisnemo tipko na prvi oktavi prvega manuala, Dobi STM Silicon ID in v to oktavo/STM v NVmem zapiše NodeID = 11 in ponovimo za vse oktave. Tako so vse oktave identično sprogramirane - razen zadnja ki ima še dodan C na koncu in se tudi lahko prej konča (F ali G) ima lahko tudi 120R terminator upor na CAN.

Pictures

Additional Notes

Add troubleshooting instructions, tips, or maintenance notes here.