The circuit could be broken down into 6 blocks: The Power Supply, the Input Buffer, the Dual PT2399 Stage, Output Adder, Analogue Switches, and the Arduino Block:
The Power Supply
The Power Supply generates energy and bias voltage for all the circuit:
The LM7805 is a +5V linear regulator widely available.
+9V is used to power the Input and Output op-amps, it gives maximum span to avoid signal clipping.
+4.5V is used as a virtual ground for the op-amps.
+5V is used to power the two PT2399, the Arduino chip (ATMEGA328P-PU) and the analog switch (CD4066). A legion of caps is used to avoid noise on the supply lines.
In this mixed analog/digital circuit, the power supply architecture is critical in order to minimize noise. A ground star scheme is used, with 2 different sub-grounds (Analog and Digital) that joint in a single point (below the PT2399 pins 3 and 4). The +5V and +9V lines are also routed avoiding conflicts between analog and digital domains.
The Input Buffer
The Input Buffer is a simple op-amp with gain=1. It will present a high input impedance (Zin=470K) and prepare the signal for the rest of the circuit:
The input cap C1 (100nF) will block any DC levels and creates a low pass filter with R1. The fc is 3.3Hz so it won't affect the audio band (fc=1/2piRC=3.3Hz)
The Dual PT2399 Stage
The two PT2399 are in the classic Delay configuration. Not taking into consideration the analog switches the circuit looks like this:
If you want to learn all the details about the PT2399 details read
the PT2399 Analysis
. The resistors and caps used (R3=R8=R9=4.7K, C7=6.8nF and C11=3.3nF) give us a fc=7.1Khz, they will remove the high harmonics and DAC noise. This low pass filtering is intended in order to recreate the warm organic tone of analog delays. If the delayed signal is not filtered, the resulting echoed sound would be too clean and sterile. Air and walls tend to low pass the signal, attenuating the harsh hi-freqs, this 7.1KHz filter will do that,
How to control a PT2399 delay time with Arduino:
The Arduino chip will control the PT2399 delay time by controlling the amount of current flowing out of pin 6:
50uA: 600ms delay time (maximum time with minimum current)
5mA: 35ms delay time (minimum time with maximum current)
An op-amp current sink is used to control the amount of current thus delay that the PT2399. The microntroller will use a PWM signal that will vary between 0 and 5 volts to set the desired current and delay time:
The R4-R5 voltage divider will convert the 0 to 5 PWM signal coming from the Arduino into 0 to 2.5V.
The C8 cap will transform the PWM signal into a continuous signal.
The voltage drop (0 to 2.5V) over the resistor R13 will command the amount of current pulled out of the PT2399 pin6:
PWM min (0V): I=V/R = 0/4.7K = 0mA
PWM max (2.5V): I=V/R = 2.5/4.7K = 0.53mA
The R13 Resistor:
To control the PT2399 using current, ideally, we need to modulate it from 5.4mA (35ms) to 0.05mA (600ms). With R=V/I and V=2.5V, the resistor should be:
R=V/Imax =2.5V/5.4mA= 460R (35mS)
Using a 460R resistor, we can modulate the delay from 35ms, to 600ms.
In practice, we are using an 8bit PWM to generate the 2.5V. If we use a 460 resistor, we would be able to get very nice resolution close to the 35ms mark, but when we try long delays (around 200ms) the resolution is very bad.
To fix this a 4.7K resistor is used, it gives a fantastic behavior and better resolution in the whole range but with the side effect is that the shortest delay we could achieve is around 60ms.
With a 4.7K resistor, we ensure that we can cover the whole span of time from 0mA ( 300 seconds) to 0.50mA ( 60 mseconds)
The Output Adder
It is the last stage of the circuit, it will give a low output impedance to preserve the sound quality on the pedal chain. Its main task is to add the original guitar signal together with the different delay paths or "taps":
The output signal will be a mix of the dry signal (Audio_in) + Delayed signal (Output_Tap) + Middle Tap (Middle_Tap). Two switches will give the possibility of adding or not some of the taps. The amount of dry/wet signal will be controlled by RV2.
The 100ohms output impedance will depend on the op-amp, usually, all modern op-amps have a Zout<100ohms.
The Analog Switches
The Time manipulator uses 4 analog switches (CD4066). They will allow the signal to follow different paths and create different sounds. You will have the possibility to place the PT2399 in series (extending the time and definition of the delay time) or in parallel (creating different sounds like reverb or chorus).
The principal configurations are:
Briefly going over the most important configurations, we have:
Short Delay: The first PT2399 is not used, this mode archive delays from 50ms to 300ms approx. Simple and clean.
Delay: This is the basic configuration, the 2 PT2399s are used in series, getting delays from 100ms to 600ms approx. The Tails pot will add more depth to this mode.
Echo Mode1 and 2: The basic Delay mode could be enriched, adding extra tap paths for the signal.
Super Echo: All the relays are on, giving a no-stopping bouncing sound.
Parallel - Chorus: The two delay units are placed in parallel, using subtle different delay times on each one will give a chorus-like sound.
Reverb: The idea is to add to the original guitar signal two paralleled delayed copies (mimicking the signal bouncing over 2 walls). The delays need to be short here to have a realistic effect.
Telegraph: All the relays are OFF and we the foot tap we can control the dry signal going through the pedal.
The Arduino Block:
The Arduino UNO chip (ATMEGA328P-PU) is the brain on the circuit. Its main tasks are:
Control the delay times for the PT2399s using 2 PWMs.
Read the encoder and the push button.
Drive the LEDs and the analog switches.
Details of the circuit:
The cap C1 placed next to the chip will remove noise from the power supply.
Two dual color LEDs are used, so using 2 pins we can get 4 status: off, green, red and orange.
An encoder is used to interact with the guitarist, it as an embedded push-button to access the effect-selection mode.
2 PWM signals are used to control the current sink circuits of the PT2399 (and control the delay time)
The Tap pushbutton is connected to the Arduino, so it could be detected