Line Array MCU

The microcontroller (MCU) sits between the DSP and the outside world. It can accept commands via Bluetooth (BLE) or from an IR remote control, a serial terminal, or other devices that interface to a user. In this design, it converts the user inputs to changes in the ADAU1466 parameter RAM. Changing the parameter RAM is how the MCU controls the volume, changes crossover frequencies, provides equalization, or controls line array curvature and volume shading.

None of this user interface control is necessary if we don’t need to experiment with different crossover slopes and frequencies, or if we don’t need to control the volume using the DSP (there are other places to change the volume). If we are done experimenting and don’t ever need to change the DSP, the ADAU1466 can be “hard-coded” using SigmaStudio, and we could remove the MCU. However, it’s nice to have that flexibility of experimenting with curvature, volume shading, crossover types, etc., even if you are fully satisfied with the sound. The MCU adds a lot of complexity, as there is a large amount of software that can be difficult to write, debug and maintain, but that complexity comes with a high enough reward that I have always viewed the MCU as essential to this project.

Another reason to include the MCU in the design is that it is useful for programming and monitoring the SSM3582 amplifiers. The ADAU1466 only has 4 serial output pins, so we need to output multiple channels on each pin using a time-division multiplexed format. The MCU programs the SSM3582 registers that put the amplifier in TDM mode and define which channel to extract. It would also be possible to program the TDM channels using the SSM3582 stand-alone mode and the address pins (more on the later), so it is possible to “hard-code” the channel assignment and remove the MCU. But once again, the flexibility to assign the channels is a nice bonus, and having the MCU allows using the extensive limiting and soft compression processing available in the chip. We can also monitor the temperature of the amplifier and check for errors.

ESP32

The ESP32-C3 MCU has a built in Bluetooth and WiFi radio, along with mature networking libraries. The ESP32-C3 XIAO has a nice small 14-pin form-factor, and it sells for $5 online. The line array only requires an SPI port to communicate with the ADAU1466, an I2C port for the amp chips, and 2 more pins for I/O, so the 11 signal pins on this device are adequate. Espressif has done a remarkable job of supporting the Arduino Integrated Development Environment (IDE), so overall it’s a good choice. There are other good MCU alternatives, but there aren’t any compelling reasons to use any other MCU for this application.

The only “issue” I have found with the ESP32 is that it generates a lot of noise on the power and returning ground lines, so PCB layout is critical. On just about every speaker where I’ve used this MCU, I have had to reroute the ground return or else put the board on its own isolated power supply. I’ve had noise issues where there are analog circuits such as DAC’s, such but also with class D amps with digital inputs. That’s a challenge with using a Bluetooth radio as a control interface. A good rule to follow is to always use an isolated power supply, such as a small DC-DC converter, to power the MCU, and use a single-point “star” grounding scheme where possible.