文章来源:CSDN
点评:文章跟硬件对应起来,有点看头
开始:
====================================
虽然现在做自动驾驶去了,还是有必要把之前一年做电机控制的心得分享一下,也能方便自己日后的参考。
(以下针对反向电动势为正弦的永磁同步电机而言)
目录:
1. SPWM和SVPWM
2. 矢量控制(Space Vector)
1. SPWM和SVPWM
抛开各种控制算法等细节,从最朴素的角度出发。我们只需要在A,B,C三相提供120相位差的正弦电压,电机就会稳定的转动起来,调节正弦电压的幅值和频率,就能调节电机的转速和扭矩。这是我们所需要的输出。而我们所提供的输入是稳压直流电源,电机控制中的控制二字指的就是通过6路PWM,控制6个MOS管的开断,来达到直流电源变正弦交流的目的。
于是,这就引出了电机控制的核心手段:PWM。接下来介绍SPWM和SVPWM两种技术,这代表了电机控制建模的两种思路。
A. SPWM
先看图:
SPWM的思路简单粗暴,既然输出你想要正弦波,那还不简单,把正弦电压采个样,当前你要多大的电压,我调调PWM的占空比给你就是了。比如这一秒你要1.2V,我给个10%占空比的PWM,12V的电源输出不就成了你要的1.2V了吗?电机参数,当前状态什么的,我才懒得管。
B. SVPWM
相比之下,SVPWM考虑问题的视角就完全不一样了。表面上看我们要的输出是三相正弦波,本质上讲是正弦波产生的旋转磁场在带着转子在转动啊。既然要旋转,那还是先看图吧:
图中的(001),(101)什么的代表的是6个MOS管的开关状态,你只需要把6个MOS管调到对应的状态,就能得到该方向的电压,作用到电机的转子上带动其旋转,这里就不深究了,到时候自己查表对着做就行了。这里需要强调的是,SVPWM在控制时已经在考虑电机的状态了,比如电机的转子运动到了某个位置,这时需要一个落在扇区1方向的电压来拖动转子的运动,那我就在(100)和(110)之间切换,来合成我们想要的电压呗。相较于SPWM的简单粗暴,SVPWM就考虑的细致入微了。
当然SVPWM的好处也是不言而喻的,在所需电压转动,扇区切换的途中(比如电压从扇区1旋转达到了扇区2),我们只需要把之前的(100)换成(010),而(110)完全不用动,这样就避免的SPWM为达目的,不择手段段,在那疯狂瞎变换MOS开断的疯狂行径,能大大减少MOS开断的损耗。
这里提一句,为什么电机控制用的是中心对称PWM而不是边缘触发,因为按着SVPWM的思路走,每次状态变换只需要改变一个MOS管的开关状态,见下图:
2. 矢量控制(Space Vector)
不多bb:
什么Park,Clark变换我就不多说了,之所以我们费尽心思在这搞什么矢量控制,坐标变换,把好好的三相变成旋转的两相X,Y坐标系里面去,是因为变过去了以后,你会发现 Ia, Ib 的幅值固定了,变量被分离到了旋转角θ里面去了。电流的期望值固定了,就可以用PID来控制啦!!! 对,折腾了这么久,我们就是想用PID,这就是电机控制的核心,现代控制虽然好,工业界只爱PID :)
啰嗦一句,clark还是Park变换里面有个2/3还是2/3 的系数变换,是在做相电压与线电压的变化,首先你要知道PMSM在控制时三相是一直在导通的,而不BLDC只有两相同时导通。2/3具体推导见下图:
Reference:
1. https://www.zhihu.com/question/26858454
2. https://read01.com/KA66o6.html#.WuyBO6Qvypo
3. https://www.ti.com/lit/an/spra588/spra588.pdf
4. https://www.nxp.com/docs/en/supporting-information/DWF13_AMF_AUT_T0526.pdf