The MidiStick

The MidiStick

Since I finally managed to fulfill my (not quite childhood) dream of having a working (large-ish) Tesla coil, I wanted to be able to play music on it. I did build a small Midi interrupter for my first Tesla coil, but that was very basic. Just playing a single note with a fixed duty cycle. Completely useless for driving a DRSSTC. So I needed a new one, and decided to make it nice and compact, so if I ever were to show the Tesla coil somewhere away from home, I would only need to throw it in my laptop bag. This is what I came up with:

It is is a pic32 with a USB module, a USB connector and an optical transmitter, that send the control signals to the coil (just on or off).
All it has to do is to generate pulses at the correct width and frequency, to generate the sound. Sounds simple right? And actually it was, once I sorted out the USB library.

There are some details to consider when making an Interrupter for a Tesla coil though:

First of all the coil can only be on for short bursts, and will catch on fire if the duty cycle gets too high. So somehow we have to limit both. The normal way is to have a fixed on time that reduces when, when higher notes are played, so the duty cycle does not exceed the maximum. I used a slightly different algorithm, but it achieves the same

Second just a blunt square wave sounds pretty basic. To improve on that, we can implement ADSR (Attack Sustain Decay Release), that gives the note a dynamic “volume”. Also we can include modulation of both amplitude and frequency (though i have not done that yet).
And to make it sound even better we can implement a system, that supports multiple voices, so the coil can play multiple notes at once. The MidiStick currently has four.

Third thing is the importance of flexibility; you wouldn’t want to change the way your coil sounds by re-compiling the firmware…
So for this I made a small tool, which runs on the PC, the Synth is attached to, that can change parameters on the go. The Synth also supports presets for both coil parameters (such as max/min on time max duty etc.) and sound options (ADSR, note offset, bend range). The sound presets can be selected by the midi bank select command, for easy access.

Fourth (and this is actually a bit of a stretch), you might want to have an E-Stop incase something goes wrong. So the MidiStick has an aux connection that can be an E-Stop. But also a secondary output, and potentially more if the need arises.

And finally, I wanted to avoid annoying software/driver requirements, so the entire thing runs with plug and play USB communication.
BUT java is required, because that’s the only desktop language I am really familiar enough with, to start such a project… I guess that might already be installed anyway 😛

The firmware and PCB files are on my GitHub (of course 😛 )

Since JLCPCB is so cheapo, I have ordered a few more and have 24 bare PCBs left over 😀
So if somebody is GENUINELY interested in having one, send me a message and we can arrange something. It would not be free though unfortunately, because I don’t have enough money to send out free stuff 🙁 .
Cost would be 35€ for the entire board, 15€ if you supply your own opto transmitter (HFBR-14xxZ and HFBR-24xxZ Series from Broadcom or pinout compatible). The available connectors are: SMA, ST, FC and SC
I might design a 3d printable case for it at some point, but that’s not on the agenda at the moment.
Also the thing would not have a valid USB Vendor & Product ID, because I can’t afford that 🙁

If the demand is there I would also be willing to do some more proper DFM on the thing and release it as a product.

The control software

This Post Has One Comment

  1. Mads Barnkob

    Great project! I can not wait until I receive the beta test versions 🙂

Leave a Reply