目录
1.引言
2.有源磁链
2.1 有源磁链的直观理解
3. 有源磁链的数学推导
3.1 dq轴坐标系下的磁链方程转换
3.2 有源磁链的幅值的提取
3.3 有源磁链模型的基本表达式
3.4 为什么有源磁链可以用来提取转子位置?
3.5 有源磁链模型表达式的物理意义
4.定子磁链电压模型与电流模型
4.1 定子磁链电压模型
4.2 定子磁链电流模型
4.3 为什么要做混合磁链?
5.混合有源磁链观测器数学推导
5.1 电压模型有源磁链
5.2 电流模型有源磁链
5.3 PI补偿器的引入
5.4 电压模型与电流模型有源磁链分析
5.5 PI参数与极点配置
5.5.1 观测器特征方程
5.5.2 与标准二阶系统对比
6.PLL锁相环位置获取
6.2 构造估计方向
6.2 正交解耦误差的推导
6.3 误差信号与角度偏差的关系
6.4 误差信号的物理意义
6.5 误差信号归一化
6.6 PLL闭环结构
7.Matlab频域分析与Simulink仿真验证
7.1 Matlab频域分析
7.2 Simulink仿真验证
8.算法平台验证:
8.1观测器代码实现
8.2波形分析
9.总结
1.引言
永磁同步电机因其功率密度高、效率高、动态响应快,被广泛应用于伺服驱动、新能源汽车和工业传动等场合。在高性能矢量控制系统中,转子位置和转速信息是 Park 变换、电流解耦以及转矩控制的基础。传统方案通常依赖机械编码器获取位置信息,但编码器会增加系统成本、安装复杂度和故障风险,因此无位置传感器控制一直是 PMSM 驱动系统中的重要研究方向。
在众多无感控制方法中,基于电机数学模型的磁链观测方法具有结构清晰、实现成本低、不需要额外高频注入信号等优点。对于 PMSM 而言,有源磁链方法将电机凸极效应和永磁体磁链统一等效为一个沿转子 d 轴方向的磁链向量。只要能够准确估计有源磁链,就可以通过其空间方向提取转子位置,从而实现无位置传感器控制。然而,传统电压模型磁链观测器需要对电压方程进行积分,容易受到采样偏置、逆变器死区、电压误差和定子电阻参数偏差的影响,尤其在低速区域,由于反电势幅值较小,磁链估计更容易发生漂移。电流模型虽然低频稳定性较好,不存在纯积分漂移问题,但它依赖电机参数和估计角度,单独使用时难以保证完整速度范围内的观测性能。
为了解决这一矛盾,混合有源磁链观测器将电压模型和电流模型进行融合:低频段主要依赖电流模型抑制磁链漂移,高频段主要依赖电压模型保证动态响应。该方法本质上可以看作一种“电流模型低通 + 电压模型高通”的互补观测结构,是理解后续改进型有源磁链观测算法的重要基础。
2.有源磁链
2.1 有源磁链的直观理解
在理解混合有源磁链观测器之前,需要先建立一个基本概念:磁链到底是什么。
对于永磁同步电机来说,电机内部并不是只有电流在流动,更重要的是电流会在定子绕组中建立磁场,而转子上的永磁体本身也会提供磁场。控制电机的本质,就是控制这些磁场之间的相互作用,让它们产生稳定、可控的电磁转矩。
所谓磁链,可以简单理解为:磁场与绕组之间的耦合程度。磁场越强,绕组感受到的磁场作用越明显,磁链就越大。在 PMSM 中,定子磁链既包含定子电流产生的磁链,也包含转子永磁体带来的磁链。因此,定子磁链是一个综合量,它反映的是电机内部多个磁场叠加后的结果。
但是,需要注意的是定子磁链本身并不一定直接指向转子位置。尤其对于内置式永磁同步电机,由于 d 轴和 q 轴电感不同,电流产生的磁链会受到凸极效应影响,使得定子磁链方向和转子 d 轴方向之间存在偏差。如果直接利用定子磁链来判断转子位置,结果并不够直观,也不够稳定。
这时就引出了有源磁链的概念。有源磁链可以理解为:从定子总磁链中剥离出与转子位置直接相关的那一部分磁链。它的特殊之处在于,它始终沿着转子 d 轴方向。换句话说,只要能够准确得到有源磁链的方向,就等价于得到了转子的位置方向。这也是有源磁链方法在无位置传感器控制中非常有价值的原因。它把原本比较复杂的 PMSM 磁链关系重新整理了一下,把电流磁链、永磁体磁链以及凸极效应统一折算成一个更容易观测的等效磁链向量。对于控制算法来说,不再需要直接面对复杂的磁场分布,而是只需要关注这个有源磁链向量的方向。
工程上可以这样理解:定子磁链是电机内部磁场的综合结果,而有源磁链是其中真正携带转子位置信息的那一部分。
3. 有源磁链的数学推导
3.1 dq轴坐标系下的磁链方程转换
在转子 dq 坐标系下,PMSM 的磁链关系为:
其中:
: 是 d 轴磁链
: 是 q轴磁链
: 是 d 轴电流产生的电感磁链
:是 q 轴电流产生的电感磁链
: 是转子永磁体磁链
将其写为向量形式:
我们可以对这两个公式进行一个简单的理解:d 轴上的总磁链,由两部分组成,第一部分是转子永磁体本身提供的磁链,这个磁链不需要电流产生,只要转子上有永磁体,它就一直存在。第二部分是d 轴电流 id产生的磁链,你往 d 轴方向施加电流,定子就会在 d 轴方向额外建立一部分磁场。而对于q轴来说,因为永磁体磁链本身是沿 d 轴的,不在 q 轴方向上。所以 q 轴上没有永磁体磁链分量。
接下来,我们将dq轴上的磁链变换到坐标系下。
从 dq 坐标系变换到坐标系,需要使用旋转矩阵:
所以定子磁链可以写成:
代入 dq 磁链向量:
展开轴磁链:矩阵第一行乘以磁链向量,得到:
也就是:
展开轴磁链:矩阵第二行乘以磁链向量,得到:
也就是:
到这里,我们已经把 dq 坐标系下的磁链完整变换到了坐标系。
3.2 有源磁链的幅值的提取
现在,重要的部分来了,我们对d轴磁链进行拆分,d 轴磁链里面有一项:
为了把定子磁链拆成“电流相关部分”和“转子位置相关部分”,我们对它加减同一个量:
因此:
把中间两项合并:
所以:
进一步写成:
定义:
于是:
这里的就是有源磁链的幅值。
3.3 有源磁链模型的基本表达式
我们将拆分结果代回轴磁链项目:前面得到:
现在用:
代入:
展开:
把含的两项合并:
提出:
而电流从 dq 到的变换为:
所以:
对于磁链来说,也是同理:
我们现在已经有了这两个等式:
写成向量形式:
也就是:
定义:
于是:
这就是有源磁链模型的基本表达式。
3.4 为什么有源磁链可以用来提取转子位置?
我们从定义上出发:
只要不为零,有源磁链向量的方向角就是转子电角度:
而根据:
可以得到:
所以:
代入角度计算式:
3.5 有源磁链模型表达式的物理意义
有源磁链模型的基本表达式,本质上是在告诉我们:PMSM 的定子总磁链可以被看成两部分的叠加。
第一部分是由定子电流产生的电感磁链。这部分磁链跟随定子电流变化,它的方向和大小都会随着电流矢量变化而变化。它虽然是定子磁链的一部分,但并不适合作为转子位置的直接观测对象,因为它更多反映的是电流作用,而不是转子磁极方向。
第二部分就是有源磁链。它可以理解为从定子总磁链中“剥离”出来的、真正与转子磁极方向直接相关的磁链分量。这个分量始终沿着转子 d 轴方向,因此它的空间方向就携带了转子位置信息。也就是说,只要能够准确估算出有源磁链,就可以通过它的方向反推出转子电角度。
这个模型的关键意义在于:它把原本复杂的 PMSM 磁链关系重新整理成了一个更适合无感控制的形式。定子总磁链本身受到电流、永磁体、凸极效应等多种因素共同影响,直接用它来判断转子位置并不直观。而有源磁链模型通过减去一部分与电流直接相关的磁链,把剩下的磁链整理成一个始终指向转子 d 轴的等效磁链向量。
对于表贴式 PMSM,有源磁链基本上可以看成永磁体磁链;对于内置式 PMSM,由于 d/q 轴电感不同,有源磁链还包含凸极效应带来的等效磁链分量。因此,有源磁链并不是简单的永磁体磁链,而是“永磁体磁链 + 凸极效应”等效后的结果。
所以,有源磁链模型的物理意义可以概括为:它把 PMSM 中真正携带转子位置信息、并参与转矩产生的那部分磁链,从定子总磁链中提取出来,形成一个始终沿转子 d 轴方向的等效磁链向量。
4.定子磁链电压模型与电流模型
4.1 定子磁链电压模型
在静止坐标系下,PMSM 的定子电压方程可以写成:
其中:
所以展开到两个轴上就是:
把电阻压降项移到左边:
对时间积分,可以得到:
写成向量形式就是:
再由:
得到有源磁链。电压模型的优点是:高速时效果好。因为高速时反电势大,电压模型中的有效信号强,信噪比高。电压模型需要积分,积分器容易受到直流偏置、采样误差、死区电压、初始值误差影响。尤其在低速时,反电势很小,本身就很弱,这时候一点电流偏置、死区误差、
误差,都会把磁链积分方向带偏。
4.2 定子磁链电流模型
电流模型不通过积分,而是利用 dq 坐标系下的磁链关系:
有源磁链幅值为:
因此可以构造:
也就是:
电流模型的优点是:不需要积分,所以低频稳定性比电压模型好。但它也有问题:它需要依赖估计角度,并且依赖
等电机参数。如果估计角度本身不准,电流模型也不能单独完成无感观测。
4.3 为什么要做混合磁链?
单独用电压模型,低速容易漂。单独用电流模型,又缺少独立的转子位置信息来源。所以混合有源磁链观测器的思路是:
低频 / 低速:让电流模型约束磁链,防止积分漂移
高频 / 高速:让电压模型主导磁链,保证动态性能
5.混合有源磁链观测器数学推导
5.1 电压模型有源磁链
定义电压模型为:
其中是微分算子。
因为:
所以电压模型本质上就是:
再减去,得到有源磁链。
5.2 电流模型有源磁链
电流模型构造为:
其中:
如果写成分量:
这个电流模型不是单独观测角度,而是给电压模型提供一个“低频参考磁链”。
5.3 PI补偿器的引入
通过前面的分析可以看出,电压模型和电流模型各自都有明显的优缺点。电压模型能够直接反映电压对磁链变化的作用,动态响应较好,适合中高速运行;但它依赖积分计算,低速时容易受到直流偏置、死区电压和定子电阻误差影响,导致磁链漂移。电流模型不需要积分,低频稳定性更好,但它依赖电机参数和估计角度,不能单独作为完整的无位置传感器观测模型。
因此,单独使用任何一种模型都存在局限性。更合理的做法是:让电流模型负责低频稳定性,让电压模型负责高频动态性能。这样既可以避免电压模型在低速下的积分漂移,又可以保留电压模型在中高速下的快速响应能力。
为了实现这种融合,需要建立一个反馈修正机制。具体来说,可以把电流模型计算得到的有源磁链看作一个低频参考值,把电压模型观测得到的有源磁链看作实际观测值。两者之间的偏差反映了磁链观测过程中的漂移、偏置和模型误差。
如果直接把这个偏差反馈到磁链观测器中,补偿能力通常不够完整。比例环节可以快速修正当前误差,但无法完全消除稳态偏差;积分环节虽然响应慢一些,但可以持续累积误差并消除低频漂移。因此,引入 PI 补偿器是比较自然的选择。
在混合有源磁链观测器中,PI 补偿器的作用不是传统意义上的电流环或速度环调节,而是作为一个磁链误差补偿器。它根据电流模型与电压模型之间的有源磁链偏差,生成一个等效补偿电压,并将该补偿量反馈到电压模型的磁链积分通道中,从而修正电压模型的长期漂移和低频误差。
定义有源磁链误差:
经过 PI 补偿器:
然后把它加到磁链观测方程中:
所以 PI 补偿器输出的是一个等效电压补偿量。
5.4 电压模型与电流模型有源磁链分析
为了看清楚电流模型和电压模型在频域中各自起什么作用,我们写出混合磁链的传递函数:
设:
由电压模型:
而混合观测器为:
展开:
移项:
所以:
代入:
得到:
我们定义:
则:
并且:
这说明两个模型是互补结构。在低频时 :
也就是当:
所以:低频下最终磁链主要由电流模型决定,这可以抑制电压模型积分漂移。
在高频时:
也就是当:
所以:高频下最终磁链主要由电压模型决定,这可以保留电压模型的快速动态响应。
5.5 PI参数与极点配置
在混合有源磁链观测器中,PI 补偿器的作用是根据电流模型与电压模型之间的有源磁链误差,生成一个等效补偿电压,并反馈到磁链观测通道中。这样做的目的不是控制电流或速度,而是修正磁链观测过程中的低频漂移和稳态偏差。
混合有源磁链观测器的传递函数可以写成:
其中:
:表示电流模型得到的有源磁链。
:表示电压模型得到的有源磁链。
: 是 PI 补偿器比例系数。
:是 PI 补偿器积分系数。
从这个式子可以看出,整个观测器的动态特性由分母决定:
因此,PI 参数的选择,本质上就是对这个二阶系统进行极点配置。
5.5.1 观测器特征方程
混合观测器的特征方程为:
这是一个典型的二阶系统。为了保证观测器稳定,根据劳斯判据需要满足:
只要这两个参数为正,观测器的极点就位于左半平面,系统是稳定的。但是,仅仅稳定还不够。对于磁链观测器来说,还要考虑响应速度、低速抗漂移能力以及噪声敏感性。因此需要进一步根据目标极点来设计 kp和 ki。
5.5.2 与标准二阶系统对比
标准二阶系统的特征方程通常写成:
其中:
表示观测器的自然角频率,也可以近似理解为观测器的融合带宽。
表示阻尼比,用来决定观测器响应是否平稳。
将混合观测器的特征方程与标准二阶形式逐项对比,可以得到:
这就是 PI 参数和极点配置之间的关系。
如果希望两个极点都配置在同一个位置:
那么特征方程可以写成:
展开后为:
对比可得:
这相当于选择阻尼比:
也就是临界阻尼配置。
6.PLL锁相环位置获取
关于PLL,我在前面的文章里,已经有过详细的推导与验证,可看参考之前的文章https://blog.csdn.net/Theredstatr/article/details/162585937?spm=1001.2014.3001.5501
前面章节已经完成了有源磁链观测器的推导,最终可以得到静止 αβ\alpha\betaαβ 坐标系下的有源磁链分量:
有源磁链的一个重要特点是:它的方向与转子磁极方向一致。因此,只要能够让估计角度所代表的方向不断对准有源磁链方向,就可以得到转子电角度。在本文实现中,并没有采用直接atan2计算角度的方式,而是使用一种闭环锁相结构。其核心思想是:利用当前估计角度构造一个估计方向,再判断有源磁链相对于这个估计方向是否存在偏差,最后把这个偏差信号送入 PLL。
6.2 构造估计方向
PLL 内部会维护一个估计电角度:
根据这个估计角度,可以构造一个单位方向向量:
这个向量表示当前 PLL 认为的转子磁极方向。如果 PLL 已经完全锁定,那么这个估计方向应该与真实有源磁链方向重合。为了判断两者是否对齐,还需要构造一个与估计方向垂直的单位向量:
这个方向可以理解为:当前估计方向的正交检测方向。如果有源磁链已经完全对准估计方向,那么它在正交检测方向上的投影应该为零。
6.2 正交解耦误差的推导
将有源磁链向量投影到正交检测方向上:
代入两个向量:
展开得到:
6.3 误差信号与角度偏差的关系
为了说明这个误差信号为什么可以送入 PLL,继续代入有源磁链的静止坐标表达式:
则:
提出:
根据三角恒等式:
可以得到:
定义角度偏差为:
则:
当角度偏差较小时:
因此:
这个结果说明:正交解耦得到的误差信号,与真实角度偏差近似成正比,所以它可以作为 PLL 的鉴相误差信号。
6.4误差信号的物理意义
当估计角度准确时,估计方向与有源磁链方向重合。此时,有源磁链在正交检测方向上的投影为零,PLL 输入误差也为零。当估计角度滞后真实角度时,有源磁链会在正交检测方向上产生一个正向投影。这个正误差经过 PI 后,会提高估计电角速度,使估计角度追上真实角度。当估计角度超前真实角度时,有源磁链会在正交检测方向上产生一个反向投影。这个负误差经过 PI 后,会降低估计电角速度,使估计角度回到正确位置。因此,这个误差信号同时包含两个信息:正负号决定角度修正方向。幅值大小反映角度偏差程度。PLL 的目标就是不断调节估计角速度,使这个正交偏差收敛到零。
6.5 误差信号归一化
由前面的推导可知:
可以看到,误差信号不仅与角度偏差有关,还与有源磁链幅值有关。如果直接将 eψe_\psieψ 送入 PI,那么 PI 参数会受到磁链幅值影响。不同电机、不同工况下,有源磁链幅值不同,PLL 的等效增益也会变化。为了让 PLL 输入更接近纯角度偏差,可以做幅值归一化:
其中:
由于:
所以:
在小角度偏差下:
这样,PLL 输入就近似变成了电角度误差,后续 PI 参数也更容易按照标准二阶锁相环来设计。
6.6 PLL闭环结构
得到归一化角度误差后,送入 PI 环路滤波器:
其中:
为估计电角速度。
然后对估计电角速度积分,得到估计电角度:
估计角度再反馈到正交解耦模块,用于计算新的和
。
最终,我么就可以得到PLL锁相环闭环结构图:
7.Matlab频域分析与Simulink仿真验证
7.1 Matlab频域分析
再matlab中,我们分别对电流模型和电压模型进行理论验证,在脚本中,实现以下功能:
- 根据目标带宽计算 PI 参数
- 构造电流模型传递函数
- 构造电压模型传递函数
- 验证互补关系
- 绘制 Bode 图和极点零点图
我们设置观测器融合带宽为100HZ,给出仿真脚本:
clc; clear; close all; %% ============================================================ % Hybrid Active Flux Observer Frequency Analysis % 混合有源磁链观测器频域分析 % 分析对象: % 1. 电流模型通道 G_CM(s) % 2. 电压模型通道 G_VM(s) % ============================================================ %% 1. 设置观测器参数 % 观测器融合带宽 f0 = 100; % Hz,可根据需要修改 w0 = 2*pi*f0; % rad/s % 阻尼比 zeta = 1.0; % 临界阻尼 % PI 参数 kp = 2*zeta*w0; ki = w0^2; fprintf('Observer bandwidth f0 = %.2f Hz\n', f0); fprintf('Observer bandwidth w0 = %.2f rad/s\n', w0); fprintf('kp = %.4f\n', kp); fprintf('ki = %.4f\n', ki); %% 2. 构造传递函数 s = tf('s'); % 电流模型通道:低通特性 G_CM = (kp*s + ki) / (s^2 + kp*s + ki); % 电压模型通道:高通特性 G_VM = (s^2) / (s^2 + kp*s + ki); % 互补关系验证 G_SUM = G_CM + G_VM; %% 3. 绘制 Bode 图 figure; bode(G_CM, G_VM); grid on; legend('Current Model Path G_{CM}', ... 'Voltage Model Path G_{VM}', ... 'Location', 'best'); title('Hybrid Active Flux Observer Frequency Response'); %% 4. 单独绘制幅频曲线,方便文章配图 f = logspace(-1, 4, 2000); % 0.1 Hz ~ 10 kHz w = 2*pi*f; [mag_cm, phase_cm] = bode(G_CM, w); [mag_vm, phase_vm] = bode(G_VM, w); [mag_sum, ~] = bode(G_SUM, w); mag_cm = squeeze(mag_cm); mag_vm = squeeze(mag_vm); mag_sum = squeeze(mag_sum); phase_cm = squeeze(phase_cm); phase_vm = squeeze(phase_vm); mag_cm_db = 20*log10(mag_cm); mag_vm_db = 20*log10(mag_vm); mag_sum_db = 20*log10(mag_sum); figure; semilogx(f, mag_cm_db, 'LineWidth', 1.5); hold on; semilogx(f, mag_vm_db, 'LineWidth', 1.5); semilogx(f, mag_sum_db, '--', 'LineWidth', 1.2); grid on; xlabel('Frequency / Hz'); ylabel('Magnitude / dB'); title('Magnitude Response of Current Model and Voltage Model Paths'); legend('G_{CM}: Current Model Path', ... 'G_{VM}: Voltage Model Path', ... 'G_{CM}+G_{VM}', ... 'Location', 'best'); %% 5. 绘制相频曲线 figure; semilogx(f, phase_cm, 'LineWidth', 1.5); hold on; semilogx(f, phase_vm, 'LineWidth', 1.5); grid on; xlabel('Frequency / Hz'); ylabel('Phase / deg'); title('Phase Response of Current Model and Voltage Model Paths'); legend('G_{CM}: Current Model Path', ... 'G_{VM}: Voltage Model Path', ... 'Location', 'best'); %% 6. 查看极点零点 figure; pzmap(G_CM); grid on; title('Pole-Zero Map of Current Model Path'); figure; pzmap(G_VM); grid on; title('Pole-Zero Map of Voltage Model Path'); %% 7. 打印极点信息 disp('Poles of G_CM:'); disp(pole(G_CM)); disp('Zeros of G_CM:'); disp(zero(G_CM)); disp('Poles of G_VM:'); disp(pole(G_VM)); disp('Zeros of G_VM:'); disp(zero(G_VM));仿真结果:
Observer bandwidth f0 = 100.00 Hz Observer bandwidth w0 = 628.32 rad/s kp = 1256.6371 ki = 394784.1760 Poles of G_CM: -628.3185 -628.3185 Zeros of G_CM: -314.1593 Poles of G_VM: -628.3185 -628.3185 Zeros of G_VM: 0 0图中给出了混合有源磁链观测器中电流模型通道和电压模型通道的频率响应。可以看到,两条通道呈现出明显的互补滤波特性:电流模型通道表现为低通特性,电压模型通道表现为高通特性。
在低频段,电流模型通道幅值接近 0 dB,而电压模型通道被明显衰减。这说明低速或低频工况下,观测器主要依赖电流模型来约束有源磁链。这样可以有效避免电压模型积分环节带来的直流漂移、初始值偏差以及低速下电阻压降误差的影响。
在高频段,电压模型通道幅值接近 0 dB,而电流模型通道持续衰减。这说明中高速和快速动态工况下,最终有源磁链主要由电压模型提供。电压模型能够更直接地反映电压变化对磁链的影响,因此更适合承担高频动态信息。
从相频特性来看,电流模型通道在融合频段后出现明显相位滞后,而电压模型通道相位逐渐回到接近 0°。这进一步说明,在高频段由电压模型主导更有利于保持动态响应;而在低频段由电流模型主导,则更有利于抑制积分漂移。
7.2 Simulink仿真验证
本次仿真模型分为6个环节,分别为:
- 电流环模块
- SVPWM模块
- 功率级模块
- 速度环模块
- 观测器模块
- 示波器模块
下面给出各个模块的具体实现:
观测器内部具体实现如下:
有源磁链估计模块
function [psi_A_alpha, psi_A_beta] = ActiveFluxObserver(v_alpha, v_beta, i_alpha, i_beta, Rs, Ld, Lq, psi_f, Kp, Ki, Ts,theta_e_est) % ========================================== % 1. 定义并初始化静态变量 (模拟积分器和状态保持) % ========================================== persistent psi_s_alpha psi_s_beta; persistent v_comp_init_alpha v_comp_init_beta; persistent v_comp_alpha v_comp_beta; % 仅在系统第一步运行时初始化 if isempty(psi_s_alpha) psi_s_alpha = 0; psi_s_beta = 0; v_comp_init_alpha = 0; v_comp_init_beta = 0; v_comp_alpha = 0; v_comp_beta = 0; end % ========================================== % 2. 电压模型 (Voltage Model % ========================================== % 反电动势计算 (注意:这里使用的是上一拍计算出的 v_comp,天然打破了代数环) e_alpha = v_alpha - Rs * i_alpha + v_comp_alpha; e_beta = v_beta - Rs * i_beta + v_comp_beta; % 定子磁链积分 (采用简单的前向欧拉法离散化: y(k) = y(k-1) + u(k)*Ts) psi_s_alpha = psi_s_alpha + e_alpha * Ts; psi_s_beta = psi_s_beta + e_beta * Ts; % 提取电压模型主动磁链 (psi_A = psi_s - L_q * i_s) psi_active_flux_voltage_alpha = psi_s_alpha - Lq * i_alpha; psi_active_flux_voltage_beta = psi_s_beta - Lq * i_beta; % 观测器最终输出的主动磁链即为电压模型算出的值 (经过闭环修正后) psi_A_alpha = psi_active_flux_voltage_alpha; psi_A_beta = psi_active_flux_voltage_beta; %直接通过反正切计算估计角度 (也可以将 psi_A 输出给外部的 PLL 模块计算) %theta_e_est = atan2(psi_A_beta,psi_A_alpha); %转换为 0 到 2*pi %if theta_e_est < 0 % theta_e_est = theta_e_est + 2 * pi; %end % ========================================== % 3. 电流模型 (Current Mode) % ========================================== % 提取 d 轴电流 (Park 变换) i_d = i_alpha * cos(theta_e_est) + i_beta * sin(theta_e_est); % 计算标量主动磁链幅值 psi_act = (Ld - Lq) * i_d + psi_f; % 重构电流模型的主动磁链矢量 (反 Park 变换) psi_active_flux_Current_alpha = psi_act * cos(theta_e_est); psi_active_flux_Current_beta = psi_act * sin(theta_e_est); % ========================================== % 4. 闭环 PI 补偿器 (反馈调节) % ========================================== % 计算磁链误差 (参考电流模型,减去电压模型) err_alpha = psi_active_flux_Current_alpha - psi_active_flux_voltage_alpha; err_beta = psi_active_flux_Current_beta - psi_active_flux_voltage_beta; % PI 积分项更新 v_comp_init_alpha = v_comp_init_alpha + Ki * err_alpha *Ts; v_comp_init_beta = v_comp_init_beta + Ki * err_beta *Ts; % 计算下一次循环使用的补偿电压 V_comp (比例 + 积分) v_comp_alpha = Kp * err_alpha + v_comp_init_alpha; v_comp_beta = Kp * err_beta + v_comp_init_beta;锁相环模块:
给定电机目标转速1000转,对电角速度418,对波形进行分析:
图中给出了混合有源磁链观测器结合 PLL 后的速度、角度以及有源磁链波形。从整体结果来看,观测器已经能够正常完成有源磁链估计,并通过 PLL 得到稳定的电角度和电角速度。
首先看速度估计结果。启动阶段,估计电角速度能够快速跟随真实速度,在短暂的超调和振荡后收敛到给定速度附近。进入稳态后,估计速度与真实速度基本重合,只存在较小的高频纹波。这说明 PLL 已经能够根据有源磁链正交解耦误差信号完成锁相,速度估计结果具备较好的跟踪能力。
其次看角度估计结果。估计角度与真实角度均呈现周期性锯齿波变化,并且两者在稳态阶段基本同步。由于角度被限制在 0∼2π 范围内,因此每经过一个电周期都会发生一次回零跳变,这是正常的角度取模现象。从波形上看,估计角度没有出现明显发散或丢锁,说明有源磁链方向与 PLL 输出角度之间已经形成稳定闭环。
最后看有源磁链分量。 呈现近似正交的周期波形,幅值基本稳定,说明观测器输出的有源磁链矢量能够在 αβ静止坐标系中稳定旋转。两相磁链分量之间接近 90° 相位差,这与有源磁链作为旋转空间矢量的理论特性一致。
8.算法平台验证:
8.1观测器代码实现
.h文件
typedef struct { /*输入参数*/ float Ualpha; float Ubeta; float Ialpha; float Ibeta; float Theta_Est; /*电机参数*/ float Rs; float Ld; float Lq; float Psi_f; //永磁体磁链 float Ts; //执行周期 /*PI补偿参数*/ float Comp_Kp; float Comp_KI; /*电压模型 ab轴定子磁链*/ float Psi_s_Alpha; float Psi_s_Beta; /*电压模型有源磁链*/ float Psi_A_VM_Alpha; float Psi_A_VM_Beta; /*电流模型有源磁链*/ float Id; float Psi_Act; float Psi_A_CM_Alpha; float Psi_A_CM_Beta; /*磁链误差*/ float Err_Alpha; float Err_Beta; /*补偿电压*/ float V_Comp_Init_Alpha; float V_Comp_Init_Beta; float V_Comp_Alpha; float V_Comp_Beta; /*输出有源磁链*/ float Psi_A_Alpha; float Psi_A_Beta; }Flux_A_Observe; //锁相环位置结算 typedef struct { float Psi_A_Alpha; float Psi_A_Beta; float Ts; float Poler; float Kp; float Ki; float Psi_A_Amp; float Err_Flux; //归一化后的磁链误差 float Err_Angle; //归一化的角度误差 float PLL_P; //比例项 float PLL_I; //积分项 float We_Est; //估算出的电角速度 float Theta_Est; //估算出的电角度 float Speed_Est; //估算出的机械转速 float Err_Max; //误差限幅 float PLL_I_Max; //积分限幅 float We_Max; //电角速度限幅 }Flux_A_PLL; void Flux_Active_Observe(Flux_A_Observe *FAOp); void Flux_A_PLL_Update(Flux_A_PLL *FAPp);.c文件
#define TWO_PI 6.28318530717958647692f void Flux_Active_Observe(Flux_A_Observe *FAOp) { /*提起计算函数*/ float Theta_E_Sin; float Theta_E_Cos; /*定义误差变量*/ float e_alpha; float e_beta; Theta_E_Sin = arm_sin_f32(FAOp->Theta_Est); Theta_E_Cos = arm_cos_f32(FAOp->Theta_Est); /*电压模型*/ e_alpha = FAOp->Ualpha - FAOp->Rs * FAOp->Ialpha + FAOp->V_Comp_Alpha; e_beta = FAOp->Ubeta - FAOp->Rs * FAOp->Ibeta + FAOp->V_Comp_Beta; FAOp->Psi_s_Alpha += e_alpha * FAOp->Ts; FAOp->Psi_s_Beta += e_beta * FAOp->Ts; //提取电压模型有源磁链 FAOp->Psi_A_VM_Alpha = FAOp->Psi_s_Alpha - FAOp->Lq * FAOp->Ialpha; FAOp->Psi_A_VM_Beta = FAOp->Psi_s_Beta - FAOp->Lq * FAOp->Ibeta; //观测器输出 FAOp->Psi_A_Alpha = FAOp->Psi_A_VM_Alpha; FAOp->Psi_A_Beta = FAOp->Psi_A_VM_Beta; //电流模型 FAOp->Id = FAOp->Ialpha * Theta_E_Cos + FAOp->Ibeta * Theta_E_Sin; FAOp->Psi_Act = (FAOp->Ld - FAOp->Lq) * FAOp->Id + FAOp->Psi_f; FAOp->Psi_A_CM_Alpha = FAOp->Psi_Act * Theta_E_Cos; FAOp->Psi_A_CM_Beta = FAOp->Psi_Act * Theta_E_Sin; //磁链误差 FAOp->Err_Alpha = FAOp->Psi_A_CM_Alpha - FAOp->Psi_A_VM_Alpha; FAOp->Err_Beta = FAOp->Psi_A_CM_Beta - FAOp->Psi_A_VM_Beta; //PI补偿器 FAOp->V_Comp_Init_Alpha += FAOp->Comp_KI * FAOp->Err_Alpha; //* FAOp->Ts; FAOp->V_Comp_Init_Beta += FAOp->Comp_KI * FAOp->Err_Beta; //* FAOp->Ts; //输出补偿电压 FAOp->V_Comp_Alpha = FAOp->Comp_Kp * FAOp->Err_Alpha + FAOp->V_Comp_Init_Alpha; FAOp->V_Comp_Beta = FAOp->Comp_Kp * FAOp->Err_Beta + FAOp->V_Comp_Init_Beta; } //锁相环位置结算 void Flux_A_PLL_Update(Flux_A_PLL *FAPp) { /*计算有源磁链的幅值*/ float Amp_Sq; Amp_Sq = FAPp->Psi_A_Alpha * FAPp->Psi_A_Alpha + FAPp->Psi_A_Beta * FAPp->Psi_A_Beta; FAPp->Psi_A_Amp = sqrtf(Amp_Sq); if(FAPp->Psi_A_Amp < 1.0e-6f) { FAPp->Psi_A_Amp = 1.0e-6f; } /*计算正交解耦误差*/ FAPp->Err_Flux = -FAPp->Psi_A_Alpha * arm_sin_f32(FAPp->Theta_Est) + FAPp->Psi_A_Beta * arm_cos_f32(FAPp->Theta_Est); /*将磁链误差近似归一化为角度误差*/ FAPp->Err_Angle = FAPp->Err_Flux / FAPp->Psi_A_Amp; /*PI 环路滤波器*/ FAPp->PLL_P = FAPp->Kp * FAPp->Err_Angle; FAPp->PLL_I += FAPp->Ki * FAPp->Err_Angle; // FAPp->Ts; // FAPp->PLL_P = FAPp->Kp * FAPp->Err_Flux; // FAPp->PLL_I += FAPp->Ki * FAPp->Err_Flux; //* FAPp->Ts; /*PI控制器积分限幅*/ if(FAPp->PLL_I > FAPp->PLL_I_Max) { FAPp->PLL_I = FAPp->PLL_I_Max; } else if(FAPp->PLL_I < -FAPp->PLL_I_Max) { FAPp->PLL_I = -FAPp->PLL_I_Max; } /*估算电角速度*/ FAPp->We_Est = FAPp->PLL_P + FAPp->PLL_I; /*电角速度限幅*/ if(FAPp->We_Est > FAPp->We_Max) { FAPp->We_Est = FAPp->We_Max; } else if(FAPp->We_Est < -FAPp->We_Max) { FAPp->We_Est = -FAPp->We_Max; } /*计算电角度*/ FAPp->Theta_Est += FAPp->We_Est * FAPp->Ts; /*角度归一化*/ if(FAPp->Theta_Est >= TWO_PI) { FAPp->Theta_Est -= TWO_PI; } else if(FAPp->Theta_Est < 0) { FAPp->Theta_Est += TWO_PI; } /*实际速度计算*/ FAPp->Speed_Est = FAPp->We_Est * 60.0f / (TWO_PI * FAPp->Poler); }8.2波形分析
设定电机转速为300转,电机施加一定负载,速度闭环启动电机
图中给出了有效磁链观测器与锁相环在实际平台上的运行波形。从整体结果来看,系统启动后能够建立稳定的有源磁链,锁相环可以根据有源磁链正交解耦误差信号完成电角度估算。
上图为三相电流波形。启动瞬间电流存在一定冲击,随后三相电流逐渐进入稳定的正弦状态,三相之间保持较好的相位关系,说明电流环能够正常工作,电机已经进入稳定旋转状态。波形中仍然存在一定幅值波动,主要与启动过程、负载扰动、电压模型误差以及电流采样噪声有关。
中间图为速度估计相关波形。可以看到启动瞬间估计值出现一次明显跳变,随后快速收敛到稳定范围内。稳态阶段速度估计存在小幅周期性纹波,但整体没有发散,说明 PLL 已经能够锁定有源磁链方向,并输出可用的电角速度。该纹波主要来自有源磁链幅值波动、电流采样噪声以及电压模型积分误差。
下图为角度估计波形。估计角度呈现稳定的周期性锯齿波变化,这是电角度在 0∼2π 范围内归一化后的正常表现。从波形可以看出,估计角度能够连续递增并周期性回零,没有出现明显丢锁或反向跳变,说明正交 PLL 已经建立稳定锁相。
9.总结
本文围绕 PMSM 有源磁链观测器的原理、建模、仿真和 MCU 实现进行了完整分析。首先从定子磁链模型出发,推导了有源磁链的表达式,说明其本质是从定子总磁链中提取出与转子 d 轴方向一致、能够直接反映转子位置信息的磁链分量。
在此基础上,分别分析了电压模型和电流模型的特点。电压模型动态响应快,适合中高速运行,但低速下容易受到电阻误差、死区效应和积分漂移影响;电流模型低频稳定性较好,但依赖电机参数和估计角度。为了结合两者优势,引入 PI 补偿器构成混合有源磁链观测器,使低频由电流模型约束,高频由电压模型主导。
随后设计了基于有源磁链正交解耦的 PLL。该方法不直接使用atan2作为最终角度,而是通过有源磁链在估计正交方向上的投影构造角度误差,经 PI 环路滤波后得到电角速度,再积分得到电角度。这样可以提高角度估计的连续性和抗噪能力。
觉得有用的话帮忙点赞加关注啦,谢谢大家了。