FOC算法的Pipeline 我们先来看一下FOC控制的整个流程图景:
稍微解释一下,这幅图是以电流闭环控制为例的,也就是让电机始终产生一个恒定的力矩(也就是恒定的电流,因为力矩和电流成正比)。 可以看到控制器的输入是最左边的
和
,两个变量经过PID控制器进行反馈调节,其中还涉及到几个变换模块,有Park变换和Clark变换;最后通过前面提到的SVPWM模块作用到三相逆变器上进而控制电机;而PID控制器的反馈量,是对电机输出电流的采样值。 上面的过程不好理解没关系,先概括一下,FOC控制的整个过程是这样的: - 对电机三相电流进行采样得到
- 将
经过Clark变换得到
- 将
经过Park变换得到
- 计算
和其设定值
的误差
- 将上述误差输入两个PID(只用到PI)控制器,得到输出的控制电压
- 将
进行反Park变换得到
- 用
合成电压空间矢量,输入SVPWM模块进行调制,输出该时刻三个半桥的状态编码值(前文有提到)
- 按照前面输出的编码值控制三相逆变器的MOS管开关,驱动电机
- 循环上述步骤
下面我们来分别介绍每一步的具体操作以及意义。 2.2 Clark变换与Park变换前面分析了,如果要平稳地驱动三相电机转动,我们就需要生成三个相位相差120度的正弦波,但是我们最终的控制对象是MOS管的开通和关断,只有电压最大值和0值两个状态啊,怎么去生成连续变化的正弦波呢? 对了,用前面提到的PWM技术就可以做到,所谓SPWM就是这么干的,如下图:
大家观察一下上图的波形,我们用上面坐标系中的正弦波和三角波的交点投影到下面的坐标轴,以此确定PWM的占空比变化规律,这样合成的PWM波,经过低通滤波器之后,其实就等效为了一个正弦波!所以SPWM就是在PWM的基础上用正弦波来调制合成的具有正弦波规律变化的方波。 这不是很理想吗?不对,我们在FOC控制中并不会采用SPWM的调制方式。 最主要的原因是,通过上面三个半桥逆变器电路的分析我们可以知道,我们并不好在某一时刻独立地控制某一时刻电机的三个相电压,也就很难合成三路这种SPWM波了;另外SPWM也比后面要说的SVPWM的电压利用率要低15%(具体怎么算的这里就不介绍了)。 另一方面来看,我们甚至根本就不想跟什么三个正弦波打交道! 因为要对于非线性的信号进行准确控制就要使用复杂的高阶控制器,这对于建模成本、处理器算力、控制实时性等都是不利的。简单地说就是,咱们控制器的反馈输入变量不是三个电流采样值嘛,你要我稳稳地跟踪三个正弦波太麻烦啦!能不能简单点跟踪一条直线(常量)啊? 答案是可以的~只需应用一点数学小技巧 Clark变换我们回到上面FOC控制过程9个步骤的第1步,也就是对电机的三个相电流进行采样,这一步会使用串联的采样电阻(Shunt)进行电流采样。 由于电机工作的电流一般很大,所以采样电阻的阻值非常小,甚至和导线的电阻接近了,因而实际的采样电路PCB设计的时候还有一些讲究,比如使用开尔文接法(Kelvin connections)。 但是我们实际电路设计时可以不使用三个采样器(实际有单采样电阻、双采样电阻和三采样电阻接法),只需要两个就够了。因为由基尔霍夫电流定律(KCL),在任一时刻,流入节点的电流之和等于流出节点的电流之和,也就是说 只需要知道其中两个就可以计算出第三个了。 这三个电流基本上就是三个相位相差120度的正弦波,在把这些信号输入控制器反馈控制之前,我们先来做点数学游戏: 我们知道三相坐标系
如下:
问题:这明明是一个二维平面内的坐标系,为啥要用3个坐标轴来表示呢? 而且很明显
这三个基向量是非正交的,学过线性代数的同学可能会想到,我们可以做一个很简单的基变换将其正交化为一个直角坐标系,我们把新的直角坐标系命名为
坐标系,变换公式如下: 其实就是个很简单的坐标轴投影计算,写成矩阵形式如下: 于是我们就回到直角坐标系啦,是不是很开心,变换前后的波形如下:
可以看到变换后其实还是正弦波...只不过我们少了一个需要控制的变量了,现在只需要控制
这两个变量,让其满足上图的下面的波形变化规律就可以控制电机旋转 了,频率还是不变的。 注意这里的
是我们虚拟出来的变量,所以在计算出一组
后,我们通过上述公式的反向变换公式变换回去再应用到电机的三相上。
|