TI中文支持网
TI专业的中文技术问题搜集分享网站

单相SPWM波的产生疑问

各位老大,我用单相逆变桥做一个交流电源,如下图:

上半桥IGBT从左到右排列为Q1,Q3,下半桥IGBT从左到右排列为Q2,Q4;

控制系统采用2407A,主要程序如下:

void SpwmInit(void)

{

//只用EVA来控制产生SPWM波;只用T1,

//只用4,2和3,1组成单线全控桥,6,5禁止;

//设为双极性SPWM调制方式,

 *MCRA |=  0x03c0;          //使能PWM1,2,3,4功能,IOPB7,PWM5,6设为I/O

//比较方式控制寄存器A,  00-强制低,01-低有效,10-高有效,11-强制高

*ACTRA  = 0x0f99;       //1111 1001 1001–PWM1,4 低有效,PWM2,3高有效;产生互补脉冲

*DBTCONA = 0x0AF4;     //死区时间控制, 周期A 32分频  8us

//三角波(载波)设置

*T1CNT = 0; //计数单元

*T1CON = 0x0800;       //T1控制寄存器,12~11–>01为连续增减计数模式,10~8bit–>000以CPU时钟频率为准

*T1PR  = 2000;       //T1周期寄存器,载波频率10k , 4000个时钟周期

 //比较控制寄存器,15->使能比较操作,

 //14~13->T1CNT下溢重载,11~10->ACTRA下溢重载,9->比较输出允许

*COMCONA = 0x8200; //1000 0010

//中断屏蔽寄存器A,B,C

*EVAIMRA = 0x0081;     //0–屏蔽;1–使能;7bit–>T1周期、1–>PDPINTA中断使能

*EVAIMRB = 0x0001;     //T2周期中断使能

*EVAIMRC = 0x0000;     //全部屏蔽

//中断标志寄存器A,B,C,全部清中断标志

*EVAIFRA = 0x078F;    

*EVAIFRB = 0x000F;

*EVAIFRC = 0x0007;    

M_wave_Cnt=0;

}

//每个T1中断调用一次;

//计算0~2pi周期均匀的200个点对应的脉冲导通时间

//Ton= Tc/2*(1+M*sin(2*K*PI*Fm/Fc)),其中: K = 0,1,2,,,N-1

void SPWM_D_calu(void)

{

long Q14_tmp; //注意,有正负32bit

int Q14_sin; //注意,有正负

M_wave_Cnt++; //三角载波中断次数计数器

if(M_wave_Cnt >= 200){ //一个正弦波周期结束

M_wave_Cnt = 0; //重新从0度开始

}

Q14_M_tmp = 256<<6;  //假设为最大

//SIN值为sin(2*K*PI*Fm/Fc),分为200个点

Q14_sin = PFUNC_wordRead(SIN_LIB + M_wave_Cnt);

Q14_tmp = ((long)Q14_M_tmp*(long)Q14_sin) >> 14;

Q14_tmp = (Q14_tmp+16384); //1–>Q14===1<<14

Q14_tmp =  Q14_tmp >> 1;

Q14_tmp =  Q14_tmp * Tc;

Q14_tmp =  Q14_tmp >> 14;

//设置比较寄存器值

*CMPR1 = (unsigned int)Q14_tmp;

*CMPR2 = (unsigned int)Q14_tmp;

}

问题:

1. 脉冲宽度计算值在0~4000个时钟周期,可是三角波的周期一般为2000,我感觉好像不对!

2. 输出波形也不对;在正半周,PWM1全为高电平(Q1不导通),负半周有脉冲!

3. 电压上不去,只有50v~60v

请先知给与指点,不胜感激!

jin zhao:

修正:

看到了一篇文章,做了一下修改

Q14_tmp1= 2000-((unsigned int)Q14_tmp>>1);

//设置比较寄存器值

*CMPR1 = Q14_tmp1;

*CMPR2 = Q14_tmp1; }

问题就剩下:

输出波形看不到什么问题,可是电压输出不够,只有220v,可输入有576v直流啊!

请先知给与指点,不胜感激!

各位老大,我用单相逆变桥做一个交流电源,如下图:

上半桥IGBT从左到右排列为Q1,Q3,下半桥IGBT从左到右排列为Q2,Q4;

控制系统采用2407A,主要程序如下:

void SpwmInit(void)

{

//只用EVA来控制产生SPWM波;只用T1,

//只用4,2和3,1组成单线全控桥,6,5禁止;

//设为双极性SPWM调制方式,

 *MCRA |=  0x03c0;          //使能PWM1,2,3,4功能,IOPB7,PWM5,6设为I/O

//比较方式控制寄存器A,  00-强制低,01-低有效,10-高有效,11-强制高

*ACTRA  = 0x0f99;       //1111 1001 1001–PWM1,4 低有效,PWM2,3高有效;产生互补脉冲

*DBTCONA = 0x0AF4;     //死区时间控制, 周期A 32分频  8us

//三角波(载波)设置

*T1CNT = 0; //计数单元

*T1CON = 0x0800;       //T1控制寄存器,12~11–>01为连续增减计数模式,10~8bit–>000以CPU时钟频率为准

*T1PR  = 2000;       //T1周期寄存器,载波频率10k , 4000个时钟周期

 //比较控制寄存器,15->使能比较操作,

 //14~13->T1CNT下溢重载,11~10->ACTRA下溢重载,9->比较输出允许

*COMCONA = 0x8200; //1000 0010

//中断屏蔽寄存器A,B,C

*EVAIMRA = 0x0081;     //0–屏蔽;1–使能;7bit–>T1周期、1–>PDPINTA中断使能

*EVAIMRB = 0x0001;     //T2周期中断使能

*EVAIMRC = 0x0000;     //全部屏蔽

//中断标志寄存器A,B,C,全部清中断标志

*EVAIFRA = 0x078F;    

*EVAIFRB = 0x000F;

*EVAIFRC = 0x0007;    

M_wave_Cnt=0;

}

//每个T1中断调用一次;

//计算0~2pi周期均匀的200个点对应的脉冲导通时间

//Ton= Tc/2*(1+M*sin(2*K*PI*Fm/Fc)),其中: K = 0,1,2,,,N-1

void SPWM_D_calu(void)

{

long Q14_tmp; //注意,有正负32bit

int Q14_sin; //注意,有正负

M_wave_Cnt++; //三角载波中断次数计数器

if(M_wave_Cnt >= 200){ //一个正弦波周期结束

M_wave_Cnt = 0; //重新从0度开始

}

Q14_M_tmp = 256<<6;  //假设为最大

//SIN值为sin(2*K*PI*Fm/Fc),分为200个点

Q14_sin = PFUNC_wordRead(SIN_LIB + M_wave_Cnt);

Q14_tmp = ((long)Q14_M_tmp*(long)Q14_sin) >> 14;

Q14_tmp = (Q14_tmp+16384); //1–>Q14===1<<14

Q14_tmp =  Q14_tmp >> 1;

Q14_tmp =  Q14_tmp * Tc;

Q14_tmp =  Q14_tmp >> 14;

//设置比较寄存器值

*CMPR1 = (unsigned int)Q14_tmp;

*CMPR2 = (unsigned int)Q14_tmp;

}

问题:

1. 脉冲宽度计算值在0~4000个时钟周期,可是三角波的周期一般为2000,我感觉好像不对!

2. 输出波形也不对;在正半周,PWM1全为高电平(Q1不导通),负半周有脉冲!

3. 电压上不去,只有50v~60v

请先知给与指点,不胜感激!

jin zhao:

再补充:上图为,PWM位置图;

1.电压只有50~60v也不对;是压根就没有电压;

2.修改

   *CMPR1 = (unsigned int)Q14_tmp;

       *CMPR2 =*T1PR- (unsigned int)Q14_tmp;

      出现短路保护提示;

难道还没高手给与指点吗?

赞(0)
未经允许不得转载:TI中文支持网 » 单相SPWM波的产生疑问
分享到: 更多 (0)