本页面内容摘自 SimpleFOC 社区论坛
电机和传感器校准流程
电机和传感器的校准流程是电机控制中至关重要的一部分。该流程用于确定电机的电角度与传感器角度之间的对应关系。这是电机控制中的第一步,且必须正确执行,BLDC(无刷直流电机)或步进电机才能正常运转。😃
BLDC 的基本原理
每台 BLDC 电机的定子中都有绕组,转子中则有永磁体。以下是一个非常简单的 1 极对电机的示意图。该电机有三相,每相各有一对绕组。

当电流通过电机绕组线圈时,会在绕组中产生磁场,其极性取决于电流的极性。在示意图中,我们将简化这种效果,把线圈用红色/蓝色(分别代表北极/南极)绘制,就好像它们是磁铁一样。
因此,无论转子的初始位置如何,当你给电机线圈通入特定电流时,线圈都会产生磁场,电机的转子会试图与线圈的磁场对齐。下面是通过 a 相通入电流时,电机在两种不同初始位置下的行为示例。

从图中以及直观来看,无论转子的初始位置如何,当你在定子绕组中设定某个磁场时,电机总会试图与该磁场对齐,对于这种简单电机而言,它最终总会停在同一个位置。
磁场矢量的定义
在讨论如何对齐不同的磁场时,实际意义是什么,以及我们如何描述使转子转动的力,通常会引入磁场矢量的概念。基本上,磁场矢量的长度表示磁场的强度,其方向由北极指向南极来确定。这非常简单,以下是一个快速的可视化展示:

基于电机的物理特性定义了磁场矢量后,使电机转子转动的力(产生电机转矩)取决于两个磁场的强度(\(B_r\) - 转子永磁体的强度,\(B_s\) - 线圈中由电流 \(I\) 产生的磁场强度)以及两个磁场之间的夹角。
\[F \sim B_r\cdot B_s\cdot sin(\theta)\]或者
\[F \sim B_r\cdot I\cdot sin(\theta)\]
从这个关系式可以看出,电机的转矩与两个磁场的强度直接相关,也与它们之间夹角的正弦值相关。特别是,由于我们无法控制转子永磁体的磁场,所以必须控制定子绕组磁场矢量 \(B_s\) 的强度和方向(即磁场定向控制)。
磁场矢量方向的控制(FOC)
从力的方程式可以看出,为了最大限度地利用电流并产生最大的力,我们需要保持两个矢量之间的夹角为 90 度,因为 \(sin(90) = 1\)。在这种情况下,推动转子转动的力(产生电机转矩)将仅与电流 \(I\) 和 \(B_r\) 成正比。
\[F \sim B_r\cdot I\]为了能够保持两个磁场之间的夹角固定,我们首先在每个时间步长中获取转子的角度,然后利用该值计算出 a、b、c 相所需的电流,以产生一个与转子磁场正好相差 90 度的定子绕组磁场矢量 \(B_s\)。为此,我们会使用帕克变换和克拉克变换。如果大家感兴趣,我们可以更深入地探讨这个话题,解释如何从矢量 \(B_r\)、\(B_s\) 和角度 \(\theta\) 转换到 d 和 q 坐标系。
但主要要点是,d 轴与 \(B_r\) 完全对齐,q 轴与 \(B_r\) 成 90 度角。如果我们将力的方程式应用于 d 轴上的电流 \(I_d\),会得到对齐的磁场矢量 \(B_s\) 和 \(B_r\)。
而在 q 轴上,磁场矢量正好有 90 度的偏移:
这意味着,如果 d 轴和 q 轴是按照这种方式定义的,那么在 d 轴上施加的任何电流都不会产生使转子转动的力,或者说不会产生任何电机转矩。
然而,在某些 FOC 的实现中,一些作者可能会将 q 轴定义为与 \(B_r\) 对齐,d 轴定义为与 \(B_r\) 成 90 度角,在这种情况下,\(I_q\) 不会产生任何转矩。
六步换向示例
BLDC 电机控制的一种较简单变体是梯形控制(或六步换向),它在电子调速器(ESCs)中经常使用;它只能开关电机相位,无法精确调整定子磁场矢量 \(B_s\) 的方向。以下是电旋转半周的工作原理。

如你所见,其原理与 FOC(磁场定向控制)非常相似,但与 FOC 不同的是,矢量之间的夹角并不总是保持在 90 度。
SimpleFOClibrary 初始化流程
在初始化流程中,我们要寻找所使用的位置传感器的 0 角度与电机电角度 0 之间的对应关系,电机电角度 0 通常由 a 相的磁场矢量来定义。如第二张图和下图所示,我们可以将定子磁场方向设置为 -180 度,这样就能确保电机始终对齐到电角度 0 的位置。

然后,我们只需读取传感器的值并加上 90 度,将其用作我们设定定子磁场矢量 \(B_s\) 的目标位置。
由于我们总是会给传感器角度加上 90 度,在文献中,许多方法(帕克变换 + 克拉克变换)不是基于实际的转子位置,而是基于转子角度 + 90 度来定义的。相对于寻找位置传感器角度和转子电角度 0 之间的关系,我们通常会寻找电角度 90 之间的关系。为了迫使转子转到 90 度位置,你需要施加 90 - 180 = -90 度或 270 度的角度。
以下是一个示例:

或者: 
记住位置传感器角度和转子电角度 90 度之间的偏移量,至少对于正弦调制而言,避免了在公式中添加 90 度的必要。但寻找 0 度或 90 度角度的方法是等效的,这只是实现上的选择。
SimpleFOClibrary 校准流程的局限性
这是一个相当标准的流程,可能也是最简单的流程之一。但它肯定存在局限性。最大的缺点是,由于我们只进行一次测量,转子可能会由于某些物理缺陷(有时仅仅是摩擦)而无法精确地转到 90 度位置,而是停在接近 90 度的某个角度。在这种情况下,电机产生的力将无法达到 100% 的效率,因为我们无法保持 \(sin(90) = 1\)。这可以通过进行多次测量并进行一些平均或更复杂的统计处理来避免。
当然,另一个缺点是,如果我们只在初始化时进行一次校准,那么在电机运行过程中发生任何情况我们都无法知晓。如果传感器发生漂移,理论上有可能对校准的变化进行补偿,但目前我们尚未实现这样的功能。