当前位置:   article > 正文

FOC控制库MCSDK5.4.4梳理(1)——SVPWM

FOC控制库MCSDK5.4.4梳理(1)——SVPWM

一、前言

  本文先阐述FOC控制算法的最后一步——SVPWM,即空间矢量脉宽调制。本文将结合理论从代码角度去分析SVPWM算法,逐步解析其如何将输入的目标电压值Uout转化为PWM占空比的。FOC控制库中SVPWM的实现函数是PWMC_SetPhaseVoltage,在源代码文件pwm_curr_fdbk.c中。
  网络上有很多关于SVPWM算法原理的讲解,但很少有结合实际代码实现去讲解的,大多数文章跟实际并不相关。本文结合代码,加上一些个人理解,为大家梳理一下SVPWM,让大家能够对算法有更深一步的理解。

二、算法解析

1、空间矢量合成

  如图1所示,UVW三相电压颜色为别为红色、绿色和蓝色,合成的电压矢量为黑色,左图为电压矢量合成示意图,右图为电压的模长随时间ωt变化示意图

图1 电压矢量合成动图
  电机中UVW三相在空间位置上相差120度(这是电角度,其等于机械角度乘以极对数),电机运行过程中三相电压分别为Uu、Uv和Uw。现在以U相为基准建立αOβ平面直角坐标系,则可以写出三相电流的表达式:
由上面表达式可以得出两个结论:
  • 三相电压的标量和等于零:Uu+Uv+Uw=0,证明过程如下:
  • 三相电压的矢量和为半径为3/2的圆:r=3/2,证明过程如下:
图2 电压矢量正交分解
如图2所示,将Uu、Uv和Uw按照直角坐标系分解,可以得到:
同理可证得:
由此可得:
这个结论说明了相电压是母线电压的2/3,后面会用到

2、六个扇区划分

  • 函数输入是Valfa_beta,涵义是图2中α和β轴的分量大小

uint16_t PWMC_SetPhaseVoltage( PWMC_Handle_t * pHandle, alphabeta_t Valfa_beta )

  • pHandle->hT_Sqrt3的宏定义为2*sqrt(3),暂时忽略掉入参wUAlphawUBeta中的PWM周期Ts和电压分量,只把它当作角度来分析,则wUAlpha为:2*sqrt(3)*α,wUBeta为:-2*β

int32_t wUAlpha = Valfa_beta.alpha * ( int32_t )pHandle->hT_Sqrt3;
int32_t wUBeta = -( Valfa_beta.beta * ( int32_t )( pHandle->PWMperiod ) ) * 2;
#define SQRT3FACTOR (uint16_t) 0xDDB4 /* = (16384 * 1.732051 * 2)*/

  • 代码中给出了三个分量wX,wY和wZ

int32_t wX = wUBeta;
int32_t wY = ( wUBeta + wUAlpha ) / 2;
int32_t wZ = ( wUBeta - wUAlpha ) / 2;

由此得到:

由此可以得到三条直线方程:
  • 如图3所示,三条直线将直角坐标系分为六个扇区
图3 扇区划分
图4 线性区域规划

  如图4所示,根据中学学过的线性区域规划的知识,可以得到:红色部分为wX>0的区域,绿色区域为wY>0的区域,蓝色区域为wZ>0的区域,由此可以得到表1的结果。代码中先按照wX,wY和wZ的值进行扇区判断,并计算PWM占空比

扇区号wXwYwZ
1>0>0<0
2XX>0>0
3>0<0>0
4<0<0<0
5XX<0<0
6<0>0<0
表1 扇区判断表

比如wY < 0,wZ < 0即可判断出目标矢量落在扇区5(SECTOR_5)

if ( wY < 0 )
{
if ( wZ < 0 )
{
  pHandle->Sector = SECTOR_5;
}
}

3、计算空间矢量作用时间

  我们来分析第6扇区的空间矢量合成情况,SVPWM波形是7段式,根据代码可以看出三相占空比大小是A>B>C,即第六扇区7段式为:0-4-5-7-5-4-0。波形如图6所示

图5 三相电压通电时间
图6 六个基本空间矢量

  FOC库中配置的定时器工作模式是中心对齐模式(定时器CNT计数值增加到等于定时周期时,再递减到0,如此往复循环),如此可以得到如图5的波形。从图中得出结论,T4=TxT5=TyT7=T0=(Ts-Tx-Ty)/2 。状态7和状态0合成的向量为零向量,不对电机做功
  如图6,这里我们分析第六扇区的情况,U4为100,代表U相;U5为101,代表U相和W相的合成向量,Tx是U4的通电时间,Ty是U5的通电时间。同样这里我们把Uout正交分解,则有:

根据“空间矢量合成”中的结论二,可以将U4U5替换为2*Udc/3,将其带入上式,可以得到:

Uout在α轴上的分量为U_out*cos⁡(Θ),在β轴上的分量是U_out*sin⁡(Θ),这里写成Udc/sqrt(3)为合成的最大不失真电压,原因放到下一节讲,这里的Uα/(Udc/sqrt(3))alphaUβ/(Udc/sqrt(3))betaalphabeta这两个值为SVPWM函数的入参

在“六个扇区划分”开始时,我们知道Uα和Uβ除了角度外还乘了一个PWM周期Ts(pHandle->PWMperiod),结合代码,wUAlpha多乘了2*sqrt(3)wUBeta多乘了-2因此可以进一步简化上述式子:

回忆一下代码中wXwYwZ三个变量和wUAlphawUBeta两个变量的关系:

至此,可以计算UVW三相占空比了,因为FOC库定时器模式是中心对齐模式,所以计算占空比时只计算一半就可以了:

FOC库的变量格式是Q15格式,所以计算时要除以32768:

第6扇区计算占空比的代码

wTimePhA = ( int32_t )( pHandle->PWMperiod ) / 4 + ( ( wY - wX ) / ( >int32_t )262144 );
wTimePhC = wTimePhA - wY / 131072;
wTimePhB = wTimePhC + wX / 131072;

至此SVPWM算法的原理与代码便可以联系起来了

4、六个基本空间向量合成的不失真条件

图7 六个基本空间向量合成的不失真条件

  如图7所示,外圆的大小为2*Udc/3,内圆的大小为Udc/sqrt(3)。根据图5所示,状态0和7合成的电压矢量为0,故当TX=T=Ts/2时,合成的电压矢量最大,此时合成的电压矢量边界为图7中的正六边形。为了保证合成的电压矢量不会失真,合成的电压矢量不能超过图7中的内圆,此时的电压矢量为Uref=2*Udc/3*sin(π/3)=Udc/sqrt(3),这正是在之前推导过程中把sqrt(3)/Udc这个分量约掉的原因

三、结语

  SVPWM算法分析到这就算完成了,这是FOC库中比较难以理解的一部分,涉及到的计算转换比较多,把原理和代码对应起来属实不容易,耗费了很久时间才整理出来这篇文章。知其然,也要知其所以然,只会用是远远不够的,我们需要进一步挖掘其背后的原理,才能真正的灵活多变的解决产品问题,希望这篇文章能给喜欢研究原理的小伙伴带来帮助

FOC5.4源代码:https://pan.baidu.com/s/1VIDh37emlCNvsngC9-Nhuw?pwd=g6ac

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/繁依Fanyi0/article/detail/247920
推荐阅读
相关标签
  

闽ICP备14008679号