什么是SPWM 的对称规则采样法?
时间: 2023-06-06 16:04:52 浏览: 576
SPWM的对称规则采样法是一种用于交流电调制的方法,它将固定的直流电压转换成交流电压,以实现对电机的控制。该方法采用规则的周期采样方法,可以使交流电压的频率保持稳定,并且可以有效地控制输出波形的失真率。
相关问题
spwm对称规则采样法公式理解
SPWM(Symmetrical Pulse Width Modulation)对称规则采样法是一种脉冲宽度调制技术,用于控制逆变器输出波形的形状和频率。其基本思想是将一个周期的正弦波分成若干个等宽的时间片段,并在每个时间片段内选择合适的占空比来控制逆变器的开关器件工作时间,从而得到所需的输出波形。
SPWM对称规则采样法的公式如下:
t1 = (m*Ts) % T,
其中t1为一个时间片段的起始时间,m为时间片段序号(从0开始),Ts为采样周期,T为一个周期的时间。
D = (Ut/Um)*sin(2πft + π/6),
其中D为占空比,Ut为调制波幅值,Um为三角载波的幅值,f为输出频率。
根据上述公式,SPWM对称规则采样法的实现步骤如下:
1. 确定输出频率f和采样周期Ts。
2. 在一个周期内,将正弦波按照采样周期Ts均匀地分成若干个时间片段。
3. 根据时间片段序号m,计算当前时间片段的起始时间t1。
4. 根据当前时间片段的起始时间t1和输出频率f,计算正弦波的相位,并代入D的公式,计算出当前时间片段的占空比D。
5. 根据占空比D,通过控制开关器件的工作时间,得到所需的输出波形。
SPWM对称规则采样法的优点是输出波形质量较高,谐波含量较低,且实现简单。缺点是需要计算每个时间片段的占空比,计算量较大。同时,对负载较为敏感,需要根据具体负载情况进行调整,以保证输出稳定性。
帮我写一个利用F28335编程产生应用不对称规则采样法生成的对称三相SPWM波的代码
好的,我可以回答这个问题。以下是利用F28335编程产生应用不对称规则采样法生成的对称三相SPWM波的代码:
```
#include <DSP2833x_Device.h>
#include <DSP2833x_Examples.h>
#define PWM_PERIOD 500 // PWM周期为500个计数器时钟周期
#define PWM_DEADBAND 100 // 死区时间为100个计数器时钟周期
Uint16 pwm1, pwm2, pwm3; // 三相PWM占空比
Uint16 pwm_deadband = PWM_DEADBAND / 2; // 死区时间的一半
void main(void)
{
InitSysCtrl(); // 初始化系统时钟
InitPieCtrl(); // 初始化PIE中断控制器
InitPieVectTable(); // 初始化PIE中断向量表
EALLOW;
PieVectTable.EPWM1_INT = &EPWM1_ISR; // 将EPWM1中断向量表指向EPWM1_ISR函数
EDIS;
InitEPwm1(); // 初始化EPWM1
IER |= M_INT3; // 使能EPWM1中断
EINT; // 使能全局中断
while(1)
{
// 产生对称三相SPWM波
pwm1 = (Uint16)(PWM_PERIOD / 2 * (1 + sin(2 * PI * 1 / 3)));
pwm2 = (Uint16)(PWM_PERIOD / 2 * (1 + sin(2 * PI * 2 / 3)));
pwm3 = (Uint16)(PWM_PERIOD / 2 * (1 + sin(2 * PI * 3 / 3)));
// 更新EPWM1的占空比
EPwm1Regs.CMPA.half.CMPA = pwm1;
EPwm1Regs.CMPB = pwm2;
EPwm1Regs.CMPC = pwm3;
}
}
void InitEPwm1(void)
{
EALLOW;
// 配置GPIO引脚为EPWM1输出
GpioCtrlRegs.GPAMUX1.bit.GPIO = 1;
GpioCtrlRegs.GPAMUX1.bit.GPIO1 = 1;
GpioCtrlRegs.GPAMUX1.bit.GPIO2 = 1;
// 配置EPWM1计数器时钟
EPwm1Regs.TBCTL.bit.CTRMODE = TB_COUNT_UPDOWN;
EPwm1Regs.TBCTL.bit.PHSEN = TB_DISABLE;
EPwm1Regs.TBCTL.bit.HSPCLKDIV = TB_DIV1;
EPwm1Regs.TBCTL.bit.CLKDIV = TB_DIV1;
// 配置EPWM1计数器周期
EPwm1Regs.TBPRD = PWM_PERIOD;
// 配置EPWM1的死区时间
EPwm1Regs.DBCTL.bit.OUT_MODE = DB_FULL_ENABLE;
EPwm1Regs.DBCTL.bit.POLSEL = DB_ACTV_HIC;
EPwm1Regs.DBCTL.bit.IN_MODE = DBA_ALL;
EPwm1Regs.DBRED = pwm_deadband;
EPwm1Regs.DBFED = pwm_deadband;
// 配置EPWM1的占空比
EPwm1Regs.CMPA.half.CMPA = ;
EPwm1Regs.CMPB = ;
EPwm1Regs.CMPC = ;
// 配置EPWM1的动态比较模式
EPwm1Regs.AQCTLA.bit.CAU = AQ_SET;
EPwm1Regs.AQCTLA.bit.CAD = AQ_CLEAR;
EPwm1Regs.AQCTLB.bit.CBU = AQ_SET;
EPwm1Regs.AQCTLB.bit.CBD = AQ_CLEAR;
EPwm1Regs.AQCTLC.bit.CCU = AQ_SET;
EPwm1Regs.AQCTLC.bit.CCD = AQ_CLEAR;
// 配置EPWM1的中断
EPwm1Regs.ETSEL.bit.INTSEL = ET_CTR_ZERO;
EPwm1Regs.ETSEL.bit.INTEN = 1;
EPwm1Regs.ETPS.bit.INTPRD = ET_1ST;
EDIS;
}
interrupt void EPWM1_ISR(void)
{
// 清除EPWM1中断标志位
EPwm1Regs.ETCLR.bit.INT = 1;
// 更新EPWM1的占空比
EPwm1Regs.CMPA.half.CMPA = pwm1;
EPwm1Regs.CMPB = pwm2;
EPwm1Regs.CMPC = pwm3;
}
```
阅读全文