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.

[参考译文] AM4378:ADC 采样处于连续模式

Guru**** 2595805 points
Other Parts Discussed in Thread: AM4378

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/639176/am4378-adc-sample-in-continuous-mode

器件型号:AM4378

处理器:AM4378

内核:4.1.6

背景:

当我使用 generic_buffer 工具从 PWM 采样数据时
通道(50%占空比)、我发现数据分布不一致、
即使它在高电平和低电平之间有很大的差异
电压。 我知道不可能使数据保持一致
分配、但大的差异使我处于不良情况。

参数

generic_buffer:leng=20、5ms 采样一次。

2.低于"ADC 值"是来自"读取"的原始数据

3、"ADC AVG"最高(array[16]+array[17]+array[18])/3

Devicetree:

该通道配置为"ADC"而非"TSC"

opendelay=0x00

sampledelay=0xff

我只使用通道6、在 DTS 中、我打开通道5/6/7三
通道。

感谢您的任何建议。

使用的 IIO 器件编号为0
SCAN_SIZE:2
READ_SIZE:40
ADC 值:1821 1820 1819 1820 864 1820 8 0 0 1823 0 0 1835
1816 1818 1825 1817
ADC AVG 值: 1823
READ_SIZE:40
ADC 值:1817 24 0 0 1841 1818 1818 1818 1820 0
0 1823 1819 1818
ADC AVG 值: 1821
read_size:40
ADC 值:1818 1821 0 0 0 0 0 1824 1830 1819 1818 1820 1817
1819 1821 1816 97 5 0
ADC AVG 值: 1822
READ_SIZE:40
ADC 值:10 0 1855 1824 1820 1817 1822 1820 233 0 1819 2 0
0 0 1830 1820
ADC AVG 值: 1825
READ_SIZE:40
ADC 值:1817 1832 1817 1819 6 0 0 0 0 1844 1821 1820 0 1821
1820 1818 1822 1819 619
ADC AVG 值: 1825
READ_SIZE:40
ADC 值:0 0 0 0 1823 1820 1818 1824 1822 0 1819 1818
1816 0 2 0
ADC AVG 值: 1821
READ_SIZE:40
ADC 值:1838 1819 1818 1827 1821 1818 47 0 8 0 1846 0 4 0
1824 1819 1819 1820
ADC AVG 值: 1829
READ_SIZE:40
ADC 值:1818 1817 7 0 0 1825 1821 1818 1821 1818 1818 1818 1818 1820 290
0 0
0 ADC AVG 值: 1820
READ_SIZE:40
ADC 值:1839 1821 1821 1831 1820 45 0 0 1841 0 0
0 0 1824 1820 1828 1819
ADC AVG 值: 1832
READ_SIZE:40
ADC 值:1822 1818 3 0 4 0 1825 1820 1818 1818 1821 1836
1820 1819 1819 103 0 6
ADC AVG 值:1822 

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    请访问 processors.wiki.ti.com/.../Linux_Core_ADC_Users_Guide 如果您只需要三个频道、我不理解为什么您必须阅读。 我也不理解您的平均计算逻辑。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Biser、您好、感谢您的回复。
    为什么是3个通道、我只保留这些通道、并且在 generic_buffer 中只使用一个通道。 但3个通道应该可以。
    2、平均值、因为我只需要高电平、所以我将保持3个最高值(除了 array[19])、这只是我的逻辑、它与这个主题没有关系。
    3.我以前已经阅读过 wiki,但如上所述,它不是均匀分布,甚至更糟糕。

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

    您能给我们一些指南、我已经多次阅读过您的指南。 此外、它还告诉我使用 generic_buffer 来测试 ADC 连续模式。 但它不是单向分布、更糟糕的是。 谢谢。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Aaron、

    您能否在此处发布一些内容:
    *设置 ADC 的器件树文件部分
    *您在/sys/bus/iio/devices/iio \:device0/接口上使用的任何 sysfs 命令
    *您为此编写的任何 C 代码

    此外、您尝试读取的 PWM 信号的电压是多少? 请记住、内置 ADC 只能读取高达1.8V 的值、并且连接的值不应高于此值。

    我知道占空比为50%、但您尝试捕获的 PWM 频率是多少?

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

    您好 Jason、

    感谢您的答复、很抱歉我稍后的答复。

    • 器件
    ADC{
    TI、ADC 通道=<5 6 7>;
    TI、CHAN -阶跃- opendelay =<0x0 0x0 0x0>;
    TI、CHAN -阶跃 sampledelay =<0xff 0xff 0xff>;
    TI、通道步进平均=<1 1 1>;
    } 
    • sysfs 命令

    我正在使用 generic_buffer、因此除以下命令外、所有 sysfs 命令都保持与它对应:

    SAMPLE_NUM=20

    ADC_CHANNEL = 6

    • C 代码

    C 代码与 general_buffer 保持一致。

    另一个问题:

    我能否根据光电延迟时间和采样延迟计算采样频率。 由于一个样本 FSM 包括 Open、SOC、因此请根据数据表等待 EOC、和 是固定的。

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

    Aaron、

    根据 AM437x TRM (http://www.ti.com/lit/pdf/spruhl7)、样本之间的最小 ADC 周期数为15。 这在第11.4.1节中的图11-4下面进行了说明。 为了实现这个最小采样数、开延迟应该被设定为0、采样延迟应该被设定为1、平均值应该被设定为0。  

    在读取 Linux ADC 驱动程序后、我发现 ADC 时钟以3MHz (24MHz 除以8 (ADC_clkdiv = 7))运行、以便在所有通道上实现200ksps 的采样率(1个通道为200ksps、2个通道为100ksps、等等)。 这来自:

    1/3MHz = 333.33ns ADC 时钟周期--> 333.33ns * 15 ADC 时钟= 5us 采样周期--> 1/5us = 200ksps 采样率

    我能够通过启用单个 ADC 通道(通道5)、提供50%占空比信号(使用 PRU 引脚和分压器)来验证所有这一切是否正常工作、然后看到一半样本为低电平、一半样本为高电平。

    下面是我将器件树更改为:

    tscadc{(&T)
    状态="正常";
    
    ADC{
    TI、ADC 通道=<5>;
    TI、CHAN -阶跃- opendelay =<0x0>;
    TI、CHAN -阶跃 sampledelay =<0x1>;
    TI、通道阶跃平均=<0>;
    };
    }; 

    然后、我提供了一个周期为100us (低50%、高50%)的信号、并使用以下命令行参数运行未修改的 IIO_general_buffer 应用程序:

    /IIO_general_buffer -N 0 -g -A

    我的输出显示、~50%的样本接近于0、而~50%的样本接近高值:

    3557.000000
    3352.000000
    3346.000000
    3141.000000
    3352.000000
    3358.000000
    3549.000000
    3352.000000
    3328.000000
    0.000000
    8.000000
    15.000000
    5.000000
    0.000000
    0.000000
    1.000000
    2.000000
    31、000000
    3349.000000
    3346.000000
    3142.000000
    3349.000000
    3359.000000
    3562.000000
    3349.000000
    3347.000000
    3350.000000
    3319.000000
    6.000000
    6.000000
    0.000000
    0.000000
    0.000000
    1.000000
    7.000000
    14.000000
    7.000000
    3328.000000
    3356.000000
    3357.000000
    3455.000000
    3349.000000
    3345.000000
    3146.000000
    3351.000000
    3353000000

    如果您只从单个通道读取数据、则应通过从设备树中删除其他2通道来禁用它们。 如果它们保持启用状态、则会将采样率降低3倍、因为 ADC 外设会按顺序循环通过启用的通道。

    我不知道为什么您希望采样延迟为0xFF (255)、但这将极大地降低您的采样率。 您可能会在大约270个 ADC 周期的每个样本中使用、而不是每个样本15个 ADC 周期。 假设采用单通道、这会将采样率降低至~11ksps。 如果启用3个通道、每个通道的采样延迟为0xFF、则采样率将进一步下降至~3.7ksps。

    根据 PWM 频率、这可能会解释您接收到的读数不均匀。 我也不理解样本16、17、18的平均策略。

    请尝试仅启用单个通道、并将采样延迟降至1、并告知我您的问题是否仍然存在。

    Jason Reeder

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    非常感谢、Jason、我将进行验证。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Jason、工作得非常好。 我的主要问题是"cha-step-avg"设置。 我认为<1>并不是平均值。 但是、在您进行描述后、<0>应该不是平均值。
    在您提示后、我知道如何计算采样时间。
    非常感谢。