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;

}