雷竞技官网官方网站入口

公司新闻 知识专区 无刷小百科

【自制FOC驱动器】深入浅出讲解FOC算法与SVPWM技术

发布时间:2023-12-20 16:16:36 | 作者: 雷竞技官网官方网站入口


  可以选了--又要大功率、大扭矩,又要体积小,成本还建议还是不要太高,选择低KV值的无刷电机显然是最合适的。我预计的方案中计划把减速器也省略了,采用扭矩无刷电机直驱。那么作为机器人硬件三大核心部件()之一的驱动器,我感觉是有必要自己设计一下的,因此这里把我学习FOC过程中看到的一些有关无刷电机矢量控制的资料和个人理解整理分享出来。

  FOC(Field-Oriented Control),直译是磁场定向控制,也被称作矢量控制(VC,Vector Control),是目前无刷直流电机(BLDC)和永磁同步电机(PMSM)高效控制的最优方法之一。FOC旨在通过精确地控制磁场大小与方向,使得电机的运动转矩平稳、噪声小、效率高,并且具有高速的动态响应。

  简单来说就是,FOC是一种对无刷电机的驱动操控方法,它可以让我们对无刷电机进行“像素级”控制,实现很多传统电机操控方法所无法达到的效果~

  玩过航模的同学可能对无刷电机很熟悉,也必须要知道航模中对于无刷电机的驱动使用的是电子调速器(ESC)也就是我们常说的电调,那么这个FOC驱动器和普通的电调有什么区别呢?

  由于控制原理的区别,无刷电调只能控制电机工作在高转速下,低速下很难控制;而FOC控制器则绝对没这个限制,不论在什么转速下都能轻松实现精确控制。

  同上面的理由,由于无感电调无法反馈转子位置,因此很难实现电机正反转的换向;而FOC驱动器的换向性能极其优秀,最高转速下正反转切换可以非常顺畅;此外FOC还可以以能量回收的形式进行刹车控制。

  普通电调都只能控制电机转速,而FOC能够直接进行电流(力矩)、速度、位置三个闭环控制。

  FOC驱动器的噪音会比电调小很多,原因是普通电调采用方波驱动,而FOC是正弦波。

  综上大多数人应该可以看出来,FOC驱动器在控制性能上是要比电调强大得多的,其优异的性能和磁场定向控制的原理是密不可分的,下面就会详细的介绍FOC控制的实现方法。

  用于判断导线在磁场中受力的方向:伸开左手,使拇指与其他四指垂直且在一个平面内,让磁感线从手心流入,四指指向电流方向,大拇指指向的就是安培力方向(即导体受力方向)。

  伸开右手,使大拇指跟其余四个手指垂直并且都跟手掌在一个平面内,把右手放入磁场中,让磁感线垂直穿入手心,大拇指指向导体运动方向,则其余四指指向感生电动势的方向。也就是切割磁感线的导体会产生反电动势,实际上通过反电动势定位转子位置也是普通无感电调工作的基础原理之一

  用于判断通电线圈判断极性:用右手握螺线管,让四指弯向螺线管中电流方向,大拇指所指的那端就是螺线管的N极。直线电流的磁场的话,大拇指指向电流方向,另外四指弯曲指的方向为磁感线的方向。

  本质是利用面积等效原理来改变波形的有效值。举个例子,一个电灯只有开和关两个状态,那么要怎么让它实现50%亮度的效果的呢?只需要让它在一半时间开,一半时间关,交替执行这两个动作只要频率足够高,在人眼(低通滤波器)看起来就是50%亮度的样子了。而其中高电平占一个开关周期的比例,就叫做占空比。利用PWM能轻松实现使用离散的开关量来模拟连续的电压值。

  考察下图情况中的直流电机基本模型,根据磁极异性相吸同性相斥的原理,中间永磁体在两侧电磁铁的作用下会被施加一个力矩并发生旋转,这就是电机驱动的基本原理:

  对于简化的无刷电机来说,以三相二极内转子电机为例,定子的三相绕组有星形联结方式和三角联结方式,而三相星形联结的二二导通方式最为常用,这里就用该模型来做个简单分析:

  如上图所示,无刷电机三相的连接方式是每一相引出导线的一头,而另一头和其他相两两相连。这个情况下假如我们对A、B极分别施加正电压和负电压,那么由右手螺旋定则能判断出线圈磁极的方向如下图:

  没错就是和CO(O为中心点)连线平行的时候,磁铁会受到A、B两个磁极一推一拉的作用,直到旋转到与AB连线平行的且磁铁内部磁力线方向和AB间磁力线方向一致的时候,受合力矩为0且稳定,也就是上图中右边的状态。换句话说,AB相通电会让转子努力转到上图中右边的状态。至于C这时暂时不起作用。

  同理,我们下一阶段换成AC相通电,这时候转子会倾向于转到下图右边水平的角度:

  以此类推,能够获得每个通电状态下转子的角度,就是下图中的6个状态,每个状态相隔60度,6个过程即完成了完整的转动,共进行了6次换相:

  整个过程就好像骑在毛驴上吊一根胡萝卜一样,旋转的磁场牵引着永磁体不断旋转:

  这也是无刷电机和有刷电机最大的区别,即不像有刷电机的机械换向,无刷电机是通过电子换向来驱动转子不断地转动,电机的电压和KV值决定了电机转速,而电机的转速就决定了换向的频率。

  至于何时怎么知道该换到哪个供电相?怎么样产生更平滑的换向电压?怎么样提高电源的利用效率?这些都是FOC操控方法要探讨和解决的问题。

  无刷电机其实可大致分为无刷直流电机(BLDC,我们航模上都是用这种)和永磁同步电机(PMSM),结构大同小异,主要不同之处在于制造方式(线圈绕组方式)不同导致的一些特性差异(比如反电动势的波形)。

  从上面分析的无刷电机模型其实能够正常的看到,由于转子在磁场中只有6个稳定的状态,因此旋转过程其实是不平滑的,存在扭矩的抖动(没有通电的时候能用手转一下无刷电机,会感受到这种“颗粒感”)。因此未解决这个问题,从“硬件”和从“软件”出发有两个解决方案,这就衍生出了BLDC和PMSM的区别。

  简单地说,BLDC由于反电动势接近梯形波,所以肯定是会有上面说的抖动问题的,但是转一圈抖6下太明显了,如果我增加电机槽、极对数(也就是磁铁对数),那以前是360度里面抖6下,现在变成120度里面抖6下,甚至更小,这样“颗粒感”不就变得更小了嘛?实际中买到的BLDC电机基本都是多极对的(比如下图),原理跟之前的分析是一样的,出来的都是三相信号(图中的三根线),能自己进行类推。BLDC也能结合抗齿槽算法的FOC进行力矩补偿实现平滑控制。

  而另一方面,为什么我们非得用方波这种不平滑的波来驱动电机呢,用正弦波它不香吗?是的,这就是PMSM解决实际问题的方式,由于PMSM的反电动势被设计为正弦波的形状,我们用软件和算法结合PWM技术将方波转变成等效的SPWM正弦波或者SVPWM马鞍波,再来驱动电机,结果美滋滋,控制效果很理想。当然为了产生更好的波形、更好的旋转磁场,驱动器、控制算法就变得很复杂,这也是FOC的实现原理,后面会进行详细介绍。

  所谓逆变电路,即把直流电变换为交流电,或者简单点说就是一个可以产生不同电流流向的电路,通过前面的电机模型分析我们也能够准确的看出,对于无刷电机的驱动是需要在不同时刻施加不同方向的电压(电流)的,因此就需要逆变电路。

  而逆变电路具体的实现则一般是采用半桥MOS电路来制作的。半桥电路的原型如下,其实很简单,就是两个MOS管组成的上桥臂和下桥臂,中间引出一条输出线个半桥电路就可以组合成三相逆变电路,每个半桥引出的一根输出线跟无刷电机的一根相线相连,就完成了最基本的无刷驱动电路。

  010、011、100、101、110、111,记住这点,后面会用上~可能有人会问,为什么一个半桥只能上桥臂和下桥臂有一个导通呢?都关闭或者都导通不行??害,仔细想想就知道,

  呢?也不需要,因为这样就回到前面提到的,这时候电机有一相不起作用,浪了个费。

  实际上半桥驱动电路的实现会比上面的分析要复杂一些,比如需要仔细考虑开关管的开关频率、开启和关断时间不对称、死区问题等等,我后面设计的FOC驱动使用的是专用的半桥MOS栅极驱动IC来实现的。

  手动匀速转动它的转子,然后用示波器观察它的三相输出电压(也就是反电动势产生的电压)

  实际上三相发电机的发电原理是这样的,输出的就是三相幅值为220V的交流电(线

  SVPWM技术产生调试信号,驱动三相逆变电路,合成出等效的三相正弦电压驱动电机。

  和Clark变换;最后通过前面提到的SVPWM模块作用到三相逆变器上进而控制电机;而PID控制器的反馈量,是对电机输出电流的采样值。上面的过程不好理解没关系,先概括一下,FOC控制的整一个完整的过程是这样的:

  前面分析了,如果要平稳地驱动三相电机转动,我们就需要生成三个相位相差120度的正弦波,但是

  两个状态啊,怎么去生成连续变化的正弦波呢?对了,用前面提到的PWM技术就能做到,所谓SPWM就是这么干的,如下图:>

  另一方面,从控制的角度来看,我们甚至根本就不想跟什么三个正弦波打交道!因为要对于非线性的信号做准确控制就要使用复杂的高阶控制器,这对于建模成本、处理器算力、控制实时性等都是不利的。简单地说就是,咱们控制器的反馈输入变量不是三个电流采样值嘛,你要我稳稳地跟踪三个正弦波太麻烦啦!

  。但是我们实际电路设计时可以不使用三个采样器(实际有单采样电阻、双采样电阻和三采样电阻接法),只需要两个就够了。因为由

  这三个电流基本上就是三个相位相差120度的正弦波,在把这些信号输入控制器反馈控制之前,我们先来做点数学游戏:我们大家都知道三相坐标系

  这三个基向量是非正交的,学过线性代数的同学可能会想到,我们大家可以做一个很简单的基变换将其正交化为一个直角坐标系,我们把新的直角坐标系命名为

  是我们虚拟出来的变量,所以在计算出一组I_{\alpha},I_{\beta}后,我们通过上述公式的反向变换公式变换回去再应用到电机的三相上。

  坐标系下少了一维变量,但是新的变量还是非线性的(正弦),有没有很好的方法把它们线性化呢?有的,

  旋转\theta度,其中\theta是转子当前的角度,如下图:>

  变换公式如下:

  是始终跟着转子旋转的!这个操作是可行的,因为我们会通过编码器输入转子的实时旋转角度,所以这个方面始终是一个已知数。经过这一步的变换,我们会发现,一个匀速旋转向量在这个坐标系下变成了一个定值!(显然的嘛,因为参考系相对于该向量静止了),这个坐标系下两个控制变量都被线性化了!>

  Park变换前后的波形

  也就是说:我们通过电流反馈来控制电机电流(扭矩)- 然后经过控制扭矩来控制电机的转速- 再

  得到的,而后两者是我们预期希望前两者达到的值,这个值具体代表了什么物理量呢?参考一下下图:>

  也就是说我们一通操作将转子磁链来了解耦,分解为了转子旋转的径向

  。将计算得到的电机速度\omega与速度设定值Speed_{ref}进行误差值计算,代入速度PI环,计算的结果作为电流环的输入,就实现了速度-电流的双闭环控制。

  最外一层是位置环,也就应该控制电机旋转到某个精确的角度并保持,控制框图如下:>

  位置-速度-电流三环控制

  )。当电机转速比较高的时候,这样的方式是可以的;但是在位置控制模式的时候,电机的转速会很慢(因为是要求转子固定在某个位置嘛),这时候用平均测速法会有着很大的误差(转子不动或者动地很慢,编码器就没有输出或者只输出1、2个脉冲)。所以为了尽最大可能避免速度环节带来的误差,在做位置控制的时候能只使用位置和电流组成的双环来控制,不过此时需要对位置环做一定的变化,控制框图如下:>

  位置-电流双闭环控制

  细心的同学可会发现,在整个控制流程图里面有Park变换和对应的反Park变换,但是却没有

  对应的反Clark变换,取而代之的是一个SVPWM模块。下面会对SVPWM技术进行详细介绍。2.4 空间电压矢量

  是母线电压,也就是电源电压。如果我们规定指向中心的方向为正,反之为负,那么此时我们大家可以画出下图中的三个电压矢量

  >

  也就是说,这个状态下我们大家可以认为电机中存在一个矢量\overrightarrow {U}

  再结合前面章节的分析,转子永磁体会努力旋转到内部磁力线和外部磁场方向一致,所以这个矢量其实就可以表征我们大家都希望转子旋转到的方向,也即所需要生成的磁场方向了。而这个矢量是会不断在空间中旋转的,它的幅值不变,为相电压峰值U_{dc},且以角速度

  匀速旋转。我们后面将会看到,SVPWM算法的目的,就是使用三相桥的开关状态把在空间中旋转的矢量表示出来,我们把这个矢量称为空间电压矢量。用数学公式来表示的话就是:

  (S_a,S_b,S_c)的全部可能组合共有8个,包括 6个非零矢量 :

  下面以其中一种开关组合为例分析,假设S_x=U_4(100),也即这张图中的状态:

  注意上图中的(100)矢量方向和AO方向是相反的(变成OA方向),这跟正方向的定义有关,这样的规定更直观一些。

  同时可以注意到两个零矢量其实和原点重合了,因为这两个状态下电机中产生力矩的磁场为0(不考虑旋转过程中的反电动势产生的阻力力矩)。

  同理,上图中还能够准确的看出其余5个空间电压矢量,它们的端点组成了一个正六边形,同时把平面划分成了六个扇区(也就是图中的Ⅰ、Ⅱ、Ⅲ、Ⅳ、Ⅴ、Ⅵ)。

  那么这里问题就来了:由这6个空间电压矢量只能产生6个方向的力矩啊,我们怎么产生任意方向的力矩呢?

  的两个空间电压矢量,也就是上面说的6个基向量中的两个,至于是哪两个?这跟U_{ref}所在的扇区有关,比如U_{ref}在Ⅰ扇区,那么U_x和U_y就是U_4和U_6;T_x和T_y就是在一个周期T中U_x和U_y所占的时间。U_{0}^{*}指的是两个零矢量,可以是U_0也可以是

  ,零矢量的选择比较灵活,通过合理地配置零矢量可以让空间电压矢量的切换更平顺,后面会做说明。所以上面公式的含义就是:我们大家可以周期性地在不同空间电压矢量之间切换,只要合理地配置不同基向量在一个周期中的占空比,就可以合成出等效的任意空间电压矢量了。是不是跟PWM的思想完全一样呢,这也是为什么这样的解决方法被成为SVPWM(空间电压矢量脉宽调制)。

  ?这是我们将PWM波形设定为中央对齐模式对称配置零矢量的结果,后面会提到。现在一个周期内所有状态的维持的时间我们都得到了,还差一个顺序,也就是

  是的,理论上任何切换顺序都是ok的,但是实际中我们应该考虑更多限制,比如因为MOS管存在开关损耗,

  -111-110-100-000,这也是所谓的七段式SVPWM调制法。同时我们通过在合理的位置插入两个零矢量,并且对零矢量在时间上进行了平均分配,以使产生的PWM对称,从而有效地降低了PWM的谐波分量。同理,我们也可以列出在其他扇区时的切换顺序:>

  。整个过程就好比我们在做信号处理的时候,通过FFT把信号变换到频域做处理之后再IFFT反变换回时域是一个道理。另外值得一提的是,本文介绍的是有感的FOC操控方法,其实FOC能做到无感控制(也就是不需要编码器等额外的传感器),当然控制算法也会更为复杂,需要引入前馈控制、观测器等概念,无感的优点是结构安装更简单,能够尽可能的防止位置传感器失效的风险等等,当然这又是另外一个话题了。

  FOC是个强大的操控方法,通过对电机的“像素级”控制,能轻松实现很多应用,因为能做“力控”,FOC是很多机器人驱动单元的基础部件,比如:>