Part Number:TMS320F28027
PWM发波问题如下:
1.PWM2采取以20K的频率运行,PWM发波原本遵循SPWM的规律,PWM的CTRMODE = TB_COUNT_UPDOWN;即UPDOWN模式,动作配置如下
EPwm2Regs.TBPRD =1500;//CLK=60MHZ 则PWM频率F=60*1000/2*1500=20K
EPwm2Regs.AQCTLA.bit.CAU = AQ_SET; EPwm2Regs.AQCTLA.bit.CAD = AQ_TOGGLE;
EPwm2Regs.AQCTLA.bit.ZRO = AQ_CLEAR;
死区设置如下:
EPwm2Regs.DBCTL.bit.IN_MODE = DBA_ALL; // EPWMxA is the source for both delays
EPwm2Regs.DBCTL.bit.OUT_MODE = DB_FULL_ENABLE; // Enable Dead-band module
EPwm2Regs.DBCTL.bit.POLSEL = DB_ACTV_HIC;// Active High Complementary (AHC)
EPwm2Regs.DBFED = 60; // 死区设置 TBCLKs 6US—360
EPwm2Regs.DBRED = 60; //
故这个时候只需要设置CMPA (EPwm2Regs.CMPA.half.CMPA )即可设置PWM输出的占空比的值,PWM的数组元素个数为200个即正弦逆变50HZ的半个周期,现在我只做正弦半轴逆变,数组元素从0~199的占空比如下图所示(即图片最下面的所示情况Uc):
我从第49到199这期间把CMPA设置为1499(TBPRD 为1500)按道理来说PWM2A说出为低电平,PWM2B输出为高电平,但实际运行情况是49到199期间PWM2A有高电平,PWM2B有低电平的发出
当我对49到199使用TZ强制PWM2A为低 PWM2B为高就不会出现这种情况,程序代码如下:
代码一为CMPA赋值1499
if((spwm_table_cnt>=49)&&(spwm_table_cnt<=199)) {
EPwm2Regs.CMPA.half.CMPA = 1499;
}
else{
EALLOW;
if(EPwm2Regs.TZFLG.bit.OST==1){
EPwm2Regs.TZCLR.bit.OST=1;}
EDIS;
}
代码二使用TZ强制PWM输出
if((spwm_table_cnt>=49)&&(spwm_table_cnt<=199)) {
EPwm2Regs.CMPA.half.CMPA = 1499;
EALLOW;
EPwm2Regs.TZCTL.bit.TZA=TZ_FORCE_LO;
EPwm2Regs.TZCTL.bit.TZB=TZ_FORCE_HI; EPwm2Regs.TZCLR.bit.OST=1; EDIS;
}
else{
EALLOW;
if(EPwm2Regs.TZFLG.bit.OST==1){
EPwm2Regs.TZCLR.bit.OST=1;}
EDIS;
}
代码一和代码二的输出情况导致H桥的波形如下图:
代码一PWM2控制的H桥输出波形
代码二PWM2控制的输出波形如下
死区的图如下,死区问题如下:
按照我的代码的设置即本咨询开头的关于死区的设置,现在假设如下,不使用TZ,假设情况如下:
一、当最左边EPWMxA in为高电平,死区的两个边沿计数器设置值均为60,那么此时最右边EPWMxA是输出高电平还是低电平?因为这个时候PWMXA的脉宽为2*(1500-1499)《60即脉宽值小于死区计数器设置值的时候PWMxA输出情况是怎么输出的?是保持以前的电平输出还是输出低电平?
二、当CMPA设置值为1的时候那么EPWMxB引脚输出的电平是高还是低?或者保持以前输出电平不变?
因为CMPA为1的时候那么此时EPWMxA in的脉宽小于下降沿计数器的值 那么此时死区计数的输出情况不明白
谢谢!
Cherry Zhou:
您好我们已收到您的问题并升级到英文论坛,如有答复将尽快回复您。谢谢!
,
jun liu:
您好!这个问题英文论坛回复没?
,
Cherry Zhou:
您好,由于放假,英文论坛大概明天会有答复,给您带来的不便敬请谅解!
,
jun liu:
好的 谢谢
,
Cherry Zhou:
您好,如果死区宽度大于配置的占空比,那么死区会阻止所有输出。 在上述情况下, EPWMxA 会保持低电平,避免短高脉冲,而 EPWMxB 将保持高电平,避免短低脉冲。
,
jun liu:
谢谢