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.

[参考译文] EK-TM4C1294XL:了解 TM4C 中的 ADC 时序

Guru**** 2482105 points
Other Parts Discussed in Thread: LM3S8971, LM94022, INA240

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/707758/ek-tm4c1294xl-understanding-adc-timing-in-tm4c

器件型号:EK-TM4C1294XL
主题中讨论的其他器件:LM3S8971LM94022INA240

大家好、  

我写入该数据是因为我在 TM4C1294中找不到 ADC 的理论时序和测量时序之间的相关性。

TIMER0以5kHz 的频率触发 ADC0。 ADC0配置为对8个通道进行采样:ADC0SS0上2个通道、 ADC0SS1上2个通道、ADC0SS2上4个通道。 INT_ADC0SS2生成中断。  

同一个 TIMER0也会生成一个中断。 我使用它来测量从触发到转换结束之间的时间。  

ADCclock 被配置为以32MHz 运行。 它已使用以下指令进行配置:

ADCClockConfigSet (ADC0_BASE、ADC_CLOCK_SRC_PLL | ADC_CLOCK_RATE_FULL、15);

因此、我预计理论转换时间为:

Tconv=1/(ADCclk/(12+4)= 0.5us /采样(2MSPS 并不是 ADC 最大吞吐量的巧合)  

因此,对于8个样本,总时间应为 Tconv*Nsamples=4us。

不过、我在触发器和 ADC 中断之间测量大约9us。  

此外、如果我使用16x 的硬件过采样、我预计将具有:

 tconv*Nsamples*foversample=0.5*8*16=64us。

不过、测量结果显示大约33us。

那么、我的问题是、两种条件下的转换时间为何不同?  

感谢你能抽出时间、

此致

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

    您似乎没有增加延迟(2*ADCLKS 或62.5ns @32MHz)、且 Tc= 0.5us @2MSPS 包括在内(TS=125ns)。

    根据您为 FIFO 阶跃设置的 TSNH 编码保持时间、当硬件取平均值(x16)时、采样时间将增加、因此根据数据表将2MSPS 相除。 然而、TC 不应根据数据表 ADC 电气规格增加。 在这个论坛中、我曾与另一位帮助者进行过同样的讨论。 似乎 TC 可能是数据表中省略的硬件平均的一个因素。

    如果确实如此、则可能是16 * Tc500ns = 8us 总 TC 窗口因子2Msps/16 + TSHN。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    嗨、Michele、

    在纸上计算是正确的、但我不知道您是如何在应用中实现此类测量的。 您需要考虑几个因素。

    首先、您将8个通道分成3个不同的序列发生器。 ADC 状态机需要一些周期才能从一个序列发生器切换到另一个序列发生器。

    2当 ADC 完成转换时、它会生成中断。 进入其 ISR 需要一些周期。 在 ADC ISR 中、您可能会尝试获取定时器寄存器(GPTMTnR)和定时器自由运行计数器(GPTMTnV)之间的差异。 我希望这就是您进行测量的方式。 您需要减去 CPU 进入 ISR 所需的中断延迟时间(CPU 需要将其上下文保存到堆栈上)。

    3.设计实现过程中还存在其他一些固有的小因素。 例如、当计时器向 ADC 生成触发信号时。 为避免时序路径过长、信号通常通过触发器进行管道传递。 在 ADC 的接收端、再次通过管道(已注册)断开时序路径。 当 ADC 向 NVIC 发出中断请求信号时、也会执行同样的操作。 尽管这些延迟周期很小、但仍需要考虑它们。

    出于实验目的、请尝试使用 SS0上的所有8个通道。 我认为您应该看到一些改进。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    BTW:规范显示 TLT = 0.5us "trigger to conversion (从触发到转换的延迟)"、但认为它应该是采样开始、而不是转换。 因为这似乎会在循环 FIFO 平均中的每个过采样中增加16* 500ns = TLt8us 或500ns。 您的5Khz GPTM ADC 触发器(200ms)不应超过 FIFO 采样帧。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    感谢你的答复。


    实际上、我正在考虑 nsh = 4个 ADC 时钟周期。

    即使我考虑延迟、我也远未达到测量值。 我可能缺少一些东西。 我主要担心使用硬件取平均值时的差异(使用硬件取平均值时 TC/样本会减少)。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我认为这两张海报都提供了宝贵的见解。

    然而、供应商的 Charles、"Spole my Thunder (选择我的 Thunder)"-这是您对3个不同 ADC 序列的"混合"!    这是否会在您的测量中强制实施"不必要和未知的可变性"?

    正如 Charles 所说的、我对"计时器触发器"的"精度和可重复性"提出了疑问。    然而海报 BP -已"深入"(我们欢呼-希望看到更多!) 并展示了一个"已发布规范!"   (始终... 好极了!    从赤裸裸的观点中打败地狱... (通常为"标准")

    为了实现"最精确、最逻辑上正确的测量"  、您不会将此类实验限制在单个 ADC 序列-涉及所有8个(最大) ADC 转换-到目前为止证明-最佳?

    未知(对我来说)是 ADC 中断产生(被称为"在转换完成后"发生)的"响应时间"。   (这是"模糊的"吗?)   但除非英国石油公司能进一步挖掘,否则仍不确定/未知。

    最后一点是-(在您的案例中不太可能-但对于"概括性地总结这些发现"(如何"获得巨大的价值!) -存在其他 (可能存在竞争)程序代码-在您执行此类措施时运行(尤其是如果"其他"为"较高优先级")可能会"将您的"设计"(稍微朝总 线后面推送)...  (这是"我的" -通常的座位位置... 做-自我介绍)

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

      

    感谢您的回复、Charles。

    我使用示波器测量时间(改变 GPIO 的状态)。

    我知道 转换时间和我用来测量时间的方法之间的差异(我不考虑时序图中的 X1、X2和 X3)。 但是、我认为差异太大。

    我听从了您的建议、只使用一个序列、但我注意到测量时间仅略有减少(约为0.15 us)。

    问题在于:

    -不进行硬件过采样  

    Tmeased=1.1uS/样本(所有延迟)   

    理论值=TC + TLT = 0.5uS/样本+ 0.0625us

    -硬件过采样为16x

    Tmeased=4.125uS/采样(具有所有延迟)   

    理论值=TC * 16 + TLT = 8uS/采样+ 0.0625us

    因此、如果  没有过采样、我不会考虑理论上的一些延迟。 但是、当我使用过采样时、这些延迟似乎消失、因为测量的时间远低于理论时间。

    再次感谢您的支持。  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    嗨、Michele、
    我还没有好的答案。 可以尝试一些操作吗?

    1.您能否仅针对1个通道和4个通道进行测量? 通过这种方法、我们可以确认转换时间是线性的。
    2.您是否在定时器中断中设置 GPIO 引脚并清除 ADC 中断中的引脚? 这应该是一种好方法、但您可以尝试使用两个不同的 GPIO 引脚吗? 两个引脚将分别在计时器和 ADC 中断 ISR 中设置。 了解它们之间的差异。 我想告诉大家、您正在测量从 ADC 中断到计时器中断的时间。
    3.在 ISR 中,要清除或设置该引脚,您可以对数据寄存器执行 DRM (直接修改寄存器),而不是调用 GPIOPinWrite()。 这可以节省一些周期、即使不是很多。 或许需要提出的一个问题是、您如何清除代码中的引脚。 如果您执行某些需要读-修改-写的切换类型、则执行操作可能需要更多的周期。
    4.什么是代码编译器优化级别?
    5.如 CB1所要求的那样,除了 Timer0和 ADC 之外,还有其他中断吗? 请注意、较高优先级的中断可以抢占 ADC。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Charles、

    我(AM)尝试退出这个"无样 "论坛-然而 、这个论坛-和另一个(相关主题) 'VCO @ 480MHz (可能) 能够生成 SYSCLK @ 120MHz 和 ADCClk @ 32MHz' -"简短"-让我感到很烦。

    e2e.ti.com/.../706611

    我们在这里的海报认为、他的 ADC 时钟实现了32MHz -但他(真的)是否已经过测试和验证?

    随着公司/我与多个 ARM MCU 进行合作-在许多供应商中-我们也满足了"真正测量 ADC 的转换速率!"的要求   和-"GPIO 切换"-未满足我们"强大的"客户端的高级要求。

    一种方法(公司/I - 大体上相信 (原谅)更好)可以看到 、"引入精确的、上升的线性电压斜坡-注入到一个"单个 ADC 通道"中、该通道"需要执行指令"-一个八序列 ADC 转换!    作为这种精度的"缺点"、线性电压是已知的-"实际时刻"-每次转换(实际发生)时-可以 (更精确地)-可以确定!   (即 消除了每个"受损害和间接(较小)替代措施"(中断驱动的 GPIO)!)

    这样一个线性电压斜坡必须能够在 "全部八个 ADC 转换!"的"所需的指定持续时间"内从(接近) 0伏驱动至(接近) 3V3 (或最大 ADC V_IN)   并执行此操作-同时完全符合每个 ADC 的输入规格。   我们使用过去经过验证的模拟设计-以及全新 的 ARM Cortex M7s (配备高速 DAC) 可加快速度并简化操作-例如(非常有用) 线性电压斜坡创建和应用!

    此类" 高级"、"间接测量"-最常-将这些"受损、间接(较小)方法"拖至最重要的位置。    即使这些 "被损害的方法"更容易、尤其是 那些  "被损害的方法"更容易!    (人们可能会正确地问-目标是"轻松"...  或"有效"结果?")

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

    您好 CB1、

     这是检查 VCO 是否以480MHz 运行的绝佳建议。 我甚至会建议在海报上再尝试一个实验。 将 ADC 时钟配置为从 PIOSC (16MHz)而不是 PLL (480MHz/15=32MHz)获取时钟、并查看她获得的测量结果。 PIOSC 以16MHz 的频率运行。 如果使用 PLL 和 PIOSC 之间的测量值相同、接下来要调查出了什么问题。  

    米歇尔

     请发布您的整个代码以供审核。  

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

    我的"最新"贡献(在离开此"无样 "论坛之前)针对以下两个领域:

    • 可以(同时  )通过运行@ 480MHz 的 MCU 的 VCO 实现 SYSCLK @ 120MHz 和 ADCClk @ 32MHz 吗?   (中心问题-被所有人遗漏-是"分频值的有效性"。 15英寸-我力求获得详细信息。)
    • 还提供了一种经实践检验的卓越方法(用于确定(任何供应商) MCU ADC 的"现实世界"(在实时运行条件下测量)转换率)

    您是否对"一个或两个"已发布的贡献做出反应尚不清楚-在您的(上面的帖子)中。   公司/我"知道这些成功"-并且"非常有利润" -交付/销售两者都...

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

    您好、Charles、

    我现在不在实验室里。 但我会尽快回复测试。

    同时,我可以用过去的经验回答:

    我已经针对不同的样本数量进行了测量、时间是线性的。 明天、我将向您返回数值。

    2.是的,完全正确。 在这里、您是否要求添加另一个引脚并在它们之间取得差异?

    我正在使用 GPIOPinWrite。 我将切换到 DRM。

    4.级别3 -全局优化

    5、是的、我有其他中断。 然而、ADC 中断具有最高优先级(0)、定时器中断具有优先级1。

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

    我很确定 VCO 为480MHz。 但是、我将检查它以确保正确。

    我很高兴您能与我们分享您在测量高速 ADC 时间方面的知识。 实际上、如果您知道 GPIO 切换不是一种好方法、这是因为您过去使用过它。
    无论如何、当我能够设置"精确、上升、线性电压斜坡"并且没有任何噪声来进行如此精确的测量时、我很乐意应用您的方法。
    GPIO 切换显然不准确、因为事件之间需要考虑不同的 CPU 时钟、但从测量精度的角度来看、它是精确的。

    但是、我在这里的帖子不是为了测量类似 CERN 的环境中的时间、而是为了了解我是否使用硬件过采样时为什么会存在差异。 因此、ADCclk 可能不是32MHz、但无论是否进行过采样、它都不会是32MHz。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    PIOSC 的理念 很好! 我将应用它来查看是否存在差异。

    但是、我不清楚的是、如果我应用或不应用过采样、会有什么区别。 因为、如果没有过采样、ADCclk 似乎运行在16MHz、而16x 过采样看起来运行在64MHz (这很明显是不可能的)。

    我将尽快告知您更新信息。

    整个代码是不可能的、这也是因为它是一个大项目。

    我可以展示用于设置 CPU 时钟和 ADC 时钟的指令。

    //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

    uint32_t g_ui32SysClock;

    G_ui32SysClock = SysCtlClockFreqSet ((SYSCTL_XTAL_25MHz | SYSCTL_OSC_MAIN | SYSCTL_USE_PLL | SYSCTL_CFG_VCO_480)、120000000);
    
    //
    
    SysCtlPeripheralEnable (SYSCTL_Periph_ADC0);
    
    ADCClockConfigSet (ADC0_BASE、ADC_CLOCK_SRC_PLL | ADC_CLOCK_RATE_FULL、15);
    
    ADCHardwareOversampleConfigure (ADC0_BASE、 0x4);
    
    //... 

    //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

    感谢您的支持。

    米歇尔

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

    嗨、Michele、

     我自己收集了一些数据。 请参阅下面的内容。 使用 PIOSC 作为源时、每个通道的平均转换时间约为2.2uS。 如果 VCO=480MHz、ADCCLK 除以15、则每通道转换约为1.19uS。 是的、与使用 PIOSC=16MHz 相比、32MHz ADCLK 确实将转换时间减少了大约一半。 但是、存在一些隐藏延迟、会在理论值之上增加开销。 让我们看看明天有机会时您会得到什么。  

    通道数 PIOSC (us) 平均时间/通道 VCO/15 (us) 平均时间/通道
    5. 11.2. 2.24. 6.25. 1.25.
    6. 13.2. 2.20. 7.1. 1.18.
    7. 15.3 2.19. 8.3. 1.19.
    8. 17.3. 2.16. 9.15. 1.14.
    平均   2.20.   1.19.
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    这里是过采样的附加数据。 如您所见、使用2倍过采样时、每通道转换时间与无过采样相同、而4x 过采样仅是每通道转换时间的两倍。 这表明此设计不符合数据表说明。 看起来只采用 ADCSAC 寄存器中的 AVG[2:1]字段、而 AVG[0]被忽略。 我将在内部讨论勘误表更新。

      

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

    [引用 user="mm3010"]实际上、我考虑的是 nsh = 4个 ADC 时钟周期

    FConv 2000Ksps (AKA-2MSPS)。  因为 当4倍过采样时、一个 TC @500ns 周期可能 会比  平均周期的2MSPS 分频频率降低、但吞吐量据说会受到影响。  您报告的加速 度似乎 会加快、因为  采样周期被分频时、它不会变得更短、但 FIFO 串行比特率在同一个冲程内下降。  

    或许 TC 值 是从 每个 序列发生器的 ADC 时钟帧中的循环 FIFO 速率间接得出的、而不是仅 ADC 时钟速度。

     

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

    [引用 user="mm3010"]我在这里的帖子不是为了测量类似 CERN 的环境中的时间

    因此,我们也有这一目标。   尽管我们的许多"高级"设计都出售给医疗设备 和 国防社区。

    下面是一个快速/肮脏的总结-它代表了"更精确"方法的优势-先前提出了:

    • 它(正确)与您的 MCU 分离!    许多(严重)技术领域"DISALLOW" "DUT"-来自(自身生成"确认/验证"测量数据。   (患者很少-卧 姿- "在 ER's table 上"- 引导检查!)
    • 它不受 MCU 约束-任何供应商的 MCU 都"欢迎并立即得到满足!"    设计测试是否浪费了(超出)资源仅适用于单个 MCU?
    • 避免了"所有代码编写要求"-只需正常运行的方式运行 MCU -无需(其他)古 MCU "深度学习"。  (µDMA 成功的少数人-先到先得!)
    • 避免了添加 "无关代码杂散"(这需要花费时间和精力来创建)和(可能)引入(仍然是进一步的) 错误。
    • 虽然我在这里重点介绍了您的特定"用例"、但我们开发了此类器件、以便 正确 地"执行、简化和增强许多模拟电路的"自动测试"、甚至超越了 MCU 的 ADC (和模拟比较器)

    根据 NDA -我们在  上个月的"Automatica (汽车)"展览了这款新型设备的多个版本-在美丽的慕尼黑!   (多个个人和公司认可并回应了我们 的"价值主张"-如此强大/令人信服/可识别- 是其 影响!)    (请注意 ,“none/zero” (无/零)... 其中的关键优势- 是 通过" 不要太先进、竞争(鹅卵石)方法"实现的!)

      设计(如此有效)特殊器件和方法(可能会重复使用)的能力值得您考虑。   (如 我所相信的那样、应该"真正且广泛可重复使用-有利的方法"-"将"吸引您的兴趣。)   

    我相信这两种方法的"优势"已经得到了很好的比较/对比 ...  即使是 "任何类型的噪声"和"类似陶瓷"引起的"影响"(或许)也是如此。   (此类噪声(如果有) 会对八次精度测量的连续(非常)产生相同的影响 (因此"有效"消除了吗?)    (虽然可能会造成"严重得多的破坏"-针对"重复使用、受限程度较低、 未指定的来源"方法...)

    这里有一个明显的赢家!

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

    可能需要注意的是、虽然您已经实现了(部分)测量的一致性、但实际的"真相时刻"(即 ADC 实际/实际执行其转换的时间点)未知!   我们可能"希望"以一致和成比例的速率发生、但这 绝不是孤立和测量的!

    除了我们的几个客户报告了不幸的" 此类转换结果的变化"-在衡量时-与您一样(似乎已经这么做-这里!   此类"变化"的可能性会快速增长-随着代码大小的扩展-许多中断都得到了服务-但并非总是如此-是否可以授予 ADC "顶犬"和/或"中断抢占!"   因此、该问题会放大得多-影响更大。

    再说一次-我不相信"转换已经(完全)通过这种方法被证明已经完成。"   确实发生了 ADC 中断'has (已发生)'-导致'GPIO 标记'-但这并不是-绝对-建议也不告知-转换已完全完成!    (数据表以"完整且恰当"的声明而闻名、但并非总是如此。)     因此、您的方法(严重)依赖于"希望"- 表示数据表的准确性。    然而 ,每一项索赔是否确实是事实, 而且这一事实 是否总是 可以运作的,而且在所有条件下都是如此!   真的吗?   (有很多希望/祈祷-进入了大楼...)

    这(真的)安全吗?   此处的用户出于(某些)原因对转换率提出了疑问。   在所有情况下、除了一个-调查的轻松性和敏捷性- 都主导(甚至取代) 真实和直接的测量!   对用户客户端来说,这是正确的,也是最大的价值吗?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好 CB1、
    我想澄清一些问题。 我不使用任何中断。 这就是我为测量所做的工作。
    1.将引脚设置为高电平
    2.通过处理器触发 ADC
    3、等待 ADC 中断标志置1
    4.清除引脚
    5.测量脉冲宽度。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    查尔斯

    我很困惑。 (这是不同寻常的...)

    请(更好)详细信息:

    • '将销钉置于高电平'。。 基于什么?
    • 如何检测设置的 ADC 中断标志? 寄存器读取、对它进行多少操作?    这不是很详细。
    • 为什么"清除引脚-然后(仅那时)进行脉宽测量?   这不是"明确的努力"-消耗时间-增加错误吗?

    我们对 ADC 中断标志的"详细度"有何实际了解?   尤其是在所有条件下提供"精度和始终可重复的性能"的能力!

    请注意 、我之前的"5个要点" (详述(更多)认真的测量工作)都没有收到任何评论。    只有"在被测器件内完成的任务"的持久防御、这证明 这远远超出了可接受的做法!

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

    您好 CB1、

     在第1步之前、我已经设置了 ADC (即序列发生器)。 它只是等待触发器开始转换。 我没有使用计时器作为触发器。 我希望避免中断、并更好地控制何时开始转换。 我首先设置 GPIO 引脚、然后立即由处理器启动序列发生器(软件触发器)以启动转换。 我将轮询、直到中断标志被置位、然后清除引脚。

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

    您好、Charles、  

    感谢 您的实验结果。 每个通道的不同转换时间(无论是否过采样)是 我在第一个时刻关注的情况。  

    我重复了测量、但未使用 DMR 更改 GPIO 状态、因此要将我的应用程序与您的结果进行比较。 您的结果与我的结果相当。 我在此仅报告8个通道的结果。

    通道数 过采样 绝对时间(平均值) 标准偏差 平均时间/通道
    8. 4倍 16.9us 49ns 2.11 μ s
    8. 0 8.89us 50ns 1.11us

    因此、如果  不进行过采样、我的卵巢采样率降低了0.05us (2.16-2.11)、而没有过采样、则减少了0.03us (1.14-1.11)。 但我认为这种微小的差异不是由于 ADC 的转换时间、而是由于不同的设置。 这里最重要的结果是、当过采样被启用时、平均时间/通道减少。 因此、我认为数据表中缺少一些内容。  

    我们丢弃的延迟会影响测量时间、以 纳秒为单位。  

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

    [引用用户="Charles Tsai"]…… 序列发生器-等待触发启动转换-基于计时器的触发器(替换为处理器触发器)-避免中断并更好地控制 ADC 转换的启动。[/QUERP]

    实际上、这(两者)是执行"转换持续时间度量"的一种资源丰富且巧妙的方法。    

    虽然这种方法"根据您的意愿命令 MCU "- 但它在我们海报表达的意图之外!    (之前被称为'5kHz、 基于定时器、 转换触发器'。)    

    请注意-多个"未知"入侵-可能会证明"程序敏感"-因此很难立即发现并(可能)令人沮丧/降低此类"转化措施"。

    并且-没有实现此类 ADC 转换"模拟值"的"精度测量仪表"-这是(部分)重要-是不是吗?

    替代方案"单调、精密线性电压斜坡"可避免(所有)这些缺点、同时为 MCU 提供正确匹配的阻抗...   (再次-未"触碰"-通过"完全实现"方法...)

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

    [引用 user="mm3010">mm3010]我们丢弃的延迟会影响测量时间、大约 为纳秒。  [/报价]

    这样一个"总括声明"可能会导致 (更多) 来自"希望"-同时(避免) MCU 计划的潜在影响-和(确定) "其他" MCU 外设和计划功能的"挑战性和竞争需求"?

    此"ADC 转换率"(必须)对您具有一定的重要性(否则-重点是什么)、并期望所有"未知"证明"无影响"未经过充分检查和测试...

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    嗨、Michele、
    我稍后会回来。 昨天我在运行 PIOSC 测试时出错、这是我的遗憾。 我将 ADC 配置为半速率转换速率、这使转换时间加倍。 我还与我的同事就 PLL 设置进行了一些讨论。 需要一些时间来解决它。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Michele、CB1、

     我获取了更多数据。 您需要在这里与我在一起。 下面是一个简短的总结。

     我在之前的 PIOSC 测试中犯了错误。 我错误地配置为半数据转换速率。 当 PIOSC 作为时钟源并以全数据速率运行 ADC 时、平均转换时间大约为1.25uS、这距离1Msps 不远。

     2.当您配置 VCO=480MHz 时、它不会为您提供480MHz、而是仅提供240MHz。 由于某些权变措施实现、即使您指定480MHz、SysCtlClockFreqSet() API 实际上也会将 VCO 配置为仅240MHz。 实际上没有  SYSCTL_CFG_VCO_240宏可供使用。 由于 VCO 以240MHz 运行、VCO/15之后的 ADCCLK 仅为16MHz。 这就是您接近1Msps 而不是2Msps 的原因。  

     如果  您配置 VCO=320MHz、它不能真正为您提供320MHz、而只能提供160MHz。  由于 VCO 以160MHz 运行、因此 VCO/10之后的 ADCCLK 仅为16MHz。 如果您选择 VCO=320MHz 并尝试除以10、则会得到大约1Msps 的结果、因为您会想到 ADCCLK 上可能会达到32MHz。

     4.为了获得2Msps、您可以选择 SYSCTL_CFG_VCO_480并将其除以8以获得 ADCCLK=30MHz、或者选择 SYSCTL_CFG_VCO_320并将其除以5以获得 ADCCLK=32MHz。 请注意、使用 SYSCTL_CFG_VCO_320时、您只会得到 SYSCLK=80MHz、而不是120MHz。 如果您希望以最大频率运行器  件并希望在 ADC 上获得2Msps、则需要选择 SYSCTL_CFG_VCO_480并除以8以获得 ADCCLK=30MHz。 如果你看看单元格 I6和 K6的结果、它们几乎是相同的。 与以30MHz 运行相比、32MHz ADCCLK 不能显著提高吞吐量。 原因是在32MHz 时 SYSCLK=80MHz、因此 CPU 运行速度较慢、我们讨论的所有延迟都将根据较慢的 SYSCLK 计时。

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

    你(们)好,查尔斯

    [引用用户="Charles Tsaa"]。 当您配置 VCO=480MHz 时、它不会为您提供480MHz、而是仅提供240MHz。 由于某些权变措施实现、即使您指定480mH[/ quot]、SysCtlClockFreqSet() API 实际上也会将 VCO 配置为仅240MHz

    RTOS 论坛对此进行了解释主时钟树 PLL 块将频率预除 2 、但现在您说 MainClockF requencySet()有一个错误吗?  那么我们在  ADCClockConfigSet()中只能得到8MHz ADC 时钟 div 30?   那么、雷达下方的飞行器怎么会这么容易呢?   与  之前的 LM3S8971 MCU 的1MSPS 相比、ADC 时钟似乎通过 div 15 (32MHz)为2MSPS。

    是否确定您没有对 ADC 模块进行超频?  

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

    与使用 PIOSC 获得的结果相比、这听起来很正确。

    我将使用 SYSCTL_CFG_VCO_480除以8来获得 ADCCLK=30MHz。 但是、这与 Tivaware 外设库用户指南中给出的示例不同、其中、它使用480/24来获得 ADCCLK=20MHz:

    //
    //将 ADC 配置为使用480MHz 的 PLL 除以24以获得 ADC
    // 20MHz 时钟。
    //
    ADCClockConfigSet (ADC0_BASE、ADC_CLOCK_SRC_PLL | ADC_CLOCK_RATE_FULL、24);


    您是否已尝试立即应用过采样?

    ADCclk 似乎比30MHz 快(比如60MHz、是实际 ADCclk 的2倍)!
    例如、对于4个过采样和8个通道、我测量的是1.15us avgTime/channel、这远远超过2MSPS!

    这是否与 SYSCTL_CFG_VCO_480权变措施相关?

    非常感谢您对 SysCtlClockFreqSet()的权变措施的解释。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

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

    查尔斯

    这一非常严重的"问题"、无论如何都不是由您引起的。   然而(当然)它非常干扰!

    我们注意到、这个问题是众所周知的、但从未发布/传播过、供应商悬崖太高、再次声称 新的受害者!

    "未能发出警报"似乎是一种(不幸的)但(几乎)"令人目前看来的行为"-这是不是吗?
    一个不出名的人-您的用户"、"关心和舒适!"

    可能会有更大的进口/兴趣...  这项"刚发布"的技术调查结果是否会影响"129系列的所有成员?   (这是某种导入-不是吗?)

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    也许主时钟树图错误地显示 ADC1/2模块使用相同的 PLL 输出和被标记为 VCO 输出的 PSYDIV 分频分支。 这肯定会解释一些 WTH 是 PLL 现在做了头部刮擦。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    嗨、Michele、
    您在 TivaWare 外设库用户指南中看到的示例预先设定了在 SysCtlClockFreqSet()中实现的权变措施更改。 因此、该描述会产生误导。 需要更新。

    就过采样而言,我昨天已经解释过了。 我还以4倍的采样率测量1.14uS。 但实际上、它仅以2倍而非4倍的速率进行过采样。 我昨天提到、我们需要一个勘误表。 它更像如下所示。

    数据表中写入的内容。
    Avg[2:0]= 0、无过采样
    Avg[2:0]= 1、2倍过采样
    Avg[2:0]= 1、4倍过采样
    Avg[2:0]= 1、8倍过采样
    Avg[2:0]= 1、16倍过采样
    Avg[2:0]= 1、32x 过采样
    Avg[2:0]= 1、64倍过采样

    [编辑:2018年7月13日]以下陈述错误。 请于2018年7月13日上午9:35查看我的最新博文。

    现实中:
    Avg[2:0]= 0、无过采样
    Avg[2:0]= 1、无过采样
    Avg[2:0]= 1、2倍过采样
    Avg[2:0]= 1、2倍过采样
    Avg[2:0]= 1、4倍过采样
    Avg[2:0]= 1、4倍过采样
    Avg[2:0]= 1、4倍过采样

    Avg[0]在编码中被忽略。

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

    [引用 USER="BP101]ADCClockConfigSet()  中只有8MHz ADC 时钟 div 30?  [/报价]

    是的、如果您将 VCO 配置为480Mh、然后除以30、则不是16MHz、而是8MHz。 这对我来说也是新的。 显然、时钟生成逻辑存在一些问题、需要在 SysCtlClockFreqSet()中创建权变措施。 也许目的是为了保持兼容性、因此  、SYSCTL_CFG_VCO_320和 SYSCTL_CFG_VCO_480仍然向用户呈现、但未能意识到这会影响 ADCCLK。 我的同事仍在深入了解这一主题的历史。  

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

    您好 CB1、

    [引用 USER="CB1_MOBILE"]

    我们注意到、这个问题是众所周知的、但从未发布/传播过、供应商悬崖太高、再次声称 新的受害者!

    "未能发出警报"似乎是一种(不幸的)但(几乎)"令人目前看来的行为"-这是不是吗?
    一个不出名的人-您的用户"、"关心和舒适!"

    [/报价]

    很抱歉,我不同意你的说法,即这是一个已知的问题,有意隐藏。 我们中至少有三个支持 TM4C 论坛的人现在知道这一点。 尽管如此、勘误表仍需立即进行澄清。  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    然而、MM3010报告的 ADC 采样时钟似乎为60MHz。 那么、该索赔是由于4倍过采样勘误表?

    PLL/PSYDIV 的工作完成了什么 Tivaware 版本?

    ADCHardwareOversampleConfigure()的奇怪之处在于,如果将 REG 文本中显示的十六进制除数(0x4)作为传递值,则调用将忽略除数。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好 BP101:
    我认为问题在 ADCHardwareOversampleConfigure()中。 读取源代码时、我不确定它为什么会执行所有移位、而它只能将参数直接写入寄存器。 我使用 DRM 写入0x1 (2个过采样)和0x2 (4个过采样)、从0x1需要将近2倍的转换时间的意义上讲、转换时间看起来是正确的。 使用0x3、所需的时间为4倍。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Charles、

    我通过计算器检查了调用代码、N << 4是正确的、因为它从针对 REG 66值的调用中传递的 N 中减去1。 但谁知道整数 N 对 ADC 模块时钟的作用、REG 66文本中的信息很少、无法解释0x70与时钟速率的关系。

    现在、我们看到 INA240传感器和 LM94022传感器的比率斜率非常高、看起来非常精确。 30Mhz ADC 时钟下的过采样0x2与16MHz 相比非常出色、我们相信 Rs 阻抗@16MHz。

    感谢数百万 mm3010的坚持不懈精神、感谢 Charles 研究 ADC 时钟难题!
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Charles、

    您不相信 ADCHardwareOversampleConfigure()用于循环位移 ,从快速计算器检查中可以看到,它可能已经将  REG12中的十六进制值加倍>>。

    也许通过这种方法、 在 REG12 位字段中调用使十六进制(0x2)传递十进制(1)、以此类推。

     

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

    您好、BP101、Michele、

     我对这种困惑深表歉意。 我想代码正试图模拟激进的表达式。 例如、如果用户按照 ADCHardwareOversampleConfigure (ADC0_BASE、64)中的方式指定64倍过采样、则64的基频为6、将写入 ADCSAC 寄存器的 AVG 域。 ADCHardwareOversampleConfigure()中没有错误。 这是我对 API 的误解。 再次阅读用户指南中的 API、它要求传递过采样因子、而不是编码值。 因此、如果您要进行64x 过采样、则会传递64、而不是0x6。 我刚刚尝试将64和32作为参数传递、并且写入 AVG 寄存器字段的值分别为0x6和0x5、并且正确。