Passive Preamp with Stepped AttenuatorÂ
I wanted to build a passive preamp with the following features:
Digitally controlled stepped attenuator
Switching capability for inputs and outputs
Remote IR control
Room for an analog crossover for bi-amping 2 power amps
Room for future expansion, perhaps to include a line buffer or additional digital components
I looked at several options and decided to use the AMB Labs Arduino-based controller with an LCD display. The project is located here. Ti Kan is the creator of the site and AMB supplies bare PCB boards and a BOM of parts. They refer to the project as the LCDuino DIsplay I/O Processor. This consists of a tiny board with a pre-programmed ATmega328P (from AMB) processor piggy-backed to an off-the-shelf LCD display. Assembly is very straightforward. It requires a 5 Volt regulated power supply. It interfaces with an Alps motorized potentiometer. The potentiometer does not control the volume of the preamp directly; it is a very clever servo circuit that digitally controls the position of the knob. The IR remote causes the pot shaft to rotate in response to up/down volume commands. If the knob is manually rotated, the microprocessor adjusts the pulses to a connected R2R relay-based attenuator.
This requires the addition of another AMB Labs project, the R2R Delta 1 stepped attenuator, located here. This is an R2R attenuator that uses miniature latching signal relays to switch resistors in and out of the circuit. Attenuation steps can be selected based on the resistors used. AMB has a resistor calculator, which allows you to select your own preferences for attenuation steps and input and output impedance. I chose a 10K impedance with 1 dB steps and ordered the appropriate 1% Vishay resistors from Mouser. I did some tests and got excellent results matching the two channels against each other.
I also added the AMB Labs "delta 2" input/output relay-based selector. It has 8 "ports" which can be configured for any combination of inputs and outputs.
I built and installed Nelson Pass's LXmini analog crossover board, available as a kit from the DIY Audio Store. Nelson Pass has an article on the crossover on the First Watt website and there is a DIY Audio forum post here.
Finally, I built 2 power supply modules, one for the 5 Volt digital section and the other supplying 24 Volts to the analog crossover. These were based on another DIY Audio project described here.
So this turned out to be more of a system integration project, but I am happy with the results.
Here is the tiny processor board from Ti Kan's website. The display is piggy-backed to the board. Sticking out on the right is an IR sensor. In my case, I had a hole drilled in the front panel and epoxied the sensor to the rear of the panel.
This is the attenuator board attached to its digital interface board, which can be snapped off, which I did. The little white rectangular objects are latching signal relays.
And this is the input/output selector board. The same relays are used on this board. The interface boards are connected to the processor via a ribbon cable bus.
I ordered a 2U "Pesante" case from the DIY Audio Store and had the front panel customized using Modushop's customization service. I designed a set of holes and cutouts for the components using Front Panel Designer (aka FrontDesign) which you can download from Front Panel Express. I then exported a .dxf CAD file which I supplied to Modushop. They did an excellent job at a very reasonable cost.
Here is a 3D view of the front of the panel in FrontDesigner. The round recess is to accommodate the volume knob.
Here is the rear of the panel. I had to add a recess for the LCD display so it would not be too far from the front surface. There are 4 M2.5 tapped holes for blind mounting the display and Arduino stack, allowing a clean front panel appearance.
The power supplies are interesting. I read this post by DIY Audio member Elvee describing a "DeNoizator" power supply design. The idea was to take an LM317 3-terminal adjustable regulator IC and feed back the noise component of the regulated DC output back into the adjustment terminal to effectively reduce the noise to minuscule levels. My thinking was that this would be great for powering the Pass crossover. The number of replies in that thread became a little too long, but eventually, contributor iamwhoiam came up with a very nice PCB design and graciously made the design files (Gerbers) and BOM available in this post. I ordered some PCBs from JLCPCB in China - I think they cost about $1.00 each (plus shipping).
This is iamwhoiam's DeNoizator power supply PCB. It can go tp to 24 Volts output depending on component selection.
It turns out that the board works just as well for a simple 5 Volt regulator for digital loads by simply omitting the feedback components. I liked the design because it used Talema transformers and had excellent noise filtering on the AC inputs.
This is the assembled Pass analog crossover with parts selected specifically for the LXmini speakers. This is an active filter design that uses low-noise JFETS in a simple buffer configuration described in Pass's article.
The film caps are all Wima brand and the resistors all 1% metal film. There are some electrolytic coupling caps but they are all Elna Silmic which do not exhibit the audio distortion found in regular electrolytics (or at least orders of magnitude better).
The pots at the bottom adjust the input levels to each filter section.
The crossover operates from a single-ended +24 Volt power supply. Pass originally designed it to be powered by a wall wart and added a 4-stage CRC power filter, but I chose to use the supply mentioned above, so the noise level on the +24 Volt rail on the filter board is probably too small to measure.
This is the AMB stepped attenuator. The relays came from Mouser and are Omron small-signal latching relays originally intended for the telecom industry. They have gold-plated silver contacts and are extremely reliable. Since they are latching, they require no current in their quiescent state and "remember" their position if power goes off. The resistors are all Vishay 1% RN60D's and the values are as determined by AMB's online calculator.
I must admit I was scratching my head a bit when I started building the AMB components, but after studying the schematics and consulting the AMB Forums, all became clear. This is a pretty sophisticated and clever system!
I mounted this board on miniature vibration isolators - the relays do transmit some clicking sound to the baseplate otherwise.
Closeup of the Alps motorized pot which is attached to the volume knob. The motor and the pot leads connect to the Arduino board. The Arduino has an A/D converter that senses the pot's angle of rotation. If the remote calls for a change, the firmware rotates the motor until the pot shaft catches up. This is, of course, a relative indicator of attenuation. Same with manually rotating the dial.
This is the Arduino board and display module mounted behind the front panel. To the left is the IR sensor. A ribbon cable is attached to the relay interface boards, which are stacked. The top board controls the attenuator. The LED bar displays are strictly for troubleshooting - they display the set/reset pulses to the relays.
Here are all the parts laid out in the chassis. The supply board at the top is the 24 Volt analog supply for the crossover. The supply below it provides 5 Volts for the Arduino. There are two ribbon cables from the control boards which go to the stepped attenuator and I/O selector, respectively. The I/O selector board is mounted on the rear panel close to the RCA inputs and outputs. Hard to see, but there are ferrite clamp-on filters around the ribbon cables to help keep digital noise from the Arduino getting into the analog paths. I could add shields inside, but they may be unnecessary. The IR remote sensor is mounted between the Arduino board and the pushbutton with epoxy.
Note that I have room for future additions.
Here is the back end. So far, 4 sets of inputs and 3 sets of outputs - 1 regular and 2 hi-pass/lo-pass from the crossover outputs.
Here is the front panel of the completed preamp. The illuminated push button serves multiple purposes - it can mute the outputs or put the Arduino into setup mode. In setup mode, there are several functions that can be performed like putting the IR logic into learning mode. Once the remote is "learned", other configuration parameters can be set. I am using a Sony-compatible AV remote to control the volume and I/O.
Closeup of the LCD display. The labels can be customized using the remote. In this case, the input selected is for my piCorePlayer, described in this project.
Follow-up modifications: Initially, I tested the preamp with my Class A amp and it worked perfectly. When I finished my Class AB and tried it with the preamp, I noticed a slight hum from the amp when the attenuator was set to middle values. That is, there was no hum when the attenuation was zero (0dB) or maximum (-128dB), but in between it was noticeable. This could be due to the transformer in the AB amp causing a ground loop problem. I reminded myself that I had ordered a version of the transformer which did not have an electrostatic shield between the primary and secondary windings - that was because the secondary voltage and VA rating I wanted was not available with the shield. A secondary issue was that I had left the analog ground in the preamp floating, so in hindsight, I left myself open to a ground loop problem.
I solved it by adding a ground loop breaker to the preamp consisting of a thermistor and a capacitor in parallel from the analog ground to the chassis ground (and therefore the line ground).