正三角增减计数模式下用程序定义的参考量表示的各扇区的电机三相上桥导通时刻对应的占空比:

计算出的矢量占空比之后,再乘以比较寄存器最大值TBPRD(切换时刻是以其作为标准的)得到去标幺化后的Q0格式值的计数值,最后将其赋值给控制电机对应相的比较寄存器。

程序中对PWM模块的配置如下:


倒三角增减计数模式下用程序定义的参考量表示的各扇区电机三相上桥臂导通时刻对应的占空比:





首先断开电机连接,使用仿真器连续读取AD采样结果寄存器的值,此时的采样值即为电流零点。观察电流零点的稳定性,一般来说,如果电流采样的稳定性较好,AD结果寄存器中只会有最后一两位在波动。若电流零点波动得较严重,说明采样稳定性很差,此时需要在程序中增加滤波算法。理论值为2252。(为什么?)3/4096=1.65/x,x=2252.
不连接电机,只能测试零点,寄存器的值(理论值)是2252.
值得注意的是,本程序的配置方法是Epwm1A的波形来自ePWM1B的反转,并加入死区时间,我们给EPwm1Regs.CMPB中装入值,产生ePWM1B波形,然后通过死区模块,就产生了对称互补带死区的两路PWM波。死区采用ALC方式,即EPWM1A反转极性。低电平有效,互补输出。具体波形如图:

图带死区的对称互补PWM波形产生原理
注意:该方式适用于低电平有效的驱动芯片。
矢量控制中,一般需要六路并分为三组的PWM输出,配置为两两互补导通的形式,按照寄存器定义配置好模块后,需要验证配置的正确性。
断开电机连接,理论上依次将U、V、W三相的占空比设置为0、100%、50%,使用万用表测量对应端口的电压,0占空比时输出电压应接近0V,100%占空比时接近母线电压,50%占空比时为母线电压的一半。
直接给IGBT开关管的占空比进行赋值:
MotDriv.Ta_cmpa = 0.6;
MotDriv.Tb_cmpb = 0.4;
MotDriv.Tc_cmpc = 0.2;
即给ePWM模块的比较寄存器CMPB中设定值为:
EPwm1Regs.CMPA.half.CMPA =0.6*TBPRD=5625(60%);
Epwm2Regs.CMPA.half.CMPA =0.4*TBPRD=3750(40%);
Epwm3Regs.CMPA.half.CMPA =0.2*TBPRD=1875(20%);
ePWM1A | ePWM1B | ePWM2A | ePWM2B | ePWM3A | ePWM3B |
60% | 40% | 40 | 60% | 20% | 80% |
程序中通过死区模块,采用ALC:EPWMA反转极性,即低电平有效,互补输出的方式(该方式用于低电平有效的驱动芯片),产生了带死区的互补PWM。
死区占空比为:150/9375=1.6%
因此最终的6路PWM占空比应该为:
ePWM1A | ePWM1B | ePWM2A | ePWM2B | ePWM3A | ePWM3B |
61.6% | 41.6% | 41.6% | 61.6% | 21.6% | 81.6% |
硬件验证(重要,完成这部分验证,SVPWM模块的实现到此完成):
实验序号 | 直流母线电压24V | ||
占空比设置 | 理论电压 | 实际电压 | |
1 | MotDriv.Vv=0.6 | 14.4V | 14.78V |
MotDriv.Vv=0.4 | 9.6V | 9.89V | |
MotDriv.Vv=0.2 | 4.8V | 5.00V | |
| | | |
| | | |
实际示波器的实验图(分为两部分:一是ePWM的占空比;二是对应相的相电压。):
在控制板上进行验证。



可见,硬件上对应的PWM引脚输出与理论相符,说明ePWM配置和SVPWM实现正确。
以上的硬件实验是在控制板上进行验证的,但相同的代码放在另外控制板上,PWM引脚没有波形显示,这是为什么?
在ePWM模块底层配置那里加了TZ保护,先将其注释掉,重新上电烧入程序,示波器的波形与上述一致。
调试总结:在调试单个模块时,尽量把所有的保护都关掉。
TI文档关于七段式SVPWM在CCS中的实现(归一化):

首先断开电机连接,使用仿真器连续读取AD采样结果寄存器的值,此时的采样值即为电流零点。观察电流零点的稳定性,一般来说,如果电流采样的稳定性较好,AD结果寄存器中只会有最后一两位在波动。若电流零点波动得较严重,说明采样稳定性很差,此时需要在程序中增加滤波算法。理论值为2252。(为什么?)3/4096=1.65/x,x=2252.



