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.

[参考译文] MSPM0L1228:使用内部 Vref 的 ADC 采样速度

Guru**** 2895430 points

Other Parts Discussed in Thread: LP-MSPM0L2228

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1636930/mspm0l1228-adc-sample-speed-using-internal-vref

器件型号: MSPM0L1228
主题中讨论的其他器件: LP-MSPM0L2228

您好、
d/s 提到使用内部 Vref 时的最大 ADC 采样速度为 200ksps。 客户需要以 288ksps 的采样率进行采样。 此采样速度的误差是多少?
我知道有限因素是 1uA 的 Ivref。 更大的电容可以提高最大采样速度吗?
我认为最坏的情况是 Vref 电容器完全没有电容。

此致、Holger

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

    您好、Holger、

    在这种情况下、请使用外部 Vref。

    ADC 转换数据将不准确、误差更大。

    我知道限制因素是 1uA 的 Ivref。

    此限制规范记录在哪里? 我在 DS 中找不到它。

    根据我的理解、原因是如果 ADC 采样 率大于 200ksps、ADC 的 VREF 并不稳定。

    B.R.

    Sal

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

    尊敬的 Sal:
    我认为 Vref 缓冲器电容器无法充电/放电、因为 Ivref 受限并且转换快速时具有时间限制。

    此致、Holger

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

    您好、Holger、

    在哪条限制规范记录? 我在 DS 中找不到它。

    您能提醒一下规范、我想知道记录 Ivref 限制为 1uA 的位置。

    我认为 Vref 缓冲器电容由于
    而无法充电/放电

    是的。

    由于 Ivref 受限且转换速度快时有时间限制。

    请在您发现当前限制的位置给出建议。 我想与内部团队仔细检查 1uA 限制描述。

    B.R.

    Sal

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

    您好、Holger、

    在哪条限制规范记录? 我在 DS 中找不到它。

    您能提醒一下规范、我想知道记录 Ivref 限制为 1uA 的位置。

    我认为 Vref 缓冲器电容由于
    而无法充电/放电

    是的。

    由于 Ivref 受限且转换速度快时有时间限制。

    请在您发现当前限制的位置给出建议。 我想与内部团队仔细检查 1uA 限制描述。

    B.R.

    Sal

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

    抱歉、数据表中规定的值为 100uA:

    但这仍然是一个有限的因素、对吧?

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

    尊敬的 Sal:
    请在此处注释误差会有多大以及您是否能够以某种方式计算误差。

    此致、Holger

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

    您好、Holger、

    限制来自 VREF 内置电容器、它无法承受超过 200ksps 的 ADC 采样率。

    B.R.

    Sal

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

    您好、Holger、

    我们不建议在 200ksps 以上使用它。 我们无法保证它的误差、尤其是在临界情况下。

    B.R.

    Sal

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

    尊敬的 Sal:

    您能否以某种方式计算误差?
    内部电容、电流和电阻有多大。

    此致、Holger

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

    您好、Holger、

    根据讨论、无法以特定模式计算误差。 原因是、如果采样率超过限制值、可能会发生丢失代码的情况。 如果在 高地址出现代码丢失、则错误会很大。

    例如:
    预期 ADC 结果:1101.0000.0001b ->当 ADC 采样率太快时、缺少代码的实际 ADC 结果:1100.0000.0001b

    现在、我从内部团队那里收到一些评论、认为设计规格可能支持更高的速率、但数据表无法保证这一点。 您能否帮助确认 ADC 通道上的客户设置:

    ADC 时钟源和时钟分频器

    采样时间

    分辨率(等于转换时间)

    如果可以共享所有 ADC 初始化代码或设置、效果会更好。

    B.R.

    Sal

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

    尊敬的 Sal:
    它们使用具有 1 个时钟分频器的 ULPCLK 和具有 143 的采样窗口 (SCOMPx)。

    此致、Holger

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

    您好、Holger、

    在该配置下、采样时间为 143/46875us、32MHz = 4.46875us。 客户如何实现 288ksps?

    B.R.

    Sal

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

    您好、Holger、

    在内部团队确认后、如果用户选择 ADC 的内部参考模式、我们会自动将 CONVCLK 限制为小于 4MHz。 那么 VREF 将适合 ADC 采样。

    因此、用户在将 VREF 与 ADC 一起使用时无需考虑 VREF 设置时间。 整体采样率由 ADC 内部时钟过程自动限制。

    B.R.

    Sal

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

    尊敬的 Sal:
    抱歉、这已经是针对 200ksps 的修改。 对于 288ksps、它们使用:
    ADC 时钟源:     ULPCLK、分频器:1.
    硬件均值计算:8 倍
    SCOMP0:                         75 个时钟周期
    分辨率:                     12 位
    由于通道数量很多、我们在半个 (9) 后将配置更改为 ULLMEM.MEMCTL、并调整 DMA 发送。 它会暂时禁用 ADC、但会丢失一些时间。
    遗憾的是、只有 MEMRES0 到 MEMRES11、而不是 MEMRES23、如参考手册中 CTL2 寄存器的寄存器说明所述。 这里、MEMRESx 寄存器的数量在文档中有几次变化。

    RGS、Holger

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

    尊敬的 Sal:

    这很有趣。然而,他们的测量结果表明,CONVCLK 显然在 32MHz 上运行。 CLKFREQ.FRANGE 当然设置为 5(>24 设置为 32MHz / 8 分频)、VRSEL 设置为 2h(内部基准)。 原因可能是什么?

    但是、在当前设置下、效果很好。 实际上、如果 CONVCLK 需要在 4MHz 运行、则 他们必须调整输入滤波器、或者在最坏的情况下、转到外部基准或 MSPM0G1228。

    • ADCCLK 用于采样和转换->源自 32MHz ULPCLK
    • tsync = 0、因为使用 ULPCLK
    • 采样窗口:
      • 使用 SAMPCLK 生成 使用 SCLKDIV 从 ADCCLK 获取 (设置为 0 ->不进行 1 分频/分频)-> 32MHz
      • SCOMP0 VAL 设置为 146->采样时钟数= VAL x SCLKDIV -> 仍然 146 个时钟周期
    • 转换窗口:
      • CONVCLK 生成 使用 VRSELCLKFREQ 源自 ADCCLK ->使用 内部 VREF 时、CONVCLK 频率不超过 4MHz。 由于 ADCCLK 被设置为 32MHz、因此 CLKFREQ.FRANGE 被设置为 5 (>24 to 32MHz)、这会应用:8 分频器、根据图 15-2、生成这些 4MHz
    • 总时间:
      • 示例窗口:146 个时钟周期@ 32MHz
      • 转换窗口:14 个时钟周期@ 4MHz -> 14*8 = 112 个时钟周期@ 32MHz
      • 总体:146+112 = 258 个时钟周期@ 32MHz -> 8.06us -> 03ksps
      • 4-过采样-> 8.06 *4 = 32.25us
      • 9 个频道:32.25*9 = 3us

     

    • 但是、我的测量值为 2us、这与以下计算相匹配、假设 32MHz 的 CONVCLK 为:
      • 示例窗口:146 个时钟周期@ 32MHz
      • 转换窗口:14 个时钟周期@ 32MHz
      • 总体:146+14 = 160 个时钟周期@ 32MHz -> 5.00us -> 200ksps
      • 4-过采样-> 5.00*4 = 20.00us
      • 9 个频道:20.00 *9 = 00 us

    此致、Holger

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

    您好、Holger:

    请让客户进行仔细检查、我测试了与 TRM 描述相匹配的 LP-MSPM0L2228。

    测试代码:

        while (1) {
            /* Low - High pulse represents sample+conversion time */
            /* 4 channel sampling:
             * Sample time = 1us
             * CONV time = 14* 1/4M = 3.5us (12-bit, 4MHz with internal clock; ulpclk/8=4MHz)
             * Total time per channel: 4.5us
             *
             * Total time for 4 channels: 4.5us*4=18us
             *
             * RIS assert time = 1/4M = 0.25us
             * Total time: 18.25us+ minus time (CPU write register time)
             * */
            DL_GPIO_clearPins(GPIO_LEDS_PORT, GPIO_LEDS_USER_LED_1_PIN);
            __NOP();
            DL_ADC12_startConversion(ADC12_0_INST);
            while(DL_ADC12_INTERRUPT_MEM3_RESULT_LOADED !=
                    DL_ADC12_getRawInterruptStatus(ADC12_0_INST, DL_ADC12_INTERRUPT_MEM3_RESULT_LOADED));
            DL_GPIO_setPins(GPIO_LEDS_PORT, GPIO_LEDS_USER_LED_1_PIN);
            __NOP();
    
    //        gCheckADC = false;
    //        adcResult = DL_ADC12_getMemResult(ADC12_0_INST, DL_ADC12_MEM_IDX_0);
    
            DL_ADC12_clearInterruptStatus(ADC12_0_INST, DL_ADC12_INTERRUPT_MEM3_RESULT_LOADED);
            DL_ADC12_enableConversions(ADC12_0_INST);
            __NOP();
        }

    测试结果:

    B.R.

    Sal