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.

[参考译文] CCS/TMS320F28377S:ePWM 设置

Guru**** 2484615 points
Other Parts Discussed in Thread: TMS320F28377S

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/685707/ccs-tms320f28377s-epwm-setup

器件型号:TMS320F28377S

工具/软件:Code Composer Studio

我们使用 TMS320F28377S 来控制电梯的三相同步电机、并使用 ePWM1A/B-ePWM3A/B 来生成三相 SVPWM 输出。 EPWM6A 用于输出脉冲信号以控制升运器制动器。 SYSCLKOUT=120MHz。 调用以下函数来配置 ePWM 模块:

void SetPWM123 (void)//为 SVPWM 设置 ePWM1/2/3模块

{EPwm1Regs.TBCTL.bit.SYNCOSEL =0;/*直通*/

  EPwm2Regs.TBCTL.bit.SYNCOSEL =0;/*直通*/

  EPwm3Regs.TBCTL.bit.SYNCOSEL =0;/*直通*/

  EPwm1Regs.TBCTL.bit.PHSEN =1;/*允许每个定时器同步*/

  EPwm2Regs.TBCTL.bit.PHSEN =1;/*允许每个定时器同步*/

  EPwm3Regs.TBCTL.bit.PHSEN =1;/*允许每个定时器同步*/

  EPwm1Regs.TBPRD =2000;//设置定时器周期、

  EPwm2Regs.TBPRD =2000;//设置定时器周期

  EPwm3Regs.TBPRD =2000;//设置定时器周期

  EPwm1Regs.TBPHS.bit.TBPHS =0;//相位为0

  EPwm2Regs.TBPHS.bit.TBPHS =0;//相位为0

  EPwm3Regs.TBPHS.bit.TBPHS =0;//相位为0

  EPwm1Regs.TBCTL.ALL =0xA08A;/0x2092;自由运行、同步时递增计数、TBCLK 30M、

  EPwm2Regs.TBCTL.ALL =0xA08A;/0x2086;自由运行、同步时递增计数、TBCLK 30M

  EPwm3Regs.TBCTL.ALL =0xA08A;//0x2086;自由运行、同步时递增计数、TBCLK 30M、

  EPwm1Regs.CMPCTL.ALL = 0;//在 CTR=0时加载 CMPA/B,影子模式

  EPwm2Regs.CMPCTL.ALL = 0;//在 CTR=0时加载 CMPA/B,影子模式

  EPwm3Regs.CMPCTL.ALL = 0;//在 CTR=0时加载 CMPA/B,影子模式

  EPwm1Regs.CMPA.bit.CMPA =200;// CMPA

  EPwm2Regs.CMPA.bit.CMPA =200;// CMPA

  EPwm3Regs.CMPA.bit.CMPA =200;// CMPA

  EPwm1Regs.AQCTLA.all =0x61;//设置 wehn CAU,在 CAD 或 CTR=0时清除

  EPwm2Regs.AQCTLA.ALL =0x61;//设置 wehn CAU、在 CAD 或 CTR=0时清除

  EPwm3Regs.AQCTLA.all =0x61;//设置 wehn CAU,在 CAD 或 CTR=0时清除

  EPwm1Regs.DBCTL.ALL =11;//启用死区、高电平有效互补

  EPwm2Regs.DBCTL.ALL =11;//启用死区、高电平有效互补

  EPwm3Regs.DBCTL.ALL =11;//启用死区、高电平有效互补

  EPwm1Regs.DBRED.ALL =60;// PWM 上升沿延迟

  EPwm1Regs.DBFED.ALL =60;// PWM 下降沿延迟

  EPwm2Regs.DBRED.ALL =60;// PWM 上升沿延迟

  EPwm2Regs.DBFED.ALL =60;// PWM 下降沿延迟

  EPwm3Regs.DBRED.ALL =60;// PWM 上升沿延迟

  EPwm3Regs.DBFED.ALL =60;// PWM 下降沿延迟

  EALLOW;

  EPwm1Regs.TZCTL.ALL =10;//设置触发区信号会将 ePWM1A/B 引脚输出清零为低电平

  EPwm2Regs.TZCTL.ALL =10;//设置触发区信号会将 ePWM1A/B 引脚输出清零为低电平

  EPwm3Regs.TZCTL.ALL =10;//设置触发区信号会将 ePWM1A/B 引脚输出清零为低电平

  EPwm1Regs.TZFRC.bit.OST = 1;//强制 ePWM1A 和 ePWM1B 引脚输出低电平

  EPwm2Regs.TZFRC.bit.OST = 1;//强制 ePWM2A 和 ePWM2B 引脚输出低电平

  EPwm3Regs.TZFRC.bit.OST = 1;//强制 ePWM1A 和 ePWM3B 引脚输出低电平

  EDIS;

  EPwm1Regs.TBCTR = 0;//清除计数器

  EPwm2Regs.TBCTR = 0;//清除计数器

  EPwm3Regs.TBCTR = 0;//清除计数器

  EPwm6Regs.TBCTL.ALL =0xA08A;//自由运行,同步时递增计数,TBCLK 30M

  EPwm6Regs.TBPRD =12500;//设置定时器周期、1.2kHz

  EPwm6Regs.AQCTLA.ALL =0x61;

  EPwm6Regs.DBCTL.ALL =8;//禁用死区、高电平有效互补

  EPwm6Regs.CMPA.bit.CMPA =10000;// CMPA

  EPwm6Regs.TBCTR = 0;//清除计数器

  EALLOW;

  CpuSysRegs.PCLKCR0.bit.TBCLKSYNC=1;

  EPwm6Regs.TZCTL.ALL =2;//设置触发区信号会将 ePWM6A 引脚输出清零为低电平

  EPwm4Regs.TZFRC.bit.OST = 1;//强制 EPWM4A 引脚输出低电平、不制动

  EPwm6Regs.TZFRC.bit.OST = 1;//强制 ePWM6A 引脚输出低电平、非开路锁定

  EDIS;

调用以下函数来启动 ePWM 输出:

void EPinPWM123 (void)//启用 ePWM1/2/3引脚输出

{EALLOW;

  Cla1Regs.MICLR.all =0xFF;//清除所有 CLA 中断标志

  Cla1Regs.MICLROVF.ALL =0xFF;//清除所有 CLA 中断溢出标志

  Cla1Regs.MIER = 0x81;//启用 CLA 中断1、8、禁用7

  EDIS;

  AdcaRegs.ADCINTFLGCLR.All=15;//清除 ADCAINT1-4

  AdcaRegs.ADCINTOVFCLR.All=15;//清除 ADCAINTOVFCLR1-4

  EPwm1Regs.ETCLR.ALL =5;//清除 EPWM1 INT、ADCA

  EALLOW;

  PieVectTable.EPWM1_INT =&epwm1_timer_ISR;

  EPwm1Regs.TZCLR.bit.OST = 1;//启用 ePWM1A 和 ePWM1B 引脚输出

  EPwm2Regs.TZCLR.bit.OST = 1;//启用 ePWM2A 和 ePWM2B 引脚输出

  EPwm3Regs.TZCLR.bit.OST = 1;//启用 ePWM1A 和 ePWM3B 引脚输出

  EPwm6Regs.TZCLR.bit.OST = 1;//启用 ePWM6A

  EDIS;

  EPwm1Regs.ETSEL.ALL =0x909;// SOCA 当 TBCTR =TBPRD 时、启用下溢

EPwm1Regs.CMPA.bit.CMPA、EPwm2Regs.CMPA.bit.CMPA 和 EPwm3Regs.CMPA.bit.CMPA 的值在 Cla1Task1中计算和设置(void)、而 SVPWM 波在 ePWMxA/B 中输出(x=1/2/3)。

调用以下函数来停止 PWM 输出:

void LPinPWM123 (void)//强制 ePWM1/2/3输出为低电平

{EALLOW;

  EPwm1Regs.TZCTL.ALL =10;//设置触发区信号会将 ePWM1A/B 引脚输出清零为低电平

  EPwm2Regs.TZCTL.ALL =10;//设置触发区信号会将 ePWM1A/B 引脚输出清零为低电平

  EPwm3Regs.TZCTL.ALL =10;//设置触发区信号会将 ePWM1A/B 引脚输出清零为低电平

  EPwm6Regs.TZCTL.ALL =2;//设置触发区信号会将 ePWM1A/B 引脚输出清零为低电平

  EPwm1Regs.TZFRC.bit.OST = 1;//强制 ePWM1A 和 ePWM1B 引脚输出低电平

  EPwm2Regs.TZFRC.bit.OST = 1;//强制 ePWM2A 和 ePWM2B 引脚输出低电平

  EPwm3Regs.TZFRC.bit.OST = 1;//强制 ePWM1A 和 ePWM3B 引脚输出低电平

  EPwm3Regs.TZFRC.bit.OST = 1;//强制 ePWM6A 输出为低电平

  EDIS;

调用上述函数来启动和停止 PWM 输出大约3~7 μ s 次(PWM 模块正常运行)、然后启动 PWM 输出、而不管 EPwmxRegs.CMPA.bit.CMPA、ePWMxA/B (x=1/2/3)输出高电阻的值同时、 或者同时输出高电平、ePWM6A 始终为高电阻或高电平。 原因是什么?

我们认为可能的原因是程序中有一个超出范围的指针写入操作、并且 EPwmxRegs.TZCTL 或 EPwmxRegs.TBCTL 寄存器被错误地修改。 我们仔细检查了所有代码、没有发现任何此类情况。

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

    这是我对这个问题的理解:
    * ePWM 模块按预期启动和运行
    *如果使用上述功能停止模块然后启动,则在随机数次(3到7次)后,ePWM 模块将无法启动

    这似乎是 ePWM 进入一个不一致状态(而不是一个红色指针写入)的问题。 您能否检查关键 ePWM 寄存器的值、并查看再次正确启动的情况与无法启动的情况之间是否存在差异?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [Ramesh] Devin、这是用户对我关闭的另一个线程的查询。

    您好、Cottier

    感谢您的指导。

    我们测试了 ePWM 模块的一些寄存器、包括 EPwmxRegs.TZFLG.ALL、EPwmxRges.TZCTL.ALL、EPwmxRges.DBCTL.ALL、EPwmxRges.AQCTL.ALL、 EPwmxRges.AQCTLA.ALL、EPwmxRges.TBCTL.ALL、(x=1/2/3)。所有这些寄存器的值都是预期值。 在测试期间、我们发现当 ePWM 模块不能正常工作时、一些函数调用不会执行、尤其是闪存程序调用在 RAM 中运行的函数、或者 RAM 程序调用在闪存中运行的函数。 是 CMD 文件错误吗? 以下是 CMD 文件。 请帮助您查看是否存在任何错误或不恰当。


    //如果使用、用户必须在项目链接器设置中定义 CLA_C


    // CLA C 编译器


    //项目属性-> C2000链接器->高级选项->命令文件


    //预处理->--define


    #ifndef CLA_C


    #define CLA_C


    #endif //cla_C


    #ifdef CLA_C


    //为将要使用的 CLA 暂存区定义大小


    //由 CLA 编译器生成局部符号和 temps


    //还强制引用标记的特殊符号


    //暂存区是。


    CLA_ScratchPad_size = 0x100;


    --undef_sym=__cla_scratchpad_end


    --undef_sym=__cla_scratchpad_start


    #endif //cla_C


    存储器





    第0页:


    /* begin 用于"引导至 SARAM"引导加载程序模式*/





    开始 :origin = 0x080000、length = 0x000002


    RAMM0 :origin = 0x000122、length = 0x0002DE


    RAMD0 :origin = 0x00B000、length = 0x000800


    RAMLS0_1 :origin = 0x008000、length = 0x001000


    RAMLS3_5 :origin = 0x009800,length = 0x001800


    //RAMLS3 :origin = 0x009800,length = 0x000800


    //RAMLS4 :origin = 0x00A000、length = 0x000800


    //RAMLS5 :origin = 0x00A800,length = 0x000800


    RAMGS14 :origin = 0x01A000、length = 0x001000


    RAMGS15 :origin = 0x01B000、length = 0x001000


    复位 :origin = 0x3FFFC0,length = 0x000002


    /*闪存扇区*/


    FLASHA :origin = 0x080002、length = 0x001FFE //片上闪存*/


    FLASHB :origin = 0x082000、length = 0x002000 //片上闪存*/


    FLASHC :origin = 0x084000、length = 0x002000 //片上闪存*/


    FLASHD :origin = 0x086000、length = 0x002000 //片上闪存*/


    FLASHE :origin = 0x088000、length = 0x008000 //片上闪存*/


    FLASHF :origin = 0x090000、length = 0x008000 //片上闪存*/


    FLASHG :origin = 0x098000、length = 0x008000 //片上闪存*/


    FLASHH :origin = 0x0A0000、length = 0x008000 //片上闪存*/


    FLASHI :origin = 0x0A8000,length = 0x008000 //片上闪存*/


    FLASHJ :origin = 0x0B0000、length = 0x008000 //片上闪存*/


    FLASHK :origin = 0x0B8000,length = 0x002000 //片上闪存*/


    FLASHL :origin = 0x0BA000、length = 0x002000 //片上闪存*/


    FLASHM :origin = 0x0BC000、length = 0x002000 //片上闪存*/


    FLASHN :origin = 0x0BE000、length = 0x002000 //片上闪存*/





    第1页:


    BOOT_RSVD :origin = 0x000002、length = 0x000120 // M0的一部分,引导 ROM 将此用于堆栈*/


    RAMM1 :origin = 0x000400、length = 0x000400 /*片上 RAM 块 M1 */


    //RAMLS0 :origin = 0x008000、length = 0x000800


    //RAMLS1 :origin = 0x008800,length = 0x000800


    RAMLS2 :origin = 0x009000、length = 0x000800


    //RAMLS3 :origin = 0x009800,length = 0x000800


    RAMGS0 :origin = 0x00C000、length = 0x001000


    RAMGS1 :origin = 0x00D000、length = 0x001000


    RAMGS2 :origin = 0x00E000、length = 0x001000


    RAMGS3 :origin = 0x00F000、length = 0x001000


    RAMGS4. :origin = 0x010000,length = 0x001000


    RAMGS5. :origin = 0x011000,length = 0x001000


    RAMGS6 :origin = 0x012000,length = 0x001000


    RAMGS7 :origin = 0x013000、length = 0x001000


    RAMGS8. :origin = 0x014000、length = 0x001000


    RAMGS9. :origin = 0x015000,length = 0x001000


    RAMGS10 :origin = 0x016000,length = 0x001000


    RAMGS11. :origin = 0x017000、length = 0x001000


    RAMGS12. :origin = 0x018000、length = 0x001000


    RAMGS13. :origin = 0x019000、length = 0x001000


    CPU2TOCPU1RAM:origin = 0x03F800,length = 0x000400


    CPU1TOCPU2RAM:origin = 0x03FC00,length = 0x000400


    CLA1_MSGRAMLOW:origin = 0x001480,length = 0x000080


    CLA1_MSGRAMHIGH:origin = 0x001500,length = 0x000080








    部分





    /*分配计划领域:*/


    .cinit :> FLASHE PAGE = 0、ALIGN (4)


    .pinit :> FLASHE、 PAGE = 0、ALIGN (4)


    .text :>> FLASHF PAGE = 0、ALIGN (4)


    codestart :>开始 PAGE = 0、ALIGN (4)


    ramfuncs :LOAD = FLASHD,


    运行= RAMLS0_1、


    load_start (_RamfuncsLoadStart)、


    load_size (_RamfuncsLoadSize)、


    load_end (_RamfuncsLoadEnd)、


    run_start (_RamfuncsRunStart)、


    run_size (_RamfuncsRunSize)、


    run_end (_RamfuncsRunEnd)、


    PAGE = 0、ALIGN (4)


    /*分配未初始化的数据段:*/


    堆栈 :> RAMM1 PAGE = 1.


    ebss :> RAMGS5 PAGE = 1.


    等斯梅姆 :> RAMGS6 PAGE = 1.


    /*初始化段进入闪存*/


    .econst :> FLASHB PAGE = 0、ALIGN (4)


    切换 :> FLASHB PAGE = 0、ALIGN (4)


    复位 :>重置, PAGE = 0、TYPE = DSECT /*未使用、*/


    filter_RegsFile:> RAMGS0,PAGE = 1


    sysmem :>RAMGS7,PAGE = 1


    .cio :> RAMGS8,PAGE = 1


    /* CLA 特定部分*/


    Cla1Prog :LOAD = FLASHC,


    运行= RAMLS3_5、


    load_start (_Cla1funcsLoadStart)、


    load_end (_Cla1funcsLoadEnd)、


    run_start (_Cla1funcsRunStart)、


    load_size (_Cla1funcsLoadSize)、


    PAGE = 0、ALIGN (4)


    CLADataLS0:>RAMLS2,PAGE=1


    Cla1ToCpuMsgRAM:> CLA1_MSGRAMLOW,page = 1.


    CpuToCla1MsgRAM:>CLA1_MSGRAMHIGH,PAGE = 1.


    #ifdef __TI_Compiler_version


    #if __TI_Compiler_version >=15009000


    .TI.ramfunc:{}负载= FLASHD,


    运行= RAMLS0_1、


    load_start (_RamfuncsLoadStart)、


    load_size (_RamfuncsLoadSize)、


    load_end (_RamfuncsLoadEnd)、


    run_start (_RamfuncsRunStart)、


    run_size (_RamfuncsRunSize)、


    run_end (_RamfuncsRunEnd)、


    PAGE = 0、ALIGN (4)


    #endif


    #endif


    /*以下部分定义适用于 SDFM 示例*/


    filter1_RegsFile:> RAMGS1,PAGE = 1,fill=0x1111


    Filter2_RegsFile:> RAMGS2,PAGE = 1,fill=0x2222


    Filter3_RegsFile:> RAMGS3,PAGE = 1,fill=0x3333


    Filter4_RegsFile:> RAMGS4,PAGE = 1,fill=0x4444


    #ifdef CLA_C


    /* CLA C 编译器段*/


    //


    //必须被分配给 CLA 具有写入访问权限的内存


    //


    CLAscratch :


    {*。obj (CLAscratch)


    。 += CLA_ScratchPad_size;


    *。obj (CLAscratch_end)}> RAMLS2、PAGE = 1


    暂存区 :> RAMLS2, PAGE = 1.


    .bss_cla :> RAMLS2, PAGE = 1.


    .const_cla :LOAD = FLASHC,


    运行= RAMLS2、


    run_start (_Cla1ConstRunStart)、


    Load_start (_Cla1ConstLoadStart)、


    load_size (_Cla1ConstLoadSize)、


    PAGE = 1.


    #endif //cla_C


    /*使用 IPC API 驱动程序时需要以下部分定义*/


    组:> CPU1TOCPU2RAM,PAGE = 1





    PUTBUFFER


    PUTWRITEIDX


    GETREADIDX








    组:> CPU2TOCPU1RAM,PAGE = 1





    GETBUFFER:TYPE = DSECT


    GETWRITEIDX:TYPE = DSECT


    PUTREADIDX:TYPE = DSECT








    /*


    //============================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================


    //文件结束。


    //============================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================


    *




    以下是.map 文件的第0页:

    名称 原点长度 已使用 未使用的属性填充

    ------------ ---- ------ ---- ---- --------

    第0页:

    RAMM0 00000122 000002DE 00000000 000002DE RWIX

    RAMLS0_1 00008000 00001000 00000870 00000790 RWIX

    RAMLS3_5 00009800 00001800 00001598 00000268 RWIX

    RAMD0 0000b000 00000800 00000000 00000800 RWIX

    RAMGS14 0001a000 00001000 00000000 00001000 RWIX

    RAMGS15 0001b000 00001000 00000000 00001000 RWIX

    DCSM_OTP_Z1_LINKPOINT 00078000 0000000c 00000000 0000000c RWIX

    DCSM_OTP_Z1_PSWDLOCK 00078010 00000004 00000000 00000004 RWIX

    DCSM_OTP_Z1_CRCLOCK 00078014 00000004 00000000 00000004 RWIX

    DCSM_OTP_Z1_BOOTCTRL 0007801c 00000004 00000000 00000004 RWIX

    DCSM_ZSEL_Z1_P0 00078000000010 00000000 00000010 RWIX

    DCSM_OTP_Z2_LINKPOINT 00078200 0000000c 00000000 0000000c RWIX

    DCSM_OTP_Z2_GPREG 0007820c 00000004 00000000 00000004 RWIX

    DCSM_OTP_Z2_PSWDLOCK 00078210 00000004 00000000 00000004 RWIX

    DCSM_OTP_Z2_CRCLOCK 00078214 00000004 00000000 00000004 RWIX

    DCSM_OTP_Z2_BOOTCTRL 0007821c 00000004 00000000 00000004 RWIX

    DCSM_ZSEL_Z2_P0 00078220 00000010 00000000 00000010 RWIX

    开始 00080000 00000002 00000002 00000000 RWIX

    FLASHA 00080002 00001ffe 00000000 00001ffe RWIX

    FLASHB 00082000 00002000 0000025d 00001da3 RWIX

    FLASHC 00084000 00002000 00001598 00000a68 RWIX

    FLASHD 00086000 00002000 00000870 00001790 RWIX

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

    您好、Cottier

    我们设置不同的 EPwmxRegs.CMPA.bit.CMPA 值和固定的 EPwmxRegs.TBPRD 值来生成 PWM 波形。  我们将 EPwmxRegs.TZCTL.All=10 和 EPwmxRegs.TZFRC.bit.OST=1设置 为停止 EPWMA 和 EPWMB 输出。 我们设置 EPwmxRegs.TZCLR.bit.OST =1 以启动 EPWMA 和 EPWMB 输出。 我们将 EPwmxRegs.TZCTL.bit.TZA=3设置为启动 EPWMA 输出。 我们将 EPwmxRegs.TZCTL.bit.TMZ=3设置为启动 EPWMB 输出。 在 EPWMA 或 EPWMB 开始输出之前、EPwmxRegs.CMPA.bit.CMPA 活动寄存器已更新为预期值。 时基计数器(TBCTR)始终向上计数-向下计数。 DB 子模块的输出始终有效。 我的问题如下:

    EPwmxRegs.TZCTL、EPwmxRegs.TZFRC、EPwmxRegs.TZCLR 等 TZ 子模块寄存 器只能在 EPwmxRegs.TBCTR、EPwmxRegs.CMPA.bit.CMPA 和 EPwmxRegs.CMPB.TZCLR 寄存器处于设置状态时才能设置、也可以在 TZ 位模块中设置这些位值。

    EPwmxRegs.CMPA.bit.CMPA 或 EPwmxRegs.CMPB.BIT.CMPB 的功能仅与 EPwmxRegs.TBCTR 进行比较、并在不使用任何其他功能的情况下产生相应的事件。 是这样吗?

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

    条件如下:TBCLK=30M、上-下计数模式。 EPwmxRegs.TBPRD=1500 (开关频率为10k)。 EPwmxRegs.DBCTL.All=11 (x=1/2/3)。 DB 子模块上升沿和下降沿2us 的时间延迟。 EPwmxRegs.AQCTLA.All=0x61。

    使用 ePWM1/2/3的 A 和 B 输出来控制三相 IGBT (100A)桥。 A 控制上半桥、B 控制下半桥。 A 和 B 输出到缓冲器。 用于控制光耦合器的缓冲器输出。 光耦合器控制 IGBT。 SVPWM 电压矢量振幅固定为200V、直流总线电压约为560V。 SVPWM 电压矢量动作时间1ms、停止时间80ms、以使永磁同步电机定子绕组完全释放电流。 每个电压矢量角度测试20000次。 电压矢量角度为348.7、337.5、270、202.5、180、 157.5、112、101.2、92.8、90、 88.5和0。 不同的角度将使 CMPA 值不同。 当 CMPB = 0时、当电压矢量角度为88.5度时、当每次测试大约40次时、ePWM1/2/3的 A 和 B 输出将输出高电平。 这将导致 IGBT 短路和光耦合器输出保护。 其他角度不存在此问题。 将 CMPB 的值设置为1498 (CMPA 不使用该值)。 当每次测试大约3000次时、这些异常发生在92.8度。 当每次测试大约3000次时、这些异常在157.5度处发生。 更改中断服务程序的位置后(项目有5.C 文件。  我们将 ISR 移至其他.C 文件。)。 CMPB 的值仍然为1498。  

    原因是什么?