ARTICLE DETAIL

资讯详情

深耕商务建站与企业官网运营的一线实战洞察。

PMSM高速滑模观测器无位置传感器控制及抖振优化实现

PMSM高速滑模观测器无位置传感器控制及抖振优化实现 做PMSM无位置传感器控制的人几乎都会被抖振这件事折磨过。我这次复现的是基于高速滑模观测器优化抖振问题的永磁同步电机无位置传感器控制算法目标很明确把转子位置和转速通过算法“观测”出来同时把滑模控制天生自带的高频抖振在高速工况下压下去。整套东西从原理到Matlab实现再到调试过程中踩过的坑我会一次讲清楚。如果你正在做无感控制方向的研究或者正准备复现一套滑模观测器算法这篇文章应该能帮你省下不少试错时间。1. 无位置传感器控制先想清楚你真正要“观”的其实是反电动势1.1 PMSM模型里的转子位置藏在哪里无位置传感器控制的第一步不是上来就写观测器而是先搞清楚我们要观测的物理量是什么。永磁同步电机在静止坐标系下的电压方程表贴式结构下可以写成u_alpha Rs * i_alpha Ls * d(i_alpha)/dt e_alpha u_beta Rs * i_beta Ls * d(i_beta)/dt e_beta这里的 e_alpha、e_beta 就是反电动势在静止坐标系下的分量它们的表达式是e_alpha -psi_f * omega_e * sin(theta_e) e_beta psi_f * omega_e * cos(theta_e)psi_f 是永磁磁链omega_e 是电角速度theta_e 就是转子电角度。你可以发现转子位置信息完全藏在反电动势里。只要能把 e_alpha 和 e_beta 估出来角度理论上就可以通过反三角函数算出来theta_e atan2(-e_alpha, e_beta)这里要提醒一句这个式子里的负号非常容易搞错。我第一次写代码的时候直接把 atan2(e_alpha, e_beta) 拿过来用结果角度偏了 90 度电流环直接发散。先把这个关系理清后面才不会在层次上栽跟头。1.2 滑模观测器凭什么能把位置“逼”出来现在的问题变成了如何在不知道 e_alpha、e_beta 的情况下把它们估计出来。滑模观测器的思路很直接。我们把电压方程里的电流状态单独拿出来d(i_alpha)/dt (u_alpha - Rs * i_alpha - e_alpha) / Ls d(i_beta)/dt (u_beta - Rs * i_beta - e_beta) / Lse_alpha 和 e_beta 在这里扮演的是“未知扰动”的角色。我们构造一个电流估计系统d(i_alpha_hat)/dt (u_alpha - Rs * i_alpha_hat - v_alpha) / Ls d(i_beta_hat)/dt (u_beta - Rs * i_beta_hat - v_beta) / Ls然后定义滑模面为电流估计误差s_alpha i_alpha_hat - i_alpha s_beta i_beta_hat - i_beta设计切换控制量 v_alpha、v_beta迫使电流估计误差收敛到 0。当滑模运动发生后系统会处于一种动态平衡为了维持电流估计值持续跟踪实际电流切换控制量的基波分量就必须“等效”地抵消掉真实的反电动势。这就是滑模控制里的等效控制思想。此时对 v_alpha、v_beta 做低通滤波拿到的就是 e_alpha、e_beta 的估计值。这个逻辑有点像你在黑屋子里找一个物体的位置你不知道阻力有多大但你反复调整手的位置一旦手能稳稳地跟着物体移动手上感受到的“反推力”大小就间接反映了真实的阻力。1.3 高速运行让观测难度发生了质变很多人在中低速环境里跑通了滑模观测器觉得事情成了结果一拉到高速就出问题。这不是偶然高速工况对观测器的影响是系统性的。第一反电动势幅值正比于电角速度。转速越高e_alpha、e_beta 的幅值越大切换增益必须跟着加大否则观测器拉不动误差。但切换增益加大意味着抖振幅度同步放大。第二电气频率升高。以 4 极对电机、6000 rpm 为例电气频率是 400 Hz。控制周期如果取 100 微秒一个电气周期里只有 25 个采样点。数字控制器需要在这 25 个点里完成电流采样、观测器更新、电流环计算、SVPWM 输出任何延迟折算成角度都会被放大。第三高速下 dq 轴交叉耦合增强模型中未建模的动态更多。观测器本来是基于理想模型设计的模型失配一多增益裕量就得留更大抖振问题雪上加霜。所以高速滑模观测器不是简单地把转速指令调大它牵涉到增益设计、滤波策略、离散化延迟补偿一整套问题。2. 抖振的三大根源符号切换、低通提取与离散延迟的叠加2.1 符号函数带来的结构性抖振传统滑模观测器的切换项用的是 sign 函数。理想的 sign(s) 是一个不连续函数在 s0 处直接跳变。理论上这种不连续切换能把系统状态强制“打”到滑模面上但实际物理系统里逆变器有开关频率限制控制器有采样周期限制误差不可能真的停在 s0 上而是会在滑模面两侧来回穿越产生高频振荡。这就是抖振的第一层来源。这里有个绕不开的矛盾切换增益要足够大才能抵抗反电动势和模型扰动保证滑模面可达但增益越大穿越滑模面时的动能越大抖振幅值越猛。降低增益抖振确实小了但观测器抗扰动能力下降在转速大范围变化时容易“跟丢”。这是结构性的矛盾只靠调参数无法根治。2.2 “等效控制”与现实低通滤波的落差滑模观测器真正的输出并不是切换项本身而是切换项的等效值。理论上等效控制值是切换信号通过理想低通滤波后的平均分量。但实际工程里不存在理想低通一阶惯性滤波器的截止频率总是有限的。截止频率选高了切换残余的高频分量会漏过去反电动势估计波形毛刺明显位置估计抖动。截止频率选低了滤波是干净了但相位滞后变大反电动势被“拖”了一段时间转子位置估计就会滞后。中低速时反电动势基频低滤波滞后折算成角度还勉强能接受高速时基频本身就高同样的时间常数产生几十度滞后都很正常。这是抖振的第二层来源也是高速工况下最棘手的部分。2.3 数字实现的额外加成第三层来源说实话很多刚接触的人容易忽略离散化本身会给抖振“添柴”。连续系统里切换项瞬间完成数字系统里切换信号在采样周期内被零阶保持住相当于给切换信号额外加了一拍延迟。传感器采样、PWM 动作又有各自的滞后。延迟叠加在滑模环路上会让系统在滑模面附近的来回穿越更难收敛。而且这层延迟在高速时会被放大成角度误差电角速度越高同样的时间延迟对应的角度滞后越大。更麻烦的是角度滞后会直接进入 Park 变换导致 dq 轴解耦变差电流环控制性能下降反过来又让电流波形更难控制形成一种恶性循环。3. 抖振的优化组合拳自适应边界层加组合幂次趋近律3.1 把符号函数换成可调饱和函数针对符号函数带来的结构性抖振最直接的工程化改造就是把 sign(s) 替换成饱和函数 sat(s/Φ)。饱和函数的定义很简单如果 |s/Φ| 1输出 sign(s) 如果 |s/Φ| ≤ 1输出 s/Φ这个替换的意义在于边界层外行为仍然是滑模切换保证鲁棒性边界层内切换项变成连续的比例控制相当于给系统加了一个等效阻尼误差不再高频来回穿越而是平滑地逼近滑模面。边界层厚度 Φ 的选取有讲究。Φ 太大边界层内等效增益过小稳态误差会偏大位置估算不准Φ 太小边界层几乎退化成符号函数抖振问题又回来了。更重要的是Φ 应该是自适应的。高速时反电动势幅值变大系统的扰动上界抬高边界层需要相应放宽低速时精度优先Φ 要收窄。我用的自适应形式是Φ Φ0 k_phi * |ω_est|Φ0 是低速基准厚度k_phi 决定边界层随转速增长的速率。这个式子很简单但能让观测器在不同转速区间都保持相对一致的等效阻尼特性。3.2 组合趋近律收敛更快穿越更温和饱和函数解决的是“切换形式”的问题但边界层外的趋近速度仍然依赖切换增益。如果增益不够启动阶段或者突加负载时误差会被拉得很大观测器可能失步。我在切换项里引入组合趋近律结构最终形式的切换电压写成v_alpha (K0 Kp * |s_alpha|^α) * sat(s_alpha/Φ) K_lin * s_alpha v_beta (K0 Kp * |s_beta|^α) * sat(s_beta/Φ) K_lin * s_beta其中 α 取 0.5 到 0.7 之间。这个结构有几个好处。|s| 大的时候Kp * |s|^α 项提供额外切换增益误差能快速被拉回滑模面附近|s| 小的时候由于 α 小于 1“小数的幂”比“小数的线性项”衰减得更慢所以接近滑模面时依然维持足够的收敛速度。K_lin * s 是一个线性阻尼项它在边界层内和边界层外都起作用进一步平滑误差收敛过程。我个人的经验是如果只用固定切换增益高速稳态时抖振根本压不住如果只加大线性阻尼动态响应又变得慢吞吞。把 K0、Kp、K_lin 三项组合起来才能在“快速收敛”和“低抖振”之间取得工程上可接受的平衡。3.3 超螺旋方案也有参考过为什么不用它做主线很多人一听说抖振优化就会想到二阶滑模里的超螺旋算法。我也专门搭过超螺旋观测器做过对比实验原理本身确实优雅切换信号被放进积分器里输出项是连续的理论上几乎无抖振。但我的实际体验是超螺旋的参数约束条件比较严格两个增益需要精确匹配离散化实现后积分项在某些开关条件下容易出现漂移调试起来不像组合趋近律那样直观。在转速大范围变化的场合超螺旋的鲁棒性并不像理论推导那么美好。我最后的取舍是超螺旋作为分析基准和论文对比方案保留主实现用自适应边界层加组合趋近律。原因很简单——工程上要的是“够用、可控、可调”不是理论最优。3.4 位置提取端用 PLL并主动补偿相位滞后反电动势估计出来以后从它到转子角度还有一个容易被人忽视的环节提取方式。直接用 atan2 从 e_alpha、e_beta 算角度实现最简单但反电动势估计里如果残留了高频噪声atan2 会把噪声非线性放大角度抖动特别大。我推荐用锁相环PLL来提取。PLL 的误差构造方式如下err_pll -e_alpha_hat * cos(θ_hat) - e_beta_hat * sin(θ_hat)当 θ_hat 接近真实 θ 时err_pll 近似等于 ψ_f * ω_e * (θ - θ_hat)这是一个标准的相位差信号。通过 PI 调节器就能让估计角度逐步收敛到真实值。PLL 下辖两个带宽参数比例项影响角度跟踪速度积分项用于消除稳态误差。但这里还有一个关键低通滤波器的相位滞后并不会因为用了 PLL 就消失它的滞后会先体现在反电动势估计上然后通过 PLL 传递到角度估计。所以我在 PLL 输出端加了相位补偿Δθ_comp ≈ atan(ω_hat * τ_lpf)补偿量随转速变化。这个补偿逻辑说白了就是知道低通滤波拖了多少时间在角度端按当前转速折算成角度补回去。高速运行时这一补可能补出十几度甚至几十度是必须做的动作不是可选项。4. 可复现的 Matlab 实现从电机模型到观测器代码逐段拆解4.1 整体仿真架构的取舍复现这套系统我建议直接在 Simulink 里搭离散模型核心观测器用 MATLAB Function 块或者写成普通 m 函数调用。电机本体模型可以搭在 dq 坐标系下通过 Clarke 变换和 Park 变换与静止坐标系对接。顶层仿真架构分成四块电机本体模型、逆变器与 SVPWM、电流环和速度环、滑模观测器。第一次复现时不要把逆变器建模搞得过于复杂先把理想逆变器跑通再逐步加入死区和延迟。控制周期建议取 100 微秒仿真步长取 1 微秒。观测器的离散更新频率和控制周期保持一致这样逻辑清晰调试时也比较容易定位问题。4.2 关键参数设定与离散时间匹配下面给出一组用于仿真的高速 PMSM 参数我是按一套额定转速 6000 rpm、4 极对的测试电机来设置的参数数值说明Rs0.2 Ω定子电阻Ls0.6 mH表贴式电机LdLqψf0.042 Wb永磁磁链Pn4极对数J0.00015 kg·m²转动惯量直流母线电压300 V逆变器母线电压控制周期 Ts100 μs观测器与电流环同步开关频率10 kHzPWM 频率6000 rpm 时电角速度约为 2513 rad/s电气频率约 400 Hz一个电气周期里大约有 25 个控制周期。这个采样密度已经不算宽裕正是考验观测器数字实现质量的典型场景。观测器相关参数我调试后落在以下范围参数取值作用K0100基础切换增益Kp50幂次项增益α0.6幂次项指数K_lin30线性阻尼项增益Φ00.5 A边界层基础厚度k_phi0.0003边界层转速增量系数τ_lpf0.0001 s低通滤波时间常数对应约 1.6 kHz 截止频率kp_pll200PLL 比例增益ki_pll2000PLL 积分增益这一组参数在我的仿真模型里能稳定跑但你换电机、换电压、换控制周期之后一定要按比例缩放。直接照抄大概率跑不起来。4.3 观测器核心函数与逐段注释下面是观测器单步更新的 MATLAB Function 核心代码。实现思路完全按照前面讲的组合趋近律加自适应边界层PLL 提取角度低通滤波提取反电动势。function [e_alpha_hat, e_beta_hat, theta_hat, omega_hat] sm_update(...) % SMO单步更新按控制周期Ts离散化 % 输入: u_alpha, u_beta, i_alpha, i_beta, Ts % 输出: 反电动势估计、转子电角度估计、转子电角速度估计 persistent i_smo_alpha i_smo_beta e_alpha_f e_beta_f persistent theta_pll omega_pll integrator_pll if isempty(i_smo_alpha) i_smo_alpha 0; i_smo_beta 0; e_alpha_f 0; e_beta_f 0; theta_pll 0; omega_pll 0; integrator_pll 0; end % ---- 电机参数与观测器参数 ---- Rs 0.2; Ls 0.6e-3; alpha_pow 0.6; K0_sw 100; Kp_pow 50; K_lin 30; phi0 0.5; k_phi 0.0003; tau_lpf 0.0001; kp_pll 200; ki_pll 2000; % ---- 1. 电流估计误差 ---- s_alpha i_smo_alpha - i_alpha; s_beta i_smo_beta - i_beta; % ---- 2. 自适应边界层厚度 ---- phi phi0 k_phi * abs(omega_pll); % ---- 3. 饱和函数计算 ---- sat_a max(-1, min(1, s_alpha / phi)); sat_b max(-1, min(1, s_beta / phi)); % ---- 4. 组合趋近律对应的切换电压 ---- v_smo_alpha (K0_sw Kp_pow * abs(s_alpha)^alpha_pow) * sat_a K_lin * s_alpha; v_smo_beta (K0_sw Kp_pow * abs(s_beta)^alpha_pow) * sat_b K_lin * s_beta; % ---- 5. 电流估计值更新 ---- i_smo_alpha i_smo_alpha Ts / Ls * (u_alpha - Rs * i_smo_alpha - v_smo_alpha); i_smo_beta i_smo_beta Ts / Ls * (u_beta - Rs * i_smo_beta - v_smo_beta); % ---- 6. 从切换电压中提取反电动势一阶低通 ---- a_lpf Ts / (tau_lpf Ts); e_alpha_f e_alpha_f a_lpf * (v_smo_alpha - e_alpha_f); e_beta_f e_beta_f a_lpf * (v_smo_beta - e_beta_f); % ---- 7. PLL提取转子角度和速度 ---- err_pll -e_alpha_f * cos(theta_pll) - e_beta_f * sin(theta_pll); integrator_pll integrator_pll ki_pll * err_pll * Ts; omega_pll kp_pll * err_pll integrator_pll; theta_pll theta_pll omega_pll * Ts; theta_pll atan2(sin(theta_pll), cos(theta_pll)); % 归一化到[-pi,pi] % ---- 8. 输出 ---- e_alpha_hat e_alpha_f; e_beta_hat e_beta_f; theta_hat theta_pll; omega_hat omega_pll; end我逐段解释几个容易写错的地方。第 3 步饱和函数我直接用max(-1, min(1, x))实现相比于 if 分支更简洁在 MATLAB Function 块里也不会触发额外编译问题。第 4 步是整套优化最关键的位置。注意(K0 Kp * |s|^α) * sat(s/Φ)边界层内这一项会变成(K0 Kp * |s|^α) * s/Φ相当于一个非线性阻尼边界层外则保持切换特性。K_lin 项在线性和非线性区之间又加了一层过渡。第 7 步atan2(sin, cos)是为了把角度限制在 [-pi, pi] 区间否则长时间运行后角度累积误差会越滚越大。我在这个函数里直接把参数硬编码进去了实际工程建议把参数做成结构体或全局常量方便批量调参。4.4 电流环、速度环与 SVPWM 的衔接要点观测器输出的 theta_hat 不是用来显示的它是控制链路里 Parker 变换的角度基准。电流采样值从静止坐标系变到 dq 坐标系时用到的角度必须是估计角度所以观测器的精度和滞后会直接影响电流环。速度环输出的是交轴电流指令直轴电流指令保持 0这是表贴式电机最常用的 id0 控制。电流环 PI 的输出经过反 Park 变换得到静止坐标系电压指令送入 SVPWM 模块。这里要注意滑模观测器的输入电压不能直接取电流环 PI 的输出而是取 SVPWM 限幅之后的参考电压。因为如果发生过调制或者电压限幅实际作用在电机上的电压已经不是 PI 输出了取错了观测器模型误差会很大。SVPWM 我建议先用标准七段式载波周期 100 微秒三角载波上下对称更新。如果后面要做台架实验还要加入死区和最小脉宽补偿但仿真阶段先把理想情况跑通。5. 仿真验证抖振控制效果与动态性能的前后对比5.1 稳态工况抖振幅值和位置估算误差对比我用同一个电机模型做了三组对比传统 SMO 用固定增益加 sign 函数方案二是固定边界层饱和函数方案三是自适应边界层加组合趋近律。稳定运行在 6000 rpm 下统计电流纹波和位置估计误差结果如下方案电流抖振幅值位置误差稳态范围反电动势波形质量传统 SMO±1.8 A±3.2 度毛刺明显谐波丰富固定边界层饱和函数±0.7 A±1.5 度毛刺减弱仍有残留自适应边界层组合趋近律±0.3 A±0.6 度波形干净谐波大幅下降这组数据是仿真模型里的统计结果具体数值会随电机参数和控制器周期变化但趋势是稳定的抖振确实压下来了位置估计精度也同步提高。关键是这个优化不只是把波形变好看。电流纹波小意味着电磁转矩波动小高速运行时机械噪声和轴承损耗都会改善。位置误差从好几度压缩到不到一度电流环解耦和转矩控制的精度才能有所保证。5.2 动态工况突加负载与加减速过程抖振优化不能以牺牲动态性能为代价。我在仿真里做了两组测试额定转速下突加 50% 额定负载以及 3000 rpm 到 6000 rpm 的阶跃升速。突加负载时传统 SMO 的位置估计误差瞬间冲到 10 度以上恢复时间比较长。优化后的方案超调大约 3 度并且在一个电气周期多一点的时间内就回到稳态。这说明组合趋近律里的线性阻尼项起到了作用它让观测器在扰动冲击下不会大幅超调。升速过程里观测器的问题主要是相位滞后导致的角度补偿跟不上。这一点光靠观测器本身无法完全解决必须让 PLL 的带宽和相位补偿环节协同工作。我把 kp_pll、ki_pll 和 τ_lpf 放在一起调升速过程中位置误差峰值控制在 2 度以内没有出现失步现象。5.3 参数整定中观察到的敏感区域调参的时候有几个现象值得说一说。K0_sw 调低到 80 以下时启动阶段和突加负载瞬间误差会明显增大极端情况会丢步调高到 180 以上稳态电流噪声迅速增大。Kp_pow 的作用与 K0 不同它只在误差偏大时额外出力对稳态噪声影响相对小但对动态过程的响应很关键。phi0 和 k_phi 的配合也一样敏感。phi0 设成 0.2 A边界层太薄稳态抖振幅值明显回升设成 1 A位置估计稳态偏置变大感觉像“钝化”了。k_phi 我最后取了 0.0003这个值与极对数和观测转速范围有关不建议直接照搬。我的整定顺序是先把 phi0 固定到一个中等值按 K0、K_lin、Kp 的顺序调通动态再加 k_phi最后回头微调 phi0 和 Kp。这个顺序能减少变量之间的相互干扰。6. 复现过程中最容易踩的四个坑与工程化建议6.1 低通滤波截止频率与相位补偿的耦合第一次跑高速的时候我把低通滤波器时间常数设成对应 500 Hz 截止频率6000 rpm 下位置滞后超过 35 度加速阶段直接崩了。后来算了一下才发现400 Hz 的电气频率一阶低通在 500 Hz 截止频率下的滞后已经接近 40 度这个量级的相位误差没有任何控制器扛得住。高速滑模观测器的低通截止频率至少要按最高电气频率的 2 到 5 倍来选。我最后用 1.6 kHz 截止频率剩余滞后通过相位补偿公式修正。这里要特别提醒补偿量一定要随转速实时计算不能用一个固定角。固定角在中低速还能凑合高速时转速翻一倍补偿误差也翻一倍。6.2 参数失配电阻温漂会让位置估计偏多少仿真模型里参数随温度变化只存在于“看起来很美好”的理论中。实际电机发热后定子电阻可能上升 30% 到 50%观测器模型里的 Rs 如果还是冷态值电流估计模型中隐含的电阻压降就错了反电动势估计会引入系统性偏差。我的建议是不要只按额定温度整定拿最恶劣的温升一起仿真或者在闭环里预留足够的鲁棒性裕量。如果条件允许可以在线做简单的电阻辨识或者用自适应参数修正。仿真阶段至少要学会做参数敏感性测试把 Rs 和 Ls 各偏差正负 20%看系统还能不能稳定。6.3 低速启动与开环到闭环切换的边界处理还有一个容易被忽略的现实问题滑模观测器在零速和极低速下几乎是失效的。反电动势幅值正比于转速转速接近零时反电动势比噪声大不了多少位置估计信噪比太低。我的方案里低速阶段用开环强制定位启动转子拉到一定角度后切换成闭环。切换时机要盯住反电动势幅值或者估算转速一般到额定转速的 10% 到 20% 区间比较稳。切换瞬间如果速度环输出和观测器输出之间有明显偏差会出现突兀的扭矩扰动所以最好在切换前让速度环进入“准闭环”状态先平滑过渡再完全切换。6.4 从仿真到台架提前做好这三件事仿真里能跑通离台架上能转还差着好几步。我总结三个最容易出问题的地方第一逆变器死区和最小脉宽补偿。仿真里的理想逆变器和真实的 PWM 逆变器不是一回事死区会引起电压误差高速时影响相对小但调试起步阶段最好早做。第二电流传感器零点偏移。零点稍微偏一点经过低通和 PLL 之后就会变成位置估计的固定偏置。上电自检阶段就应该把零点补偿做掉。第三控制器一拍延迟。数字控制器里电流采样、控制计算、PWM 更新不是一个周期内瞬时完成的工程上普遍存在一拍延时。建议在电流环路径里补一拍补偿否则位置估计做再准控制链路的整体滞后也会把性能拖下来。最后说点个人体会。把仿真跑通只是第一步真正要在不同转速、不同负载下都稳得把三个东西时刻记住低通滤波的相位滞后、边界层与切换增益的匹配、PLL 的动态带宽。我在复现这个优化滑模观测器的过程中最有价值的收获不是把抖振数值降了多少而是明白了“抖振”不是一个孤立现象它和位置提取、电流噪声、离散延迟是一整套耦合关系。如果你正在做类似的无感控制项目建议先把这几个环节的滞后预算算清楚再调参数会少走不少弯路。
返回列表
PREV
查看更多资讯
NEXT
返回资讯列表