This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[TLV320DAC3100] How to remove POP-NOISE for Class-D Speaker(not Headphone)?

Other Parts Discussed in Thread: TLV320DAC3100

Hello guys,

I have a problem with TLV320DAC3100.

I'm trying to use Class-D Speaker Amplifier.

When I set the register Page1 / Register 32 to "Class-D power down",

I can hear some popping from the speaker.

I couldn't find any de-pop settings for Class-D speaker but Headphone.

The example script in the datasheet was not helpful for me.

Please let me know if anything I'm missing for this.

Below are my current settings.

 Audio_I2C_Write(0x00, 0x00); //Program Page 0 Registers
 Audio_I2C_Write(0x01, 0x01); //Page 0 : Software Reset 
 Audio_I2C_Write(0x0B, 0x81); //Page 0 : NDAC divider = 1, Powered up
 Audio_I2C_Write(0x0C, 0x82); //Page 0 : NDAC divider = 2, Powered up
 Audio_I2C_Write(0x0D, 0x00); //Page 0 : DOSR = 0
 Audio_I2C_Write(0x1B, 0x00); //Page 0 : Set I2S slave mode
 Audio_I2C_Write(0x3F, 0xFD); //Page 0 : DAC is powered up.
 Audio_I2C_Write(0x40, 0x00); //Page 0 : Unmute DAC left and right channels
 Audio_I2C_Write(0x41, 0x0C); //Page 0 : DAC Left gain = 6dBm
 Audio_I2C_Write(0x42, 0x0C); //Page 0 : DAC Right gain = 6dBm
 Audio_I2C_Write(0x74, 0x00); //Page 0 : DAC volume control register */

 Audio_I2C_Write(0x00, 0x01); //Program Page 1 Registers
 Audio_I2C_Write(0x23, 0x44); //Page 1 : LDAC, RDAC routed to the mixer amplifier

void Audio_Set_Volume(uint8_t Audio_Volume)
{
 uint8_t Volume_Control;

 switch(Audio_Volume)
 {
  case 0 : Volume_Control = 0x7F; break; //Volume 0(MIN)
  case 1 : Volume_Control = 0x20; break; //Volume 1
  case 2 : Volume_Control = 0x18; break; //Volume 2
  case 3 : Volume_Control = 0x10; break; //Volume 3
  case 4 : Volume_Control = 0x08; break; //Volume 4
  case 5 : Volume_Control = 0x00; break; //Volume 5(MAX)
  default : return;
 }

 Audio_I2C_Write(0x00, 0x01);     //Program Page 1 Registers
 Audio_I2C_Write(0x26, Volume_Control + 0x80); //Left Speaker analogue volume
}

void Audio_Mute(uint8_t Audio_Mute_Mode)

 if(Audio_Mute_Mode == ENABLE)
 {
  Audio_Set_Volume(0);
  
  Audio_I2C_Write(0x00, 0x01); //Program Page 1 Registers
  Audio_I2C_Write(0x2A, 0x00); //Page 1 : Mute class -D, Set gain = 6dB
  Audio_I2C_Write(0x20, 0x06); //Page 1 : Power down class -D

 }
 else
 {
  Audio_Set_Volume(Set_Data.volume);
  
  Audio_I2C_Write(0x00, 0x01); //Program Page 1 Registers
  Audio_I2C_Write(0x2A, 0x04); //Page 1 : Unmute class -D, Set gain = 6dB
  Audio_I2C_Write(0x20, 0x86); //Page 1 : Power up unmute class -D
 }
}

Waiting for your reply.

Thank you!