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.
大家好、
我正在帮助我的客户调试他们的 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、
我会详细介绍一下正在发生的情况!