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.

[参考译文] TLV320ADC5140:PurePath 滤波器系数编程

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

https://e2e.ti.com/support/audio-group/audio/f/audio-forum/1200903/tlv320adc5140-purepath-filter-coefficients-programming

器件型号:TLV320ADC5140

当使用 PurePath PPC3为8Hz 高通滤波器生成高通滤波器系数时、PurePath 将生成带或不带跳过默认值的系数:

对于转储的解释、我们使用来自旧 e2e 线程的以下文本:

对于突发命令、其工作方式如下:

  • 首先、您有 CFG_META_BURST "是的 组件 ,旁边的值是 寄存器的数量 这两个位

  • 在该命令之后、第一对值是 偏移 或起始寄存器地址,旁边的值是突发的第一个值。

  • 后续对是要写入寄存器的所有值、都是连续的寄存器地址

  • 请注意、如果最后一对未完成、例如只剩一个要写入的寄存器、那么该对始终会在0x00处完成

无默认值:

//高通滤波器系数

{ CFG_meta_burst,5 },

{0x49、0xee}、

{ 0xda,0x08 },

{ 0x80、0x00 }、

{ CFG_meta_burst,5 },

{ 0x4d,0x11 },

{ 0x25、0xf8 },

{ 0x7f,0x00 },

{ CFG_meta_burst,4 },

{ 0x51、0xdd },

{ 0xb4,0x11 },

使用默认值:

//高通滤波器系数

{ CFG_meta_burst,5 },

{0x48、0x7f}、

{ 0xee,0xda },

{0x08、0x00}、

{ CFG_meta_burst,5 },

{ 0x4c、0x80 },

{ 0x11、0x25 },

{ 0xf8、0x00 }、

{ CFG_meta_burst,5 },

{ 0x50、0x7F },

{ 0xdd,0xb4 },

{ 0x11、0x00 }、

{ CFG_meta_burst,5 },

{ 0x54、0x00 },

{ 0x00、0x00 }、

{ 0x00、0x00 }、

现在很明显、地址0x48、0x4C 和0x50处的值应包含默认值。

0x48:0x7f

0x4C:0x80

0x50:7F

但根据 TLV320ADC 数据表、表133的默认值为:

0x48:0x7f

0x4C:0x00

0x50:0x00

a)为什么会有差别?

此外、第一组:

{ CFG_meta_burst,5 },

{0x49、0xee}、

{ 0xda,0x08 },

{ 0x80、0x00 }、

最后将0x80编程到一个无效的地址、因为它将被放置在下一组参数中。 因此、我们在最后看不到它、而是会问一个问题。 b)这只是糟糕的编程吗?

提问的原因是无法以250Hz 的频率获取信号、因此首先我们需要了解如何对来自 PurePath 的系数进行编程。

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

    应在几个小时内作出响应

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

    您能告诉我您想制造的滤波器的规格吗?

    您是否尝试过 PPC3中的工具? 通常、该工具会生成一个配置文件、其中包含实现滤波器所需的所有 I2C 设置。

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

    请重新阅读我的问题。

    我们使用 SPI 接口和自己的硬件。

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

    应在几个小时内作出响应

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

    您能给我发送一个链接到您提到的主题吗?我不确定完全理解。

    我尝试设计一个截止频率为8Hz 的巴特沃斯滤波器。 PPC3返回了以下 I2C 列表。我可以在数据表第100页看到它与顺序一致。

    例如、在第2页 地址8、9.A、B 的 N0为4个字节

    #选择第2页
    W 98 00 02
    #双二阶1系数(N0、N1、N2、D1、D2 )
    W 98 08 7f
    > ef
    > E3.
    04.
    w 98 0c c0
    > 08.
    > 0e
    > 7e.
    W 98 10 00
    > 00
    > 00
    > 00
    W 98 14 3f
    > ef
    > E3.
    04.
    W 98 18 00
    > 00
    > 00
    > 00

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

    1、对转储的解释的描述,我有从线程的标题:

    TAS2563YBGEVM-DC:导入/导出 PPC3寄存器映射设置

    2.我们需要实施第一级 IIR 滤波器,而不是双二阶滤波器。

    3.通过寄存器提取实际数据后,行数

    { CFG_meta_burst,5 },

    {0x49、0xee}、

    { 0xda,0x08 },

    { 0x80、0x00 }、

    实际上程序不仅 N0协效,而且也是第一个 coefficeint 为 N1。 不是那么优雅,但还可以

    4.现在提问。 我们已尝试在编程为单字节写入后、通过使用单字节读取来读取 N0、N1和 D1的各个系数。

    读数给出了全部0x00! 我们通过读取寄存器0x00得到确认、我们位于第4页。

    是否要求在突发模式下读写才能访问第4页寄存器?

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

    会在几个小时内回复

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

    下面是从 PPC3提取的 IIR 自定义高部分分配滤波器效率

    0x48  0x7f

    0X4C  0x80

    0x50  0x7f

    //高通滤波器系数
    { CFG_meta_burst,5 },
    {0x48、0x7f}、
    { 0xee,0xda },
    {0x08、0x00}、
    { CFG_meta_burst,5 },
    { 0x4c、0x80 },
    { 0x11、0x25 },
    { 0xf8、0x00 }、
    { CFG_meta_burst,5 },
    { 0x50、0x7F },
    { 0xdd,0xb4 },
    { 0x11、0x00 }、
    { CFG_meta_burst,5 },
    { 0x54、0x00 },
    { 0x00、0x00 }、
    { 0x00、0x00 }、

    XT "*采样率= 44100"
    文本"*滤波器1高通一阶巴特沃斯,10Hz Fc 0.0dB"

    文本"* bq: H(z)=(N0+2*N1/z+N2/(Z2)/(8388608 - 2*D1/z - D2/(Z2))"
    文本"*采用 N0、N1、N2、D1、D2"格式的滤波器系数"

    文本"* 1O:H (z)=(N0 + N1/z)/(8388608 - D1/z)"
    文本"*采用 N0、N1、D1"格式的滤波器系数

    文本"*过滤器1 1O"
    0x7FE8AB
    0x801755
    0x7FD157

    我还使用了 TI 的系数计算器工具来计算10Hz 的高通滤波器(不需要8Hz)。 对我来说、该工具似乎正在结果返回0x7F/0x80/0x7F。

    这样可以指示 PPC3中的编程是正确的

    https://www.ti.com/tool/COEFFICIENT-CALC

    当您选择标准 HPF 配置时、您是否能够在系统中通过250Hz?

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

    我们现在已将采样频率固定为50kHz。

    是的、当以标准默认 IIR 滤波器设置运行时、我们可以传递250 Hz 信号。

    如何读出系数?

    (请重新阅读我的问题)

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

    当我们设置 HPF 0.00025*fs 时,您是否需要了解过滤器设置。

    如果我无法正确解释、我表示歉意。

    另外、您能否向我发送您的输入计时?

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

    uProcessor 是 TM4c129、它使用该 SSI 接口的 Tivaware 初始化:

       MAP_SSIConfigSetExpClk (SSI1_BASE、g_ui32SysClock、SSI_FRF_MOTO_MODE_1、SSI_MODE_MASTER、1000000 8);

    即1MHz。

    下面只是说明一下读取代码:

    #include "tlv320adcx140_page0.h"
    #include "tlv320adcx140_page4.h"

    TLV320Write (&TLV320_right、page_CFG_address、page_CFG_page_4);
       vTaskDelay (1);//1ms 延迟
       Debug8Page = TLV320Read (&TLV320_right、page_CFG_ADDRESS);

       Debug8Coeff [0]= TLV320Read (&TLV320_right,IIR_N0_BYTE1_ADDRESS);
       Debug8Coeff [1]= TLV320Read (&TLV320_right、IIR_N0_BYTE2_ADDRESS);
       Debug8Coeff [2]= TLV320Read (&TLV320_right、IIR_N0_BYTE3_ADDRESS);
       Debug8Coeff [3]= TLV320Read (&TLV320_right、IIR_N0_BYTE4_ADDRESS);
       Debug8Coeff [4]= TLV320Read (&TLV320_right、IIR_N1_BYTE1_ADDRESS);
       Debug8Coeff [5]= TLV320Read (&TLV320_right、IIR_N1_BYTE2_ADDRESS);
       Debug8Coeff [6]= TLV320Read (&TLV320_right、IIR_N1_BYTE3_ADDRESS);
       Debug8Coeff [7]= TLV320Read (&TLV320_right、IIR_N1_BYTE4_ADDRESS);
       Debug8Coeff [8]= TLV320Read (&TLV320_right、IIR_D1_BYTE1_ADDRESS);
       Debug8Coeff [9]= TLV320Read (&TLV320_right、IIR_D1_BYTE2_ADDRESS);
       Debug8Coeff [10]= TLV320Read (&TLV320_right、IIR_D1_BYTE3_ADDRESS);
       Debug8Coeff [11]= TLV320Read (&TLV320_right、IIR_D1_BYTE4_ADDRESS);

    Debug8Page 显示正确的值4,但所有 Debug8Coeff []都显示0x00,在使用默认 HPF 0.00025*FS 时也是如此。

    我们已检查了与数据表表表133中的寄存器地址相比具有正确十六进制值的所有特定地址。

    那么、读取这些 IIR 参数的正确方法是什么?

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

    首先将寄存器0x0设置为要查询寄存器的页面。

    然后读取该页面中的寄存器。

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

    这正是我们在该行中所做的:

    TLV320Write (&TLV320_right、page_CFG_address、page_CFG_page_4);

    1msec 后、我们更正了第4页的内容、如下所示:

    Debug8Page = TLV320Read (&TLV320_right、page_CFG_ADDRESS);

    我们不是初学者。

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

    所以问题得到了修复、对吗?

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

    此问题尚未解决。

    我们似乎不擅长提出问题-抱歉。

    但请重新阅读有关如何读取 IIR 系数的问题。

    为什么我们读出0x00作为系数的值?

    与单个寄存器读/写相比、是否需要突发读/写操作?

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

    我确信系数 是可读的。 您是否有 TLV320ADC5140 EVM 板、您可以在 EVM 上执行相同操作的同时检查是否可以读取它。

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

    我们有自己的硬件、并通过 SPI 接口以1MHz 时钟进行连接

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

    对于 SPI 接口、您可以读回两个字节吗? 并检查第二个字节是否是您需要的值?

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

    当在1个字节读取或2个字节后断开时、系数读取没有区别(代码未优化):

    ----------------

    #include "tlv320adcx140_page0.h"
    #include "tlv320adcx140_page4.h"

    TLV320Write (&TLV320_right、page_CFG_address、page_CFG_page_4);
       vTaskDelay (1);//1ms 延迟
       Debug8Page = TLV320Read (&TLV320_right、page_CFG_ADDRESS);

       Debug8Coeff [0]= TLV320Read (&TLV320_right,IIR_N0_BYTE1_ADDRESS);
       Debug8Coeff [1]= TLV320Read (&TLV320_right、IIR_N0_BYTE2_ADDRESS);    

     ----------------

    仍读出0x00

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

    请准备两件事

    1. 请一次读取两个字节? 例如、  

      int TLV320Read (void *句柄、reg、unsigned char *数组、int nbyte);

      unsigned char array[2];

      TLV320Read (&TLV320_right、IIR_N0_BYTE1_ADDRESS、array、2);

    2. 请在 EVM 板+PPC3中进行检查

    如果 EVM+PPC3无法正常工作、我认为 COFF 寄存器无法读取

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

    我们没有该 EVM。

    可以显示 EVM 的读数吗?

    如果需要、我们可以按照要求尝试进行突发读取、但需要我们为测试制作一个新的突发读取例程。

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

    目前、我们没有资源执行该测试。 我们只能在未来一周内尝试这样做。

    这对您有用吗?

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

    我们刚刚尝试了通过 SPI 突发读取、但仍然只读取0x00。

    等几天没问题

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

    OK 将于下周更新

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

    有新闻吗?

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

    很抱歉耽误你的时间。 由于大量的待处理请求,我们能够为您本周的测试分配时间。 我们将 在本周结束前进行检查

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

    有新闻吗?

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

    很抱歉、我们到目前为止还没有带宽来进行测试。

    我们将在下周讨论。

    我再次道歉。

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

    我在下面提供了可能在此处使用的文档的链接。

    看起来、在 ADC 断电后、控制接口可以访问系数。

    https://www.ti.com/lit/an/slaa425d/slaa425d.pdf

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

    本文档来自较早的器件系列。 不过、可能有必要在 ADC 断电时尝试访问这些效率

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

    实际上、由于您的好主意、我们离得很近。 似乎要求 ADC 加电(通过 PWR_CFG 寄存器)才能激活这些寄存器操作!

    此外、如果始终为0xFF、则仅2字节或更多操作对于作为第一个字节进行读取是有用的。

    在关闭该主题之前、我们将调查详细信息。

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

    好的

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

    我们现在已经确认了前面提到的建议。

    输入 IIR 滤波器设置的代码片段(未优化等)为:

       TLV320Write (AD、PWR_CFG_ADDRESS、PWR_CFG_ADC_PDZ_ON | PWR_CFG_PLL_PDZ_ON);//为 PLL 和 ADC 上的所有 ADC 通道加电

       TLV320Write (AD、PAGE_CFG_ADDRESS、PAGE_CFG_PAGE_4);
       vTaskDelay (10);

       //
       // 8Hz 输入滤波器的设置,二阶 IIR
       //滤除 PurePath 程序中的系数
       //
       TLV320Write (AD、IIR_N0_BYTE1_ADDRESS、0x7F);
       TLV320Write (AD、IIR_N0_BYTE2_ADDRESS、0xEE);
       TLV320Write (AD、IIR_N0_BYTE3_ADDRESS、0xDA);
       TLV320Write (AD、IIR_N0_BYTE4_ADDRESS、0x08);

       TLV320Write (AD、IIR_N1_BYTE1_ADDRESS、0x80);
       TLV320Write (AD、IIR_N1_BYTE2_ADDRESS、0x11);
       TLV320Write (AD、IIR_N1_BYTE3_ADDRESS、0x25);
       TLV320Write (AD、IIR_N1_BYTE4_ADDRESS、0xF8);

       TLV320Write (AD、IIR_D1_BYTE1_ADDRESS、0x7F);
       TLV320Write (AD、IIR_D1_BYTE2_ADDRESS、0xDD);
       TLV320Write (AD、IIR_D1_BYTE3_ADDRESS、0xB4);
       TLV320Write (AD、IIR_D1_BYTE4_ADDRESS、0x11);
       vTaskDelay (1);

       //已编程代码的测试读数
       //   PJ32Coeff [0]= TLV320Read32位(AD、IIR_N0_BYTE1_ADDRESS);
       //   PJ32Coeff [1]= TLV320Read32位(AD、IIR_N1_BYTE1_ADDRESS);
       //   PJ32Coeff [2]= TLV320Read32位(AD、IIR_D1_BYTE1_ADDRESS);

       //
       //给 ADC 加电
       //
      TLV320Write (AD、PAGE_CFG_ADDRESS、PAGE_CFG_PAGE_0);
      TLV320Write (AD、PWR_CFG_ADDRESS、PWR_CFG_ADC_PDZ_ON | PWR_CFG_PLL_PDZ_ON);//为 PLL 和 ADC 上的所有 ADC 通道加电
       vTaskDelay (10);//等待唤醒(可能冗余)

    因此、结论:

    1.在编程到第4页系数之前打开 ADC 电源。

    2.通过使用帧读取并忽略第一个字节从第4页寄存器中读取。

    我们建议您更新手册

    如果您没有要添加的任何内容、我们可以关闭该主题。

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

    感谢您发送编修

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

    我们将注意到您的所有意见。