主题中讨论的其他器件:SFRA
您好!
我正在使用 Vienna 整流器代码来执行 SFRA、并且 对于 PWM ISR 和 ADC SOC 具有以下疑问。
1. 是否可以 根据硬件中的 ADC 转换时间 (每个通道约为1us)修改 ADC SOC 触发信号,使其在控制 ISR 开始之前发生。
如果 I 权利、则根据 EPW1 模块的 CMPD 值设置 ADC 触发器、该值是根据 ADC 转换时间(200ns)计算得出的、如下所示。 或者 ADC SOC 和 EPW ISR 是否同时发生。 为什么要考虑 ADC SOC 的转换时间。
================================
VIENNA_HAL_setupTriggerForADC (VIENNA_HIGH_FREQ_PWM1_BASE);
void VIENNA_HAL_setupTriggerForADC (uint32_t base)
{
//
//在 CTR = CMPBD 时从计数器选择 SOC
//
ePWM_setADCTriggerSource (base、ePWM_SOC_A、ePWM_SOC_TBCTR_U_CMPD);
//
//将值写入 CMPB
//
EPWM_setCounterCompareValue (base、EPWM_COUNTER_COMPARE_D、
((uint16_t)((float32_t) VIENNA_PFC3PH_pwm_period *(float32_t) 0.5)
-(uint16_t)((float32_t) VIENNA_IL1_ACQPS_SYS_CLKS *(float32_t) 6.0
*(float32_t)(VIENNA_PWMSYSCLOCK_FREQ_Hz /(float32_t) VIENNA_CPU_SYS_CLOCK_FREQ_Hz)
-(uint16_t)((float32_t) VIENNA_ADC_CONV_TIME
*( float32_t ) VIENNA_PWMSYSCLOCK_FREQ_Hz *( float32_t ) 6.0 ));
//
//在第1个偶数处生成脉冲
//
EPWM_setADCTriggerEventPrescale (base、EPWM_SOC_A、1);
//
//在组上启用 SOC
//
EPWM_enableADCTrigger (base、EPWM_SOC_A);
}
========================================
对于控制 ISR、使用 EPM1模块的相同 CMPD 值生成中断、如下所示。
================================================================
VIENNA_HAL_enablePWMInterruptGeneration (
VIENNA_C28x_ISR1_INTERRUPT_TRIG_pwm_base
EPWM_getCounterCompareValue (VIENNA_HIGH_FREQ_PWM1_BASE、
epwm_counter_compare_D);
静态内联 void Vienna_HAL_enablePWMInterruptGeneration (uint32_t base、
uint16_t CMPC_val)
{
//
//将值写入 CMPC
//
EPWM_setCounterCompareValue (base、EPWM_COUNTER_COMPARE_C、
CMPC_val);
ePWM_setInterruptSource (base、ePWM_INT_TBCTR_D_CMPC);
EPWM_setInterruptEventCount (base、VIENNA_CNTRL_ISR_FREQ_RATIO);
EPWM_enableInterrupt (base);
EPWM_clearEventTriggerInterruptFlag (base);
}
========================================
2.为什么 当每个 ADC 模块没有被用来轮询结果寄存器来达到转换的结束时要为它设置中断。
ADC_setInterruptPulseMode (ADCA_BASE、ADC_PULSE_END_OF_CONV);
此致、
内拉哈




