Building the hardware should be fairly easy from the supplied schematic (see: Schematics). In this directory you will also find the kicad project used to draw the schematic if you want to modify it. Making gerber or other PCB preprocess files from this kicad project should work out just as well if you know what you are doing.
Our prototype board was build by hand on a 100x160 mm eurocard style one-side-copper circuit board which worked out pretty good in terms of wire routing and component space.
=> hardware_config.h
=> EEPROM Status Codes
For robustness against the digital noise generated by the microprocessor and the SPI/I2C lines try to heed to the following rules:
- Place analog components (e.g. op-amps and the reverence voltage shunt) away from digital components.
- Separate the digital pin driving op-amps from the analog pin driving ones (on opposite sides of the board for example).
- Although there is no real distinction between analog ground and digital ground in a typical modular synthesizer split the incoming ground from the power supply as early as possible on your board. Place the initial smoothing capacitors (C23-C27) physically as close as possible to that separation point.
- Place the smoothing capacitors of the op-amps and DACs as close to the devices as possible.
- Route digital signal and supply voltage wires/traces orthogonal to analog signal and supply voltage wires/traces when possible. Don't run them directly parallel to each other to hamper electro-magnetic coupling, spacing helps.
- Ground loops are bad (have only one ground path from every node in your circuit to your power supply).
References | Quantity | Type | Notes |
---|---|---|---|
C1, C2, C3, C4, C5, C8, C10, C12, C13, C14, C17, C18, C19, C20, C21, C22, C24, C25, C28 | 19 | 100nF Ceramic or film capacitor | at least 12V rated |
C6, C7, C9, C11, C15, C16, C23, C26, C27 | 9 | 10uF Electrolytic capacitor | at least 12V rated |
R1, R2, R3, R4, R5, R6, R7, R8 | 8 | 470K Resistor | |
R9 | 1 | 32K Resistor | only pullup, 10K Ohm minimum |
R10, R11, R12 | 3 | 220R Resistor | |
R13, R14, R18, R27, R28, R29, R30, R31, R32, R33, R35 | 11 | 1K Resistor | |
R15, R16 | 2 | 10K Resistor | |
R17 | 1 | 100K Resistor | |
R19, R20, R21, R22, R23, R24, R25, R26 | 8 | 2K Resistor | |
R34 | 1 | 20K Resistor | at least 5mW rated |
J1 , J2, J3, J4, J5, J6, J7, J8, J12, J13, J14, J15, J16, J17, J18, J19 | 16 | 2-Pin (mono) Jack socket | |
J9, J10 | 2 | 5-Pin DIN socket (180°) | Or other form of suitable connector for MIDI |
D1 | 1 | 1N914 | Or other low power switching diode |
Q1 | 1 | 2N7000 | Or equivalent N-channel switching MOSFET |
Q2 | 1 | BS250 | Or equivalent p-channel switching MOSFET |
U1 | 1 | STM32F103C8 | on the common bluepill board |
U2, U3 | 2 | AD57x4 quad-channel DAC | Variant not really relevant, 12 bits are sufficient |
U4, U5, U8, U9 | 4 | TL074 | Or other general purpose op-amp, e.g. TL08x, TL06x, CA/LM741 series, short-circuit protection is preferable |
U6 | 1 | H11L1 | Or other digital signal rated optocoupler, preferably with active output |
U7 | 1 | TL071 | Only for driving MIDI thru, transistor based circuit is also possible |
U10 | 1 | LM4040LP-2.5 | Or other 2.5V precision reference shunt/voltage reference |
U11 | 1 | generic 3.3V voltage regulator with ~100mA current capability | |
U12 | 1 | Microwire compatible EEPROM for 3.3V supply, e.g. 93LCxxC | 16 kilobit models preferred but not a must, DON'T use the 93Cnnx models, these need at least 4.5V supply |
J11 | 1 | 128x64 pixel display with SSD1306 compatible controller and I2C bus | try getting the 1.3" variant, smaller sizes are cumbersome to read |
SW1 | 1 | Rotary encoder with switch |
Compiling the code is easily done with PlatformIO. Installing PlatformIO and running platformio run
in the midimagic directory should do the job.
To flash the Bluepill board via a STLink USB debugger do a platformio run -t upload
.
Flashing the binary build by PlatformIO directly via other means, a FTDI programmer for example, should work as well.