打印
[学习笔记]

SVPWM生成

[复制链接]
1128|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 RunningX 于 2020-12-3 21:25 编辑

最近学习了SVPWM,把推理过程跟代码分享一下。在FOC控制中,我们通过采集相电流(Ia,Ib,Ic),经过Clark变换成Ialpha,Ibeta,再经过park变化成Id,Iq;然后经过PID运算,输出经过PID运算得到的Id,Iq;Id,Iq经过repark变化得到Ialpha跟Ibeta,通过计算Ialpha跟Ibeta,就能生成SVPWM
下面介绍红色字体的计算过程:
一.通过给定一个Id跟Iq值,可以通过公式Ialpha = cos(theta) * Id - sin(theta) * Iq; Ibeta = sin(theta) * Id + cos(theta) * Iq;得到Ialpha跟Ibeta
二.得到的Ialpha跟Ibeta就可以进行SVPWM的生成了。
    1.扇区位置确定。
     
    上图的为Alpha/Beta坐标系中电压旋转平面。
    FOC控制分区说明:通过控制3对PMW的通断,有8种PWM控制方式,其中111和000位零矢量,其他6个矢量可将一个电压旋转平面分成6个扇区。
从0-300度分别为U4(100)、U6(110)、U2(010)、U3(011)、U1(001)、U5(101),每个矢量间隔60度。
每两个相邻两个电压矢量之间为一个扇区,例如U4与U6之间为I扇区,U6与U2之间为II扇区。下图为Alpha-Beta坐标及第I扇区:其中Alpha >0,Beta>0,Beta/Alpha < tan60° = sqrt(3)

同理,可推出每个扇区之间的的电压Alpha与电压Beta值存在以下关系:
I区:Alpha > 0;Beta > 0; Beta < sqrt(3) * Alpha;
II区:Beta > 0;Beta > |sqrt(3) * Alpha|;第二条公式分为(当Alpha>0,则Beta>sqrt(3)*Alpha;当Alpha<0;Beta>-sqrt(3)*Alpha)
III区:Alpha < 0;Beta > 0; Beta < |sqrt(3) * Alpha|;第二条公式化为Beta< -sqrt(3) * Alpha
IV区:Alpha < 0;Beta < 0; -Beta < -sqrt(3) * Alpha;第二条公式化为Beta>sqrt(3)*Alpha
V区: Beta > 0;-Beta > |sqrt(3) * Alpha|;第二条公式分为(当Alpha>0,则-Beta>sqrt(3)*Alpha;当Alpha<0,则-Beta>-sqrt(3)*Alpha)

VI区:Alpha > 0;Beta < 0; -Beta < sqrt(3) * Alpha;

从以上的条件,略去单独Alpha的大小判断,可发现扇区的位置由Beta,sqrt(3)*Alpha-Beta,-sqrt(3)*Alpha-Beta三式决定令Sector_A = Beta; Sector_B = (sqrt(3)*Alpha-Beta)/2; Sector_C = (-sqrt(3)*Alpha-Beta)/2; 令N = 4*Sector_C + 2*Sector_B + 1*Sector_A;则有:
I区:   Sector_C < 0;Sector_B > 0;Sector_A> 0;  则N=(二进制)011=(十进制)3;
II区:  Sector_C < 0;Sector_B < 0;Sector_A >0;  则N=(二进制)001=(十进制)1;
III区: Sector_C >0;Sector_B < 0;Sector_A > 0;  则N=(二进制)101=(十进制)5;
IV区:  Sector_C > 0;Sector_B < 0;Sector_A <0;  则N=(二进制)100=(十进制)4;
V区:   Sector_C > 0;Sector_B > 0;Sector_A< 0;  则N=(二进制)110=(十进制)6;

VI区:  Sector_C < 0;Sector_B > 0;Sector_A <0;  则N=(二进制)010=(十进制)2;

即由Alpah跟Beta可得到扇区位置

  2.扇区的矢量保持时间
同样以第I扇区为例:

第I扇区中Alpah*Ts =|U4|*T4 + |U6|*T6*cos(π/3);Beta*Ts= |U4|*T4*0 + |U6|*T6*sin(π/3);其中|U1| = |U2| = |U3| = |U4| = |U5| = |U6| = 2/3Udc;
则有Alpah*Ts = 2/3Udc*T4 + 1/3Udc*T6;Beta*Ts =(1/ sqrt(3))*T6;由这两条公式继续推,可得:T4 = (sqrt(3)/2)(sqrt(3)*Alpha - Beta)*(Ts/Udc) = (sqrt(3))*Sector_B*(Ts/Udc);
T6 = sqrt(3)*Beta*(Ts/Udc) = sqrt(3)*Sector_A*(Ts/Udc);


第II扇区中Alpha*Ts = |U6|*T6 *cos(π/3)- |U2|*T2*cos(π/3);
Beta*Ts= |U6|*T6*sin(π/3) + |U2|*T2*sin(π/3);同理可推得:
T6 = sqrt(3)/2*(sqrt(3)Alpha + Beta)*(Ts/Udc) = -sqrt(3)*Sector_C*(Ts/Udc);
T2 = sqrt(3)/2*(Beta - sqrt(3)Alpha)*(Ts/Udc) = -sqrt(3)*Sector_B*(Ts/Udc);

第III扇区中,Alpha*Ts = -|U2|*T2*cos(π/3) - |U3|*T3;Beta*Ts = |U2|*T2*sin(π/3) + |U3|*T3*0;
可得:T2 = sqrt(3)*Beta*(Ts/Udc) = sqrt(3)*Sector_A*(Ts/Udc);
T3 = -sqrt(3)/2*(sqrt(3)Alpha + Beta)*(Ts/Udc) = sqrt(3)*Sector_C*(Ts/Udc);

第IV扇区中, Alpha*Ts = -|U3|*T3 - |U1|*T1*cos(π/3);Beta*Ts = |U3|*T3*0 - |U1|*T1*sin(π/3);可得:T3 = sqrt(3)/2*(Beta - sqrt(3)Alpha)*(Ts/Udc)  = -sqrt(3)*Sector_B*(Ts/Udc);
T1 = -sqrt(3)*Beta*(Ts/Udc) = -sqrt(3)*Sector_A*(Ts/Udc);

第V扇区中,Alpha*Ts = -|U1|*T1*cos(π/3) + |U5|*T5*cos(π/3);
Beta*Ts= -|U1|*T1*sin(π/3) + -|U5|*T5*sin(π/3);可得:
T1 = -sqrt(3)/2*(sqrt(3)Alpha + Beta)*(Ts/Udc) = sqrt(3)*Sector_C*(Ts/Udc);
T5 = sqrt(3)/2*(sqrt(3)Alpha - Beta)*(Ts/Udc) = sqrt(3)*Sector_B*(Ts/Udc);

第VI扇区中,Alpah*Ts =|U5|*T5 *cos(π/3)+ |U4|*T4;Beta*Ts= |U5|*T5*sin(π/3) + |U4|*T4*0;可得T5 = -sqrt(3)*Beta*(Ts/Udc) = -sqrt(3)*Sector_A*(Ts/Udc)
T4 = sqrt(3)/2*(sqrt(3)Alpha + Beta)*(Ts/Udc) = -sqrt(3)*Sector_C*(Ts/Udc)

其中Ts/Udc为固定值,可以理解为PWM周期/电压
即由Alpah跟Beta也可得到扇区的矢量保持时间

3.根据扇区及矢量保持时间,既可用来生成相应的PWM
   根据扇区中各个矢量的保持时间,可以计算得到各个PWM通道的占空比,控制各个PWM通道输出,也就是SVPWM

附上相关的工程: 7801电机demo板(SVPWM强拖).rar (10.77 KB)

工程中可以通过仿真改变startFlag的值来控制电机运行,通过调节openLoop_Iq来控制Iq的输出;因为是强拖运行,所以是theta角度是手动给的,theta角对应的正弦值可通过查表的方式得到。









使用特权

评论回复

相关帖子

沙发
caigang13| | 2020-12-4 07:40 | 只看该作者
不错,感谢楼主分享经验。

使用特权

评论回复
板凳
chenjun89| | 2020-12-4 12:35 | 只看该作者
学习了,感谢楼主分享经验。

使用特权

评论回复
地板
嵌入小菜菜| | 2020-12-8 22:06 | 只看该作者
说实话,这个我一直没有看懂。

使用特权

评论回复
5
lihuasoft| | 2020-12-12 14:24 | 只看该作者
此贴一出,吊打各路教程书籍。能有幸读到此贴的初学者必是修来的福分。
鄙人去年曾稀里糊涂代码生成了SVPWM,但事后没有总结成经验,全然忘记。打算借助此贴再温习一遍。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

42

主题

223

帖子

4

粉丝