TAS5711的DRC调节
DRC动态范围控制这个是调节音频的输出幅度吗?还有就是TAS57XX GDE在TI的官网上的下载地址是什么,找了好久没找到下载点。。。麻烦TI的工程师指点江山,不胜感激!
你好:
1.DRC可以设置当输入达到一个门限的时候,改变输入的幅值,同时信号不失真。例如,我们用来做压缩。下图就是输入信号一直增大,当增大到门限值时,就被压缩为某一固定的值。这个就是DRC应用的典型范例。
更多信息:
1)请阅读app note7382.TASS57xx DRC.pdf
2)关于DRC的帖子:http://www.deyisupport.com/question_answer/analog/audio/f/42/p/62267/139770.aspx#139770
2.TAS57X1 GDE下载地址:http://www.ti.com/tool/tas5711phpevm
Hello Flora,
感谢你的解答,还有一事,我现在把5711配置为2.1 BD MODE,在写寄存器之前把0X05寄存器写0X40 SHUTDOWN,
然后下面采用一结构体数组的形式,初始化5711的相关寄存器,最后再把0X05寄存器写0X0,在此过程后,开机时会有碰的一声,
如果不写0X05寄存器进行SHUTDOWN的话,似乎开机没有碰的一声,以下是我初始化寄存器的表值,麻烦你给看看有什么
问题没有?
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
code TAS5711_REGMAP DrvTas5711InitTbl1[] = { // Addr Count DataArrary //wait 50ms here to let part acquiring lock //01 (Below) DRC energy time(2ms) {0x3A, 0x08, {0x00, 0x01, 0x53,0x8F, 0x00, 0x7D, 0x2F ,0xD2}}, //01 (Below) DRC attack time(1ms) {0x3B, 0x08, {0x00, 0x02, 0xA3, 0x9A, 0x00, 0x7D, 0x2F, 0xD2}}, //01 (Below) DRC decay time(100ms) {0x3C, 0x08, {0x00, 0x00, 0x06, 0xD3, 0x00, 0x7F, 0xF9, 0x2B}}, #if 0 /* chenyan marked*/ //01 (Below) DRC threshold 1(-9.5dB,8.8W,THD+N=8.747%) {0x40, 0x04, {0xFD, 0xB5, 0x36, 0xF2}}, #else {0x40, 0x04, {0xFD, 0xA2, 0x14, 0x90}}, #endif /* chenyan marked */ //01 (Below) DRC compression ratio(100) {0x41, 0x04, {0x03, 0x81, 0x47, 0xAF}}, //01 (Below) DRC offset(0) {0x42, 0x04, {0x00, 0x08, 0x42, 0x10}}, //01 (Below) DRC control {0x46, 0x04, {0x00, 0x00, 0x00, 0x01}}, #if 0 /* chenyan marked*/ //01 (Below) Bank switch control (no automatic bank switching) {0x50, 0x04, {0x0F, 0x70, 0x80, 0x00}}, #else //Auto Bank switch. {0x50, 0x04, {0x0F, 0x70, 0x80, 0x04}}, #endif /* chenyan marked */ #if 1 /* chenyan marked*/ //01 (Below) Input Mux Register(BD mode) {0x20, 0x04, {0x00, 0x89, 0x77, 0x72}}, #else //01 (Below) Input Mux Register(AD mode) {0x20, 0x04, {0x00, 0x01, 0x77, 0x72}}, #endif /* chenyan marked */ #if 0 /* chenyan marked*/ //01 (Below) PWM Output MUX Register (Note: Writes to this register affect Inter-Channel Delay) {0x25, 0x04, {0x01, 0x02, 0x13, 0x45}}, #else {0x25, 0x04, {0x01, 0x01, 0x23, 0x45}}, #endif /* chenyan marked */ #if 0 /* chenyan marked*/ {0x07, 0x01, {0x10}}, //Master Volume Register (0xFF = Mute) #else {0x07, 0x01, {0x1A}}, //Master Volume Register (0xFF = Mute) #endif /* chenyan marked */ {0x08, 0x01, {0x30}}, //Channel 1 Volume {0x09, 0x01, {0x30}}, //Channel 2 Volume {0x0A, 0x01, {0x30}}, //Channel 3 Volume {0x06, 0x01, {0x00}}, //Soft Mute Register (mute off) {0x02, 0x01, {0x00}}, //error status register /write 0 to clear the register. {0x03, 0x01, {0xA0}}, //System Control Register 1(opt.) {0x04, 0x01, {0x05}}, //Serial Data Interface Register //{0x05, 0x01, {0x8C}}, //System Control Register 2(exit hard mute)//chenyan 2.1SE+BTL mode {0x0E, 0x01, {0x91}}, //Micro Register(opt.) {0x10, 0x01, {0x02}}, //Modulation Limit(opt.) {0x19, 0x01, {0x30}}, //PWM channels are all active.//chenyan add for 5711. {0x1A, 0x01, {0x0A}}, //Split Capacitor Charge Period(opt.)//chenyan modified 0x0A to default value 0x0F. {0x1C, 0x01, {0x02}}, //Back-end Error Register(opt.) #if 1 /* chenyan marked*/ //BD mode default value. {0x11, 0x01, {0xB8}}, //Inter-Channel Delay Channel 1 {0x12, 0x01, {0x60}}, //Inter-Channel Delay Channel 2 {0x13, 0x01, {0xA0}}, //Inter-Channel Delay Channel 3 {0x14, 0x01, {0x48}}, //Inter-Channel Delay Channel 4 #else //AD mode default value. {0x11, 0x01, {0xAC}}, //Inter-Channel Delay Channel 1 {0x12, 0x01, {0x54}}, //Inter-Channel Delay Channel 2 {0x13, 0x01, {0xAC}}, //Inter-Channel Delay Channel 3 {0x14, 0x01, {0x54}}, //Inter-Channel Delay Channel 4 #endif /* chenyan marked */ {__ENDTBL__, 0x00, {0x00}}, };
另外还有一个问题,我现在电路接的是2.1MODE,也就是OUTA接一8欧10W的SPEAKER,OUTB接一个8欧10W的SPEAKER,OUTC和OUTD之间接一SPEAKER,但我们暂时没接这个负载,也就是现在只有OUTA,OUTB接了SPEAKER,然后PVDD供电用的是12V,按现在这种情况,我具体是应该配置成AD,还是BD MODE,另外根据芯片手册的说明,SSTIMER处的电容我去掉了
你好:
2.1MODE请配置成AD mode.
你好:
开关机的时候确实会造成POP,这个帖子里提到了POP产生的原因,你可以看一下,虽然是器件不同,但是产生的原因是相同的,请参考。
http://www.deyisupport.com/question_answer/analog/audio/f/42/p/63428/143921.aspx#143921
初始化,请参照我们datasheet中提到的。
Hello Flora,
我们现在的TV板子在上电时是先初始化了一堆硬件,包含IIC,IIS等,然后是等到播放开机音乐之前才开始初始化TAS5711,也就是说并不是上电时产生的POP音,而是在初始化5711,即在播放开机音乐之前会有扑的一声,此时上电已经稳定一段时间了,有可能是你提到的IIS输出到5711信号不匹配造成的,但
有什么办法可以解决呢,我们IIS到5711的信号线上只串有一33R的电阻和一下接到地的22PF的贴片电容。。。
Hello Flora,
我们现在的TV板子在上电时是先初始化了一堆硬件,包含IIC,IIS等,然后是等到播放开机音乐之前才开始初始化TAS5711,也就是说并不是上电时产生的POP音,而是在初始化5711,即在播放开机音乐之前会有扑的一声,此时上电已经稳定一段时间了,有可能是你提到的IIS输出到5711信号不匹配造成的,但
有什么办法可以解决呢,我们IIS到5711的信号线上只串有一33R的电阻和一下接到地的22PF的贴片电容。。。
还有另外一个问题,上次问过TI的工程师,我使用0X05寄存器写0X40SHUTDOWN之后,必须要写0X0才能恢复声音输出,而只把D6位写0无法恢复声音输出,
上次你们的工程师说在你们的EVM板上试只写D6是可以恢复声音的,请问这是什么原因造成的,另外是PDN引脚拉低再拉高,需要重新复位5711并重写寄存器
才能正常输出,这些是否跟芯片型号有关系?5711是否有不同后缀的型号呢?
你好:
shutdown的时候是也会出现Clik或POP声的。我的建议是先mute,在shutdown。
I2S 上的电阻和电容,通常是用来滤除PWM波形上的尖峰,不会造成开机的POP。
Hello Flora,
你提到的先MUTE,再SHUTDOWN中MUTE是写0X06寄存器软件MUTE,还是设置主音量为0,另外我按你们EVM板的一个示例代码进行配置寄存器后,现在整个
板子开机没声了,我现在设置为2.1 AD MODE,SSTIMER处的电容是否要焊上呢,芯片手册中说在AD MODE下要有一2.2NF的电容,但又提到说在2.1MODE下需
要悬容SSTIMER脚,这两处是否有矛盾?
你好:
我说的mute是0x06寄存器。你看到的EVM示例代码,能否指明是哪一个文档,哪一页?
关于shutdown的POP,还可参考datasheet,page38,figure57的初始化顺序,通过修改0x1A寄存器修改start 和stop的时间,或者是enable 0x05寄存器的mid-Z ramp。
SSTIMER的电容,无论接与否都不会影响芯片的功能,文档推荐的是2.1mode不接电容,接了也不会有影响,只是省cost。
Hello Flora,
关于PoP 的问题,现在这种情况,我如果整机断电的话重启,就会在初始化5711之前出现碰的一声,如果是遥控关机,芯片的供电还存在,再次通过遥控开机,此时POP声很小,几乎听不到,我在配置相关寄存器之前首先实现soft mute(0x06寄存器写0X07),然后SHUT DOWN(0X05寄存器),然后再通过循环的方式写其它寄存器,最后EXIT SHUTDOWN,延时700MS,最后soft unmute,5711初始化完了之后,主程序开始加载开机音乐,这个POP声就存在开机音乐播放之前,在这个POP之前CPU初始化其它的设备也有一段时间了,不考虑上电的POP声,在初始化5711之前我拉低PDN,直到配置5711时才拉高PDN引脚。
你好:
前面的操作顺序和现象都很合理。后面一部分内容,你是想说开机播放音乐的时候有POP声,请问你说的开机是什么操作?音乐加载?
how could I get TAS5711_MCU_EVM 示例代码? TKS! 需要买模块吗?
你好:
我们没有提供MCU的示例代码,之前的帖子是用户自己写的代码。
当然我们会有相应的工具帮助客户开发配置,需要在官网上购买我们EVM模块,下载GUI软件,按用户指南提示安装使用即可。
http://www.ti.com/tool/tas5711phpevm
Dear Flora :
我并不是需要MUC的示例代码! 我只是想要TAS5717的初始化示例程序!只需要TAS5717初始化的代码部分, 好像是购买模块是会有的么?
因为我的项目初始化TAS5717后没有输出!IIC是可工作的!问题可能出在我的TAS5717配置中!
简单配置出声的代码如下:
1. 先回读一下0x00寄存器是否为0x6C,确认IIC通信无问题。
2. 写0x1B寄存器为0x00,延时至少50ms等待,回读应为0xC0。
3. 写0x07寄存器为0x00-C0,设置主音量为0dB。
4. 写0x05寄存器为0x00,退出关断模式。
Dear Jacky :
我配置了一下,回读0x00 为0x6c,IIC 通讯无问题!
写0x1B 寄存器为0x00,延时后回读为130,即0x82;
不正确?备注一下,我的芯片是TAS5717;不是TAS5711;
Dear Jacky & ALL TI EE
如下为我的初始化代码!REST 与PDN 并在一起!
现在IIC通讯没问题,读写正常,就是OUT_ABCD 没有输出!没有输出6V;
希望您能帮我解决问题,非常感谢!
void TAS5717_Init(void) { //SET_PDN_EN; Set_PDN_Out; CLR_PDN_EN; //上电复位;RES与PDN引脚并在一起了; delay_ms(1); SET_PDN_EN;// 拉高; //delay_us(500); delay_ms(14); //0x1b trim oscillator TMP_DATA[0] = 0x00; Send5717_Data(0x1b, (unsigned char *)TMP_DATA, 1); delay_ms(50); mm_TEST=I2C_ReadByte(0x1b); //回读寄存器为130,即0x82 //0x00 时钟控制寄存器-48K/256FS TMP_DATA[0] = 0x6c; Send5717_Data(0x00, (unsigned char *)TMP_DATA, 1); //0x01 状态寄存器 TMP_DATA[0] = 0x00; Send5717_Data(0x01, (unsigned char *)TMP_DATA, 1); //0x02 报错寄存器 TMP_DATA[0] = 0x00; Send5717_Data(0x02, (unsigned char *)TMP_DATA, 1); //0x03 系统控制寄存器1-出错时软复位,使能高通; TMP_DATA[0] = 0x90; Send5717_Data(0x03, (unsigned char *)TMP_DATA, 1); //0x04 数字音频接口配置 I2S、24bit; TMP_DATA[0] = 0x05; Send5717_Data(0x04, (unsigned char *)TMP_DATA, 1); //0x05 系统控制寄存器2-初始设置为扬声器输出; TMP_DATA[0] = 0x03; Send5717_Data(0x05, (unsigned char *)TMP_DATA, 1); //0x06 解除静音 TMP_DATA[0] = 0x00; Send5717_Data(0x06, (unsigned char *)TMP_DATA, 1); //0x10 调制指数 TMP_DATA[0] = 0x07; Send5717_Data(0x10, (unsigned char *)TMP_DATA, 1); //0x11 CH1 AD MODE TMP_DATA[0] = 0xAC; Send5717_Data(0x11, (unsigned char *)TMP_DATA, 1); //0x12 CH 2 AD MODE TMP_DATA[0] = 0x54; Send5717_Data(0x12, (unsigned char *)TMP_DATA, 1); //0x13 AD MODE TMP_DATA[0] = 0xAC; Send5717_Data(0x13, (unsigned char *)TMP_DATA, 1); //0x14 AD MODE TMP_DATA[0] = 0x54; Send5717_Data(0x14, (unsigned char *)TMP_DATA, 1); //0x19 enable pwm TMP_DATA[0] = 0x30; Send5717_Data(0x19, (unsigned char *)TMP_DATA, 1); //0x20 输入mix配置 TMP_DATA[0] = 0x00; TMP_DATA[1] = 0x01; TMP_DATA[2] = 0x77; TMP_DATA[3] = 0x72; Send5717_Data(0x20, (unsigned char *)TMP_DATA, 4); //0x21 输入mux配置 //TMP_DATA[0] = 0x00; //TMP_DATA[1] = 0x00; //TMP_DATA[2] = 0x43; //TMP_DATA[3] = 0x03; //Send5717_Data(0x21, (unsigned char *)TMP_DATA, 4); //0x25 PWM输出控制; TMP_DATA[0] = 0x01; //ch1-OUT_A TMP_DATA[1] = 0x02; //ch2-OUT_B TMP_DATA[2] = 0x13; //ch1-OUT_A TMP_DATA[3] = 0x45; //ch2-OUT_B Send5717_Data(0x25, (unsigned char *)TMP_DATA, 4); //0x1a start&stop period TMP_DATA[0] = 0x14; Send5717_Data(0x1a, (unsigned char *)TMP_DATA, 1); //0x07 设置扬声器初始音量为0db TMP_DATA[0] = 0x00; TMP_DATA[1] = 0xc0; Send5717_Data(0x07, (unsigned char *)TMP_DATA, 2); //0x0b 设置耳机初始音量为0db TMP_DATA[0] = 0x00; TMP_DATA[1] = 0xc0; Send5717_Data(0x0b, (unsigned char *)TMP_DATA, 2); //0x46 DRC 控制 TMP_DATA[0] = 0x00; //ch1-OUT_A TMP_DATA[1] = 0x00; //ch2-OUT_B TMP_DATA[2] = 0x00; //ch1-OUT_A TMP_DATA[3] = 0x23; //ch2-OUT_B Send5717_Data(0x46, (unsigned char *)TMP_DATA, 4); //0x72,0x73 ch1L/CH2R 通道设置 Send5717_Data(0x72, (unsigned char *)INLINE_UN_EN, 4); Send5717_Data(0x73, (unsigned char *)INLINE_EN, 4); //0x76,0x77 ch1L/CH2R 通道设置 Send5717_Data(0x76, (unsigned char *)INLINE_UN_EN, 4); Send5717_Data(0x77, (unsigned char *)INLINE_EN, 4); //0x50 EQ控制,默认初始关闭,左右同步; TMP_DATA[0] = 0x00; // TMP_DATA[1] = 0x00; // TMP_DATA[2] = 0x00; // TMP_DATA[3] = 0x90; // Send5717_Data(0x50, (unsigned char *)TMP_DATA, 4); //0x71,0x70 通道设置 Send5717_Data(0x71, (unsigned char *)INLINE_UN_EN, 4); Send5717_Data(0x70, (unsigned char *)INLINE_EN, 4); //0x75,0x74 通道设置 Send5717_Data(0x75, (unsigned char *)INLINE_UN_EN, 4); Send5717_Data(0x74, (unsigned char *)INLINE_EN, 4); //0x51,0x52 ch1、ch2 OUTPUT 通道设置 Send5717_Data(0x51, (unsigned char *)OUT_EN, 8); Send5717_Data(0x52, (unsigned char *)OUT_EN, 8); //0x19 enable pwm //TMP_DATA[0] = 0x30; //Send5717_Data(0x19, (unsigned char *)TMP_DATA, 1); //drc1 Send5717_Data(0x3b, (unsigned char *)DRC1_ao, 8); Send5717_Data(0x3c, (unsigned char *)DRC1_ar, 8); Send5717_Data(0x40, (unsigned char *)DRC1_at, 8); //drc2 Send5717_Data(0x3e, (unsigned char *)DRC1_ao, 8); Send5717_Data(0x3f, (unsigned char *)DRC1_ar, 8); Send5717_Data(0x43, (unsigned char *)DRC1_at, 8); //58595a5b Send5717_Data(0x58, (unsigned char *)DRC_band1, 8); Send5717_Data(0x59, (unsigned char *)DRC_band1, 8); //58595a5b Send5717_Data(0x5a, (unsigned char *)DRC_band2, 8); Send5717_Data(0x5b, (unsigned char *)DRC_band2, 8); //eq ch12 Send5717_Data(0x26, (unsigned char *)eq_band1, 8); Send5717_Data(0x30, (unsigned char *)eq_band1, 8); Send5717_Data(0x28, (unsigned char *)eq_band1, 8); Send5717_Data(0x32, (unsigned char *)eq_band1, 8); }
你好:
请问一下,有没有参照Jacky给出的顺序检查那几个相关的寄存器?
1.0x07,0x08,0x09号寄存器音量控制有没有操作?这个要解mute的。
2.还有0x05寄存器要推出shutdown。
3.读一下0x02寄存器,看有没有报error。
4.正常情况下,即使没有输出,量电感前,也就是L201/L202左边的引脚,应该是50%占空比的方波。你看下你的是不是?
Dear flora , TAS5717已经有输出了!问题出在需要在5717复位后延时100ms才写入数据即可!、
TKS!
你好,
感谢你的分享,刚刚看了一下datasheet中关于reset后的延时,确实有一个相关描述:
谢谢你的分享!
Best Regards,
Flora wang
Dear Flora :
只是互相交流学习而已,我能再问您个问题吗?
首先是我TAS5717上电过程中耳机和扬声器能切换正确,耳机能出声!扬声器也能出声,即上电过程中对HP_SD有个判断,然后进行切换;
但是在工作过程中(即保持有电),拔插耳机就扬声器耳机都没有出声音;使用了调试(如图灯亮灭来判断),发现拔插过程都能进入到相应的子程序里面,子程序里面只进行了耳机和扬声器切换的寄存器,即是如下程序;
if(Read_HP_CON_Pin!=0) //判断是否插入耳机
{
SET_LEDG_EN; //灯灭
TMP_DATA[0] = 0x13;
Send5717_Data(0x05, (unsigned char *)TMP_DATA, 1);
}
else
{
CLR_LEDG_EN; //灯亮
TMP_DATA[0] = 0x03;
Send5717_Data(0x05, (unsigned char *)TMP_DATA, 1);
delay_ms(100);
}
所以我的问题是在我机子正常工作下切换耳机扬声器还需要配置哪些寄存器,除了0X05,或者看我的程序是否有问题?谢谢!
你好:
0x05寄存器,还有D3位需要注意:
你的D3=0,意味着SP模式下,0x08/0x09要给SP调音量,SP才能发声;0x0c要给HP调音量,HP才能发声。
你试一下,切换的时候把这两个音量调一下,看能否发声。
Dear Flora :
由于这几天有事并没有及时回复你,非常抱歉!请见谅!
由于我的项目设置了开关控制,我只设置了MASTER的音量,,在按下按键的时候如果耳机已经插入是可以出声的,证明我的耳机是可以发声的,但是在工作过程中如果拔出耳机或者插入耳机都无法出声,我试了下你的建议还是无法出声;
之前粘出的程序是在工作过程中检测是否插入耳机的程序,现在我的问题是上电过程中检测是可以出声,但是工作过程中切换则不出声;所以会是什么问题!请帮忙解答!非常感谢!
你好:
请关注我上贴中提到的寄存器进行配置,并做检查。切换与这个寄存器的配置相关。