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.

[参考译文] TAS5806MD:通过 I2C 设置 Biquad 效率

Guru**** 1828310 points
Other Parts Discussed in Thread: TAS5806MD, TAS5806M
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/audio-group/audio/f/audio-forum/1011883/tas5806md-set-biquad-coefficents-via-i2c

器件型号:TAS5806MD
主题中讨论的其他器件: TAS5806M

您好!

我尝试通过在 Cube IDE 中编程的 STM32设置 TAS5806MD 的 BQ 系数。对于某些测试、我尝试设置简单的低通。 问题是、它不会影响声音、因此信号不会被低通。 我无法确定如何使其正常工作。 我是否需要向 BQ_WR_CTRL1寄存器写入0x00? 我真的不知道。

我在这里的代码分步执行:

1) 1)上电、然后将0x02发送到 DEVICE_CTRL_2_register 以实现 HiZ 模式
2) 2)等待10ms
3)将系数转换为5.27格式(例如 、-1.98611414转换为4字节->第1字节:141  第2 字节:224  第3 字节:176  第4 字节: 214)
4) 4)转至第0x00页
5) 5)更改为 Book 0xAA
6) 6)转到第0x26页
7) 7)选择子地址(例如、对于右侧 BQ1 B0为0x54)
8)发送经预先计算的4个字节的系数(第一个字节:141  第二 个字节: 224  第三 个字节: 176  第四 个字节: 214)
9) 9)再次执行3)-8)针对剩余的4 BQ 系数。
9)  9)转到第0x00页
10) 10)更改为 Book 0x00
11) 11)将0x03发送到 DEVICE_CTRL_2_register 以进入播放模式

我是否遗漏了任何步骤? 5.27格式是否正确? 您能否为我提供一个示例伪代码或一个分步示例、说明如何正确设置 TAS5806MD DSP 的寄存器?  

此致、
塞韦林

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Severin、您好!

    请参阅此 E2E 帖子 https://e2e.ti.com/support/audio-group/audio/f/audio-forum/911062/ccs-tas5825m-we-need-software-source-code-of-the-ppc3-eq-module/3367549#3367549。 它适用于 TAS5825、但计算方法与 TAS58xx 器件类似。

    此致、

    Luis。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Luis、

    感谢您的回复! 我将检查连杆中提供的非接触是否与连杆中提供的非接触。
    同时、您能否 告诉我我是否需要设置  BQ_WR_CTRL1寄存器、并且 除系数的形式外、我的程序序列是否正确?

    此致、
    塞韦林

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Severin、您好!

    序列看起来正确。 您不需要更新该 BQ 寄存器、主要用于读取、以查看何时更新 Biquad。

    此致、

    Luis

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Luis、

    我在代码中检查了格式、它与您提供的链接中的格式不同。 我现在更新了代码、如下所示:

    int float_to_Q_format_int(float floating_Num, char format[]){
    	int q_num = 0;
    
    	if(strcmp(format,"1.31")==0){
    			q_num = round(floating_Num*pow(2,31));
    	}
    	else if(strcmp(format,"2.30")==0){
    			q_num = round(floating_Num*pow(2,30));
    	}
    	else if(strcmp(format,"5.27")==0){
    			q_num = round(floating_Num*pow(2,27));
    	}
    	else if(strcmp(format,"9.23")==0){
    			q_num = round(floating_Num*pow(2,23));
    	}
    
        //if float number is negative convert positive integer from above into negative twos compliment 
    	if (floating_Num < 0){
    		q_num = abs(q_num); //Magnitude of qnum
    		q_num = ~q_num; 	//bitwise inverting
    		q_num += 1; 		//adding +1 for negative twos compliment
    	}
    	return q_num;
    }
    
    //convert the int number into 4 single bytes
    uint8_t *int_to_4_bytes(int int_Num){
    	uint8_t *byte_Array = malloc(4);
    	byte_Array[0]= (int_Num & 0xff000000) >> 24; //msB --> index 0
    	byte_Array[1]= (int_Num & 0x00ff0000) >> 16;
    	byte_Array[2]= (int_Num & 0x0000ff00) >> 8;
    	byte_Array[3]= (int_Num & 0x000000ff); //lsB --> index 3
    	return byte_Array;
    }

    但仍然对输出没有影响。

    我在以下网站计算了 BQ 低通系数: https://www.earlevel.com/main/2013/10/13/biquad-calculator-v2/

    我的代码可能有什么问题?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Severin、您好!

    您是否能够读回该 biquad 中配置的值以确认其配置正确?

    此致、

    Luis

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Luis、

    是的、我已经读取了这些值、它们看起来是正确的。 现在、我还尝试为左侧通道设置第一个 BQ、突然两个通道上的输出都非常低。 这是我应用了归一化的系数:

                            //calculate the coefficients like in the Process Flow suggested: {b0,b1/2,b2,a1/(-2),a2/(-1)}           
    float BQ_1_values [5] = {0.0002616518014479815,0.000523303602895963/2,0.0002616518014479815,-1.9537212766076175/(-2),0.9547678838134095/(-1)};
    

    当我在右第一个双二阶上设置它们时、根本不会发生任何情况、但当我在左第一个双二阶上设置它们时、两个通道都只有极低的输出信号。  

    十进制的寄存器值为:

    Right 1st Biquad:
    b0: 0    0    137    46
    b1: 0    0    137    46
    b2 :0    0    137    46
    a1: 7    208    156    80
    a2: 248    92    162    168
    
    Left 1st Biquad:
    b0: 0    0    137    46
    b1: 0    0    137    46
    b2 :0    0    137    46
    a1: 7    208    156    80
    a2: 248    92    162    168

    有什么想法吗? 我计算的 BQ 系数是否错误? 此外、您能否让我访问适用于 PPC3的 TAS5806M EVM 应用?

    此致、
    塞韦林

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Severin、您好!

    是否可以从 TI.com 提交请求、然后我将启用对应用程序的访问

    迪伦

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    迪伦、您好!  

    感谢您的回复、我提交了一份请求。 但是、您能否告诉我这些系数是否直接从浮点转换为5.27 Q 格式? 我仍然有同样的问题、我找不到关于 Interent 的更多信息。

    如果能够正确设置效率的人能够帮助我、那将是非常好的。 期待获得任何帮助。

    此致、
    塞韦林

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Severin、您好!  

    我提供了对 TAS5806MD 软件的访问、请参阅均衡器选项卡中的系数来验证您的转换。  

    此致。

    Luis

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Luis、

    我现在检查了 PPC3中的值、它们看起来是相同的、因此我无法真正说明它不起作用的原因。 当我不进行 b0、B1/2、B2、A1/(-2)、A2/(-1)等预计算时、放大器输出一个白噪声、如信号、并且消耗的电流是它通常所消耗的电流的3倍。 如果我使用计算值设置寄存器、输出将变得非常安静。  
    PPC3不进行预凝、但它位于工艺流程图中、因此我现在该怎么办?


    为什么 PPC3在写入双二阶之前具有0x18 (标记为黄色)的宽边值?

    此致、
    塞韦林

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Severin、您好!

    您能否回读 Page0、Book0上的寄存器0x66。 此外、 您还可以在写入双二阶之前将 w 58 66 86添加到写入序列中。

    0x18是第一个 biquad 的地址起始地址、因为它是多字节写入、您可以看到 i2c 写入的格式。

    此致、

    Luis

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Luis、

    我终于成功地设置了寄存器。 可以很好地听到低通。 我向阅读此内容的每个人发布我的解决方案:

    以下是打开电源(PVDD、DVDD)后开始的序列

    0) 0)将 PDN 设置为高电平、等待10ms、启动 I2S、启动 I2C
    1) w 58 03 02 (设为 HiZ)
    2) w 58 66 8e (我使用了8e、以便左通道和右通道可以具有单独的 BQ 系数)
    3) 3)等待10ms
    4) w 58 00 00 (转至第00页)
    5) w 58 7f aa (有关 BQ 滤波器效率、请转至预订 AA)
    6) w 58 00 26 (转至子地址26以获取右侧通道的第一个 BQ 系数)  
    7) w 58 54 xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx  xx xx xx xx xx xx ( 将5个 BQ 系数的所有20个字节写入 第一个系数的子地址->右侧通道的 B0)
    8)  w 58 00 00 (转至第00页)
    9) w 58 7f 00  (返回到书籍00、以设置数据表中列出的基本寄存器)
    10) w 58 03 03 03 (设置为播放模式)

    但愿这对您有所帮助。 我的错误是、我忘记写入2)  、而且我没有在一个过程中写入7)(在我传输了一个 BQ 系数的4个字节之后、出现了意外。 我写了下一个副本。 但这是错误的、因为只需写入第一个 BQ 系数的子地址一次。 然后发送所有 BQ 系数。)

    现在可以关闭此主题。

    此致、

    塞韦林