请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
器件型号:TMS320F28335 Thread 中讨论的其他器件:controlSUITE
您好!
我尝试为三相逆变器生成六个 PWM 脉冲。
我使用了 ePWM1A、2A、3A、4A、5A 和6A。 这些脉冲必须具有120度控制所需的相移。
对于此控制、脉冲必须在此队列中:
5A 3A
3A 4A
4A 2A
2A 6A
6A 1A
1A 5A
这些是从 MATLAB 生成的代码。 我添加了 EPwm1Regs.TBCTL.bit.SWFSYNC = 1来启动相移、但不会发生任何情况
脉冲从同一个位置开始。 我是在相移中、还是必须尝试另一种方法?
#include "epwm6p.h" #include "epwm6p_prival.h" /*实时模型*/ rt_model_epwm6p epwm6p_M_; rt_model_epwm6p * const epwm6p_M =&epwm6p_M_; /* void 函数 * pwm6p_m6p*(void)* pwm6p_model *(pwm6p_stepwm)*函数:/pwm6pwm6pwm)* void *( /ePWM1A'*/ EPwm1Regs.TBCTL.bit.SWFSYNC = epwm6p_P.Constant_value; } //模型初始化函数*/ void epwm6p_initialize (void) { //*注册代码* //*//*初始化错误状态*/ rtmErrorStatus (epwm6p_initialize) *(nuln):'nul-cm (nuln) /ePWM1A'*/ /***初始化 ePWM1模块***/ { EPWMPARAMS EPWM1Params; /*--设置时基(TB)子模块-*/ EPwm1Params.TBPRD = 900; EPwm1Params.TBCTL_CTRMODE = 0; EPwm1Regs.TBCTL.bit.SWFSYNC = 1; EPwm1Params.TBCTL_SYNCOSEL = 0; EPwm1Params.TBCTL_PHSEN = 1; EPwm1Params.TBCTL_PHSDIR = 0; EPwm1Params.TBPHS = 600; EPwm1Params.TBCTL_HSPCLKDIV = 0; EPwm1Params.TBCTL_CLKDIV = 0; /*--设置计数器比较(CC)子模块-*/ EPwm1Params.CMPCTL_LOADAMODE = 0; EPwm1Params.CMPCTL_LOADBMODE = 0; EPwm1Params.CMPA = 800; EPwm1Params.CMPB = 0; /*--设置动作限定符(AQ)子模块-*/ EPwm1Params.AQCTLA = 36; EPwm1Params.AQCTLB = 264; EPwm1Params.AQCSFRC_CSFA = 0; EPwm1Params.AQCSFRC_CSFB = 0; EPwm1Params.AQCSFRC_RLDSF = 0; /*--设置死区发生器(DB)子模块-*/ EPwm1Params.DBCTL_OUT_MODE = 0; EPwm1Params.DBCTL_IN_MODE = 0; EPwm1Params.DBCTL_POLSEL = 0; EPwm1Params.DBRED = 0.0; EPwm1Params.DBFED = 0.0; /*--设置事件触发器(ET)子模块-*/ EPwm1Params.ETSEL_SOCAEN = 0; EPwm1Params.ETSEL_SOCASEL = 1; EPwm1Params.ETPS_SOCAPRD = 1; EPwm1Params.ETSEL_SOCBEN = 0; EPwm1Params.ETSEL_SOCBSEL = 1; EPwm1Params.ETPS_SOCBPRD = 1; EPwm1Params.ETSEL_INTEN = 0; EPwm1Params.ETSEL_INTSEL = 1; EPwm1Params.ETPS_INTPRD = 1; /*-设置 PWM-Chopper (PC)子模块-*/ EPwm1Params.PCCTL_CHPEN = 0; EPwm1Params.PCCTL_CHPFREQ = 0; EPwm1Params.PCCTL_OSHTWTH = 0; EPwm1Params.PCCTL_CHPDUTY = 0; /*--设置跳闸区域(TZ)子模块-*/ EPwm1Params.TZSEL = 0; EPwm1Params.TZCTL_TZA = 3; EPwm1Params.TZCTL_TSB = 3; EPwm1Params.TZEINT_OST = 0; EPwm1Params.TZEINT_CBC = 0; /*--初始 ePWM1 --*/ CONFIG_ePWMRegs (EPwm1Regs、EPwm1Params); } //开始 S 函数(c280xpwm):' /ePWM2A'*/ /***初始化 ePWM2模块***/ { EPWMPARAMS EPWM2Params; /*--设置时基(TB)子模块-*/ EPwm2Params.TBPRD = 900; EPwm2Params.TBCTL_CTRMODE = 0; EPwm2Params.TBCTL_SYNCOSEL = 0; EPwm2Params.TBCTL_PHSEN = 1; EPwm2Params.TBCTL_PHSDIR = 0; EPwm2Params.TBPHS = 400; EPwm2Params.TBCTL_HSPCLKDIV = 0; EPwm2Params.TBCTL_CLKDIV = 0; /*--设置计数器比较(CC)子模块-*/ EPwm2Params.CMPCTL_LOADAMODE = 0; EPwm2Params.CMPCTL_LOADBMODE = 0; EPwm2Params.CMPA = 600; EPwm2Params.CMPB = 0; /*--设置动作限定符(AQ)子模块-*/ EPwm2Params.AQCTLA = 36; EPwm2Params.AQCTLB = 264; EPwm2Params.AQCSFRC_CSFA = 0; EPwm2Params.AQCSFRC_CSFB = 0; EPwm2Params.AQCSFRC_RLDSF = 0; /*--设置死区发生器(DB)子模块-*/ EPwm2Params.DBCTL_OUT_MODE = 0; EPwm2Params.DBCTL_IN_MODE = 0; EPwm2Params.DBCTL_POLSEL = 0; EPwm2Params.DBRED = 0.0; EPwm2Params.DBFED = 0.0; /*--设置事件触发器(ET)子模块-*/ EPwm2Params.ETSEL_SOCAEN = 0; EPwm2Params.ETSEL_SOCASEL = 1; EPwm2Params.ETPS_SOCAPRD = 1; EPwm2Params.ETSEL_SOCBEN = 0; EPwm2Params.ETSEL_SOCBSEL = 1; EPwm2Params.ETPS_SOCBPRD = 1; EPwm2Params.ETSEL_INTEN = 0; EPwm2Params.ETSEL_INTSEL = 1; EPwm2Params.ETPS_INTPRD = 1; /*-设置 PWM-Chopper (PC)子模块-*/ EPwm2Params.PCCTL_CHPEN = 0; EPwm2Params.PCCTL_CHPFREQ = 0; EPwm2Params.PCCTL_OSHTWTH = 0; EPwm2Params.PCCTL_CHPDUTY = 0; /*--设置跳闸区域(TZ)子模块-*/ EPwm2Params.TZSEL = 0; EPwm2Params.TZCTL_TZA = 3; EPwm2Params.TZCTL_TSB = 3; EPwm2Params.TZEINT_OST = 0; EPwm2Params.TZEINT_CBC = 0; /*--初始 ePWM2 -*/ CONFIG_ePWMRegs (EPwm2Regs、EPwm2Params); } //开始 S 函数(c280xpwm):' /ePWM3A'*/ /***初始化 ePWM3模块***/ { EPWMPARAMS EPWM3Params; /*--设置时基(TB)子模块-*/ EPwm3Params.TBPRD = 900; EPwm3Params.TBCTL_CTRMODE = 0; EPwm3Params.TBCTL_SYNCOSEL = 0; EPwm3Params.TBCTL_PHSEN = 1; EPwm3Params.TBCTL_PHSDIR = 0; EPwm3Params.TBPHS = 200; EPwm3Params.TBCTL_HSPCLKDIV = 0; EPwm3Params.TBCTL_CLKDIV = 0; /*--设置计数器比较(CC)子模块-*/ EPwm3Params.CMPCTL_LOADAMODE = 0; EPwm3Params.CMPCTL_LOADBMODE = 0; EPwm3Params.CMPA = 400; EPwm3Params.CMPB = 0; /*--设置动作限定符(AQ)子模块-*/ EPwm3Params.AQCTLA = 36; EPwm3Params.AQCTLB = 264; EPwm3Params.AQCSFRC_CSFA = 0; EPwm3Params.AQCSFRC_CSFB = 0; EPwm3Params.AQCSFRC_RLDSF = 0; /*--设置死区发生器(DB)子模块-*/ EPwm3Params.DBCTL_OUT_MODE = 0; EPwm3Params.DBCTL_IN_MODE = 0; EPwm3Params.DBCTL_POLSEL = 0; EPwm3Params.DBRED = 0.0; EPwm3Params.DBFED = 0.0; /*--设置事件触发器(ET)子模块-*/ EPwm3Params.ETSEL_SOCAEN = 0; EPwm3Params.ETSEL_SOCASEL = 1; EPwm3Params.ETPS_SOCAPRD = 1; EPwm3Params.ETSEL_SOCBEN = 0; EPwm3Params.ETSEL_SOCBSEL = 1; EPwm3Params.ETPS_SOCBPRD = 1; EPwm3Params.ETSEL_INTEN = 0; EPwm3Params.ETSEL_INTSEL = 1; EPwm3Params.ETPS_INTPRD = 1; /*-设置 PWM-Chopper (PC)子模块-*/ EPwm3Params.PCCTL_CHPEN = 0; EPwm3Params.PCCTL_CHPFREQ = 0; EPwm3Params.PCCTL_OSHTWTH = 0; EPwm3Params.PCCTL_CHPDUTY = 0; /*--设置跳闸区域(TZ)子模块-*/ EPwm3Params.TZSEL = 0; EPwm3Params.TZCTL_TZA = 3; EPwm3Params.TZCTL_TSB = 3; EPwm3Params.TZEINT_OST = 0; EPwm3Params.TZEINT_CBC = 0; /*--初始 ePWM3 -*/ CONFIG_ePWMRegs (EPwm3Regs、EPwm3Params); } //开始 S 函数(c280xpwm):' /ePWM4A'*/ /***初始化 ePWM4模块***/ { EPWMPARAMS EPWM4Params; /*--设置时基(TB)子模块-*/ EPwm4Params.TBPRD = 900; EPwm4Params.TBCTL_CTRMODE = 0; EPwm4Params.TBCTL_SYNCOSEL = 0; EPwm4Params.TBCTL_PHSEN = 1; EPwm4Params.TBCTL_PHSDIR = 0; EPwm4Params.TBPHS = 300; EPwm4Params.TBCTL_HSPCLKDIV = 0; EPwm4Params.TBCTL_CLKDIV = 0; /*--设置计数器比较(CC)子模块-*/ EPwm4Params.CMPCTL_LOADAMODE = 0; EPwm4Params.CMPCTL_LOADBMODE = 0; EPwm4Params.CMPA = 500; EPwm4Params.CMPB = 0; /*--设置动作限定符(AQ)子模块-*/ EPwm4Params.AQCTLA = 36; EPwm4Params.AQCTLB = 264; EPwm4Params.AQCSFRC_CSFA = 0; EPwm4Params.AQCSFRC_CSFB = 0; EPwm4Params.AQCSFRC_RLDSF = 0; /*--设置死区发生器(DB)子模块-*/ EPwm4Params.DBCTL_OUT_MODE = 0; EPwm4Params.DBCTL_IN_MODE = 0; EPwm4Params.DBCTL_POLSEL = 0; EPwm4Params.DBRED = 0.0; EPwm4Params.DBFED = 0.0; /*--设置事件触发器(ET)子模块-*/ EPwm4Params.ETSEL_SOCAEN = 0; EPwm4Params.ETSEL_SOCASEL = 1; EPwm4Params.ETPS_SOCAPRD = 1; EPwm4Params.ETSEL_SOCBEN = 0; EPwm4Params.ETSEL_SOCBSEL = 1; EPwm4Params.ETPS_SOCBPRD = 1; EPwm4Params.ETSEL_INTEN = 0; EPwm4Params.ETSEL_INTSEL = 1; EPwm4Params.ETPS_INTPRD = 1; /*-设置 PWM-Chopper (PC)子模块-*/ EPwm4Params.PCCTL_CHPEN = 0; EPwm4Params.PCCTL_CHPFREQ = 0; EPwm4Params.PCCTL_OSHTWTH = 0; EPwm4Params.PCCTL_CHPDUTY = 0; /*--设置跳闸区域(TZ)子模块-*/ EPwm4Params.TZSEL = 0; EPwm4Params.TZCTL_TZA = 3; EPwm4Params.TZCTL_TSB = 3; EPwm4Params.TZEINT_OST = 0; EPwm4Params.TZEINT_CBC = 0; /*--初始 ePWM4 --*/ CONFIG_ePWMRegs (EPwm4Regs、EPwm4Params); } //开始 S 函数(c280xpwm):' /ePWM5A'*/ /***初始化 ePWM5模块***/ { EPWMPARAMS EPWM5Params; /*--设置时基(TB)子模块-*/ EPwm5Params.TBPRD = 900; EPwm5Params.TBCTL_CTRMODE = 0; EPwm5Params.TBCTL_SYNCOSEL = 0; EPwm5Params.TBCTL_PHSEN = 1; EPwm5Params.TBCTL_PHSDIR = 0; EPwm5Params.TBPHS = 100; EPwm5Params.TBCTL_HSPCLKDIV = 0; EPwm5Params.TBCTL_CLKDIV = 0; /*--设置计数器比较(CC)子模块-*/ EPwm5Params.CMPCTL_LOADAMODE = 0; EPwm5Params.CMPCTL_LOADBMODE = 0; EPwm5Params.CMPA = 300; EPwm5Params.CMPB = 0; /*--设置动作限定符(AQ)子模块-*/ EPwm5Params.AQCTLA = 36; EPwm5Params.AQCTLB = 264; EPwm5Params.AQCSFRC_CSFA = 0; EPwm5Params.AQCSFRC_CSFB = 0; EPwm5Params.AQCSFRC_RLDSF = 0; /*--设置死区发生器(DB)子模块-*/ EPwm5Params.DBCTL_OUT_MODE = 0; EPwm5Params.DBCTL_IN_MODE = 0; EPwm5Params.DBCTL_POLSEL = 0; EPwm5Params.DBRED = 0.0; EPwm5Params.DBFED = 0.0; /*--设置事件触发器(ET)子模块-*/ EPwm5Params.ETSEL_SOCAEN = 0; EPwm5Params.ETSEL_SOCASEL = 1; EPwm5Params.ETPS_SOCAPRD = 1; EPwm5Params.ETSEL_SOCBEN = 0; EPwm5Params.ETSEL_SOCBSEL = 1; EPwm5Params.ETPS_SOCBPRD = 1; EPwm5Params.ETSEL_INTEN = 0; EPwm5Params.ETSEL_INTSEL = 1; EPwm5Params.ETPS_INTPRD = 1; /*-设置 PWM-Chopper (PC)子模块-*/ EPwm5Params.PCCTL_CHPEN = 0; EPwm5Params.PCCTL_CHPFREQ = 0; EPwm5Params.PCCTL_OSHTWTH = 0; EPwm5Params.PCCTL_CHPDUTY = 0; /*--设置跳闸区域(TZ)子模块-*/ EPwm5Params.TZSEL = 0; EPwm5Params.TZCTL_TZA = 3; EPwm5Params.TZCTL_TSB = 3; EPwm5Params.TZEINT_OST = 0; EPwm5Params.TZEINT_CBC = 0; /*--初始 ePWM5 -*/ CONFIG_ePWMRegs (EPwm5Regs、EPwm5Params); } //开始 S 函数(c280xpwm):' /ePWM6A'*/ /***初始化 ePWM6模块***/ { EPWMPARAMS EPWM6Params; /*--设置时基(TB)子模块-*/ EPwm6Params.TBPRD = 900; EPwm6Params.TBCTL_CTRMODE = 0; EPwm6Params.TBCTL_SYNCOSEL = 0; EPwm6Params.TBCTL_PHSEN = 1; EPwm6Params.TBCTL_PHSDIR = 0; EPwm6Params.TBPHS = 500; EPwm6Params.TBCTL_HSPCLKDIV = 0; EPwm6Params.TBCTL_CLKDIV = 0; /*--设置计数器比较(CC)子模块-*/ EPwm6Params.CMPCTL_LOADAMODE = 0; EPwm6Params.CMPCTL_LOADBMODE = 0; EPwm6Params.CMPA = 700; EPwm6Params.CMPB = 0; /*--设置动作限定符(AQ)子模块-*/ EPwm6Params.AQCTLA = 36; EPwm6Params.AQCTLB = 264; EPwm6Params.AQCSFRC_CSFA = 0; EPwm6Params.AQCSFRC_CSFB = 0; EPwm6Params.AQCSFRC_RLDSF = 0; /*--设置死区发生器(DB)子模块-*/ EPwm6Params.DBCTL_OUT_MODE = 0; EPwm6Params.DBCTL_IN_MODE = 0; EPwm6Params.DBCTL_POLSEL = 0; EPwm6Params.DBRED = 0.0; EPwm6Params.DBFED = 0.0; /*--设置事件触发器(ET)子模块-*/ EPwm6Params.ETSEL_SOCAEN = 0; EPwm6Params.ETSEL_SOCASEL = 1; EPwm6Params.ETPS_SOCAPRD = 1; EPwm6Params.ETSEL_SOCBEN = 0; EPwm6Params.ETSEL_SOCBSEL = 1; EPwm6Params.ETPS_SOCBPRD = 1; EPwm6Params.ETSEL_INTEN = 0; EPwm6Params.ETSEL_INTSEL = 1; EPwm6Params.ETPS_INTPRD = 1; /*-设置 PWM-Chopper (PC)子模块-*/ EPwm6Params.PCCTL_CHPEN = 0; EPwm6Params.PCCTL_CHPFREQ = 0; EPwm6Params.PCCTL_OSHTWTH = 0; EPwm6Params.PCCTL_CHPDUTY = 0; /*--设置跳闸区域(TZ)子模块-*/ EPwm6Params.TZSEL = 0; EPwm6Params.TZCTL_TZA = 3; EPwm6Params.TZCTL_TSB = 3; EPwm6Params.TZEINT_OST = 0; EPwm6Params.TZEINT_CBC = 0; /*--初始 ePWM6 -*/ CONFIG_ePWMRegs (&EPwm6Regs、&EPwm6Params); } // *模型终止函数*/ void epwm6p_terminate (void) { /*(无需终止代码)*/ }