DSP28335实现SPWM
- 格式:pdf
- 大小:225.43 KB
- 文档页数:4
DSP28335实现SPWM
PWM
⼀、什么是PWM?PWM就是根据⾯积等效原理,通过对⼀系列脉冲的宽度进⾏调制,来等效地获得所需要的波形。脉冲的宽度按正弦规律变化⽽和正弦波等效的PWM波形,称为SPWM。
调制系数:m=调制波幅度/载波幅度。在保持载波幅度⼀定的情况下,通过改变调制波幅度,即改变调制系数,可以在直流侧电压⼀定的条件下,调节输出交流基波电压有效值⼤⼩。通过改变调制波的幅度,可以实现PWM逆变电路的变压。
载波⽐:N=载波频率/调制波频率。根据载频三⾓波和调制波是否同步及载波⽐的变化情况,PWM调制⽅式可分为同步调制、异步调制和分段同步调制。
⼆、两种常见的PWM波形:1、三点式(单极性、三电平)
2、两点式(双极性、两电平)
三、实现⽅法1、硬件调制法
⽤模拟电路构成三⾓波载波和正弦调制波发⽣电路,⽤⽐较器来确定它们的交点,在交点时刻对开关器件的通断进⾏控制,就可以⽣成SPWM波。2、软件⽣成法
(1)⾃然采样法
以正弦波为调制波,等腰三⾓波为载波进⾏⽐较,在
两个波形的⾃然交点时刻控制开关器件的通断,这就
是⾃然采样法。其求解复杂,难以在实时控制中在线
计算,⼯程应⽤不多。
(2)规则采样法(对称)
经推导,设⼀个正弦波周期采样N 个点,则每个
采样周期内的脉冲宽度为)2sin 1(2N k a T c πδ+=
,k=1,2,3,…,N-1。
若时基计数器⼯作在向上向下计数模式,设周期
寄存器PRD 的值为M ,每个计数脉冲周期为t ,则t M T c ?=2,
脉冲宽度为)2sin 1(N k a t M πδ+??=。D 点值为
)2sin 1(22N
k a M t πδ+?=,即为⽐较寄存器的值。四、控制电路采⽤180°导电型⽅波控制⽅式,同⼀相上、下两个桥臂交替通电,互补通断。
五、程序代码1、初始化系统控制
2、初始化GPIO
3、清除所有中断并初始化中断向量表
for(i=0;i<100;i++)
{
SV1V4[i]=(1+sin(2*3.14*i/99))*1000; //采样100个点 }
interrupt void epwm1_isr(void)
{
// 更新CMPA和CMPB⽐较寄存器的值
j++;
if(j<=99)
EPwm1Regs.CMPA.half.CMPA=SV1V4[j];
else
j=0;
//清除这个定时器的中断标志位
EPwm1Regs.ETCLR.bit.INT = 1;
//清除PIE应答寄存器的第三位,以响应组3内的其他中断请求;
PieCtrlRegs.PIEACK.all = PIEACK_GROUP3;
}
4、初始化EPWM
void InitEPwm1Example()
{
// Setup 时基时钟
EPwm1Regs.TBPRD = 2000; // 设置PWM周期为2*2000个时钟周期 EPwm1Regs.TBPHS.half.TBPHS = 0x0000; // 相位寄存器清零EPwm1Regs.TBCTR = 0x0000; //时基计数器清零
// Setup ⽐较寄存器
EPwm1Regs.CMPA.half.CMPA = EPWM1_MIN_CMPA; // Set compare A value EPwm1Regs.CMPB =EPWM1_MAX_CMPB; // Set Compare B value
// Setup 计数模式
EPwm1Regs.TBCTL.bit.CTRMODE = TB_COUNT_UPDOWN; //增减计数模式
EPwm1Regs.TBCTL.bit.PHSEN = TB_DISABLE; //禁⽌相位控制
EPwm1Regs.TBCTL.bit.HSPCLKDIV = 7; // Clock ratio to SYSCLKOUT EPwm1Regs.TBCTL.bit.CLKDIV = 7;
// 设置⽐较寄存器的阴影寄存器加载条件:时基计数到0EPwm1Regs.CMPCTL.bit.SHDWAMODE = CC_SHADOW;
EPwm1Regs.CMPCTL.bit.SHDWBMODE = CC_SHADOW;
EPwm1Regs.CMPCTL.bit.LOADAMODE = CC_CTR_ZERO; // Load on Zero
EPwm1Regs.CMPCTL.bit.LOADBMODE = CC_CTR_ZERO;
// Set actions
EPwm1Regs.AQCTLA.bit.CAU = AQ_SET; // CTR=CAU时,置⾼
EPwm1Regs.AQCTLA.bit.CAD = AQ_CLEAR; // CTR=CAD时,置低
EPwm1Regs.AQCTLB.bit.CBU = AQ_CLEAR; // CTR=CBU时,置低
EPwm1Regs.AQCTLB.bit.CBD = AQ_SET; // CTR=CBD时,置⾼
// 1次0匹配事件发⽣时产⽣⼀个中断请求;
EPwm1Regs.ETSEL.bit.INTSEL = ET_CTR_ZERO; //选择0匹配事件中断 EPwm1Regs.ETSEL.bit.INTEN = 1; // 使能事件触发中断EPwm1Regs.ETPS.bit.INTPRD = 1; // 1次事件产⽣中断请求
//Setup Deadband
EPwm1Regs.DBCTL.bit.OUT_MODE = DB_FULL_ENABLE;//上升沿和下降沿
EPwm1Regs.DBCTL.bit.POLSEL = DB_ACTV_LO;//极性选择控制
EPwm1Regs.DBCTL.bit.IN_MODE = DBB_ALL;//ePWMxB是双边沿延时输⼊源 EPwm1Regs.DBRED = EPWM1_MIN_DB;
EPwm1Regs.DBFED = EPWM1_MIN_DB;
}