STM32F103 version of Dual-Resonance Solid-State Tesla Coil MIDI Interrupter. Designed for 34+ note polyphony (up to 50 note polyphony if using clever timer tricks).
This design replaces the older Dual-Resonance Solid-State Tesla Coil MIDI Interrupter Dual 328PB and gives it a lot more processing power and more simultaneous notes with a single processor. It also has USB, allowing it to be the actual MIDI interface with the computer, eliminating the need for an external interface, though it still has the standard MIDI input connector and can process both concurrently. It also adds a SDCard slot that can be used to directly play MIDI from .mid files and can be mounted as a drive on the Host PC. It also features an expansion connector to add a VS1053 coprocessor board for experimenting with direct audio drive.
Unfortunately, this processor is still a little low in power to handle everything as desired. For example, the I2C OLED display still needs to be run in paged mode (unless I can figure out a way to hand that off to DMA or something) and the power vs frequency computations for the timer-compare values still have to be done via lookup table, as it can’t keep up with the math in real-time. But otherwise, it performs admirably and offers higher timer resolution for better fidelity.
However, it still explodes/implodes (depending on your perspective) with the “Faerie’s Aire and Death Waltz”, but then again few interrupters would survive it. If you try that one (the full-version that requires 88 simultaneous notes), make sure your current-limiters are functioning properly on your Tesla Coil!
ERRATA: 1) Remove C5 and replace it with a 0-Ohm (1206 size) jumper. That capacitor’s purpose was to AC-couple the speaker monitor test-port to keep the audio from saturating (and clipping) if connecting it to a line-input and/or recording device. However, since that output is driven as “push-only” without sufficient bleeder load or biasing resistors, the capacitor saturates and mutes/muffles the sound. The port’s primary purpose is for debugging the code using headphones without connecting to the coil and DC-coupling works just as well for headphones.
2) The DTR pin of the FTDI is DC-coupled, meaning that when JP5 is installed to enable it to reset the board, the board will be held in reset as long as DTR is asserted-low. While that could work with some special coding of your programming scripts, generally, this isn’t desired. A better solution is to add a 0.1uF capacitor in series with it to AC-couple it and turn it into a “one-shot” so that it pulls reset low only during the DTR signal transition from high-to-low. This can be done by cutting the trace between JP5 and D52 and inserting a small (0603 or perhaps 0805 sized) 0.1uF capacitor.
Otherwise, everything else has tested out and seems to be functioning as intended.