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.

[参考译文] TMS320F28377S:ADC 正在采集样本、如何在示波器上查看?

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1430133/tms320f28377s-adc-is-acquiring-samples-how-to-see-on-oscilloscope

器件型号:TMS320F28377S

工具与软件:

尊敬的 TI:  

我正在尝试了解由其他人实施的项目、他们有

 使用 PWM1和 PWM5触发 ADC。 设置如下:

TBPRD= 1000向上和1000向下= 2000

    EPWM_setCounterCompareValue(EPWM1_BASE,EPWM_COUNTER_COMPARE_C,20);// for ADC triggering
    EPWM_setCounterCompareShadowLoadMode(EPWM1_BASE,EPWM_COUNTER_COMPARE_C,EPWM_COMP_LOAD_ON_CNTR_ZERO);

    EPWM_setCounterCompareValue(EPWM5_BASE,EPWM_COUNTER_COMPARE_C,980);// for ADC triggering
    EPWM_setCounterCompareShadowLoadMode(EPWM5_BASE,EPWM_COUNTER_COMPARE_C,EPWM_COMP_LOAD_ON_CNTR_ZERO);
     
     
       EPWM_setADCTriggerSource(EPWM1_BASE,EPWM_SOC_A,EPWM_SOC_TBCTR_D_CMPC );
    // Generate pulse on 1st event
    EPWM_setADCTriggerEventPrescale(EPWM1_BASE,EPWM_SOC_A,1);
    // Enable SOC on A group
    EPWM_enableADCTrigger(EPWM1_BASE,EPWM_SOC_A);
   
    EPWM_setADCTriggerSource(EPWM5_BASE,EPWM_SOC_A,EPWM_SOC_TBCTR_U_CMPC );
    // Generate pulse on 1st event
    EPWM_setADCTriggerEventPrescale(EPWM5_BASE,EPWM_SOC_A,1);
    // Enable SOC on A group
    EPWM_enableADCTrigger(EPWM5_BASE,EPWM_SOC_A);

所有 ADCx 模块均已使用、SOC 从0至13开始。  

ADC 通过 SCO12触发、设置如下所示。  

    Interrupt_register(INT_ADCC1, &ADC_ISR);
    ADC_setInterruptSource(ADCC_BASE ,ADC_INT_NUMBER1,ADC_SOC_NUMBER12);
    ADC_enableContinuousMode(ADCC_BASE ,ADC_INT_NUMBER1);
    ADC_enableInterrupt(ADCC_BASE,ADC_INT_NUMBER1);
    Interrupt_clearACKGroup(INTERRUPT_ACK_GROUP1);
    Interrupt_enable(INT_ADCC1);//GM adc oversampling

1、我理解此设置将采集如上图所示的样本,正确吗?  

2.我可以使用什么标志来切换 GPIO 以查看示波器上的样本采集?

3. 我计算了 ADC 模块从 SOC0到 SOC13所需的总时间,但如何在示波器上进行确认和测量?

4. ADC 何时开始转换? 因为我想在 SOC0启动时切换 GPIO、并且使用此标志 ADCSOCFLG1生成 SOC12的触发信号  

 我已  检查 EPwm1Regs.ETFLG.bit.SOCA 以查看 SoC 是否生成了事件、运行正常。  

我已经检查 AdccRegs.ADCINTFLG.bit.ADCINT1以查看是否生成了中断、运行正常。  

感谢 您提供任何帮助。  

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

    您好!

    我会在一周的末回到你的身边。 很抱歉耽误你的时间。  

    此致、

    Ben Collier

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

    没问题、等待您的回复。  

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

    尊敬的 Benjamin:  

    我可以在这方面获得您的帮助吗?

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

    您好!

    很抱歉耽误你的时间。  

    1. 我已了解此设置将采集如上图所示的样本、正确吗?  [报价]

    每个 ADC SOC 只能由单个 PWM 触发。  

    我不确定这样说是什么意思、您可以使用任何 GPIO。  

    3.  我计算了 ADC 模块从 SOC0到 SOC13所用的总时间、但如何在示波器上进行确认和测量?[/QUOT]

    我认为输出触发 SOC0的 PWM 信号、然后测量由 SOC13切换的 GPIO 和由 SOC13触发的 ISR 最简单。

    4. 何时 ADC 开始转换? 因为我想在 SOC0启动时切换 GPIO、并且使用此标志 ADCSOCFLG1[/QUOT]生成 SOC12触发信号  

    我不确定我是否理解这个问题。 您能解释一下吗?  

    此致、

    Ben Collier

    [/quote]
    [/quote]
    [/quote][/quote]
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [报价 userid="531788" url="~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1430133/tms320f28377s-adc-is-acquiring-samples-how-to-see-on-oscilloscope/5499561 #5499561"]我不确定您的意思、您可以使用任何 GPIO。  [报价]

    感谢你的评分  

    是的、我可以使用任何 GPIO、但基本而言、我想要在 SOC0启动转换复位 GPIO 时设置 GPIO、同时触发 SOC12转换。 如下面代码所示、我已在 ADC ISR 中设置并清除了 GPIO45、但在探测 GPIO45时、我在示波器上没有获得预期时间。 你能帮我理解为什么吗?  (我在手册中读过、ADCSOCFLG1中的"1"表示该特定 SOCx 的采样正在等待)。  

        if( AdccRegs.ADCSOCFLG1.bit.SOC0 == 1)
        {
            GpioDataRegs.GPBSET.bit.GPIO45 = 1;
        }
        if( AdccRegs.ADCSOCFLG1.bit.SOC12 == 1)
        {
            GpioDataRegs.GPBCLEAR.bit.GPIO45 = 1;
        }

    此外、 当 CMPC 在向下计数达到半个周期时、EPWM4会触发 SOCA、因此当 ADC 触发中断标志到达时、我切换2个 GPIO、一个在 ADC ISR 循环内、另一个在 ADC 触发中断标志到达时、如下所示。

    interrupt void ADC_ISR(void)
    {
        GpioDataRegs.GPBSET.bit.GPIO45 = 1;
        
      //  ADC trigger interrupt flag
            if (AdccRegs.ADCINTFLG.bit.ADCINT1 == 1) 
            {
                   
                GpioDataRegs.GPCTOGGLE.bit.GPIO88 = 1;
                AdccRegs.ADCINTFLGCLR.bit.ADCINT1 = 1;  // Clear the flag
            }
    
        GpioDataRegs.GPBRESET.bit.GPIO45 = 1;
    }

    此代码的结果在示波器上捕获、如下所示( 黄色- ADC ISR GPIO45、绿色为 ISR FLAG-GPIO88 ,休息2是 PWM2A 和 PWM2B),问题是为什么绿色是到达后黄色? 绿色不应该在黄色之前开始?  因为 ADC ISR 应到达 EOC12。  

    此致!  

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

    您好!  

    从查看 ADC_ISR 中的代码可以清楚地看出、在切换 GPIO88前 GPIO45将被设置。 我认为用于轮询 ADCSOCFLG1的代码工作不正常。  

    如果您只想测量执行这些转换所用的时间、我建议执行以下简单的过程:

    1.软件触发器 SOC0-SOC12

    2.切换 GPIO45

    3.一定要等待 ADC 转换完成、可能要等到设置了 ADCINT 标志

    再次切换 GPIO45

    这基本上是在我们的 ADC 软件触发器(ex1)示例中完成的操作。  

    此致、

    Ben Collier