Skip to content

Latest commit

 

History

History
65 lines (49 loc) · 4.22 KB

building.md

File metadata and controls

65 lines (49 loc) · 4.22 KB

Building...

the Hardware

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.

IO Pin Assignment

=> hardware_config.h

Empty Config EEPROM

=> EEPROM Status Codes

Wire Routing and Component Placement

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).

Bill of material

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

the Software

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.