I recently purchased and set up the "Stereo 20W Class D Audio Amplifier - MAX9744" this weekend and used the recommended 20w speakers to test everything out.
Music plays back fine, the amp itself works great. However, one of the two speakers has a very noticeable and unexpected vibration/sound when playing back music with any bass to it. To be clear, it's not a constant electrical buzz, it's only when low bass tones play, there is an audible vibration that increases the more the volume is applied. It kicks in subtly around volume level 40-45 (volume levels from the Adafruit tutorial for the amp, using digital control). I'm using my iPhone for source music with the volume about half way, but also tried using an alternate device (old MP3 player) with the same result.
I figured maybe the speakers didn't handle bass very well, however the second of the two speakers plays flawlessly at the same volume levels. It even plays fine when the volume is increased to 50-60. At these levels the vibration/sound is clearly coming from the other speaker.
I have tried mounting the speakers in a speaker box, letting them sit unmounted on my desk and holding the problem-speaker in my hand. I have tried switching the left/right outputs. I have tried powering the amp with 9v and 12v power sources. The Arduino is powered separately by USB. The vibration/sound can still be heard in all instances in the same speaker.
Should I request a replacement? Thanks for any info you can provide. Let me know if you need any other information.
Class D Amp
https://www.adafruit.com/product/1752
Speakers
https://www.adafruit.com/products/1732
Tutorial (where I'm using the code from)
https://learn.adafruit.com/adafruit-20w ... al-control
Code: Select all
#include <Wire.h>
// 0x4B is the default i2c address
#define MAX9744_I2CADDR 0x4B
// We'll track the volume level in this variable.
int8_t thevol = 31;
void setup() {
Serial.begin(9600);
Serial.println("MAX9744 demo");
Wire.begin();
if (! setvolume(thevol)) {
Serial.println("Failed to set volume, MAX9744 not found!");
while (1);
}
}
// Setting the volume is very simple! Just write the 6-bit
// volume to the i2c bus. That's it!
boolean setvolume(int8_t v) {
// cant be higher than 63 or lower than 0
if (v > 63) v = 63;
if (v < 0) v = 0;
Serial.print("Setting volume to ");
Serial.println(v);
Wire.beginTransmission(MAX9744_I2CADDR);
Wire.write(v);
if (Wire.endTransmission() == 0)
return true;
else
return false;
}
// Read in + and - characters to set the volume.
void loop() {
if (! Serial.available()) return;
// read a character from serial console
char c = Serial.read();
// increase
if (c == '+') {
thevol++;
}
// decrease
else if (c == '-') {
thevol--;
}
// ignore anything else
else
return;
if (thevol > 63) thevol = 63;
if (thevol < 0) thevol = 0;
setvolume(thevol);
}