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.

[参考译文] TMS320F28035:ILPFCkit PWM SOC 问题。

Guru**** 2524460 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/640014/tms320f28035-ilpfckit-pwm-soc-question

器件型号:TMS320F28035

大家好、在 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 进行两次采样。 但是、上面的代码的问题在哪里?


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

    每次 epwm1 counter=Period 时都会触发 epwm1SOCA、因此在一个 ISR 之间对 Ipfc、VL、VN、Vbus 进行两次采样。

    是的、IPFC 总共将在1个 ISR 周期内进行8次过采样。 VL、VN、Vbus 将在1个 ISR 周期内采样两次。 但是、由于 ISR 频率是 PWM1频率的一半、因此将仅使用一个(VL、VN、Vbus)样本。

    但下图显示、它们将仅采样一次。 下面的图片是合理的、因为在 ISR 中只处理一个结果、所以不能对 VL、VN 和 Vbus 进行两次采样。 但是、上面的代码的问题在哪里?

    是的、你是对的。 图片不够准确。 我认为图片是为了表明在一个 ISR 周期内只使用了一组(VL、VN、Vbus)。


    此致、
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、"ILPFC_BASH-Settings.h"中有下面的代码。 我想它将数字转换为 Q24格式、但为什么我们要乘以4095、而不是4096?
    #define VBUS_OVP_THRSHLD ((Int32)((435.0/VBUS_MAX_SENSE)*4095*4095))
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    在 ILPFC-DPL-ISR.asm 中、对于电压和电流环路控制(INCR_BUILD = 3)、软件流程可总结为:
    读取 ADC 结果--> PFC ICMD --> CNTL_2P2Z 电流控制--> PWM1寄存器更新-->计算1/(Vrms*Vrms)-->计算平均 Vbus --> CNTL_2P2Z 电压控制-->计算 Vrect。
    该序列看起来不合理,因为我们必须首先实现 CNTL_2P2Z 电压控制并获得输出,然后才能实现 CNTL_2P2Z 电流控制。 我们必须在 CNTL_2P2Z 电压控制之前计算 Vrect。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    对于正弦分析仪、为什么不设置阈值= 0、这样一个阈值有什么好处?
    //正弦分析器初始化
    Sine 主 V.Vin=0;
    Sine 主 V.Iin = 0;
    Sine _mains.SampleFreq=_IQ15 (10000.0);
    Sine 主阈值=_IQ15 (0.1);//(0.015);//(0.02);