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.

[参考译文] TMS320F280049:SoC 无法触发 ADC

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/853449/tms320f280049-soc-cannot-trigger-adc

器件型号:TMS320F280049

大家好、

我正在帮助我的客户调试他们的 S/W

cdoe 非常简单、使用 EPWM1 SOCA 触发 ADCA CH0。

这是它们的 PWM 设置、我可以在 CCS 中观察到 SOCA 标志:

ePWM_DisableADCtrigger (EPWM1_base、ePWM_SOC_A);
ePWM_setADCTriggerSource (EPWM1_base、ePWM_SOC_A、ePWM_SOC_TBCTR_U_CMPA);
ePWM_setADCTriggerEventPrescale (EPWM1_base、ePWM_SOC_A、3);
ePWM_enableADCtrigger (EPWM1_base、ePWM_SOC_A); 

这里是 ADC SOC 配置。 一切似乎都正常、但不会触发 SOC。

ADC_setVREF (ADCA_BASE、ADC_reference_external、ADC_reference_3_3V);

//
//将 ADCCLK 分频器设置为/4
//
ADC_setPrescaler (ADCA_BASE、ADC_CLK_DIV_4_0);

//
//将脉冲位置设置为晚期
//
ADC_setInterruptPulseMode (ADCA_BASE、ADC_PULSE_END_of _CONV);

//
//为 ADC 加电、然后延迟1ms
//

ADC_setupSOC (ADCA_BASE、ADC_SOC_NUMBER0、ADC_TRIGGER_EPWM1_SOCA、
ADC_CH_ADCIN0、10);

ADC_enableConverter (ADCA_BASE);
DEVICE_DELAY_US (1000);

此致、

Brian

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

    仅需说明一下、您是否看到设置了 SOC 触发器的标志?

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

    你好、Nima、

    正如您在第一张图片中看到的、PWM SOC 标志已设置。 但 ADC 标志不是

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

    这里是我的工作代码、

    这两个因素之间必须有微小的变化!

    #define ADC_ePWM EPWM7_BASE
    
    //
    //根据温度传感器的要求将 VREF 设置为外部电压。 请注意
    //在这种情况下,refVoltage 参数无效。
    //
    ADC_setVREF (ADCA_BASE、ADC_reference_internal、ADC_reference_3_3V);
    
    //
    //将 ADCCLK 分频器设置为/4
    //
    ADC_setPrescaler (ADCA_BASE、ADC_CLK_DIV_4_0);
    
    //
    //将脉冲位置设置为晚期
    //
    ADC_setInterruptPulseMode (ADCA_BASE、ADC_PULSE_END_of _CONV);
    
    //
    //为 ADC 加电、然后延迟1ms
    //
    ADC_enableConverter (ADCA_BASE);
    DEVICE_DELAY_US (1000);
    
    //
    //禁用 SOCA
    //
    ePWM_DisableADCtrigger (ADC_ePWM、ePWM_SOC_A);
    
    //
    //将 SOC 配置为在首次递增计数事件发生时发生
    //
    ePWM_setADCTriggerSource (ADC_ePWM、ePWM_SOC_A、ePWM_SOC_TBCTR_U_CMPA);
    ePWM_setADCTriggerEventPrescale (ADC_ePWM、ePWM_SOC_A、1);
    
    //
    //将比较 A 值设置为2048,将周期设置为4096
    //
    ePWM_setCounterCompareValue (ADC_ePWM、ePWM_COUNTER_COMPARE_A、500);
    ePWM_setTimeBasePeriod (ADC_ePWM、1000);
    
    //
    //冻结计数器
    //
    ePWM_setTimeBaseCounterMode (ADC_ePWM、ePWM_COUNTER_MODE_STOP_FREEZE);
    
    ADC_setupSOC (ADCA_BASE、ADC_SOC_NUMBER0、ADC_TRIGGER_EPWM7_SOCA、
    ADC_CH_ADCIN5、100);
    
    //
    //设置 SOC0以设置中断1标志。 启用中断并使其变为
    //确保其标志被清除。
    //
    ADC_setInterruptSource (ADCA_BASE、ADC_INT_NUMBER1、ADC_SOC_NUMBER0);
    
    ADC_enableInterrupt (ADCA_BASE、ADC_INT_NUMBER1);
    ADC_clearInterruptStatus (ADCA_BASE、ADC_INT_NUMBER1);
    
    
    uint32_t num = 0;
    __interrupt void adcA1ISR (void)
    {
    //
    //读取原始结果
    //
    //读取值= ADC_readResult (ADCARESULT_base、ADC_SOC_NUMBER0);
    
    //
    //清除中断标志并发出 ACK
    //
    ADC_clearInterruptStatus (ADCA_BASE、ADC_INT_NUMBER1);
    interrupt_clearACKGroup (interrupt_ACK_Group1);
    }
    
    

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

    谢谢 Nima、

    我会详细介绍一下正在发生的情况!