【电机控制】七段式SVPWM扇区、矢量作用时间计算——对比simplefoc与Ti例程

【电机控制】七段式SVPWM扇区、矢量作用时间计算——对比simplefoc与Ti例程



前言

【电机控制】直流有刷电机、无刷电机汇总——持续更新
使用工具:
1.得力万用表


提示:以下是本篇文章正文内容,下面案例可供参考

一、simplefoc——通过角度找扇区

1.通过角度找扇区理论

1.通过角度找扇区

在这里插入图片描述

2.矢量作用时间计算

在这里插入图片描述
在这里插入图片描述
Udc表示电源电压(在代码中是voltage_limit),Uref表示设置的力矩大小(在代码中是target_voltage),Ts表示PWM周期(代码中没有把Ts体现出来,代码中的T1、T2是周期的百分比)。

3.矢量切换时间计算——七段式

与下列TI计算的七段式相同,不同的是TI做了优化处理

在这里插入图片描述

2.simplefoc代码

	sector = (angle_el / _PI_3) + 1;
	T1 = _SQRT3*_sin(sector*_PI_3 - angle_el) * Uout;
	T2 = _SQRT3*_sin(angle_el - (sector-1.0)*_PI_3) * Uout;
	T0 = 1 - T1 - T2;
	
	// calculate the duty cycles(times)
	switch(sector)
	{
		case 1:
			Ta = T1 + T2 + T0/2;
			Tb = T2 + T0/2;
			Tc = T0/2;
			break;
		case 2:
			Ta = T1 +  T0/2;
			Tb = T1 + T2 + T0/2;
			Tc = T0/2;
			break;
		case 3:
			Ta = T0/2;
			Tb = T1 + T2 + T0/2;
			Tc = T2 + T0/2;
			break;
		case 4:
			Ta = T0/2;
			Tb = T1+ T0/2;
			Tc = T1 + T2 + T0/2;
			break;
		case 5:
			Ta = T2 + T0/2;
			Tb = T0/2;
			Tc = T1 + T2 + T0/2;
			break;
		case 6:
			Ta = T1 + T2 + T0/2;
			Tb = T0/2;
			Tc = T1 + T0/2;
			break;
		default:  // possible error state
			Ta = 0;
			Tb = 0;
			Tc = 0;
	}
	
	TIM_SetCompare1(TIM2,Ta*PWM_Period);
	TIM_SetCompare2(TIM2,Tb*PWM_Period);
	TIM_SetCompare3(TIM2,Tc*PWM_Period);

3.解读simplefoc代码

1.通过角度找扇区

	sector = (angle_el / _PI_3) + 1;

2.矢量作用时间计算

	T1 = _SQRT3*_sin(sector*_PI_3 - angle_el) * Uout;
	T2 = _SQRT3*_sin(angle_el - (sector-1.0)*_PI_3) * Uout;
	T0 = 1 - T1 - T2;
		switch(sector)
	{
		case 1:
			Ta = T1 + T2 + T0/2;
			Tb = T2 + T0/2;
			Tc = T0/2;
			break;
		case 2:
			Ta = T1 +  T0/2;
			Tb = T1 + T2 + T0/2;
			Tc = T0/2;
			break;
		case 3:
			Ta = T0/2;
			Tb = T1 + T2 + T0/2;
			Tc = T2 + T0/2;
			break;
		case 4:
			Ta = T0/2;
			Tb = T1+ T0/2;
			Tc = T1 + T2 + T0/2;
			break;
		case 5:
			Ta = T2 + T0/2;
			Tb = T0/2;
			Tc = T1 + T2 + T0/2;
			break;
		case 6:
			Ta = T1 + T2 + T0/2;
			Tb = T0/2;
			Tc = T1 + T0/2;
			break;
		default:  // possible error state
			Ta = 0;
			Tb = 0;
			Tc = 0;
	}

二、TI——通过Uα、Uβ找扇区

1.通过Uα、Uβ找扇区理论

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

若A、B、C、任意一个不等式大于0,则为1,反之则为0
在这里插入图片描述

2.TI代码

void  SVPWM_Gen(SVGEN *v)
{
	v->tmp1= v->Ubeta;															
	v->tmp2= _IQdiv2(v->Ubeta) + _IQmpy(_IQ(0.866),v->Ualpha);					
  	v->tmp3= v->tmp2 - v->tmp1;													
																			
	v->VecSector=3;															
	v->VecSector=(v->tmp2> 0)?( v->VecSector-1):v->VecSector;					
	v->VecSector=(v->tmp3> 0)?( v->VecSector-1):v->VecSector;						
	v->VecSector=(v->tmp1< 0)?(7-v->VecSector) :v->VecSector;						
																			
	 if(v->VecSector==1 || v->VecSector==4)                                 
      {   
      		v->Ta= v->tmp2; 													
      		v->Tb= v->tmp1-v->tmp3; 											
      		v->Tc=-v->tmp2;														
      }								    										   																				
    else if(v->VecSector==2 || v->VecSector==5)                                   
      {   
      		v->Ta= v->tmp3+v->tmp2; 												
      		v->Tb= v->tmp1; 														
      		v->Tc=-v->tmp1;														
      }																	   																					
    else  if(v->VecSector==3 || v->VecSector==6)   
		
      {   
      		v->Ta= v->tmp3; 														
      		v->Tb=-v->tmp3; 														
      		v->Tc=-(v->tmp1+v->tmp2);												
      }							
	 else
	 {
			v->Ta=0;
			v->Tb=0;
			v->Tc=0;
	 }
}	

3.解读TI代码

1.ABC赋值

	v->tmp1= v->Ubeta;															
	v->tmp2= _IQdiv2(v->Ubeta) + _IQmpy(_IQ(0.866),v->Ualpha);					
  	v->tmp3= v->tmp2 - v->tmp1;			

这里TI开始进行优化,将传统的ABC稍作修改,
其中,A不变,为Uβ;
B为二分之根号三Uα+二分之一Uβ;
C为二分之根号三Uα-二分之一

2.找扇区

找扇区的方式也与传统的N=4C+2B+A不一样
先将其赋值为3再做判断

	v->VecSector=3;															
	v->VecSector=(v->tmp2> 0)?( v->VecSector-1):v->VecSector;					
	v->VecSector=(v->tmp3> 0)?( v->VecSector-1):v->VecSector;						
	v->VecSector=(v->tmp1< 0)?(7-v->VecSector) :v->VecSector;	

若A<0,则7-N,反之不变
若B>0,则N-1,反之不变
若C>0,则N-1,反之不变

3.矢量作用时间计算

这里也与传统的计算不同,舍弃掉了根号三*Ts/Udc
我们只看第一扇区与第四扇区,将画圈部分舍弃

在这里插入图片描述

4.矢量切换时间计算——七段式

将剩余部分的Tx与Ty代入到下列公式,下列公式也需要将Ts去掉,除以4去掉,再取反
例如:
第一扇区
Sa=Tx+Ty=根号三/2Uα+1/2Uβ=B
Sb=-Tx+Ty=3/2Uβ-根号三/2Uα=A-B
Sc=-Tx-Ty=-B

第四扇区
Sa=-Tx-Ty=根号三/2Uα+1/2Uβ=B
Sb=-Tx-Ty=3/2Uβ-根号三/2Uα=A-B
Sc=Tx+Ty=-B

此时,我们会发现,第一扇区与第四扇区的矢量作用时间的计算是一样的,也就是说,TI工程师是将ABC处赋值做了处理,对算法进行了优化。
我在这里举例第一扇区与第四扇区,同理可得第二扇区与第五扇区,第三扇区与第六扇区。

	 if(v->VecSector==1 || v->VecSector==4)                                 
      {   
      		v->Ta= v->tmp2; 													
      		v->Tb= v->tmp1-v->tmp3; 											
      		v->Tc=-v->tmp2;														
      }		

在这里插入图片描述

三、参考文章

SVPWM分析、各个扇区详细计算以及Matlab仿真
FOC - SVPWM扇区判断
如何在TI官网上寻找DSP的例程
[问答] F28335电机矢量控制例程,svpwm生成中的一个问题如何解答
基于TMS320F28335的五段式和七段式SVPWM实现方法

总结

本文仅仅简单介绍了【电机控制】七段式SVPWM扇区、矢量作用时间计算——对比simplefoc与Ti例程,评论区欢迎讨论。

  • 24
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
五段 SVPWM(Space Vector Pulse Width Modulation)和七段 SVPWM 是两种常见的电力电子调制技术,用于控制交流电机的输出电压和频率。它们各自有不同的优点和缺点,下面是它们的对比: 五段 SVPWM 优点: 1. 简单易实现:五段 SVPWM 的实现相对简单,计算量较小,易于控制器实现。 2. 处理能力强:五段 SVPWM 能够处理大范围的负载变化,对电机的响应速度较快。 3. 占空比控制精度高:五段 SVPWM 可以实现较高的占空比控制精度,输出电压波形较为平滑。 4. 适用范围广:五段 SVPWM 适用于大多数交流电机控制应用,特别是中低功率应用。 五段 SVPWM 缺点: 1. 谐波含量高:五段 SVPWM 在某些频率范围内可能产生较高的谐波,可能会对电机和其他设备造成干扰。 2. 低频区域性能差:五段 SVPWM 在低频区域的性能相对较差,可能会引起齿槽效应和振荡。 七段 SVPWM 优点: 1. 谐波含量低:七段 SVPWM 通过优化电压波形,可以降低谐波含量,减少对电机和其他设备的干扰。 2. 高频区域性能优秀:七段 SVPWM 在高频区域的性能相对较好,可以实现更高的输出频率和更快的响应速度。 七段 SVPWM 缺点: 1. 实现复杂:七段 SVPWM 的实现相对复杂,计算量较大,对控制器的要求较高。 2. 控制精度受限:七段 SVPWM 的占空比控制精度相对较低,输出电压波形可能不够平滑。 综上所述,五段 SVPWM七段 SVPWM 各有优缺点,具体选择应根据应用需求和控制要求来决定。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Kisorge

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值