FM OGRE - Through-zero FM oscillator (FM Operator)
Channel: William Yerazunis
Date: 2013-11-17

FM Ogre  (FM Operator with GRatuitous Enhancements) - a dsPIC33FJ64GP802 running custom software, to do true FM synth work (and true PM as well, , though I didn't demo it very well here).  The idea is to be able to generate those wonderful clangorous FM sounds that the DX7 of yore could do so well.   It's an "operator", not an oscillator, hence it starts with sine waves and Bessel functions and does everything from that.  There is no "saw / square / triangle" output (although you can approximate those waves, and many more, via the distortion / self feedback capability.)

The sounds you hear are realtime, and pure FM Ogre - no reverb, no chorus, no sonic sweetening whatsoever; it's whatever my Roland KC-60 can put out and my wife's GoPro camera can pick up... so we're "unplugged and totally acoustic" here - insofar as a DSP can ever be an "unplugged" instrument.  

There is occasionally some leakage from the Q106 modulation source into the output, but that happens only when I totally overdrive the FM Ogre's inputs (which are 0 to 3.3 volts).  There's also some hum pickup when I leave the cord dangling; forgive me for that extra bit of modulation.

Specs:  input rate: 41 KHz@12 bits, output 83KHz@16 bits with 256x interpolation, V/octave control from ~1 Hz to 32 KHz.   Linear frequency modulation authority: +/- 10KHz at maximum FM index (through-zero, FM index has a separate input channel on the ADC); linear phase control authority +/- 9*pi angle, wavelength matched (phase modulation index is also a separate input from phase mod input).  Frequency stability of core: +/-40ppm (crystal controlled).  Feedback operator authority:in excess of 8x Hz (through zero as well, of course).    Also has hard sync in and out (TTL-level compatible)

Note on Video:  I actually now have three "flags" for LEDs- one is "heartbeat" that flashes at about 1 Hz per million instructions executed in the idle loop, one is "Negative FM" - when we're in negative frequency for thru-zero, and one for "Negative Phase" - which is slightly different (but exactly what it sounds like) and lights up when (you guessed it) the phase is negative.   I thought I had the real LED plugged into negative frequency but I had it in negative phase, which is why it it didn't light up when we did feedback. There are a couple of other minor IOs like hard sync in/out but I didn't demo them.

Downsides: this is a 3.3 volt PIC, so you need to use resistors and op-amps and stuff to properly scale modular synth voltage ranges to what the A/D and D/A can handle (they do 0 to 3.3 volts maximum, but they really aren't happy outside of 0.5 volts to 2.8 volts (the protection diodes kick in and signal bleeds from the analog inputs directly to the analog outputs); the PIC cannot do negative voltages at all.  So your fancy-schmancy 1V/octave needs to be rescaled to roughly 0.1 volts/octave, centered on 1.65 volts before it hits the chip, which isn't hard to do but if you don't do it then all heck will break loose.  Lesser issue: the output is also DC biased at +1.65 volts; run it through an AC-coupled amp if you care or use a simple op-amp adder to add in -1.65 volts from a trimmer.

In fact, you'll see I have a patchcord going off to a Q125 Signal Processor - that's actually how I'm supplying that +1.65 volt input bias so that I can get a full wave worth of FM and PM instead of just the upper half-wave (otherwise, the bottom part gets clipped off by the dsPIC's protection diodes and it's not pretty.