InternetRadio, rev. 4

Revision 4: updates and fixes

Two assembled revision 3 boards were used for almost a year: one was a test version, used to develop the software and to test hardware modifications, and the other one was a “production” version, built into a nice case, and used to actually listen to radio.

Generally both worked very well, but along the way a bunch of major and minor issues cropped up:

  • Noise and hissing. More specifically, it seemed like the WiFi stack’s power draw fluctuations were audible in the speaker.

  • Pops in the speaker when turning the radio on and off.

  • Muffled sound. Generally the sound was fairly OK, but it wasn’t very clear.

  • Limited maximum volume. It was OK for daily use, but not enough to fill a larger room.

  • Lots of crossing wires in the setup. This is not a functional issue, but when you assemble and disassemble a setup fairly frequently, this becomes annoying. Some simplification here would be nice.

After a year, enough points were noted (and researched) to warrant the time investment of creating and ordering a new board revision and the required components:

  • Smaller board
    The previous board measured 11cm by 9.5cm. This puts it outside of the 10cm by 10cm limit for my board house, which made it more expensive to order the boards. There was enough free space on the board to make it fit within the 10cm by 10cm limit.

  • 3.3V power circuit redesign
    On the rev. 3 PCB, the 3.3V voltage regulator (an MCP1602-330I/MS) takes 5V input from the 5V stage, which means that the 3.3V is generated by two buck regulators in series. I’m not sure this is a good idea, and it seems better for isolation of the circuits that the two regulators are hooked up directly to the input power.
    So the MCP is replaced by an LMR16006Y, which can accept the higher input voltage from the battery back directly (7.2V-9V).

  • 47pF cap on SDI to DAC
    This is actually something that I already knew, but forgot on the rev. 3 PCB: the SDI line from the MCU to the DAC is noisy, and requires a small capacitor to clean up the noise. (See the note on page Revision 1: first real PCB)

  • Star grounding
    In the rev. 3 PCB, no real attention was paid to how the grounds for each block (MCU, screen, DAC, amp) were connected. In this revision, we attempt to improve on that by having separate ground planes per component, and connecting them in a central point.

  • Addition of a loudness circuit
    The sound that is produced when the MCP4921 output is fed to the MAX4295 is pretty muffled. At higher volumes, it sounds better. It turns out that when listening to audio at low volumes, the midtones appear stronger than the low and high tones, resulting in a muffled sound. This can be improved by reducing the midtones a bit. A loudness circuit accomplishes this. I did an experiment with this loudness circuit:
    This circuit reduces the overall sound level; to compensate this, the amplifier needs to be configured for more gain. The default setting is a gain of 1; increasing this to ~7 results in a similar maximum volume, with much clearer sound.

  • amplifier enable permanently wired
    In rev. 3, this was experimental, in the sense that there was a jumper to connect the amplifier’s ~SHDN line to the launchpad, or to +5V to have it always on.
    After adding the enable signal to the software, it turns out to work will, so we can remove the jumper from the PCB.

  • 3.3V and GND wired to launchpad pins
    In rev. 3, the launchpad was powered by a cable to the battery power inputs of the board.
    In this revision, power is routed to the boosterpack headers, so that the external cable is not needed any more.

    Note: remove jumper J13 from the launchpad, to disconnect the launchpad’s on-board LDO from the 3.3V supply from the boosterpack headers.

  • Switched power and on/off connectors
    This makes the on/off connector sit next to the volume connector, which makes sense because both functionalities are provided using a single potentiometer with built-in on/off switch.

  • Component values on silkscreen
    By default, KiCad places component references (“R5”) on the silkscreen, but component values are placed on a different layer. The values were moved to the silkscreen as well, to make hand-assembly of the board slightly easier.