大家好、在 ILPFC 项目的主函数中、有以下代码:
EPwm1Regs.ETSEL.bit.SOCAEN = 1;//启用 ePWM1 SOCA 脉冲
EPwm1Regs.ETSEL.bit.SOCASEL = ET_CTR_ZERO;//来自 ePWM1 Zero 事件的 SOCA
EPwm1Regs.ETPS.bit.SOCAPRD = ET_1ST;//针对每个事件触发 ePWM1 SOCA
EPwm1Regs.ETSEL.bit.SOCBEN = 1;//启用 ePWM1 SOCB 脉冲
EPwm1Regs.ETSEL.bit.SOCBSEL = ET_CTR_PRD;//来自 ePWM1 PRD 事件的 SOCB
EPwm1Regs.ETPS.bit.SOCBPRD = et_1st;//针对每个事件触发 ePWM1 SOCB
EPwm2Regs.ETSEL.bit.SOCAEN = 1;//启用 ePWM2 SOCA 脉冲
EPwm2Regs.ETSEL.bit.SOCASEL = ET_CTRL_CMPA;//来自 ePWM2 CMPA 向上事件的 SOCA
EPwm2Regs.ETPS.bit.SOCAPRD = ET_1ST;//针对每个事件触发 ePWM2 SOCA
EPwm2Regs.ETSEL.bit.SOCBEN = 1;//启用 ePWM2 SOCB 脉冲
EPwm2Regs.ETSEL.bit.SOCBSEL = ET_CTRD_CMPA;//来自 ePWM2 CMPA 递减事件的 SOCB
EPwm2Regs.ETPS.bit.SOCBPRD = et_1st;//针对每个事件触发 ePWM2 SOCB
//配置 EPWM 以生成 ADC SOC 脉冲
EPwm3Regs.ETSEL.bit.SOCAEN = 1;//启用 ePWM3 SOCA 脉冲
EPwm3Regs.ETSEL.bit.SOCASEL = ET_CTR_ZERO;//来自 ePWM3零事件的 SOCA
EPwm3Regs.ETPS.bit.SOCAPRD = ET_1ST;//针对每个事件触发 ePWM3 SOCA
EPwm3Regs.ETSEL.bit.SOCBEN = 1;//启用 ePWM3 SOCB 脉冲
EPwm3Regs.ETSEL.bit.SOCBSEL = ET_CTRL_CMPB;//来自 ePWM3 CMPB 的 SOCB UP 事件
EPwm3Regs.ETPS.bit.SOCBPRD = et_1st;//针对每个事件触发 ePWM3 SOCB
EPwm4Regs.ETSEL.bit.SOCAEN = 1;//启用 ePWM4 SOCA 脉冲
EPwm4Regs.ETSEL.bit.SOCASEL = ET_CTRL_CMPA;//来自 ePWM4 CMPA 向上事件的 SOCA
EPwm4Regs.ETPS.bit.SOCAPRD = ET_1ST;//针对每个事件触发 ePWM4 SOCA
EPwm4Regs.ETSEL.bit.SOCBEN = 1;//启用 ePWM4 SOCB 脉冲
EPwm4Regs.ETSEL.bit.SOCBSEL = ET_CTRU_CMPB;//来自 ePWM4 CMPB 递增事件的 SOCB
EPwm4Regs.ETPS.bit.SOCBPRD = et_1st;//针对每个事件触发 ePWM4 SOCB
epwm1SOCA 在每次 epwm1 counter=Period 时触发、因此在一个 ISR 之间对 IPFC、VL、VN 和 Vbus 进行两次采样。 但下图显示、它们将仅采样一次。 下面的图片是合理的、因为在 ISR 中只处理一个结果、所以不能对 VL、VN 和 Vbus 进行两次采样。 但是、上面的代码的问题在哪里?