本篇文章不深,仅作为入门扫盲
注:其中有一部分图片是网上找的,一部分是自己做的,拿图请注出处,谢谢!这是我第一次在csdn上写文章,格式或文章内容有什么问题还请各位多加指正
驱动BLDC或PMSM电机的算法,能够精确控制电机,并且能够让电机在极低转速下保持力矩和稳定性
机器人关节(FOC控制下的无刷电机不像舵机关节那么僵硬,更接近于生物的关节,有弹力)
无人机(FOC调速的无人机电机比普通电调调速的无人机电机更加平滑稳定,并且能够快速对突发情况作出调整)
云台(FOC调速下的无刷电机实时响应更迅速,过度更加平滑)
…
首先我们知道电流产生磁场,磁场与磁场之间就吸引或排斥出了力!有了力就可以让电机动起来。
在这里我们只需要知道力与磁场成正相关;力与距离成负相关 ;电流于磁场成正相关就行
此刻磁铁1号,2号产生的磁力之间相互平衡,使得整个系统处于稳定状态
我们现在按住1号磁铁,让2号磁铁绕电机轴心转动一个角度,这时由于我们破坏了受力平衡导致两个磁铁产生的力并不在一条直线上,而产生一个垂直于电机半径方向的力:
就是这个力使得电机转动!转动到使整个系统再次保持平衡的位置:
现在我们让2号磁铁绕轴心转动,2号磁铁和轴心之间的距离在时间轴上的投影按照弦状曲线变化:
好了,现在让我们把2磁铁换成通电线圈来分析一下:
根据上面所说,我们知道1号磁铁因为磁力随着2号磁铁运动,动的关键因素是因为磁力,所以只需要让通电线圈产生的磁力向量和2号的磁力向量相同即可,为绕轴心做匀圆的恒力。由于上面所说磁力与磁场成正相关,与距离成负相关,因为2号磁铁与轴心之间的距离在时间轴上的投影按照弦状曲线变化,那么为了抵消这个变化而让力恒定,磁场在时间轴上的投影也应按弦状曲线变化。
又由于电流与磁场成正相关,这样当我们在一线圈上通入弦状变换的电流时,它产生的磁力向量就可以做匀速圆周运动,而另一块磁铁就会被带动着围绕它做匀速圆周运动啦。
由于我们的无刷电机有3 跟线,因此我们拓展为3块互差120°的磁铁绕中间磁铁转动:
为什么互差120°,因为一圈360°啊,为了平衡受力,当然要把360°3等分啦
于是我们的波形就变成了3相互差120°的弦波。
过了120°的时间第二块磁铁到达上一块磁铁所处的位置所以是互差120°的弦波
这里我拿余弦波来举例。
为什么拿余弦波来举例,你没有发现我们的教科书上x轴方向一般不都是余弦嘛
我们根据无刷电机的构造把外圈转子变成几块定磁磁铁,内圈定子变成几个能够产生磁场的通电线圈——这样当我们在定子里输入3相余弦交流电时,定子线圈生成的磁场所产生的磁力向量做匀速圆周运动,就可以让电机匀速转动了!
首先介绍一下PWM,SPWM,SVPWM
PWM不用多说了吧,脉宽调制技术,通过占空比来控制电压的输出值:
而SPWM就是通过PWM的方法生成一条正弦曲线,在正弦曲线上选取很多点,每一个点的电压值由PWM调节不同的占空比生成,取的点越多,曲线越平滑。
而SVPWM则更贴合于电机,SVPWM比SPWM多前进了一步,直接着眼于电流,想要让电流成为一条正弦曲线电压应该如何变化
因为电流大小是直接决定磁场大小的
根据我们前面所说,把我们的余弦电流带入就变成了:
整理:
好了现在我们知道了如果让电流按照余弦曲线变化,电压该如何变化了。直接用PWM生成目标电压波形似乎就可以了,由于电机是大功率元件,MCU无法直接供电(电压不够),所以我们接入了MOS管来间接控制 电机接线如图:
有同学问:那是不是用3个MOS就可以了呢,每个MOS控制一相呗。可以是可以, 但是这有点浪费能量,我们把控制完单独每一相的电压让它通过另外2相回收,这样就能更好的利用能量了
我们为了让电机转起来就已经这么麻烦的使用了3相余弦波,我们现在要控制这个电机的时候傻眼了,这三相电看着怎么都不规矩,我们能不能把它变成两相相角差90°的弦波,这还减少一个控制对象,也不用考虑120°角,更重要的是我可以直接就把变换完的模型当做一个平面直角坐标系来看!答案当让是能。
我们来一波受力分析,让一个方向的力垂直于坐标轴另外两个力分解了不就可以了嘛。
于是:
最终得到α与β的值,至此我们成功把3个方向的力变成2个垂直方向的力,把三相电变成了两相电,相角差90°。这就是Clark变换!
于是,我们的电机模型就变成了这样:
首先我们先明确几点
上面有说电流与磁场成正相关,磁场与力成正相关,那么电流就与力成正相关,所以力矩的大小就只和电流大小有关。
而对于所有电机而言,转子受力直接影响转速这里有一个误区,就是认为无刷电机的转速是直接与三相弦波的频率有关的,但试想没有力电机怎么转动,更谈何速度。这里可能又有些同学就说了:“我们高中物理讲匀速直线运动是不需要力也可以一直保持速度的。”拜托,大哥,这里是地球,你说那种得是在宇宙中才能实现。但是的确可以认为弦波频率和电机速度是间接相关的,电流的变化频率映射为力的变化频率从而影响转速,但是频率却不能绝对影响电机的转速
最后电机的位置(角度)取决于转速,说白了我想让电机转动到的位置不就是电机的初始位置加上转速(角速度)乘时间嘛。
所以我们要控制好一个无刷电机首先要控制它的电流大小来控制力矩,其次要控制它电流的频率来映射力的变化进而控制速度,最后我们要控制它速度的持续时间来控制位置。
这其中会有很多影响因素,比如摩擦力啊,空气阻力啊,重力啊,负载啊,我们在不能明确影响因素的具体数值时,就要用到我们的控制算法通过闭环来消除这些影响因素:foc中常用的是PID算法。
当然在这一切开始之前,我们首先得解决当我们用6个MOS管来生成3相电时,我们这6个MOS的通断该如何变化。这就涉及到一个问题:电机的扇区。
扇区是判断6个MOS的导通状态的并不是判断电机位置的,电机位置在有感FOC中仅由传感器提供,并且是用这个电角度值来判断扇区位置的,不要搞反了
我们这里为了方便看把整个坐标系旋转60°
最终我们看到由三相电所产生的力的向量 合成的向量在绕原点做匀速圆周运动:
我们给这个合成的向量取个名字就叫做主向量吧
在这张动图里我们能发现几个特殊的位置:
这6个位置中主向量都恰好由三个力向量中的两个大小相等的分向量组成,第3 个分向量在此刻的值恰好为0,我们把这6种位置状态放到同一个图中:
把这6个特殊位置附近都划定出一个区域,区域大小为360°/6=60°
按照这张图把电机转的一圈分成6个区域:
区域与区域的边界恰好由另外6 个临界位置构成:
这6个位置就决定控制电机3相电的6个MOS管的不同开关状态:
设图像在横坐标轴之上为1状态,为上MOS导通;在x轴之下为0状态,为下MOS导通,这样就组成了6个MOS管的6种开关状态:
我们单扥出来一个区域,选取这个区域内的一个主向量的位置:
我们的A,B,C向量有2种路径,一条为图示红线,一条为图示蓝线。
如果按红色路径走MOS管发热量少,MCU不需要太多计算,但是波形不够准确
如果按蓝色路径走MOS管发热量大,MCU需要很多的计算,但是波形比较准确
这里就看我们如何取舍,实际问题实际分析,比较流行的是一个扇区内走红色路径,与它相邻的扇区内走蓝色路径,两两互相隔开。
这里的详细讲解请参考michaelf这位大佬的这篇文章:【SVPWM分析、各个扇区详细计算以及Matlab仿真】上面有几张图也是出自这篇文章。
我们在控制电机之前意识到一个问题,由于Iα和Iβ仍为正弦变化量,但是PID算法最适合控制的是线性系统,所以我们换一个坐标系,我们把垂直于主向量的称为q轴(力矩分量);与主向量重合的称为d轴(励磁分量):
最终我们把一个静止坐标系α,β换成了一个和主向量同角速度的旋转坐标系d,q,使得正弦分量变成了阶跃分量(线性),就可以由PID进行控制了。
我们再回到dq坐标系里计算一下dq分量和αβ分量之间的关系:
由图可列:
这就是Park变换
我们通过观察这张图得知力矩分量=0,这不行啊,没有力怎么转动啊?所以实际上建立dq坐标系的时候不是让d轴与主向量完全重合的,而是稍微错开一点。让主向量产生一个q轴分量而得到转动力矩。这个力矩有使d轴和主向量重合的趋势:
最后我们是不是又回到了我们最初建立的电机模型上来:
哦不,放错了,这个:
只不过我们推导了一些变化把它和无刷电机的结构建立了联系,并且知道该控制哪些量来控制无刷电机。
电流环控制的运算最少动态响应最快
我们从头开始捋,输入的量为线性量,因为为了更好的发挥PID的效果,上面说了。我们的线性量只有dq轴的分量Id,Iq。所以我们要把dq变成三相弦波ABC要先经过反Park变换得到Iα,Iβ,再经过反Clark变化成为三相电IA,IB,IC。这里把反Clark模块,扇区封装成了一个模块就叫SVPWM。而我们反馈信号是由传感器得到的电角度值,还有电机电流采样值经过Clark和Park变化得到的Id,Iq误差值组成,这里我们的电流环PID主要用到的就是Id,Iq误差值。
所以框图如下:
这里电流环只用了PI控制
电流控制主要控制的就是电机的力矩
速度控制主要是通过控制力矩(电流)和传感器返回值形成闭环实现的:
通过速度控制和电角度值组成闭环:
这篇文章基本没用什么专业术语并且运算没用矩阵求解,我喜欢用我自己理解的方式把东西讲出来,有什么错误请读者直接指出,我会及时更正。