5007|19

24

帖子

1

资源

一粒金砂(中级)

SVPWM原理、实现、仿真分析 [复制链接]

 
本帖最后由 瓜弟 于 2019-12-27 19:18 编辑

    本贴主要介绍SVPWM的实现与仿真分析。

    在电机控制中,我们希望使用一个特定的空间磁场向量,来“拉”动转子,SVPWM技术使我们可以得到一个相对圆滑的旋转磁场向量。

六个基本向量.JPG

    在I区,由基本向量合成目标向量如下图所示:

基本向量合成目标向量.JPG

T_{S}为PWM的周期,T_{4}T_{6}分别为两个基础向量的作用时间,根据正弦定理可得:

\frac{U_{OUT}\ast T_{s}}{sin\left ( 2\pi /3 \right )}= \frac{U_{4}\ast T_{4}}{\sin \left ( \pi /3-\theta \right )}= \frac{U_{6}\ast T_{6}}{\sin \theta }

 

其中,U_{4}= U_{6}=\frac{2}{3}U_{DC} , U_{OUT}为目标向量的幅值,\theta为目标向量与基础向量的夹角,将上式化简后,得到:

\frac{T_{4}}{T_{s}}= \sqrt{3}\frac{U_{OUT}}{U_{DC}}\sin \left ( \pi /3-\theta \right )

 

\frac{T_{6}}{T_{s}}= \sqrt{3}\frac{U_{OUT}}{U_{DC}}\sin \left (\theta \right )

 

在八个基础向量中,还有两个零向量,合理分配两个零向量,使MOS桥上下桥臂负载均衡:

\frac{T_{0}}{T_{s}}=\frac{T_{7}}{T_{s}}=\left ( 1-\frac{T_{4}}{T_{s}}-\frac{T_{6}}{T_{s}} \right )/2

   

    通过以上推导,我们得到基本的占空比信号,但这并不能直接用于PWM信号生成,如下图所示,

PWM.JPG 在我们得到各个占空比后,在生成PWM时,我们需要关注这四个占空比信号与逆变桥的的PWM信号之间的关系,则:

逆变桥A相上半桥的占空比信号为t_{1}=\frac{T_{7}+T_{6}+T_{4}}{T_{s}}

逆变桥B相上半桥的占空比信号为t_{2}=\frac{T_{7}+T_{6}}{T_{s}}

逆变桥C相上半桥的占空比信号为t_{3}=\frac{T_{7}}{T_{s}}

 

    通过上述推导,我们得到了空间向量的模、角度与逆变器的PWM之间的关系,下面则是代码实现:

#include "SVPWM_generator.h"
#include "math.h"


#ifdef _USE_SIMULINK
long int Timer;
#endif

float PWM_Table[6];	//Atop,Abot,Btop,Bbot,Ctop,Cbot

/*
      Btop  Cbot
         \  /
    Abot------Atop
         /  \
      Ctop  Bbot
*/

void SVPWM_generator(float TargetPhaseAngle, float TargetPhaseMoldRate)	//
{
	float t1,t2;
#ifdef _USE_SIMULINK
	Timer ++;
	if(Timer >= _SIMULIN_DIVIDE_COUNTER_THREHOLD)
	{
		Timer = 0;
#endif

		if(( TargetPhaseAngle>=0 )&&(TargetPhaseAngle < 60))
		{
			TargetPhaseAngle = TargetPhaseAngle - 0;
			t1 = 1.732 * TargetPhaseMoldRate * sin((60-TargetPhaseAngle)*PI/180);
			t2 = 1.732 * TargetPhaseMoldRate * sin(TargetPhaseAngle*PI/180);
			PWM_Table[0] = (1+t1+t2)/2;
			PWM_Table[2] = (1-t1+t2)/2;
			PWM_Table[4] = (1-t1-t2)/2;
		}
		else if(( TargetPhaseAngle>=60 )&&(TargetPhaseAngle < 120))
		{
			TargetPhaseAngle = TargetPhaseAngle - 60;
			t1 = 1.732 * TargetPhaseMoldRate * sin((60-TargetPhaseAngle)*PI/180);
			t2 = 1.732 * TargetPhaseMoldRate * sin(TargetPhaseAngle*PI/180);
			PWM_Table[0] = (1+t1-t2)/2;
			PWM_Table[2] = (1+t1+t2)/2;
			PWM_Table[4] = (1-t1-t2)/2;
		}
		else if(( TargetPhaseAngle>=120 )&&(TargetPhaseAngle < 180))
		{
			TargetPhaseAngle = TargetPhaseAngle - 120;
			t1 = 1.732 * TargetPhaseMoldRate * sin((60-TargetPhaseAngle)*PI/180);
			t2 = 1.732 * TargetPhaseMoldRate * sin(TargetPhaseAngle*PI/180);
			PWM_Table[0] = (1-t1-t2)/2;
			PWM_Table[2] = (1+t1+t2)/2;
			PWM_Table[4] = (1-t1+t2)/2;
		}
		else if(( TargetPhaseAngle>=180 )&&(TargetPhaseAngle < 240))
		{
			TargetPhaseAngle = TargetPhaseAngle - 180;
			t1 = 1.732 * TargetPhaseMoldRate * sin((60-TargetPhaseAngle)*PI/180);
			t2 = 1.732 * TargetPhaseMoldRate * sin(TargetPhaseAngle*PI/180);
			PWM_Table[0] = (1-t1-t2)/2;
			PWM_Table[2] = (1+t1-t2)/2;
			PWM_Table[4] = (1+t1+t2)/2;
		}
		else if(( TargetPhaseAngle>=240 )&&(TargetPhaseAngle < 300))
		{
			TargetPhaseAngle = TargetPhaseAngle - 240;
			t1 = 1.732 * TargetPhaseMoldRate * sin((60-TargetPhaseAngle)*PI/180);
			t2 = 1.732 * TargetPhaseMoldRate * sin(TargetPhaseAngle*PI/180);
			PWM_Table[0] = (1-t1+t2)/2;
			PWM_Table[2] = (1-t1-t2)/2;
			PWM_Table[4] = (1+t1+t2)/2;
		}
		else if(( TargetPhaseAngle>=300 )&&(TargetPhaseAngle < 360))
		{
			TargetPhaseAngle = TargetPhaseAngle - 300;
			t1 = 1.732 * TargetPhaseMoldRate * sin((60-TargetPhaseAngle)*PI/180);
			t2 = 1.732 * TargetPhaseMoldRate * sin(TargetPhaseAngle*PI/180);
			PWM_Table[0] = (1+t1+t2)/2;
			PWM_Table[2] = (1-t1-t2)/2;
			PWM_Table[4] = (1+t1-t2)/2;
		}
		
		PWM_Table[0] = (PWM_Table[0] >= 0)? PWM_Table[0] : 0;
		PWM_Table[2] = (PWM_Table[2] >= 0)? PWM_Table[2] : 0;
		PWM_Table[4] = (PWM_Table[4] >= 0)? PWM_Table[4] : 0;
	
		PWM_Table[0] = (PWM_Table[0] <= 1)? PWM_Table[0] : 1;
		PWM_Table[2] = (PWM_Table[2] <= 1)? PWM_Table[2] : 1;
		PWM_Table[4] = (PWM_Table[4] <= 1)? PWM_Table[4] : 1;
		
#ifdef _USE_SIMULINK
	}
#endif

}

在SVPWM_generator.h文件中,主要定义了仿真步长、频率等参数,如下:

#ifndef __SVPWM_GENERATOR_H
#define __SVPWM_GENERATOR_H

#define _USE_SIMULINK

#ifdef _USE_SIMULINK
#define _SIMULIN_FREQUENCE 1000000	//Hz
#define _SIMULIN_SVPWM_CALCULATE_FREQUENCE 10000	//Hz
#define _SIMULIN_DIVIDE_COUNTER_THREHOLD  (_SIMULIN_FREQUENCE / _SIMULIN_SVPWM_CALCULATE_FREQUENCE)
#endif

#define PI 3.1415926

extern float PWM_Table[6];
void SVPWM_generator(float TargetPhaseAngle, float TargetPhaseMoldRate);

#endif

    在 SVPWM_generator(float TargetPhaseAngle, float TargetPhaseMoldRate) 中,TargetPhaseAngle为目标向量的相对于A相坐标轴的角度,单位为°, TargetPhaseMoldRate为目标向量的幅值与直流母线的电压的比值,根据SVPWM可知,当TargetPhaseMoldRate < \sqrt{3} / 3时,即目标向量的轨迹圆内切于六个基本向量所组成的正六边形,合成矢量的调制为线性调制。

 

    利用Simulink下的S-Function可以实现对以C语言实现的算法进行仿真分析,仿真框图如下图所示:

逆变器与负载.JPG

逆变桥与负载、测量

 

 

SVPWM与PWM生成.JPG

SVPWM、PWM信号生成

    在由SVPWM信号生成PWM信号过程中,需要注意:三项逆变桥的六个PWM波必须是中心对称的。

 

    如何验证算法的正确?SVPWM的目标是生成一个在空间中匀速旋转的矢量,我们可将SVPWM信号进行ABC坐标系到Alpha-Beta坐标系的转换,并用x-y示波器显示出来,检查目标向量轨迹是否为圆。同理,我们也可以将逆变桥的输出电压进行上述变换,检查其输出向量的轨迹。

    

    当TargetPhaseMoldRate = \sqrt{3} / 3时,仿真图形如下:

 

    1、SVPWM输出的马鞍波:

SVPWM马鞍波.JPG

    2、SVPWM的输出经过坐标变换得到的圆:

SVPWM圆.JPG
    3、逆变桥的输出电压波形

逆变桥输出电压波形.JPG

    4、逆变桥的输出的电压经过坐标变换得到的目标向量轨迹:

逆变桥输出向量.JPG

 

  
此内容由EEWORLD论坛网友瓜弟原创,如需转载或用于商业用途需征得作者同意并注明出处

author:nblianyan@qq.com

image.png

赞赏

2

查看全部赞赏


回复

308

帖子

1

资源

版主

matlab也可以共享出来让大伙学习学习


回复

5906

帖子

209

资源

版主

写的太好了,学习了!

个人签名

EEWORLD开发板置换群:309018200,——电工们免费装β的天堂,上班摸鱼场,释放压力好地方!商家勿入!加群暗号:喵


回复

2870

帖子

1

资源

五彩晶圆(初级)

卧槽,瓜弟弟,大作。完全看不懂,有没有办法5分钟精通的?

个人签名人已离开,无事别找,找也找不到。

回复

24

帖子

1

资源

一粒金砂(中级)

freebsder 发表于 2020-1-9 17:28 卧槽,瓜弟弟,大作。完全看不懂,有没有办法5分钟精通的?

今晚来我房间?我手把手教你?

点评

学知识如何能挑剔时间地点?来吧现在的,露天的,把你的知识注入给我。。。  详情 回复 发表于 2020-1-16 17:58

回复

24

帖子

1

资源

一粒金砂(中级)

hotsauce1861 发表于 2019-12-29 22:35 matlab也可以共享出来让大伙学习学习

见附件

ErLevel_SanPhase_InverterBridge_Simulink.zip

398.79 KB, 下载次数: 157

点评

赞  详情 回复 发表于 2020-1-17 07:59

回复

2870

帖子

1

资源

五彩晶圆(初级)

瓜弟 发表于 2020-1-15 18:38 今晚来我房间?我手把手教你?

学知识如何能挑剔时间地点?来吧现在的,露天的,把你的知识注入给我。。。

个人签名人已离开,无事别找,找也找不到。

回复

308

帖子

1

资源

版主


回复

1

帖子

0

资源

一粒金砂(初级)

大赞,感谢楼主分享干货资料


回复

46

帖子

0

资源

一粒金砂(中级)

大赞,必须竖大拇指,厉害了!


回复

26

帖子

2

资源

一粒金砂(初级)

谢谢楼主分享!


回复

3

帖子

0

资源

一粒金砂(初级)

真的是好東西,感謝分享,是干貨沒錯。


回复

2万

帖子

337

资源

版主

很好的仿真讲解


回复

31

帖子

0

资源

一粒金砂(中级)

还带仿真,感谢楼主分享干货资料


回复

4

帖子

0

资源

一粒金砂(初级)

学习了!


回复

8

帖子

0

资源

一粒金砂(初级)


回复

2

帖子

0

资源

一粒金砂(初级)

绝对干货啊,赞


回复

3

帖子

0

资源

一粒金砂(初级)

感激不尽,正需要呢


回复

3

帖子

0

资源

一粒金砂(初级)

freebsder 发表于 2020-1-16 17:58 学知识如何能挑剔时间地点?来吧现在的,露天的,把你的知识注入给我。。。

一个敢开车,一个敢夺方向盘……

可以的


回复

73

帖子

0

资源

一粒金砂(中级)

好资料大赞,非常感谢楼主分享干货资料,值得拥有,谢谢


回复
您需要登录后才可以回帖 登录 | 注册

最新文章 更多>>
    关闭
    站长推荐上一条 1/7 下一条

    About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

    站点相关: 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

    北京市海淀区知春路23号集成电路设计园量子银座1305 电话:(010)82350740 邮编:100191

    电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright © 2005-2020 EEWORLD.com.cn, Inc. All rights reserved
    快速回复 返回顶部 返回列表