ARTICLE DETAIL

资讯详情

深耕编程入门与网站建设的一线实战洞察。

永磁同步电机全速域无感FOC:高频注入与滑模观测器融合方案

永磁同步电机全速域无感FOC:高频注入与滑模观测器融合方案 做永磁同步电机PMSM无感FOC的人多半都经历过这种尴尬中高速跑得好好的一到低速就露馅零速启动更是靠蒙。我这个项目做的就是IPM电机内置式永磁同步电机的全速域无感FOC从静止到额定转速全程不依赖编码器或旋变版本迭代到B1.1核心架构是高频注入辨识转子初始位置 低速区高频注入闭环 滑模观测器SMO覆盖中高速 权重切换平滑过渡。硬件跑在TI的C2000系列DSP上PWM、ADC、中断、FOC核心算法全部在这颗芯片里完成。这篇文章把整个方案的设计思路、关键参数、工程实现和踩过的坑一次讲清楚适合正在做PMSM无感FOC、尤其是被启动和低速稳定性折磨的工程师参考。1. 全速域无感方案的整体架构与设计思路1.1 IPM电机无感控制的难点在哪里先说清楚为什么全速域无感这四个字会让做电机控制的人头大。IPM电机跟表贴式SPMSM有个本质区别它的Ld和Lq不相等而且通常Ld小于Lq这意味着电机存在磁阻转矩也意味着它的电感特性和反电势波形都带着明显的凸极性。这个凸极性既是麻烦也是资源——高频注入这个技术正是靠它才能成立。无感FOC按转速区间拆解难点其实分三块。第一块是零速和极低速反电势和转速成正比转速为零时反电势就是零任何基于反电势的观测器包括SMO在静止时都拿不到有效信号必须另想办法这就是高频注入登场的原因。第二块是低速区即使转速提起来一点反电势依然很弱、信噪比很差再加上逆变器死区、采样误差这些非线性因素干扰SMO在这个区间输出的角度抖动很厉害转矩容易波动。第三块是中高速反电势信号足够强了SMO或者磁链观测器都好使但高频注入在这个区间反而成了干扰源注入信号会叠加在正常电流环上带来额外损耗和转矩脉动而且凸极效应随转速和负载变化辨识精度反而不如反电势法。所以全速域从来不是靠单个算法吃遍所有区间而是把不同算法的优势区间拼起来在交界处做平滑过渡。B1.1版的核心思路就是零速和低速交给高频注入中高速交给SMO中间用权重切换来融合。1.2 为什么是高频注入SMO权重切换方案选型这件事我在早期版本里走过弯路。最早的B1.0只做了SMO零速启动靠开环强拉遇到带载启动或者负载突变要么失步要么过流批量测试根本过不了。后来陆续对比过几种低速方案包括IF控制、磁链观测器以及高频注入最终选了高频注入作为低速区的解法。IF控制I-F控制在异步电机和某些低速场合很流行通过注入带角度的电流指令让电机先转起来再切到闭环。但IF控制本质上是电流矢量角开环切换瞬间容易产生转矩冲击对IPM这种凸极电机来说切换点如果不在合适的角度很容易出现转速跌落。磁链观测器在低速时受定子电阻和积分漂移影响大要额外做反电势补偿和饱和处理调起来很费劲而且对参数敏感换一台电机就得重新标定。高频注入的好处在于它不依赖反电势信号是自己主动注入进去的所以在真正的零速也能工作而且能直接辨识转子初始位置——这对IPM来说特别关键因为IPM没有自启动能力位置不对就给电电机会反转或者堵转。当然它也有代价注入信号会产生附加电流、额外损耗和一点噪音而且带宽受限动态响应不如SMO所以中高速必须切回SMO。权重切换是B1.1版新增的核心逻辑。早期版本用的是硬切换在某一个转速点直接从HFI估算角度跳到SMO估算角度实测下来切换瞬间电流尖峰特别明显严重时直接触发过流保护。后来改成软切换在转速过渡区间按百分比把两个观测器的输出融合起来同时把切换区间的电流环和速度环配合调好这个问题才真正解决。后面第3节我会把切换的实现细节展开讲。1.3 C2000平台与B1.1版本的演进硬件平台选的是TI C2000系列DSP项目代号F283xC2000实际工程里常用的有TMS320F28335、F28075这类。选C2000的原因很直接电机控制外设是现成的ePWM模块自带死区插入和ADC触发同步ADC可以做到和PWM载波对齐采样这对FOC里的电流采样质量至关重要。无感FOC对电流采样的相位要求很高采样点没对齐算出来的电流矢量角就有偏差后面所有观测器都会跟着偏。PWM配置上我用的是up-down计数模式三角载波PWM频率10kHzADC触发点放在计数器的周期匹配点也就是三角波的波峰或波谷位置。这时候三相电流刚好处于续流状态采样到的电流是相电流的平均值干扰最小。这个细节看着小但直接影响高频注入的电流解调效果——注入的高频电流是叠加在工频电流上的采样点一旦抖动带通滤波之后的解调信号就会有毛刺。B1.1相对B1.0的主要变化有三块。一是增加了高频注入的初始位置辨识和低速闭环不再依赖开环强拉启动二是把SMO和HFI的输出做了权重融合替代原来的硬切换三是对死区补偿和ADC采样延时做了标定修正把低速区的电流波形质量提升了一截。V1.0的版本号后缀是这个项目的发布代号整包代码带完整的初始化、中断服务程序、观测器和控制算法模块算是能直接参考的完整方案。2. 高频注入转子初始位置辨识的核心实现2.1 凸极效应与高频注入的基本原理高频注入能工作的物理基础是IPM电机的凸极效应。因为Ld和Lq不相等转子在不同角度下定子绕组呈现的电感是随位置变化的。往定子侧注入高频电压信号电流响应的大小和方向就跟转子位置产生了关联把这个关联解出来就能反推转子位置。这里有个关键点要理解透彻高频注入分两种旋转高频注入和脉振高频注入。旋转法是在静止坐标系αβ系里注入一个旋转的高频电压矢量然后从电流响应里提取位置角脉振法是在估计的dq坐标系里的d轴方向注入一个脉振的高频电压然后从q轴高频电流分量里提取位置误差。我做的是脉振法原因是脉振法实现简单一个注入轴上的电压计算就行而且对凸极率的利用效率高参数敏感性低一些。脉振注入的基本思路是这样的假设估计的电角度是θ̂真实转子角是θe两者的差Δθ θe - θ̂。在估计d轴上加一个高频电压u_dh Vh·cos(ωh·t)由于Ld、Lq不等电流响应里会分解出和位置误差相关的分量。推导出来的结果里估计q轴上的高频电流分量i_qh的幅值和sin(2Δθ)成正比在Δθ很小的时候可以近似为2Δθ这就是我们要的位置误差信号。整个位置观测就是围绕这个误差信号搭闭环把它压到零。2.2 脉振高频注入与位置误差解调实际工程里的解调链路是这样的电流采样得到三相电流经过Clark变换得到iα、iβ再经过Park变换用估计角θ̂得到估计dq系的电流id̂、iq̂。然后iq̂先过一个带通滤波器BPF把中心频率设在注入频率ωh附近滤掉基波和开关频率噪声剩下的就是高频电流分量。这个高频分量再乘以sin(ωh·t)做同步解调再用低通滤波器LPF把2ωh的高频项滤掉剩下的直流分量就正比于sin(2Δθ)。解调出来的误差信号e(Δθ) ≈ K·2Δθ送进一个锁相环PLL或者PI调节器输出是估计角速度再积分得到估计角度θ̂。整个闭环跑起来θ̂会自动收敛到真实角度附近误差压到几度以内。值得注意的是由于sin(2Δθ)的周期是π这个收敛过程只能保证θ̂对齐到某个d轴方向至于是N极方向还是S极方向需要额外做极性判别这个放到2.3节说。这段逻辑看着简单工程上的坑不少。第一个坑是滤波器的设计。BPF带宽太窄对注入频率的漂移敏感信号衰减大带宽太宽基波分量漏进来解调出的误差信号就被污染了。我的做法是BPF用二阶带通Q值取1左右中心频率精确对准注入频率同步解调之后再用一个截止频率50~100Hz的一阶LPF。第二个坑是数字实现的精度。C2000上滤波器用定点或者浮点都能跑但要注意信号幅值在整个链路上的缩放别让某个环节饱和或者信噪比被拉低这个在调试时要用DAC实时看波形才能发现。2.3 N/S磁极极性判别高频注入基于电感凸极能辨识出d轴的位置但有一个天生缺陷它分不清N极和S极。因为从电感角度看d轴正方向和反方向的特性是对称的高频电流响应不能区分180°的差别。也就是说位置解算收敛之后θ̂可能正好差180°也就是磁极方向反了。如果带着这个错误角度直接给电电流产生的转矩方向就是反的电机会反转或者堵转这在压缩机、泵这类负载上会直接出事故。解决N/S极性判别工程上用的是磁饱和效应。方法是在辨识出d轴位置后分别沿着d轴正方向和反方向各注入一个短促的电压脉冲然后观测电流响应的大小。因为永磁体的磁场会影响铁心的饱和程度正向和反向注入时电感不一样电流响应的斜率或者幅值就会有差异。电流响应大电感小的那个方向就是N极方向。如果判别出来当前θ̂对准的是S极就给θ̂加180°修正。这个判断只需要在初始上电时做一次相当于一个自学习步骤。要注意的是这个脉冲注入必须控制好电压幅值和持续时间。幅值太小饱和效应不明显判别不可靠幅值太大电流冲击可能触发过流保护甚至有退磁风险。我的做法是先扫几组脉冲宽度和幅值找到电流差值最明显的工作点然后把脉冲时间和保护阈值写死。实测下来带负载情况下的N/S判别可靠性比空载差一些因为负载电流本身也会改变铁心饱和状态。所以建议在判别前先把电流环置零让母线电流平稳下来再做。2.4 注入频率、幅值与滤波器参数怎么选参数选择这块直接给一份可供抄作业的参考表基于10kHz PWM、48V母线电压、额定电流10A左右的IPM电机参数推荐范围我的取值说明注入频率 ωh500Hz ~ 1.5kHz800Hz必须远低于PWM频率的一半同时高于电流环带宽避免互相干扰注入幅值 Vh3% ~ 10% 额定电压5% 额定电压太小解调信号弱太大产生明显噪音和损耗BPF中心频率等于ωh800Hz用二阶带通Q值0.8~1.2解调后LPF截止50Hz ~ 200Hz80Hz兼顾动态响应和滤波效果PLL带宽10Hz ~ 50Hz20Hz带宽高了角度噪声大低了动态响应差这里解释一下为什么注入频率要选这个区间。注入频率太低会跟电流环带宽重叠注入的高频信号会被电流环当成扰动去抑制位置辨识就没效果了。注入频率太高一方面受PWM开关频率和采样率的限制另一方面电机的电感在高频下会有趋肤效应和涡流影响实际电感特性会变化。理想区间是PWM频率的1/10到1/5左右10kHz PWM对应1k~2kHz再考虑到电流环带宽通常几百Hz我把800Hz作为折中选择。实测800Hz下解调信号的信噪比和收敛速度都比较均衡如果电机和板子的噪声水平不同可以在此基础上调整。还有一个容易踩的坑注入幅值不能拍脑袋定。幅值太低高频电流响应淹没在采样噪声里位置收敛慢甚至会锁在错误的点幅值太高电机会发出明显的嗡嗡声这是高频电流和铁心相互作用的磁致伸缩噪音负载现场很在意这个。我建议用示波器观察高频电流幅值调到额定电流的5%左右比较合适然后反推注入电压幅值。3. 低速区闭环与权重切换的工程实现3.1 转速区间划分与启动流程有了高频注入之后启动流程就不一样了。B1.1的启动顺序是这样的上电后先进行转子初始位置辨识高频注入收敛到d轴再做N/S判别校正180°得到初始角θ0然后直接进入FOC闭环电流环给一个较小的d轴电流或者0q轴电流按速度环输出给定电机从零速开始平滑加速。转速区间划分上我按额定转速的百分比来切0 ~ 5%额定转速完全由高频注入的估算角度驱动5% ~ 15%进入过渡区两个观测器的输出按权重融合15%以上完全切到SMO。这个比例不是拍脑袋定的而是看两个观测器的信噪比变化得来的。实测中这台电机在5%额定转速以下SMO估算角度抖动大甚至会出现反电势信噪比不足导致的角度漂移在15%以上SMO的估算误差稳定在几度以内而高频注入在这个区间开始受电流环带宽限制融合进来只会添乱。启动时的注意事项有两个。一是初始位置辨识阶段电流环最好不工作或者只给极小的d轴电流避免负载扰动干扰辨识结果。二是辨识完成瞬间估算角度和真实角度可能有几度的残余误差直接切闭环会产生一个小的转矩冲击。我通过在辨识之后做一个短暂的角度锁定让θ̂保持恒定电流环先建立输出来消化这个冲击然后再放开速度环进入正常闭环。3.2 权重切换函数的具体写法权重切换的核心是定义一个随转速变化的融合系数k从0到1过渡。我用的是分段线性// 返回HFI权重w_hfiSMO权重w_smo 1 - w_hfi float calc_weight(float speed_pu) { float w1 0.05f; // 过渡区起点标幺值 float w2 0.15f; // 过渡区终点标幺值 if (speed_pu w1) return 1.0f; if (speed_pu w2) return 0.0f; return (w2 - speed_pu) / (w2 - w1); }融合的对象要仔细选择。直接对角度值做线性加权是最直觉的做法但有个问题如果两个角度一个接近179°、一个接近-179°直接加权平均值会得到0°这种完全错误的方向。所以必须先做角度差归一化把两个角的差wrap到(-π, π]然后用归一化后的差值去做融合。我的实现里维护一个当前估算角度θ_est每个控制周期计算float ang_norm(float a) { // 归一化到(-PI, PI] while (a PI) a - 2.0f*PI; while (a -PI) a 2.0f*PI; return a; } float dh ang_norm(theta_hfi - theta_est); float ds ang_norm(theta_smo - theta_est); float w calc_weight(speed_pu); theta_est w * dh (1.0f - w) * ds;这样融合的是角度增量而不是绝对角度天然避免跳变。实测这个写法在切换区特别稳角度曲线没有台阶。转速的估算也要融合HFI的PLL输出一个转速估计SMO的反电势幅值也能解出转速我同样是加权平均然后过一个100Hz的一阶低通平滑后送给速度环。3.3 角度和转速融合的细节处理融合逻辑写完之后还有几个细节不能漏。第一个是切换区和反电动势的配合。SMO在过渡区给出的角度已经比较可靠了但HFI的角度也还没失效两者融合后的角度质量要优于任何单一观测器。不过要注意过渡区的转速信号变化率可能很大如果速度环带宽太高会放大融合角度的微小噪声引起电流抖动。我建议过渡区把速度环带宽稍微压一点等SMO完全接管后再放开。第二个是逆变器非线性的补偿。低速区电流小死区时间和管压降造成的电压误差占比很大这会让实际加到电机上的电压矢量和指令不一致进而让高频注入解调出的位置误差带上偏置。B1.1里我加了死区补偿根据电流方向查表补偿死区时间同时对ADC采样延时造成的相位差做了标定。这两个补偿做完低速区的电流波形THD明显下来HFI的角度精度也好了大概2~3度。死区补偿这块是纯工程问题不同板子的IGBT或MOS管参数不一样补偿量要实测标定不能直接抄代码里的参数。第三个是故障保护逻辑。无感系统没有位置传感器一旦观测器发散系统是看不见的所以必须用软件保护来兜底。我在切换区里同时监测两个观测器的输出差异如果Δθ_hfi和Δθ_smo的差超过一个阈值比如30°就认为某个观测器异常直接封锁PWM并置故障标志。这个机制在B1.0里没有后来测试中遇到过SMO被负载突变带飞的情况加了这个一致性检查之后安全性提升非常明显。4. 滑模观测器SMO在中高速区的实现4.1 从反电势到等效反电势IPM的SMO模型中高速区我用的是滑模观测器。SMO的基本思想是反电势里藏着转子位置信息通过构造一个电流观测器让观测电流跟随实际电流观测器中用于维持滑模面的那部分输出就逼出了反电势。对于表贴式电机LdLqL模型很简单反电势eα -ψf·ω·sin(θe)eβ ψf·ω·cos(θe)由永磁磁链和转速直接决定。但IPM电机Ld不等于Lq如果还把它当表贴式来设计SMO反电势表达式里会混入跟电感差、电流导数有关的项实际算出来的角度会有偏差。B1.0就是这么干的导致这台IPM在中高速的角度误差偏大转矩效率下降。B1.1换用了等效反电势Extended EMF简称EEMF模型。思路是把IPM的dq方程重新整理把凸极效应全部折算进一个等效反电势里使得定子方程在形式上跟表贴式一样但反电势项包含了Ld与Lq的差值信息。具体来说等效反电势幅值E_ex ω·ψf (Ld - Lq)·(ω·id - diq/dt)。当电机进入稳态或者准稳态后diq/dt项很小可以近似为E_ex ≈ ω·(ψf (Ld-Lq)·id)这就是为什么弱磁或者重载下id变化时会改变反电势幅值。用EEMF模型之后SMO观测到的反电势在αβ系下依然是eα -E_ex·sin(θe)eβ E_ex·cos(θe)角度从atan2(-eα, eβ)提取即可。这个模型对Ld、Lq参数的准确性有一定要求好在IPM的Ld、Lq可以用离线测试或者在线辨识拿到。B1.1里我直接用电机参数表中测过的值在温度变化不太大的范围内不加在线调整够用。4.2 滑模电流观测器结构与增益整定滑模观测器的结构是电流观测器加滑模控制律。以EEMF模型为基础电流方程写成di_α/dt (v_α - R_s·i_α - e_α) / Ld di_β/dt (v_β - R_s·i_β - e_β) / Ld构造观测器dî_α/dt (v_α - R_s·î_α - z_α) / Ld dî_β/dt (v_β - R_s·î_β - z_β) / Ld其中z_α、z_β是滑模控制律的输出我用的形式是 z K·sat(î - i)sat是饱和函数而不是纯sign函数。纯sign函数在数字实现里会导致严重的抖振chattering因为离散系统无法真正维持无限高频的切换会在滑模面附近来回震荡反映到电流上就是毛刺反映到反电势上就是角度噪声。饱和函数在边界层内是线性放大边界层外跟sign函数一样抖振小得多。边界层厚度要折中太薄抖振还在太厚滑模增益等效降低抗扰能力下降。滑模增益K的整定原则是必须大于反电势幅值的最大值才能保证系统进入滑模状态。反电势幅值约等于|ω|·(ψf (Ld-Lq)·id)转速越高需要增益越大。所以K不能设成一个固定值而要跟着转速标幺值近似线性增长。我在工程里做的是K K0 K1·|ω|K0是基础增益K1是转速关联增益通过离线测试确定。K取得太小观测电流跟不上实际电流反电势解算淹没在误差里角度偏差大K取得太大抖动和噪声也会被放大。实测调整过程中我从电流误差波形里观察正常运行时电流误差应该在饱和函数的边界层内小幅波动一旦出现大幅震荡或者拉不住的情况就是增益不足。观测器输出z_α、z_β包含反电势信息但它其实是个高增益输出直接拿来算角度会非常脏。标准做法是让z过低通滤波器滤成平滑的等效反电势再送角度提取。这里的低通截止频率选择也关键截止频率太高滤不干净高频抖振太低反电势幅值衰减大且相位滞后严重。实际取500Hz~1kHz之间然后单独做相位补偿。4.3 角度提取、滤波延时补偿与PLL反电势经过LPF之后相位会滞后滞后角度和转速有关假设Δt是滤波器的群延时角度滞后就是Δθ ω·Δt。转速越高滞后越大。如果不补偿高速时会发现估算角度总是滞后真实角度几度到十几度电流波形和转矩效率都会变差甚至影响高速弱磁的稳定性。补偿方法有几种。最简单的是查表或者公式补偿估算出转速后计算Δθ ω·Δt加在最终角度上。这个方法的缺点是滤波器的群延时并非完全平坦补偿精度有限。我在B1.1里用的是PLL角度跟踪方案反电势经过低通滤波后不直接atan2而是构造误差信号 e_pll e_α·cos(θ̂) e_β·sin(θ̂)。代入反电势表达式后化简为E_ex·sin(θ̂ - θe)在角度误差小时近似为E_ex·(θ̂ - θe)正好作为PLL的输入。PLL本身的跟踪特性相当于一个自适应的角度积分过程对滤波相位滞后有一定的自动补偿能力配合一个小的前馈转速项稳态角度误差可以压到1~2度。PLL的Kp、Ki参数按观测器带宽和转速环带宽协同整定Kp取得大响应快但噪声大Ki用来消除稳态误差。还有一个细节SMO在中高速虽然靠得住但电机负载突变时反电势的幅值和相位会瞬间变化PLL需要一定时间收敛这个过程中角度会有短暂偏差。我实测中通过适当增大PLL带宽来缩短收敛时间但代价是稳态噪声变大。最终用了标幺化反电势方式把e_α、e_β除以反电势幅值来做归一化让PLL的增益不随转速大幅变化这样即便转速变化动态响应也比较一致。整个SMO模块在C2000上的计算量不大一个控制周期100μs里能完成余量充足。反倒是滤波器和PLL的参数整定最花时间后面调试实录里我展开说。5. 调试实录常见问题与排查方法5.1 高频注入不收敛怎么办这个是我被问得最多的一个问题。高频注入上电后估算角度锁不住或者收敛到了错误的位置。排查思路按顺序走。先看硬件层面的注入信号是否真的加到电机上了。用电流探头抓相电流看有没有注入频率的电流分量。如果没有检查PWM配置和注入电压幅值——幅值太小电流响应可能淹没在噪声里。之前遇到过一次是把注入电压误加在了估计q轴上而不是d轴上结果解调误差信号恒为零系统完全无感后来查代码才发现轴系弄错了。再看滤波器链路。用DAC把带通滤波器前后的信号输出出来确认BPF中心频率和注入频率一致。曾经因为PWM频率改了但BPF参数没同步更新导致解调信号衰减严重角度收敛极其缓慢。还有一次是同步解调的sin(ωh·t)表格相位写错了导致解调出的误差信号带了一个固定偏置角度始终收敛不到零。这类排查没法靠看代码看出来必须靠实时波形观察。C2000调试时我习惯把关键中间量通过DAC引脚输出直接接示波器比CCS的Graph窗口更实时直观。N/S判别失败的排查也值得说一句。如果判别结果偶尔反180°先检查判别时的电流是否为零、母线电压是否稳定。再有就是饱和效应方向是否弄反——不同电机材料的饱和特性方向可能不一样有的电机正向电感小有的反向电感小。我的处理是在自学习阶段做一次双向脉冲对比把电流大对应哪个方向的映射关系自动判断出来避免硬编码。5.2 SMO角度偏、启动抖动这类老毛病SMO角度偏最常见的还是相位补偿没做对。低速切过来的那一段转速不算高滞后小很多人体会不到问题可一到高速就明显估算角度落后真实角度q轴电流给定跟实际转矩方向错开效率和输出转矩都下降。排查时我建议直接把估算角度和编码器实测角度调试时临时接上编码器在CCS的Graph里叠加看差值随转速线性增长基本就是滤波延时没补偿。如果差值不随转速变化那可能是EEMF模型里的Ld、Lq参数不准。启动抖动这块分两种情况。一种发生在从HFI切换过来的初期角度虽然平滑但速度环看到的速度信号有噪声抖一下。这种我通过把速度估算的一阶LPF截止频率从200Hz降到80Hz解决代价是速度环动态变慢一点但在低速区完全够用。另一种是电流环本身的问题低速时采样噪声和谐波大如果电流环PI整定太激进电流也会抖。这种要从电流波形入手先确认电流采样是否干净再做电流环参数的降带宽调整。还有一个高频注入特有的抖动源注入的高频电流本身会在电流环上产生纹波如果速度环带宽很高速度估算器会把纹波放大导致转速指令抖动。我的处理是让速度反馈信号专门走一个比HFI解调速度更慢的滤波器让高频纹波在速度反馈上被滤掉。5.3 切换区的转矩扰动处理权重切换虽然解决了角度跳变但转矩扰动不会完全消失原因很隐蔽HFI和SMO两者对同一个真实角速度的响应速度不同。HFI通过PLL收敛动态慢SMO的反电势观测也有自己的收敛过程。在过渡区如果转速变化较快两个观测器的估计值会暂时偏离融合后的角度也就出现了暂时的偏差表现出来就是转矩波动。B1.1里我做了两个处理。第一过渡区的宽度刻意拉大从5%到15%额定转速而不是窄窄的一个点权重函数的变化率也做了限制防止权重突变。第二在过渡区同时把电流环的带宽稍微提高一点通过改变PI参数让电流环能更快地纠正融合角度偏差带来的电流误差。双管齐下之后切换区的转矩波动肉眼可见地变小了过流保护误触发也再没出现过。如果切换区出现明显的冲击还有一个快速定位的办法把HFI角度、SMO角度、融合角度、q轴电流这四路信号同时录到数组缓冲区在CCS里对齐查看。冲击出现在权重刚开始变化的位置基本是HFI角度偏了冲击出现在权重接近结束的位置基本是SMO角度还有残余误差。B1.0时代我靠猜B1.1有了这个习惯基本看一眼波形就能定位。5.4 调试工具与心得调试无感FOC工具链很重要。我在C2000上常用的组合是CCS的Graph窗口配合数组缓冲区记录波形外加DAC输出几个关键变量实时看。数组缓冲区的用法是在中断服务程序里往一个全局数组连续写入感兴趣的变量比如角度、速度、电流给定和反馈跑到设定长度后停止然后在CCS里用Graph工具画出来。这个方案的好处是零成本能录高速波形缺点是不能长时间连续录适合抓启动过程这种瞬态现象。DAC主要用于观测解调链路里的中间量比如BPF输出的高频电流、解调误差信号、PLL输出等。这些信号是周期性的示波器看着最直观。调试初期我甚至把估计角度和编码器实测角度同时送两路DAC直接看两条曲线是否贴合定位问题比看波形文件高效得多。把最常见的几个问题整理成速查表现象可能原因排查/解决初始位置辨识角度抖动BPF中心频率偏移、注入幅值过小核对BPF参数用DAC观察解调信号收敛后角度恒差180°N/S判别未做或失败检查脉冲注入方向、电流置零状态低速电流谐波大死区未补偿、采样点偏移做死区补偿标定调整ADC触发相位高速角度滞后LPF群延时未补偿增加相位补偿或改用PLL提取切换区过流权重突变、观测器差异大拉宽过渡区加一致性检查SMO抖动严重滑模增益不足或饱和边界过薄提高K值加大边界层厚度还有一个调试心得任何观测器参数改动都要先在空载、固定转速下验证角度准确性再接负载。因为负载工况下观察到的偏差往往是多因素叠加的空载能先把观测器自身的问题隔离掉。B1.0时我跳过空载验证直接带负载调结果浪费了大量时间在区分是观测器问题还是电流环问题。6. 说点个人体会这个项目从B1.0到B1.1最大的体会是全速域无感控制不是把几个算法堆在一起就能跑通难点全在算法之间的衔接上。高频注入单独跑没问题SMO单独跑没问题可一旦要考虑启动、带载、转速变化、参数漂移真正耗费精力的是过渡区的处理、故障保护逻辑和参数标定这些脏活。如果只让我总结一句给正在做类似项目的人我会说先把编码器留着用编码器实时对比观测器的每个输出把每个区间、每个工况下的角度误差量化清楚再谈去掉传感器。我见过太多人一上来就追求纯无感结果出了问题连是观测器错还是电流环错都分不清。B1.1之所以能顺利收敛前面大量的编码器对比测试功不可没。后续这个版本我打算在几个方向上继续迭代。一是注入幅值和注入频率做自适应轻载时降幅值减小噪音和损耗重载时适当提高辨识信噪比二是SMO的增益做在线自适应把温度对永磁磁链和电阻的影响补偿掉三是过渡区的权重函数从线性改成S曲线进一步减小切换感。如果哪位朋友也在做类似的方案欢迎一起交流参数整定和调试方法这些东西一个人踩坑确实效率太低。
返回列表