Skip to the content
2 layers60 × 110 mmAddaTone components, the printed circuit board in 3D

AddaTone components

dchwebb/Addatone13

Eurorack Additive Oscillator based on Lattice FPGA and ARM MCU

Size
60 × 110 mm
Copper layers
2
Thickness
1.6 mm
Parts
95
Nets
124
Pads
397
Tracks, vias
614, 117
Pours
2
Routed
Yes
KiCad
KiCad 7 (file 20221018)
Created
9 Feb 2020
Updated
25 Aug 2024

Overview

AddaTone components is an open-source printed circuit board by dchwebb, from the dchwebb/Addatone repository on GitHub. It is a 2-layer board of 60 × 110 mm with 95 parts on 124 nets, routed with 614 tracks and 117 vias.

It is built around the ICE40UP5K-SG48ITR50, MCP6004-E/P and TL072, with the LD1117S12TR-HXY, LM1117-3.3 and PCM5100APW among its other parts. Its parts include 43 capacitors, 23 resistors, 8 connectors, 7 ICs and 4 diodes. It belongs with the fPGA and programmable logic and audio and music boards and the STM32 and FPGA and CPLD boards of this library.

Main components

7

README

README.md

Addatone

Image

Overview

Addatone is a Eurorack oscillator using additive synthesis. It is a two channel oscillator with channel one outputting fundamental and odd harmonics and channel two fundamental and even harmonics.

Each channel has potentiometer and CV control over the number of harmonics with higher harmonics progressively attenuated. In addition a 'Count' pot and CV input hard-limit the total number of audible harmonics. A warp control progressively detunes the odd harmonics up and even harmonics down.

Channel one has a mix switch which allows a mix of both channels to be output from channel one. Channel two has a multiply switch which allows a multiple of both channels to be output from channel two (ie a ring modulation effect).

The final controls are an octave potentiometer covering a five octave range and a fine tune control covering around an octave.

Architecture

Image

The core sound generator is an ICE40UP5K FPGA from Lattice. This is responsible for generating the harmonics, mixing/multiplying and then outputting to the DAC via I2S protocol.

The module also contains an STM32F446 microcontroller which holds the FPGA bitstream in internal flash memory; this is used to program the FPGA on start-up via SPI. In addition the STM32 is used as an ADC to digitise and scale all potentiometer and CV control data. This is periodically transferred to the FPGA via SPI. The STM32 is clocked from an external 12MHz crystal. This is also used to drive the FPGA clock via the STM32 MCO (Master Clock Output) peripheral.

The DAC is a Texas Instruments PCM5100APW, operating 2 channels at 16 bits, 48kHz. Two op-amps are used to scale input CV voltages and to amplify the DAC output to Eurorack levels (8V peak to peak).

FPGA

A look-up table in block RAM (Sine_LUT) holds 2048 16 bit samples containing a single cycle sine wave. Individual harmonics are generated by traversing the LUT at a speed relative to the harmonic frequency.

The SamplePos_RAM 256 x 16 bit look-up table holds the current Sine LUT position of each harmonic. This position is advanced according to the harmonic's frequency at each sample and the sine sample is scaled and added to an accumulator. The initial values of the sample position LUT are pre-calculated to minimise 'crest factor'. If each harmonic started at position 0 of a sine wave then peaks and troughs would coincide to create a wave with an amplitude greater than the dynamic range of the system.

A graphical javascript tool to visualise and calculate minimal crest factor sample positions is available here: https://htmlpreview.github.io/?https://raw.githubusercontent.com/dchwebb/Addatone/master/SamplePosLUT/SineLUT.htm

The FPGA receives its control data from the ADCs processed in the STM32. These are periodically sent via SPI and decoded using a custom peripheral (ADC_SPI_In).

The DAC_I2S module is a custom peripheral used to dispatch the final sample values to the DAC via the I2S protocol.

The 12MHz clock received from the STM32 MCO is scaled to the ICE40's maximum clock frequency of 48MHz.

The ICE40 bitstream is developed in Lattice's Radiant IDE. Full source code here: https://github.com/dchwebb/Addatone/tree/master/Addatone_ICE40

STM32 Microcontroller

The module includes an STM32F446 MCU that carries out various helper roles. The firmware was developed in STM's CubeIDE and available here: https://github.com/dchwebb/Addatone/tree/master/Addatone_STM32F446

The FPGA bitstream is stored in the MCU's flash memory and is programmed into the FPGA at startup using an STM32 SPI peripheral (see fpgaHandler::ProgramBitstream method). Once the FPGA is programmed the ADC data derived from external CV control and potentiometers is processed, scaled and transmitted in a periodic packet to the FPGA via SPI (see fpgaHandler::SendControls method).

Calibration

The 'calib' button allows the setting of the mid point of the fine tune and the spread of the tuning. To start calibration turn the Octave and Fine Tune knobs to their mid point position.

Press the Calib button. Changing the Fine Tune knob will alter the pitch. Turning the Octave knob clockwise will decrease the tuning spread, and vice versa.

When calibration is complete press the Calib button again. Turning the Fine Tune knob to the center position should set the correct pitch.

To erase the configured calibration hold the Calib button down when powering on the module.

Parts

95
QtyValueFootprintReferences
11100nFCapacitor_SMD:C_0805_2012Metric_Pad1.18x1.45mm_HandSolderC8, C10, C11, C13, C14, C17, C19, C24, C25, C26, C38
7TestPointTestPoint:TestPoint_THTPad_2.0x2.0mm_Drill1.0mmTP1, TP2, TP3, TP4, TP5, TP6, TP7
5100nFCapacitor_SMD:C_0603_1608Metric_Pad1.08x0.95mm_HandSolderC1, C4, C9, C15, C35
4100kResistor_SMD:R_0805_2012Metric_Pad1.20x1.40mm_HandSolderR3, R5, R7, R9
410nFCapacitor_SMD:C_0805_2012Metric_Pad1.18x1.45mm_HandSolderC6, C7, C12, C20
310uFCapacitor_SMD:CP_Elec_3x5.3C36, C37, C42
310uFCapacitor_SMD:C_0805_2012Metric_Pad1.18x1.45mm_HandSolderC16, C22, C43
32.2kResistor_SMD:R_0805_2012Metric_Pad1.20x1.40mm_HandSolderR14, R15, R22
32.2uFCapacitor_SMD:C_0805_2012Metric_Pad1.18x1.45mm_HandSolderC5, C31, C33
347kResistor_SMD:R_0805_2012Metric_Pad1.20x1.40mm_HandSolderR10, R12, R13
21.5nFCapacitor_SMD:C_0805_2012Metric_Pad1.18x1.45mm_HandSolderC27, C30
2100pFCapacitor_SMD:C_0805_2012Metric_Pad1.18x1.45mm_HandSolderC23, C34
210kResistor_SMD:R_0805_2012Metric_Pad1.20x1.40mm_HandSolderR16, R17
21N5819Diode_SMD:D_SOD-123D3, D4
21kResistor_SMD:R_0805_2012Metric_Pad1.20x1.40mm_HandSolderR20, R21
21nFCapacitor_SMD:C_0805_2012Metric_Pad1.18x1.45mm_HandSolderC18, C32
22.2nFCapacitor_SMD:C_0805_2012Metric_Pad1.18x1.45mm_HandSolderC28, C29
222uFCapacitor_SMD:CP_Elec_5x5.3C39, C40
230pFCapacitor_SMD:C_0805_2012Metric_Pad1.18x1.45mm_HandSolderC2, C3
233kResistor_SMD:R_0805_2012Metric_Pad1.20x1.40mm_HandSolderR18, R19
268kResistor_SMD:R_0805_2012Metric_Pad1.20x1.40mm_HandSolderR6, R8
2Conn_01x03_MaleConnector_PinHeader_2.54mm:PinHeader_1x03_P2.54mm_VerticalJ4, J6
1100Resistor_SMD:R_0805_2012Metric_Pad1.20x1.40mm_HandSolderR1
1120Resistor_SMD:R_0805_2012Metric_Pad1.20x1.40mm_HandSolderR24
11uFCapacitor_SMD:C_0805_2012Metric_Pad1.18x1.45mm_HandSolderC21
147uFCapacitor_SMD:CP_Elec_5x5.3C41
156kResistor_SMD:R_0805_2012Metric_Pad1.20x1.40mm_HandSolderR11
182kResistor_SMD:R_0805_2012Metric_Pad1.20x1.40mm_HandSolderR2
191kResistor_SMD:R_0805_2012Metric_Pad1.20x1.40mm_HandSolderR4
1Conn_01x02_MaleConnector_PinHeader_2.54mm:PinHeader_1x02_P2.54mm_VerticalJ7
1Conn_01x06_MaleConnector_PinHeader_2.54mm:PinHeader_2x03_P2.54mm_VerticalJ5
1Conn_01x10_FemaleConnector_PinSocket_2.54mm:PinSocket_1x10_P2.54mm_VerticalJ2
1Conn_01x12_FemaleConnector_PinSocket_2.54mm:PinSocket_1x12_P2.54mm_VerticalJ3
1ECS-12MHzCrystals:Crystal_SMD_0603-2pin_6.0x3.5mm_HandSolderingY1
1Eurorack_16_pin_powerCustom_Footprints:Eurorack_16_pin_headerJ8
1ICE40UP5K-SG48ITRCustom_Footprints:ICE40_QFN-48-1EP_7x7mm_Pitch0.5mmU2
1Jumper_2_BridgedJumper:SolderJumper-2_P1.3mm_Bridged_Pad1.0x1.5mmJP1
1LInductor_SMD:L_0805_2012Metric_Pad1.15x1.40mm_HandSolderL1
1LD1117S12TRPackage_TO_SOT_SMD:SOT-223U6
1LM1117-3.3Package_TO_SOT_SMD:SOT-223U7
1LM4040DBZ-5Package_TO_SOT_SMD:SOT-23D2
1MBR130T1GDiode_SMD:D_SOD-123D1
1MCP6004Package_SO:SOIC-14_3.9x8.7mm_P1.27mmU3
1PCM5100APWCustom_Footprints:SSOP-20_4.4x6.5mm_Pitch0.65mm_Round_PadsU4
1STM32F446RETxPackage_QFP:LQFP-64_10x10mm_P0.5mmU1
1SWD_HeaderCustom_Footprints:SWD_headerJ1
1TL072Package_SO:SOIC-8_3.9x4.9mm_P1.27mmU5

More from dchwebb/Addatone

3
  • 2 layers100 × 110 mmAddaTone Solder Stencil, the printed circuit board in 3D

    AddaTone Solder Stencil

    dchwebb/Addatone

    Eurorack Additive Oscillator based on Lattice FPGA and ARM MCU

    81 parts13
  • 2 layers67 × 24.5 mmSTM32L152 Dev Board, the printed circuit board in 3D

    STM32L152 Dev Board

    dchwebb/Addatone

    Eurorack Additive Oscillator based on Lattice FPGA and ARM MCU

    23 parts13
  • 2 layers60 × 110 mmAddaTone Controls, the printed circuit board in 3D

    AddaTone Controls

    dchwebb/Addatone

    Eurorack Additive Oscillator based on Lattice FPGA and ARM MCU

    18 parts13

Similar boards

  • 4 layers100 × 83.4 mmDevBoard, the printed circuit board in 3D

    DevBoard

    dchwebb/DevBoard

    Dev Board PCB

    131 parts2
  • 4 layers60 × 110 mmRetrospector Components, the printed circuit board in 3D

    Retrospector Components

    dchwebb/Kishoof

    Eurorack Wavetable Synthesizer; Dual channel; 64MB internal storage accessed via USB

    123 parts17
  • 4 layers60 × 100 mmComb, the printed circuit board in 3D

    Comb

    dchwebb/Comb

    Eurorack comb filter oscillator

    74 parts2
  • 2 layers60 × 110 mmDisPhaze Components, the printed circuit board in 3D

    DisPhaze Components

    dchwebb/DisPhaze

    Eurorack Phase Distortion Oscillator module

    89 parts21Apache-2.0
  • 4 layers25.4 × 106.7 mmWagyu, the printed circuit board in 3D

    Wagyu

    mmalex/wagyu

    hardware & software for a simple eurorack module to support some youtube livestreams

    96 parts9CC0-1.0

Questions

How big is the AddaTone components PCB?

It measures 60 × 110 mm and has 2 copper layers, 1.6 mm thick.

What parts does the AddaTone components use?

95 parts, built around the ICE40UP5K-SG48ITR50, MCP6004-E/P, TL072 and LD1117S12TR-HXY. The full list of its parts is on this page, with links to each part's symbol and footprint where PCBKit's library has them.

Where can I download the AddaTone components KiCad files?

From the dchwebb/Addatone repository on GitHub, at the commit this page was made from: the board is Hardware/AddaTone components.kicad_pcb and its schematic Hardware/AddaTone components.kicad_sch. PCBKit opens the board in the browser, with nothing to install.

Can I use the AddaTone components design in my own project?

Its repository states no licence, so its author keeps all rights: ask dchwebb before reusing the design.