(电机03)分享FOC控制中SVPWM的输出关联硬件
本文目录
- 本篇前言
- 知识点讲解
- 总结
本篇前言
上一篇我们接着介绍了SVPWM扇区判断,并且在第一篇就讲了如何控制相邻的两个电压矢量去合成目标电压矢量,这一篇我们将讲一下如何SVPWM的输出关联到MCU定时器中的三个通道输出。网上找了一张图,是表达第一扇区的,放出来让大家有个概念。
知识点讲解
SVPWM的输出关联到MCU定时器中的三个通道输出就两个关键点,一个是比例需要输出PWM,另外一个是保持每次只改变一个mos管控制的原则,从000开始,单个mos变化的组合优先。
我们看到上面的图,是一个中心对齐形式,高电平就是输出的时候,低电平就是关闭的时候。我们在求相邻两个作用矢量的作用比例,其实就是一个时间上的比例。
我们先定义PWM控制几个时间,T0是不作用的时间、Ta是先作用的时间、Tb是后作用的时间。
我们在求相邻两个作用矢量的作用时间,会得到先作用时间比例Tx,后作用时间Ty。他们根据所在扇区的不同而不同,并且根据MOS开关编码的大小会优化先后作用的顺序。
扇区号 | 优化后的先作用电压矢量 | 优化后的后作用电压矢量 |
1 | U4 | U6 |
2 | U2 | U6 |
3 | U2 | U3 |
4 | U1 | U3 |
5 | U1 | U5 |
6 | U4 | U5 |
在不同扇区的MOS最优开关顺序如下:
扇区\顺序 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
1 | 000(U0) | 100(U4) | 110(U6) | 111(U7) | 111(U7) | 110(U6) | 100(U4) | 000(U0) |
2 | 000(U0) | 010(U2) | 110(U6) | 111(U7) | 111(U7) | 110(U6) | 010(U2) | 000(U0) |
3 | 000(U0) | 010(U2) | 011(U3) | 111(U7) | 111(U7) | 011(U3) | 010(U2) | 000(U0) |
4 | 000(U0) | 001(U1) | 011(U3) | 111(U7) | 111(U7) | 011(U3) | 001(U1) | 000(U0) |
5 | 000(U0) | 001(U1) | 101(U5) | 111(U7) | 111(U7) | 101(U5) | 001(U1) | 000(U0) |
6 | 000(U0) | 100(U4) | 101(U5) | 111(U7) | 111(U7) | 101(U5) | 100(U4) | 000(U0) |
以扇区1为例:
需要控制的矢量作用时间是T4和T6,总的时间我们用1来表示,那么不作用的时间就是:T0 = (1-T4-T6),这个不作用对于MOS控制来说,全关000和全开111都是不会控制电机转动的。所以要除以2。所以有以下:
T0=(Ts-T4-T6)/2
我们再开前言的图和MOS最优开关顺序,在000的下一个开关状态是100,也就是UVW相的U,或者是定义ABC中的A吧。不管是UVW还是ABC,我们习惯把它们对应定时器PWM硬件通道的CH1、CH2、CH3。
T0时间过后,CH1通道就要“冒头”了,所以告诉定时器CH1的是,每个周期开始的时刻,等待T0/2的时间你就要冒头开始作用了。
在100的下一个开关状态是110,在这个变化中,要改变的是第二个通道,那么我们要告诉定时器CH2的是,每个周期开始的时刻,等待T0/2时间,轮到100先作用Tx时间的一半,再轮到CH2冒头开始作用Ty时间的一半。所以有以下:
Ta=T0 + T4/2
在110的下一个开关状态是111,在这个变化中,要改变的是第三个通道,那么我们要告诉定时器CH3的是,等待T0/2时间,轮到CH1先作用Tx的时间的一半,再轮到CH2冒头开始作用Ty时间的一半,轮到CH3冒头来配合输出111去不作用电机了。所以有以下:
Tb=Ta + T6/2
对于全部扇区的规则如下:
扇区号 | ||||||
1 | T0=(Ts-T4-T6)/2 | Ta=T0 + T4/2 | Tb=Ta + T6/2 | |||
2 | T0=(Ts-T2-T6)/2 | Ta=T0 + T2/2 | Tb=Ta + T6/2 | |||
3 | T0=(Ts-T2-T3)/2 | Ta=T0 + T2/2 | Tb=Ta + T3/2 | |||
4 | T0=(Ts-T1-T3)/2 | Ta=T0 + T1/2 | Tb=Ta + T3/2 | |||
5 | T0=(Ts-T1-T5)/2 | Ta=T0 + T1/2 | Tb=Ta + T5/2 | |||
6 | T0=(Ts-T4-T5)/2 | Ta=T0 + T4/2 | Tb=Ta + T5/2 |
对于MOS的编码100代表A通道导通,010代表B通道导通,001代表C通道导通。我们可以看到,PWM的CH1是影响产生100的,PWM的CH2是影响产生010的,PWM的CH3是影响产生001的。在对应不同扇区的时候,先作用的矢量是不同的,虽然规则都是从小到大。那么我们通知到定时器CH1、CH2、CH3的时间也不一样。举个例子,需要控制001的矢量输出,那么在000的下一个变化就是001,这时候,我们等到T0/2时间后,第一个控制的定时器通道就是CH3。对此我也列了一个表格。
扇区号 | 影响产生4 | 影响产生2 | 影响产生1 | |||
1 | PWM_CH1=T0 | PWM_CH2=Ta | PWM_CH3=Tb | |||
2 | PWM_CH1=Ta | PWM_CH2=T0 | PWM_CH3=Tb | |||
3 | PWM_CH1=Tb | PWM_CH2=T0 | PWM_CH3=Ta | |||
4 | PWM_CH1=Tb | PWM_CH2=Ta | PWM_CH3=T0 | |||
5 | PWM_CH1=Ta | PWM_CH2=Tb | PWM_CH3=T0 | |||
6 | PWM_CH1=T0 | PWM_CH2=Tb | PWM_CH3=Ta |
上面这个表格用文字来描述就是下面这个表格。
区号 | ||||||
1 | 先产生4 | 再产生2变6 | 再产生1变7 | |||
2 | 先产生2 | 再产生4变6 | 再产生1变7 | |||
3 | 先产生2 | 再产生1变3 | 再产生4变7 | |||
4 | 先产生1 | 再产生2变3 | 再产生4变7 | |||
5 | 先产生1 | 再产生4变5 | 再产生2变7 | |||
6 | 先产生4 | 再产生1变5 | 再产生2变7 |
总结
到这里关于SVPWM的三部曲就走完了,我试过开环角度的代码是能产生很漂亮的马鞍波的。关于一开始的图片里面有2个T0/4 有两个T7/4,其实它们有个前提,那就是T0=T7都是指MOS不作用的时间,那总的不作用时间不就是T0/4+T0/4+T0/4+T0/4就是一个完整的T0。
继续欢迎大家留言评论,沟通探讨,指出文章的不足。
小弟感谢大家的关注!
(利他之心,原创分享)
行讨论。