2.3 计算相邻两个基本矢量电压的作用时间:
扇区判断结束后,就是计算相邻两个基本矢量电压的作用时间
在扇区1时,由u6和u4合成,设在一个时间周期ts内,u4作用的时间为t4,u6作用的时间为t6。由 基本矢量电压在αβ轴上的投影 和 目标矢量电压在αβ轴上的投影 分别相等建立等式:
到这里,计算出来的公式看着有点复杂,所以我们通过下面的方式稍稍简化一下,记:
则在各个扇区内的作用时间就分别为:
到这里,合成目标矢量电压uref需要的两个相邻矢量电压ux,uy以及分别作用的时间tx,ty就计算好了,但这里计算出来的时间不一定刚好满足tx+ty=ts,当tx+ty>ts时需要进行等比例缩小处理,处理方式如下:
当tx+ty
2.4 三路pwm占空比计算
目标矢量电压的所在扇区知道了,相邻两个基本矢量电压及其作用时间也知道了,接下来就是7段式svpwm的生成了。所谓的7段式svpwm,即在一个周期ts内,基本电压矢量的作用顺序为
,
作用的时间分别为:
。
以在第1扇区为例:基本电压矢量作用的顺序为
,
对应的三相电压波形为:
这里,可能会问,tx,ty和u4,u6是怎么对应的呢?为什么要先u4再u6呢?把各个扇区的作用顺序竖着列出来就能看出来了:
扇区u0uxuyu7uyuxu0
1 0 4 6 7 6 4 0
2 0 2 6 7 6 2 0
3 0 2 3 7 3 2 0
4 0 1 3 7 3 1 0
5 0 1 5 7 5 1 0
6 0 4 5 7 5 4 0
1 0 4 6 7 6 4 0
可以看出,从一个扇区进入相邻的另一个扇区时,只有一个基本矢量电压发生改变。即通过这样的作用顺序,可以减小开关管的切换次数,从而减少开关损耗,尤其是在负载电流较大时更应该减小开关切换次数。
然后就是根据基本矢量电压的作用时间去计算逆变h桥的占空比了,
仍然先以第1扇区为例:基本矢量电压作用的顺序为
即在一个周期ts时间内,前面定义的开关函数
s(c)=1的时间为,
s(b)=1的时间为,
s(a)=1的时间为。
对应的abc三路pwm的占空比就分别为。注意的是,看上面的三相电压波形可知,输出的pwm波时高电平中间对齐,所以在对你所使用的微控制器mcu的pwm定时器进行配置的时候要注意设置好计数方向(一般先向上计数在向下计数)和输出极性(超过阈值为高电平)。
对于其他几个扇区类似,这里不再重复详细叙述,列个表出来
这里说明一下,前面进行clarke变换和park变换的所有电压电流参数都是标幺值,这里的uα和uβ采用的也是标幺值。
我们合成的输出目标矢量电压也用标幺值表示(令uref_max=1),并令ts=1时,这里的系数k就等于常数1,这样的话,我们计算的时间ta,tb,tc就等于占空比。下面简单证明一下why。
仍以第1扇区为例:
已知最终的目标矢量电压最大不失真的幅值为,
则,我们已经计算的有,
即(这里的ux,uy已经是标幺值)
令uref_max=1把目标矢量电压标幺值化,再令ts=1,就可以把非零电压作用的时间转化为标幺值。
所以,我们在程序计算处理的时候,直接令k=1,然后按照上面列表计算出来的ta,tb,tc就可以直接作为占空比了,占空比再乘以pwm定时器的计数周期值,就可以得到比较寄存器的值了,这样计算量就减小很多了,然后就完成了整个svpwm的操作。
剩下的就是pwm定时器相关的操作了,这里不详说,后面有时间我再针对dsp和stm32这两款处理器做简要介绍。
04.算法流程
接着上一篇的坐标变换(上一篇链接:https://mp.weixin.qq.com/s/4pby2fbnxcn2ai4aolgvcg)
上篇已经介绍,由park逆变换计算得到uα,uβ
step1:扇区判断
计算,根据u1,u2,u3的符号计算n=4c+2b+a,再结合扇区表判断所处的扇区。
c语言代码示例:
v.u1 = v.ubeta; \\ v.u2 = ( v.ualpha*0.8660254) - (v.ubeta*0.5); \\ v.u3 = (-v.ualpha*0.8660254) - (v.ubeta*0.5); \\ v.sector = 0; \\ if(v.u1 > 0) v.sector += 1; \\ if(v.u2 > 0) v.sector += 2; \\ if(v.u3 > 0) v.sector += 4; \\step2:计算基本矢量电压作用时间(占空比)
计算,并根据扇区确定相邻两个基本矢量电压及其作用时间,然后对作用时间进行等比例缩小处理或引入零矢量电压处理,使得总的作用时间等于ts,或总的占空比等于1。
c语言代码示例:
v.tx = v.ubeta; \\ v.ty = ( v.ualpha*0.8660254) + (v.ubeta*0.5); \\ v.tz = (-v.ualpha*0.8660254) + (v.ubeta*0.5); \\ switch(v.sector) \\ { \\ case 1:{ \\ v.t1=v.tz; v.t2=v.ty; \\ if((v.t1+v.t2)>1){ \\ v.t1 = v.t1/(v.t1+v.t2); \\ v.t2 = v.t2/(v.t1+v.t2); \\ } \\ v.tb = 0.5*(1-v.t1-v.t2); \\ v.ta = v.tb + v.t1; \\ v.tc = v.ta + v.t2;}break; \\ case 2:{ \\ v.t1=v.ty; v.t2=-v.tx; \\ if((v.t1+v.t2)>1){ \\ v.t1 = v.t1/(v.t1+v.t2); \\ v.t2 = v.t2/(v.t1+v.t2); \\ } \\ v.ta = 0.5*(1-v.t1-v.t2); \\ v.tc = v.ta + v.t1; \\ v.tb = v.tc + v.t2;}break; \\ case 3:{ \\ v.t1=-v.tz; v.t2=v.tx; \\ if((v.t1+v.t2)>1){ \\ v.t1 = v.t1/(v.t1+v.t2); \\ v.t2 = v.t2/(v.t1+v.t2); \\ } \\ v.ta = 0.5*(1-v.t1-v.t2); \\ v.tb = v.ta + v.t1; \\ v.tc = v.tb + v.t2;}break; \\ case 4:{ \\ v.t1=-v.tx; v.t2=v.tz; \\ if((v.t1+v.t2)>1){ \\ v.t1 = v.t1/(v.t1+v.t2); \\ v.t2 = v.t2/(v.t1+v.t2); \\ } \\ v.tc = 0.5*(1-v.t1-v.t2); \\ v.tb = v.tc + v.t1; \\ v.ta = v.tb + v.t2;}break; \\ case 5:{ \\ v.t1=v.tx; v.t2=-v.ty; \\ if((v.t1+v.t2)>1){ \\ v.t1 = v.t1/(v.t1+v.t2); \\ v.t2 = v.t2/(v.t1+v.t2); \\ } \\ v.tb = 0.5*(1-v.t1-v.t2); \\ v.tc = v.tb + v.t1; \\ v.ta = v.tc + v.t2;}break; \\ case 6:{ \\ v.t1=-v.ty; v.t2=-v.tz; \\ if((v.t1+v.t2)>1){ \\ v.t1 = v.t1/(v.t1+v.t2); \\ v.t2 = v.t2/(v.t1+v.t2); \\ } \\ v.tc = 0.5*(1-v.t1-v.t2); \\ v.ta = v.tc + v.t1; \\ v.tb = v.ta + v.t2;}break; \\step3:计算pwm定时器比较寄存器值
这个很简单,就是用占空比乘以定时器的计数周期
c语言代码如下:
epwm1regs.cmpa.half.cmpa = (int16)(mperiod * svpwm1.ta);epwm2regs.cmpa.half.cmpa = (int16)(mperiod * svpwm1.tb);epwm3regs.cmpa.half.cmpa = (int16)(mperiod * svpwm1.tc);
LED智能照明六种常用传感器解析
这是一种更简单的方法,可以保护您的物联网设备免受黑客攻击
区块链以后发展的主要方向是什么
功能块MCA_CamInDirect的电子凸轮功能
关于成像核心——ISP的分析介绍
简述FOC电机控制之SVPWM原理(下)
一文知道什么是分布式存储
9月12日全面屏小米MIX2即将来袭!对垒iphone8还很强势!
探讨数字处理技术的路线图
ModelSim SE的几个操作:open,load,import,save format
路萌机器人在京东商城正式现货限量发售
传中电信与特斯拉洽谈 车内将覆盖无线网
衍射光栅的定义、基本原理及应用(一)
EDA公司试图解决温度、稳定性及电源可靠性或电源效率的差异性
软通动力基于openEuler的操作系统迁移实践分享
捷通华声打造全新灵云智能语音分析系统
5G和智慧城市里样子你知道吗
中国制造的“天工开物”新篇,如何在云上进化?
什么是ASTN (Automatic Switched Tr
选择服务器时单独配件高是不可取的