ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

全速域永磁同步电机无感FOC:高频注入与SMO平滑切换实现

全速域永磁同步电机无感FOC:高频注入与SMO平滑切换实现 做全速域永磁同步电机无感FOC控制真正的分水岭不在FOC闭环本身而在两个边界位置一是零速和极低速下怎么拿到准确的转子位置二是低速切高速时怎么让观测器的位置估计不跳变。B1.1版本TIDSP_F283xC2000_IPM_FOC_Sensorless_V1.0就是围绕这两个边界搭出来的一套完整全速域方案低速区域用高频注入HFI完成转子初始位置辨识和零速闭环中高速段切换到滑模观测器SMO两个观测器之间用权重切换做过渡。这篇文章是把我在F283xC2000上调这套方案的完整过程、关键公式、代码框架和踩过的坑都写出来适合正在做PMSM无感FOC、想少走弯路的嵌入式工程师。1. B1.1版本到底做了啥全速域无感的痛点拆解1.1 为什么无感FOC的难点集中在低速段驱动永磁同步电机做FOC控制位置传感器一旦去掉第一道坎就是低速。反电动势和转速成正比额定转速下反电动势可能有几十伏特到了5%额定转速时只剩下几伏甚至更小加上PWM开关噪声、死区畸变、电流采样零漂信噪比直接崩掉。很多工程师从SMO方案起步低速启动用强拉预定位或者I/F开环硬拖结果就是带载启动容易失步负载一重转子就抖严重还会过流跳闸。B1.1版本的核心思路就是把低速段单独拎出来处理不再指望反电动势类观测器在零速附近硬扛。还有一类常见做法是I/F开环启动先给一个固定电流幅值让转矩角跟随给定速度积分旋转拖到一定转速再切换到闭环。这个方法实现简单但应对负载突变能力弱位置一旦丢失就前功尽弃。高频注入在低速段不依赖反电动势它依靠的是电机转子的凸极效应也就是电感随转子位置变化的特性所以零速也能辨识位置带载起步能力会好很多。1.2 高频注入与SMO的组合逻辑单一观测器没法覆盖全速域。高频注入在低速段表现好但转速上去以后高频电流会产生额外铜耗、转矩脉动和噪声而且注入频率和控制带宽互相干扰不适合高速SMO正好相反中高速反电动势大滑模观测器收敛快、鲁棒性强但低速信噪比差没办法稳定收敛。所以最实用的组合就是低速切HFI中高速用SMO过渡区域用权重融合。这里要强调一下这不是简单“两套算法各跑各的然后选一个”而是要在项目里做成一个完整状态机初始辨识、零速闭环、低速运行、过渡切换、全速运行。B1.1版本发布的V1.0代码里这个状态机是核心骨架后面所有调试都是围绕它展开的。1.3 F283xC2000平台与IPM电机的基本设定标题里的TIDSP_F283xC2000我手上的调试平台是TI C2000家族的F2837xD双核架构、主频200MHz、内置FPU跑电流环和观测器完全够用如果是F2806x或者F2833x也没问题代码逻辑基本一致。电机对象是IPM也就是内置式永磁同步电机Ld小于Lq凸极率一般在1.3到2.5之间。这个凸极率是高频注入能工作的前提表贴SPM凸极率接近1只能靠饱和凸极效应辨识难度会高不少。版本命名可以理解为B分支1.1阶段项目的完整标识是IPM_FOC_Sensorless_V1.0。在后续调试记录里所有参数表、代码块都会沿用这个命名的电压电流标幺基准。2. 低速段实现高频注入转子初始位置辨识的完整套路2.1 凸极效应高频注入能工作的物理基础IPM电机的转子有永磁体磁路在d轴方向因为有永磁体的磁导率影响等效电感比q轴小直观理解就是d轴方向“硬”q轴方向“软”。当你在定子侧注入一个高频电压信号时高频电流的流通路径会根据这个电感差异随转子位置变化。也就是说电机就像一块椭圆形海绵从不同方向按压的反馈手感完全不同。高频注入就是拿一个高频探针反复按压通过反馈电流的形状反推出海绵在哪个方向更硬。这个位置信息的强度主要取决于凸极率。凸极率越大位置误差信号越强。工程上IPM的凸极率通常足够用不需要额外处理如果用手上的表贴电机做试验那就得选大电流偏置让磁路充分饱和否则解调出来的位置误差信号很小很容易被电流采样噪声淹没。2.2 脉振高频电压注入与位置误差解调B1.1版本用的是脉振高频电压注入具体是在估算d轴方向叠加一个高频电压udh Vh * sin(ωh * t)Uqh方向不注入。如果估算的位置和真实位置之间存在误差角Δθ那么估算q轴方向会出现高频电流分量这个分量的幅值正比于sin(2Δθ)。实际解调流程是先把采样到的三相电流变换到估算dq坐标系取q轴电流iq然后乘以同频正弦参考信号再经过低通滤波器得到的位置误差信号近似为ε ≈ Khfi * sin(2Δθ)把这个ε送进一个PI调节器输出就是位置修正量。当ε收敛到零时估算位置等于真实位置。相比直接对位置角做反正切这种闭环跟踪方式滤波效果好抗噪声能力强调试时只需整定PI增益比较省心。实际代码里需要注意同步解调的相位对齐。注入电压用的是sin(ωh t)解调参考信号最好也严格用sin(ωh t)如果PWM死区或者采样延迟导致相位偏移位置误差信号会带着一个固定的直流偏置导致收敛角度偏好几度。遇到这种情况先检查解调参考信号的相位延迟做一个固定角度补偿比盲目调PI增益有效得多。2.3 N/S磁极极性判别少了它角度会偏180°位置误差信号是sin(2Δθ)周期是π意味着收敛位置可能落在真实位置也可能落在真实位置加180度的位置。对FOC来说d轴方向反180度电角度偏180度转矩方向完全反了启动瞬间就可能过流。所以必须有极极性判别步骤。工程上最常用也最稳定的办法是脉冲比较法在辨识出的位置θ_hat处施加一个正向短暂d轴电压脉冲记录电流峰值再把位置设为θ_hat π施加同样的脉冲记录电流峰值。因为永磁体磁链方向与定子磁链方向相同会加剧磁路饱和电感变小电流峰值更大方向相反会削弱饱和电感变大电流峰值更小。电流峰值大的那个位置就是真正的N极方向。这个脉冲比较法我也踩过坑脉冲宽度和幅值必须一致不能一个宽一个窄而且采集电流峰值的时间点要固定最好在PWM中心点采样避开开关噪声。实测下来脉冲宽度100到200微秒、幅值在0.3到0.5标幺之间比较合适太短电流还没建立起来太长转子会被拖动产生位移。2.4 注入频率、幅值和滤波器怎么定高频注入不是随便选一组参数就能跑。频率太低会跟基波电流和控制带宽混在一起频率太高又受开关频率限制一个注入周期内至少要采到8到10个点才够解调。如果PWM开关和采样频率是10kHz注入频率取1kHz到1.5kHz比较合适对应每个周期10到7个采样点。幅值方面注入电压太小信噪比不足位置误差信号被噪声淹没太大则产生明显的高频啸叫和额外损耗严重还会激起机械谐振。多数IPM在额定电压标幺基准下Vh取0.05到0.1标幺就能获得可辨识信号个别凸极率低的电机需要提高到0.15。滤波器设计上我习惯先在电流采样后加一个带通滤波器把高频分量分离出来再做同步解调最后用一个低通滤波器提取误差信号。带通中心频率就是注入频率Q值取1到2低通截止频率取决于位置环动态需求通常50到200Hz。设计时要重点避免的就是低频基波分量窜进来否则解调出来的误差信号会带着明显的转速频率纹波。2.5 初始位置辨识与零速启动状态机B1.1版本里我没有用传统强拉预定位就是给定一个固定d轴大电流把转子吸到一个已知角度原因很简单预定位会使转子转动在齿轮箱、泵类、输送设备这些不允许反转的场景直接不合格。我用的启动序列是先让高频注入的PLL直接收敛用脉冲法判别N/S然后零电流切闭环让速度环给定斜坡逐渐建立同步。整个状态机分成五步第一步辨识使能第二步高频注入收敛第三步N/S修正第四步闭环切入第五步速度斜坡加速。每一步都要有超时保护和故障判断比如收敛超时、电流超限、位置跳变异常。不要试图一步到位状态机切得越细现场问题越容易定位。3. 中高速段实现SMO滑模观测器与PLL位置速度提取3.1 为什么中高速要换成SMO转速起来之后反电动势变得非常可观此时继续用高频注入就是自己给自己找麻烦。首先是高频电流产生额外铜耗和转矩脉动带载连续运行时电机温升明显其次高频信号频率通常接近开关频率的十分之一会和PWM谐波互相干扰再一个是注入信号会作为噪声进入电流环限制电流环带宽提升。SMO的核心优势在中高速段非常突出它对电机参数变化不太敏感一旦进入滑模面电流误差会被强行约束到零附近反电动势估计的鲁棒性很好。而且实现起来不需要精确的磁链模型只需要定子电阻、电感和反电动势常数标定工作量比无迹卡尔曼滤波、模型参考自适应那些方法小很多。3.2 滑模观测器的数学模型与离散实现在αβ静止坐标系下IPM的电压方程可以写成uα Rsiα Lsdiα/dt eα uβ Rsiβ Lsdiβ/dt eβ其中eα、eβ是反电动势分量eα -ψfωsinθe eβ ψfωcosθeSMO的基本思路是构建一个电流观测器把实际电流和估计电流的误差送入滑模切换项再用切换信号重构反电动势。离散化之后的典型实现是ialpha_err ialpha_meas - ialpha_hat; ibeta_err ibeta_meas - ibeta_hat; zalpha K_smo * sign(ialpha_err); zbeta K_smo * sign(ibeta_err); ialpha_hat Ts / Ls * (valpha - Rs*ialpha_hat - zalpha); ibeta_hat Ts / Ls * (vbeta - Rs*ibeta_hat - zbeta); ealpha_hat LPF(zalpha); ebeta_hat LPF(zbeta);这里有几个容易出错的地方。第一符号函数如果直接用硬切换滑模抖振会非常明显速度噪声巨大建议改用饱和函数或者带边界层的准滑模也就是在误差很小的时候用线性增益替代符号函数实测对噪声的改善非常明显。第二K_smo必须足够大以保证到达滑模面一般要比额定反电动势标幺值高一截但也不能无限大不然电流估计值会一直振荡。第三电流估计方程里用的是标幺化处理后的参数不要直接拿毫亨、欧姆去算否则离散化系数会差好几个数量级。3.3 反电动势到角度/速度反正切与PLL怎么选从反电动势重构转子位置最简单的方法是θe atan2(-eα_hat, eβ_hat)但直接这么用在工程上是灾难因为SMO切换项经过低通滤波器后还是残留大量高频抖动反正切函数对这个抖动非常敏感输出的电角度毛刺很大电流环收到一个跳来跳去的位置轻则转矩波动重则过流。B1.1版本用的是PLL方案把eα、eβ归一化构造一个标准正交信号再用PI调节器锁定相位。gα -eα_hat / Emax; gβ eβ_hat / Emax; err gα * cos(theta_hat) - gβ * sin(theta_hat); omega_pll Ki_pll * err; theta_hat Kp_pll * err omega_pll * Ts;这本质上是一个锁相环当θ_hat等于真实位置时误差err收敛到零。PLL的带宽由Kp和Ki决定带宽太低则速度响应慢带宽太高则会把SMO抖振直接透传过去。我调试时一般先把带宽拉到20到30Hz看稳定性再逐步提高到50Hz左右直到速度波形刚好不发毛为止。3.4 SMO的低速极限与相位补偿SMO不是万能的转速低到一定程度就失效。定性的判断标准是反电动势幅值要和开关噪声、电流采样噪声处于同一量级如果反电动势只有一两伏滑模增益再大也很难把真实信号从噪声里抽出来。定量来说多数SMO方案在5%到10%额定转速以下就不太建议作为唯一位置来源这也正是B1.1需要HFI覆盖低速的原因。还有一个必须处理的细节反电动势重构信号经过低通滤波器之后相位会滞后。滞后角度大约等于θdelay ≈ arctan(ωh_lpf / ωe)随着转速升高这个滞后会越来越大如果不补偿电流环看到的电角度会明显偏后产生d轴电流耦合和转矩下降。补偿方式是在最终角度上加上一个随转速变化的补偿角或者调整LPF截止频率尽量远离工作频段。B1.1版本用的是查表加线性插值把电频率到补偿角的映射做成一维表调试时可以直接在示波器上对比编码器角度确认补偿是否到位。4. 全速域过渡权重切换与角度融合的工程实现4.1 切换判据速度、反电动势、滞环切换点不能拍脑袋定。判断依据最常用的是估算转速也可以用反电动势幅值作为辅助判据。反电动势幅值直接反映观测器信号质量幅值太低说明SMO输入信号弱不宜切入幅值达到安全阈值说明可以切。B1.1版本的主判据是估算转速辅助判据是反电动势幅值两个条件同时满足才允许从HFI切到SMO。工程上一定要加滞环。比如上升沿到10%额定转速才切到SMO下降沿到8%额定转速才切回HFI中间这2%的区间就是一个缓冲区。没有滞环的话如果转速刚好在阈值附近波动切换标志会来回跳动角度融合和速度重建全部乱套。滞环宽度也不能太大太大会让电机在过渡区间停留过久电流波形反而不干净。4.2 权重函数与角度融合算法在过渡区域B1.1用线性权重函数把两个观测器的角度融合起来w (speed_est - SPEED_LOW) / (SPEED_HIGH - SPEED_LOW); w clamp(w, 0.0f, 1.0f); theta_est (1.0f - w) * theta_hfi w * theta_smo;这里的theta_hfi来自高频注入PLL的输出theta_smo来自SMO加相位补偿后的PLL输出。直接对角度加权的前提是两边相位已经对齐否则在过渡区会出现两个角度“打架”融合结果反而比单独用任何一个都差。我在做这个版本的时候最先遇到的就是这个问题SMO因为有低通滤波补偿频率越高补偿角越大HFI解调本身也有相位修正两边角度差随转速变化加权出来的电角度一会儿偏前一会儿偏后电流跟着抖。调整方法很简单先把两个观测器在过渡区中间转速下的角度差记录一条曲线然后在权重计算之前给其中一个角度加上一个随转速变化的偏置让两者在过渡区间基本重合。这个偏置不要求全速域精确只要过渡区间内两者角度差小于三到五度电角度就可以接受。4.3 速度信号重建与过渡期控制优化角度融合解决了位置跳变速度信号也要处理。HFI的速度通常不是直接可得的要么靠位置差分要么用PLL输出低速下噪声不小SMO的速度PLL则在中高速段很干净。B1.1的做法是过渡区间内的速度反馈直接来自SMO的PLL速度输出但给它加了一个变化率限幅防止切入瞬间速度值跳变引起速度环输出突变。另一个容易忽略的点是过渡期间电流环的给定不能突变。权重切换改变的是观测器输出电流环自己是无感的只要位置速度连续电流环自然平稳。但如果切换判据用了转速上升沿触发不要让速度斜坡在切换点附近有断崖。我习惯在启动状态机里做好配合速度给定连续斜坡上行切换区域落在速度斜坡的中间段实测电流冲击可以控制得很小。5. F283xC2000落地中断架构、代码框架与调参流程5.1 控制时序与ADC采样对齐F2837xD上跑这套方案PWM开关频率和电流环执行频率都是10kHzADC采样在PWM载波顶点触发和开关时刻错开半个周期这样采样到的电流最干净。高频注入的电压产生不需要单独加中断它只是在电流环的Park逆变换输出上叠加一个高频正弦项所有计算都在同一个ISR里完成。高频注入的参考信号需要严格同步。注入频率选1kHz对应10kHz控制周期就是每个基波周期10个点用查正弦表生成即可。解调时同样从查表里取sin和cos参考信号保证注入和解调同频同相。不要用fp32的sin函数现场计算一是开销大二是时间抖动会造成相位噪声用整数查表或者固定的IQmath查表函数就好。5.2 高频注入与SMO的代码骨架下面是一段简化骨架代码完整工程里还要加Clark、Park变换、电流环PI、SVPWM、故障保护等模块。这里只展示三个核心逻辑。高频注入叠加与解调// 在电流环输出端叠加高频注入电压 vinj VHFI * sin_table[angle_hfi_idx]; vd_ff vinj; // vd前馈叠加或者加在PI输出上 // 同步解调从估算q轴电流中提取位置误差 err_raw iq_meas * sin_table[angle_hfi_idx]; err_hfi LPF(err_raw); // 位置PLL theta_hfi Kp_hfi * err_hfi * Ts; omega_hfi Ki_hfi * err_hfi * Ts;SMO滑模观测器ialpha_err ialpha_meas - ialpha_hat; ibeta_err ibeta_meas - ibeta_hat; zalpha K_SMO * saturate(ialpha_err, BOUND); zbeta K_SMO * saturate(ibeta_err, BOUND); ialpha_hat Ts / Ls * (valpha - Rs * ialpha_hat - zalpha); ibeta_hat Ts / Ls * (vbeta - Rs * ibeta_hat - zbeta); ealpha_hat LPF(zalpha); ebeta_hat LPF(zbeta); theta_smo_comp theta_from_PLL(ealpha_hat, ebeta_hat) phase_comp; omega_smo omega_from_PLL(ealpha_hat, ebeta_hat);权重切换w (speed_est - SPEED_LOW) / (SPEED_HIGH - SPEED_LOW); w clamp(w, 0.0f, 1.0f); theta_est (1.0f - w) * theta_hfi w * theta_smo_comp; speed_est omega_smo; // 速度由SMO主导这里的所有变量建议统一用IQmath或者浮点格式。F2837xD有FPU直接用float就行但要注意把Ts、Ls、Rs这些系数提前算好常量化不要在ISR里做除法尤其频率高的除法。5.3 推荐初始参数与调试顺序给一组经过台架验证的初始参数作为起点具体电机不同需要重新标定参数推荐初始值说明注入频率1kHz对应10kHz控制周期10点/周期注入幅值0.08pu可按凸极率调整HFI解调LPF100Hz一阶低通即可HFI位置PLL带宽10~20Hz先低后高SMO滑模增益K0.5pu需要超过反电动势标幺值SMO反电动势LPF300Hz兼顾相位滞后和滤波SMO速度PLL带宽30Hz稳定后可以提升到50Hz切换低速阈值0.05pu转速标幺切换高速阈值0.10pu转速标幺滞环回差0.02pu防止切换反复调试顺序一定不能乱。第一步先标定电机参数特别是Ld、Lq、Rs、ψf参数错了后面全白搭第二步只调电流环用编码器反馈做FOC确认电流环稳定第三步把编码器信号拿掉单独调SMO用手转电机或者用测功机拖到中高速看估算角度和编码器角度的误差第四步锁住转子或者低速空转单独调HFI辨识第五步再做全速域切换。跨过前几步直接调全速域出了问题根本分不清是哪个环节的锅。6. 实坑记录常见问题与排查实录6.1 初始位置辨识失败或者方向判反症状很典型上电启动瞬间电机猛抖一下然后过流或者正常应该正转结果反转。先看辨识位置是否稳定如果第一次上电辨识角度和第二次上电辨识角度差180度说明N/S判别逻辑有bug如果每次都差一个固定角度检查解调参考相位和注入相位是否对齐如果辨识角度乱跳大概率注入幅值太小、凸极率太低、或者电流采样噪声太大。排查时我最常用的一招是把电机轴用台钳锁死给HFI一个固定目标位置反复上电辨识看辨识角度是否每次都稳定落在同一位置。如果稳定复现但偏了几度就在解调链路里加角度偏置修正如果每次都不一样先怀疑采样噪声和死区再怀疑解调滤波器参数。6.2 SMO抖振与低速抖动SMO抖振的最大来源是符号函数的硬切换。把sign改成带边界层的饱和函数之后大部分速度毛刺问题会立刻缓解。如果还有抖动检查反电动势LPF的截止频率太低会滤掉真实信号导致角度滞后太高会把抖振直接放进来。建议先用300Hz起步看速度波形毛刺明显就降到200Hz如果角度补偿跟不上再往回提。低速抖动还有一个隐蔽原因SMO用的是固定增益K_smo但反电动势幅值是随转速线性增加的。低速时反电动势很小K_smo相对过大滑模面附近已经不是在“滑”而是在“抖”。按转速调整K_smo低速用小增益高速再恢复满增益实测改善非常大。6.3 权重切换瞬间电流冲击电流冲击几乎都和角度跳变有关。出现这种问题先别动权重函数先检查切换点两侧的估算角度是否连续。把两个观测器输出角度和最终融合角度同时录进示波器如果切换瞬间最终角度有明显折角说明两个观测器在切换点相位不一致。解决办法是前面说的角度预偏置法把SMO带相位补偿后的角度强行对齐HFI角度二者偏差控制到三五度以内。还有一种情况是速度反馈切换带来的冲击。HFI速度PLL动态响应慢SMO速度PLL响应快两者在过渡区的速度值差一大截即使角度连续速度环还是会因为反馈突变产生一顿。解决方法是过渡区速度反馈全部用SMO速度但加变化率限幅或者给速度环输出加一阶低通让转矩指令平滑过渡。6.4 调试工具与我的排查习惯调试这套系统我建议必备三样一台四通道以上的示波器、一个能实时记录变量的调试软件CCS的Graph或者双核共享内存导出变量、以及一台能手动锁定转速的测功机或者对拖平台。认准几个关键变量估算电角度、SMO反电动势alpha轴分量、HFI位置误差信号、权重系数、速度估算值。出了问题优先看角度连续性再看速度波形毛刺最后才查参数。我个人排查的习惯是先复现问题再冻结参数只改一个变量。比如怀疑SMO相位补偿有问题就把补偿角设为零看切换瞬间角度跳变方向把跳变方向搞清楚了补偿角正负就不会写反。这个方法虽然慢但每一步都有结论比一次性把所有参数都调一遍高效得多。这套B1.1版本跑通之后我最大的体会是全速域无感最花时间的地方不是某个观测器本身而是两个观测器之间的衔接。我前后把SMO的低通滤波相位补偿和HFI的解调滤波来回调了快两周最后发现权重函数反而是最简单的部分。如果你正在做类似方案建议先把两个观测器在各自工况下调到“满意且稳定”再做融合否则切换阶段的问题会让你根本分不清该调哪边。最后一个小经验所有角度量全程统一用标幺和电角度域调试界面直接显示排查效率会快很多。
返回列表