Audio DAC, Part 1

Audio Project

I work at Bose now, and in the interest of familiarizing myself with the field, I’ve decided to design and build my own audio pipeline. Basically, I know that audio can be difficult to work, but I want to really own it. So I’ve set out to build my own DAC/Amplifier.

There are a bunch of Audio DACs available for purchase that are likely better than what I will end up making. I don’t expect to make this as a product in any way, so keep that in mind as I stumble through this learning exercise. I’m not terribly interested in tracking BOM costs or emissions testing at this stage.

At least at first, this is more of an EE exercise than anything else. I have a degree in Electrical Engineering, but I’ve always worked on the software side of the wall in the Embedded space, so this will be a good way to re-learn some things and to learn some things for the first time! I intend to use KiCad, a software suite for electronics design. I’ve never used it before, so this will be an adventure. I’ve used Eagle in the past, but I’d like to learn a bit more about KiCad!

I will use this GitHub repo to store my work: https://github.com/jonathanfisher/Audio. I’ll try to be good about writing commit messages and tagging releases, but I tend to be pretty bad at this in my personal projects (a habit I am trying to break!).

The Goal

At a high level, the goal of the project is to take digital audio as input and drive speaker(s) with it. There are three stages that I see needing:

  1. USB to I2S
  2. DAC (I2S to analog)
  3. Amplifier

Modular Design

Since this is a learning project, I expect that I will need to do multiple spins of boards. In the interest of maximizing flexibility, I’d like to design this system to be modular. I plan to build each of these stages as separate PCBs, with interconnects as makes sense. Right off the bat, I have concerns about the interface between the DAC and the Amplifier, since analog signals there will be susceptible to noise. How much of a problem this will be, I have no idea! I may end up having to build the DAC and Amplifier on the same PCB, but for starters I’ll build it and find out.

USB to I2S (USB2I2S)

The data has to come from somewhere, so I’ve chosen to start with USB as the transport layer. This seemed like the easiest way to get started, since I don’t want to have to think about an optical audio setup. USB has speeds that are fine for what I’m going to do. A quick Google search led me to the Silicon Labs' CP2615, which should support everything I need.

DAC

There are a number of DACs available, so I will have to look more deeply into what each offers. One interesting thing that I notice is that Texas Instruments' audio DACs appear to create an analog current signal, rather than the voltage I was expecting. A little bit of reading seems to indicate that this is actually how DACs work internally, and the ones I am familiar with have an internal current-to-voltage (I-V) conversion. However, in audio applications, a designer may want to tightly control this conversion, and so audio DACs leave that step to external circuitry.

As a first step, I’ve chosen not to do the external I-V conversion; I will start with a chip that does this internally, and when I am looking for improvements to make, I will remember this area.

Amplifier

At this stage, I have a real decision to make: what am I going to be driving. Part of me wants to drive some big speakers, just to see how good/bad I can make it sound. Unfortunately we live in a condominium unit and I doubt the neighbors would appreciate that! Also: driving bigger speakers requires more power than I feel like working with, especially since I’ve never designed a PCB for something at tens of watts, nevermind hundreds.

So I’ve chosen to aim to drive my headphones. I have a couple of pairs I can compare, and I ideally will use this project at my desk at work. I intend to make this DAC sound better than the average output of a laptop or a phone, so if I use it daily, it will allow me to identify areas to improve.

Summary

I’ve outlined the idea of what I’m after. Next, I will go through some of the steps I used for designing the USB to I2S stage, and learn a lesson about carefully double-checking the PCB routing.