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.

[参考译文] TLV320ADC3101:具有 Raspberry PI 的 TLV320ADC3101器件驱动程序

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

https://e2e.ti.com/support/audio-group/audio/f/audio-forum/1004865/tlv320adc3101-tlv320adc3101-device-driver-with-raspberry-pi

器件型号:TLV320ADC3101
主题中讨论的其他器件: TLV320ADC3100PUREPATHSTUDIO

大家好、

我们希望您在以下客户咨询方面提供帮助。

TLV320ADC3101使用 Python 使用 Raspberry PI 进行编程。 现在、我想使用 PurePath Studio 为 ADC3101设计滤波器。 我已经生成了头文件源(Pure Path Studio 中的.c 和.h 文件)。 请告诉我编译文件的步骤以及如何将它们添加到设备驱动程序中。 我想在 Raspberry Pi 中执行它。
此外、是否可以使用 python 执行同样的操作?

此致、

Danilo

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

    达尼洛

    最简单的方法是从 PurePath Studio 获取系数、并使用一组 I2C 命令将其写入器件。 在命令行中、您将使用:

    i2cset -y -f 2 0x18 0x0 0x04 =>设置为第4页

    i2cset -y -f 2 0x18 0x14 0xFF 0xFF =>将第4页的寄存器14和15设置为0xFFFF

    (笑声)

    您可以获取*。c 和*。h 并编译到发送 i2c 命令的程序中。 本 文档 介绍了典型的 i2c 方法。 该网络具有许多 用于 Raspberry Pi 通过 I2C 写入数据的示例代码。

    此致、
    佩德罗

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

    您好、Pedro、

    感谢您的回答。 根据客户、

    我已经使用 MATLAB 为 miniDSP 设计了一个简单的高通 FIR 滤波器、并手动添加了系数。 我已经生成了.cfg 文件和.c 文件、并附加了它们以供参考。 但是、.cfg 文件和.c 文件中相同寄存器的系数不同。 因此、要直接使用 i2c 命令输入系数、我如何知道系数的值。 我是从.cfg 文件还是从.c 文件中获取它们? 此外、我是否会犯导致不同系数的错误? 我正在查找具体的 C7 (第4页/寄存器14、第4页/寄存器15)至 C31 (第4页/寄存器62、第4页/寄存器63) 由于所需的其余寄存器已在 Raspberry PI 中进行编程、因此我只想添加滤波器系数。 我还附上了工艺流程的图像。
    提前感谢您。  

      

    e2e.ti.com/.../1665.base_5F00_main_5F00_Rate44.cfg 

    e2e.ti.com/.../pps_5F00_driver.c

    此致、

    Danilo

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

    达尼洛

    查看生成的 c 文件和您的图片、我希望这些系数是 FIR 滤波器系数的16位二进制补码表示。

    如果我从寄存器12的条目开始、它似乎与 b0到 B15的系数相匹配:

    寄存器12 => FFFFFFFFBE =-66 / 2^15 =-0.00201416、这与系数 b0匹配
    寄存器14 => FFFFFFFAB=-85 / 2^15 =-0.002593994、这与系数 B1匹配
    reg 16=>FFFF7A=-134/2^15=-0.004089355,这与系数 B2匹配
    reg 18=>FFFF21 =-223 /2^15 =-0.00680542,这与系数 B3匹配
    reg 20=>FFFFFFFE9B =-357/2^15 =-0.010894775、这与系数 b4匹配
    reg 22=>FFFFC9 =-55/2^15=-0.001678467,这与系数 B5匹配
    reg 24=>FFFFFFFCD0 =-816 /2^15 =-0.024902344、这与系数 B6匹配
    寄存器26=>FFFFFFFB61 =-1183/2^15=-0.036102295、这与系数 B7匹配
    reg 28=>FFFFFFF95B =-1701 /2^15 =-0.0519104,这与系数 B8匹配
    reg 30=>FFFFFFFB61 =-1183 /2^15 =-0.036102295、这与系数 b9匹配
    reg 32=>FFFFFFF12A =-3798/2^15=-0.115905762,这与系数 B10匹配
    reg 34=>FFFFFFE5C6 =-6714/2^15 =-0.20489502、这与系数 B11匹配
    reg 36=>FFFFFFAEF7 =-20745 /2^15 =-0.633087158,这与系数 B12匹配
    寄存器38 => 5109 = 20745 / 2^15 = 0.633087158、这与系数 B13匹配
    reg 40=>1A3A =6714/2^15=0.20489502,这与系数 B14匹配
    reg 42=>0ED6=3798/2^15=0.115905762,这与系数 B15匹配
    reg 44=>FFFF9E =-98/2^15 =-0.002990723?
    寄存器48 =>FFFFFFF710 =-2288/2^15 =-0.069824219
    寄存器50 =>26F0=9968/2^15=0.304199219
    寄存器52 => 261 = 609 / 2^15 = 0.018585205
    reg 54=>4002=16386/2^15=0.500061035
    reg 56=>FFFFFFFFFc -4/2^15 =-0.00012207
    reg 58=>4000 =16384/2^15=0.5
    寄存器60=>09AD=2477/2^15=0.075592041
    REG 62=>06A5=170/2^15=0.0519104
    寄存器64 =>049F=1183/2^15=0.036102295

    但不确定从寄存器44到64生成的系数是多少。 我本来会想到其他系数 B16到 B25。 因此、这里似乎没有什么东西。

    由于这个问题、我建议使用*。cfg 文件中的这些文件。 您可以通过以下方式将浮点数更改为16位二进制补码:

    对于正数:十六进制(float_number * 2^15)

    对于非 {hex (-float_number * 2^15)}+ 1 nd 截断为低16位。

    此致、
    佩德罗

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

    您好、Pedro、

    我们收到了客户的反馈。

    我手动转换了 FIR 滤波器的其余系数并对 ADC 进行了编程、然后得到了所需的输出。 但是、.cfg 文件中的系数也不正确。
    我尝试过设计具有类似规格的双二阶滤波器、并且遇到了同样的问题。 我无法确定问题的原因。 我已连接 Biquad GUI、生成的系数和生成的.cfg 文件。 它不会将信号衰减至800Hz 以下。 我想知道造成这种情况的可能原因,以及在这种情况下可以做些什么。
    提前感谢您、  

    e2e.ti.com/.../7266.base_5F00_main_5F00_Rate44.cfg

    e2e.ti.com/.../base_5F00_main_5F00_Rate44_5F00_f10b1c.cfg

    此致、

    Danilo

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

    达尼洛

    我认为我不在此处遵循 Biquad 的设计:

    b = [0.94598388671875 -0.472991943359375 0]
    a = [1 0.44598388671875 0]
    iir1b = dsp.IIRFilter('Numerator',b, 'Denominator',a)
    h = fvtool(iir1b, 'FrequencyScale', 'log');

    800Hz 巴特沃斯高通滤波器设计:

    biquad = fdesign.highpass('N,F3dB',2, 800, 44100);
    butter = design(dcblock, 'IIR', 'butter');
    h = fvtool( dcButter );

    具有预期的800Hz 截止频率:

    具有以下系数:

    b =[1、-2、1]

    A =[1、-1.839116797325203、0.851128341245972]

    假设双二阶 响应定义为:

    h (z)=[b0 + b1z^-1 + b2z^-2]/[1 + a1z^-1 + a2z^-2]

    但是 TLV320ADC3100使用的双二阶等式(数据表第35页的等式4):

    h (z)=[N0 + 2*N1z^-1 + N2z^-2]/[2^15 - 2*D1z^-1 +- D2z^-2]

    因为 a 和 b 大于  1. 我将把所有系数下调 2并等于 N 和 D、如下所示:

    N0 = b0 * 2^15 / 2 = 0x4000

    N1 = B1 * 2^15 / 4 = 0x8000

    N2 = B2 * 2^15 / 2 = 0x4000

    D1 =-A1 * 2^15 / 4 = 0x3ADA

    D2 =-A2 * 2^15 / 2 = 0xC987

    此致、
    佩德罗

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

    您好!

    我在 Biquad GUI 中输入了滤波器的规格、我获得的系数由 PurePath Studio 自动生成。 这些不是我输入的系数。 帮助文件夹中提到、我可以在滤波器设计工具对话框中输入我的要求、并且将生成系数。 我想知道为什么不能为双二阶滤波器和 FIR 滤波器正确生成系数(在*。cfg 文件中、即系数 B16至 B25中)。 我是否犯了错误?

    谢谢、

    Sharanya

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

    Sharanya、

    感谢您的更新。 我必须将您的问题推迟 到我们开发 PurePath Studio 的团队、以弄清为什么未正确生成滤波器系数。 有时、为了防止溢出、PurePathStudio 会降低系数、但这不应影响滤波器的响应、而只影响增益。

    此致、
    佩德罗

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

    您好、Sharanya、

    是否可以附加存在此问题的进程流文件(*.pfw)?

    此致。

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

    尊敬的 Diljith:

    由于某种原因、我们的客户无法发布流程文件。 我已将其附在下面。

    e2e.ti.com/.../Processflow.zip

    此致、

    Danilo

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

    您好、Sharanya 和 Danilo、

    该工具为一阶高通滤波器生成的滤波器系数在 ProcessFlow_Biquad 进程流文件中是正确的。

    请参阅下面的系数计算公式。

    需要注意的两个关键事项是:

    (1)分子和分母的中间系数必须乘以0.5 (因为双二阶引擎将中间系数乘以2)

    (2)必须否定分母(我们使用差分方程实施双二阶)

    我注意到其余的滤波器系数(设置为自定义)具有一些非默认值。 如果不使用滤波器、我会将其配置设置为 allpass。 可能导致问题的原因。

    请告诉我问题是否与上述解释无关。  

    此致。