Close

Revised USB module

A project log for Modular MIDI

Using a CAN bus to distribute MIDI messages in a modular synthesizer

davidDavid 07/14/2023 at 21:190 Comments

Finally, the last module to be revised is the USB module. As with previous modules I have added bootloader and reset buttons, an SMD USB connector, EEPROM, and power rail protection.

This module also changes the MCU to RP2040. It should be easier to implement USB host mode with this change since others already have added support for it in the library.

There should be plenty of processing power left over for some bonus features, I don't think I will implement anything beyond the basic functionality, but maybe one day.

I added a RAM chip and a button on the front to support delay/reverb effects and changing modes, just in case I get around to implementing this. However, since this module is only 4HP wide there's not much room for controlling the effects, so it will require some creativity or MIDI CC. This module should eventually get MIDI-CI so it can be mapped and configured with that. I spent some time wondering if it would be worth it to add on such effects as an afterthought. But if it ends up unused we can just not populate those components on the PCBs.

The 5V rail protection

The 5V rail protection needed to be different on this module because it can supply power to the connected USB devices. This circuit blocks power from the USB connection when the 12V rail is present, which is always there when the module is powered from the rack. When the USB power is not blocked Q5 will prevent power from being spread to other modules in the rack (which currently happens when the rack is powered-down).

The new ADC input stage

I changed the ADC input stage to reduce its distortion since the zener diodes added some soft-clipping within the normal range of voltages. It now uses hard clipping closer to the ADC to deal with overvoltage. I also removed the ring connection from one of the inputs, so only the left input accepts stereo audio if the other input is unused.

The previous version of this module did not comply with the jitter limitations for USB hosts because it was running off of the internal oscillator. Therefore I made sure to use a crystal oscillator in this one.

I could probably tweak these PCBs forever, so I'll just send them all to be manufactured now.

Discussions