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.

[参考译文] TMS320F280049C:ADC 采样

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/986682/tms320f280049c-adc-sampling

器件型号:TMS320F280049C

您好、支持团队、

我需要对6个 ADC 输入信号进行采样。 至少需要在高频(每秒200KSP)下对其中的2个进行采样。 此外、这两者需要同时进行。

两个高电平同步触发 ADC 输入被设定为 ADCA 和 ADCB (用于同步采样)。

ePWM 至少需要触发5个信号、只能通过软件触发一个信号。  

我的问题:uC 无法对我的所有信号进行采样、产生的负载太高(当我尝试使用200KSP/s 对一个输入信号进行采样时、它始终为高电平)。 因此、我需要降低负载。 但是、当使用连续或突发模式时、如何实现5个信号的等距采样。 最好的选择可能是使用连续模式、并让 DMA 至少分流高频输入。  

其他信号的采样率为每秒12.800和25.600个样本。

但是、如果我将 ADCA 和 ADCB 设置为突发模式、我无法保证 ePWM 触发的5个信号等距触发...

您有什么建议要做什么吗? ADCA/ADCB 的 SOC0-7等用于 adca0、adcb0 (两个同步信号)和其他 SOC、用于剩余的3个信号、这些信号需要由 ePWM 触发、而我只能从软件在 ADCC 处触发6个信号。 我的样本必须等距,我不想对…进行过采样

此外、我尝试使用突发模式并将其设置为16个 SOC、并且我使用计数事件选项测量时间、当配置 ePWM 以每500个 CPU 周期触发一次时、会产生大约1077个周期。

我希望每16*500个周期就会有一个事件

将突发模式设置为8、相同的 ePWM、在2000个 CPU 周期后、我仍然接收到一个中断。 我正在使用 driverlib。

提前感谢。

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

    您好、Jan、

    我想这里有几个问题需要解决。  

    --

    首先:突发模式。  这不会使 ADC 采样更快、而是允许单个全局触发器导致转换突发。  例如、如果 ePWM3A 是突发触发器且突发大小为4、则每次接收到 ePWM3A 触发器时 、接下来的4个 SOC 将进行转换。  如果是所有循环 SOC,第一个触发器将导致 SOC0-SOC3转换,下一个触发器将导致 SOC4-SOC7转换,... 等等  这可以提供两个主要优势:仅在最后一次转换后缓冲 ADC 结果、以及对某些信号进行欠采样(这两种情况都可能对您有所帮助)。

    考虑以下设置:

    • ADC-A + B:突发模式、所有 SOC 循环(无高优先级 SOC)、突发大小= 2、突发触发= 200kHz ePWM
    • SOC0、2、4、... 14 =通道 A0或 B0
    • SOC1 = A1/B1  
    • SOC3 = A2/B2
    • SOC5、7、9、... 15 =虚拟通道
    • 由 ADC-A SOC15触发的 ADC ISR  

    ISR 将在8个 EPWM 触发后触发。  ADC-A 和 ADC-B 的 RESULT14将具有最新的 A0/B0结果,结果12将具有 t-1 A0/BO 结果... 到具有 t - 7 A0/B0结果的 RESULT0。  A0/B0的有效采样率为200kHz、ISR 速率为200kHz/8 = 25kHz。  样本是等距的。  

    每个 ISR 还将为 A1/B1/A2/B2生成1个新结果、因此这些通道的采样率为25kHz (相对于触发频率的欠采样)

    注意: 对于您的特定情况、一种更好的策略可能是对非同步采样使用 ADC-C、所有 ADC 都处于突发模式、且突发大小= 1。  这将允许每个 ISR 处理16个 A0/B0结果、并在其他通道上进行高达/16的采样、从而使您达到所需的~12kHz 速率。  

    --

    其次:DMA

    如果 您尝试构建更长的记录或 A0/B0而不对每个新的 A0/B0样本执行控制操作、请务必使用 DMA。   您可以在突发模式下使用此模式、也可以在不使用突发模式时使用此模式、触发 DMA 的方式与 ISR 相同(来自 ADCINT)。  在突发模式情况下、您可以触发 DMA 和 ISR (也许 ISR 会处理 MISC。 转换、但允许 DMA 构建 A0/B0转换记录)。

    --

    第三步:异步。 触发

    需要记住的一个重要事项是、如果您的较慢 ePWM 触发器与~200kHz ePWM 异步、则 如果样本共用一个 ADC、您可能无法获得等间隔样本。  这是因为、即使在"高优先级"SOC 的情况下、ADC 也不会放弃进程内转换、因此如果您的较慢环路正在进行 ADC 转换、则较快环路的转换可能仍会延迟。

    • 实际上、PPB 延迟捕获功能可用于确定转换是否延迟以及延迟时间(以周期为单位)、这是否有用
    • 在这种情况下、最大延迟也大约是1个 ADC 转换的时间、如果这是可以容忍的

    另一种选择是分配您的异步。 转换为单个 ADC (例如 ADC-C)。  遗憾的是、由于异步、此器件不推荐/不支持此操作。 ADC 会相互干扰、从而导致较差的模拟性能。  

    --

    总的来说、3个 ADC 突发模式情况是否适合您? 或者、基于 ePWM 的较慢转换是否以异步方式或与较快 ePWM 相关的可变时序发生?    

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

    您好 Devin、

    非常感谢您的输入。 老实说、这是我的第一个 TI 器件、因此我需要提出一些进一步的问题:

    在突发模式下、优先级是否始终被移除? 或者,我是否需要调用 ADC_enableBurstMode 以外的更多例程 

    _________

    请注意:如果我获得了正确的文档、则无法将 ADC C 配置为使用 ePWM。 但它们也应由 ePWM 触发。 我可以释放一个计时器、但实际上它们正在使用中。  

    一般而言、我们将进行重新设计、我的硬件说我可以自由选择哪个信号将位于哪个 ADC 上。

    _________

    是否有任何示例可同时使用 DMA 和突发模式、还是只需在  此处设置配置并使用 DMA_TRIGGER_ADCA0?

     DMA_CONFIGMode (DMA_CH1_BASE、DMA_TRIGGER_ADCA0、
    (DMA_CFG_OneShot_disable | DMA_CFG_Continuous_disable |
    DMA_CFG_SIZE _ 32位));

    _________

    第三步:异步。 触发

      与200KSP 异步意味着什么。

    --

    您的问题:

    总的来说、3个 ADC 突发模式情况是否适合您? 或者、基于 ePWM 的较慢转换是否以异步方式或与较快 ePWM 相关的可变时序发生?    

    基于 ePWM 的较慢信号只是平均滤波以降低噪声。 在这方面,我认为,如果样本不完全等距,是可以的。 因此、频率较低的信号受 A0/B0的影响、但不依赖于它们。 此外,我只需要每100或500毫秒处理一次,我只需要查看在最后一个 A0/B0周期(一个 A0/B0 2.5毫秒的正弦波)期间测量的样本。

    目前、我只为每个信号使用 ISR、因此在处理信号时、我只能停止 ePWM 触发。 如果我可以将其他信号移至 ADCC、我只需停止 ePWM、我不需要实现双头缓冲器节省存储器、但正如我所问的、ADC 不能使用 ePWM、对吧?  

    高采样信号也应由 CLA 处理、在这里、DMA 可用于直接将数据移动到 CLA 共享存储器中?

    提前感谢。

    1月

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

    您好、Jan、

    不用担心、我们会解决问题。   ADC 包装程序非常灵活、但这会为它提供一些学习曲线。  我将在这里点击要点、如果我错过了一个子问题、请随时询问后续问题:

    [引用 userid="452547" URL"~/support/microcontrollers/c2000/f/c2000-microcontrollers-forum/986682/tms320f280049c-adc-sampling/3645910 #3645910"]无法将 ADC C 配置为使用 EPWM/quote]

    ADC-C 具有与其他 ADC 相同的触发选项;您可以将其设置为使用基于 ePWM 的触发

    [引用 userid="452547" URL"~/support/microcontrollers/c2000/f/c2000-microcontrollers-forum/986682/tms320f280049c-adc-sampling/3645910 #3645910"]  异步至200KSP 意味着什么。

    如果 ePWM1为200kHz 并触发 SOC0 - SOC3、而 ePWM2为13kHz (或可变频率)并触发 SOC4-SOC7、则会出现这种情况。  频率不可平均分频、因此 ePWM2触发将在 ePWM1触发之前或之后随机发生、导致两组 SOC 有时被延迟。  根据情况、我认为您不会遇到这种情况。

    [报价 userid="452547" URL"~/support/microcontrollers/c2000/f/c2000-microcontrollers-forum/986682/tms320f280049c-adc-sampling/3645910 #3645910"]是否处于突发模式,优先级是否始终被删除?

    突发模式使用循环(非高 优先级) SOC。  默认情况下、所有 SOC 都是循环的、因此突发模式使用所有16个 SOC。   

    如果您想说3次转换的3次突发、则不会均匀地分为16个 SOC。  如果您设置优先级控制、使 SOC0至 SOC6为高优先 级、而 SOC7至 SOC15将循环、则最终会有9个 SOC 用于突发模式。  然后,第一个突发触发器将转换 SOC7-SCO9,第二个 SOC10-SOC12,下一个 SOC13-SCO15,下一个 SOC7-SOC9,... 等等  高优先级 SOC 使用单独的 SOC 触发器、而不是突发触发器(因此、如果您真的想混合突发模式和 SOC 模式)。

    [引用 userid="452547" URL"~/support/microcontrollers/c2000/f/c2000-microcontrollers-forum/986682/tms320f280049c-adc-sampling/3645910 #3645910"] SoC 是否设置正确?[/quot]

    是的、这看起来是设置方法、 但请注意、如果您将突发大小设置为2并将所有 SOC 设置为 CH0、则会得到一个转换序列:

    第1个 PWM1A 触发器:2次转换、CH0然后 CH0背对背(存储在 RESULT0和 Result1中)

    第二个 PWM1A 触发:2次转换、CH0然后 CH0背对背(存储在 Result2和 Result3中)

    (笑声)

    我认为这不是你想要的。 我最初的建议是在每组中使用第二次转换、以通过较慢的转换进行轮换。

    --

    总的来说、在更好地了解您的要求后、我认为您需要:

    ADC-A

    • 突发模式、触发= PWM1A、Burstsize = 1、SOC0-SOC15 =通道0 (A0)   

    ADC-B

    • 突发模式、触发= PWM1A、Burstsize = 1、SOC0-SOC15 =通道0 (B0)   

    ADC-C

    • 突发模式、触发= PWM1A、Burstsize = 1
      • SOC0 = 25ksps  信号1在 ADC-C 通道 V 上
      • SOC1 = ADC-C  通道 W 上的25ksps 信号2
      • SOC2 = ADC-C 通道 X 上的12.5ksps 信号1
      • SOC3 =   ADC-C 通道 Y 上的12.5ksps 信号2
      • SOC4 = ADC-C   通道 Z 上的12.5ksps 信号3
      • SOC5 =虚拟
      • SOC6 =虚拟
      • SOC7 =虚拟
      • SOC8 = 25ksps 信号1 、在 ADC-C 通道 V 上
      • SOC9 = ADC-C 通道 W 上的25ksps 信号2
      • SOC10 =虚拟
      • SOC11 =虚拟
      • SOC12 =虚拟
      • SOC13 =虚拟
      • SOC14 =虚拟
      • SOC15 =虚拟

    其中一个 ADC 的 SOC15会触发 ADC ISR (和/或 DMA 和/或 CLA 任务)

    这将导致25ksps 和12.5ksps 信号具有等间隔的样本、但彼此之间存在一些相位偏移(例如、SOC1和 SOC2将以1/2200kHz = 5us 的间隔进行采样)。  如果这是一个问题、我认为您需要对与200kHz ePWM 同步的每个采样率使用较慢的 ePWM 模块。  

    [引用 userid="452547" URL"~/support/microcontrollers/c2000/f/c2000-microcontrollers-forum/986682/tms320f280049c-adc-sampling/3645910 #3645910"] CLA 也应处理高采样信号,此处可以使用 DMA 将数据直接移动到 CLA 共享内存中?

    我不确定是否有任何内存被映射到 DMA 和 CLA。  通常、CLA 获取结果并对其进行处理将无需使用 DMA (因为任务已经从 CPU 中卸载)、而上述方案已经将 ISR 或 CLA 任务触发速率降低到12.5kHz、 这应该是非常易于管理的带宽。  

    我建议让采样方案按照您需要的方式工作、然后可能创建一个新线程来询问 CLA 或 DMA 配置。  这将导致该线程  被路由到对 这些外设更了解的人(可以随时链接回该线程)。    

     

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

    感谢您的详细回答。 这会将问题分类出来。