首页 / 资讯中心 / 文章详情

三相电机无感控制滑模观测器设计与Simulink仿真全解析

三相电机无感控制滑模观测器设计与Simulink仿真全解析 ★ FEATURED ARTICLE
做电机控制的同行应该都有过这种经历项目做到一半甲方一句话编码器成本压不下来能不能去掉传感器你就得把整个控制架构重新捋一遍。三相电机的无感观测器就是在这种既要省传感器、又要稳住性能的夹缝里被反复拿出来讨论的方案。我最近把一个基于滑模观测器的无感控制模型从零搭完从电机本体建模到闭环仿真跑通前前后后踩了不少坑。这篇文章就把整套设计和仿真过程拆开讲包括数学推导、Simulink模块搭建、参数整定和实机化之前必须补的功课给正在做无感控制的工程师们一个可以直接参考的路线。1. 拆掉位置传感器之后系统到底缺了什么1.1 位置传感器在传统矢量控制里扮演的角色在聊无感观测器之前得先理清楚被拆掉的那个传感器原本在系统里干什么活。转速环、电流环大家都熟转子磁场定向才是关键——FOC磁场定向控制的本质是把三相交流电流分解成励磁分量和转矩分量而这个分解的前提是精确知道转子磁链的实时位置。编码器或旋变提供的就是这个转子电角度θe。没有这个角度Park变换和逆Park变换的矩阵连算都没法算转矩控制更是无从谈起。所以无感控制的第一性原理就一句话用可测的电压电流通过电机数学模型把转子角度和转速实时地算出来替代物理传感器的测量功能。这里的难点不在算法本身而在算得准和跟得上。1.2 无感控制的核心命题用模型换传感器无感观测器本质上是一个开环的模型估计器外加闭环的误差修正器。它的逻辑是先根据电压方程估算出定子电流再用实际电流和估算电流的误差去修正对反电动势、磁链乃至转子位置的估算。只要模型足够准、修正足够快估算角度就能收敛到真实角度附近。这和直接测反电动势然后算角度的做法有本质区别。后者听起来更简单直接把αβ轴的电压方程改写成反电动势的形式测出电压电流一减就算出来。但实际工程里微分项对噪声极其敏感而且真实反电动势里叠加了大量逆变器开关谐波直接算出来的角度根本没法用。观测器里的滑模项、滤波器和锁相环本质上都在做同一件事——在噪声和模型误差的干扰下把角度估计问题变成一个鲁棒跟踪问题。做仿真的时候很多人喜欢直接把几个公式拖进Simulink就开跑结果要么角度发散发毛要么低速直接崩掉。我建议第一步不是建模而是先把观测器各个环节的数学关系和物理含义理清楚这样后面调参才有的放矢。2. 滑模观测器的数学起点从αβ轴电压方程到反电动势提取2.1 电机模型里藏着转子位置的踪迹先写下表贴式三相永磁同步电机SPMSM在αβ静止坐标系下的电压方程uα Rs·iα Ls·(diα/dt) eαuβ Rs·iβ Ls·(diβ/dt) eβ这里的eα、eβ是反电动势分量它们和转子位置的关系是eα -ψf·ωe·sinθeeβ ψf·ωe·cosθe注意看转子电角度θe的信息就藏在反电动势的相位里。只要能准确知道eα和eβ转子角度和转速都能解出来。所以无感观测器设计的第一步变成了如何从电压电流里准确提取反电动势。2.2 为什么选滑模而不是直接算反电动势有人会问电压电流都能测Rs和Ls也是已知的直接把方程改写成eα uα - Rs·iα - Ls·(diα/dt)不就行了吗理论上可以实际上不行。Ls·(diα/dt)这一项需要电流微分而实际采样电流里全是噪声和谐波微分运算会把噪声放大几个数量级。反电动势本身幅值又不大——转速越低越小低速时甚至被噪声淹没。直接开环计算的方案信噪比差得没法用。滑模观测器的思路是换个角度我不直接求反电动势而是构造一个电流估算器让估算电流去跟踪实测电流。当估算电流和实测电流之间存在误差时用一个符号函数sign施加强增益把误差压到滑模面上。在滑模面上等效控制量正好等于反电动势。这个做法的高明之处在于电压电流的噪声被符号函数的开关特性平均掉了等效控制提取出的反电动势信号比直接计算干净得多。2.3 滑模面收敛后等效控制等于什么滑模观测器的核心方程长这样d(îα)/dt (-Rs/Ls)·îα (1/Ls)·uα - (k/Ls)·sign(îα - iα)d(îβ)/dt (-Rs/Ls)·îβ (1/Ls)·uβ - (k/Ls)·sign(îβ - iβ)当估算电流收敛到实际电流即 îα iα、îβ iβ 时滑模运动发生。此时符号函数里的等效控制分量在低频意义上就逼近反电动势[eα] ≈ k·sign(îα - iα) 的等效值[eβ] ≈ k·sign(îβ - iβ) 的等效值这里有个容易忽略的点滑模增益k必须足够大大于反电动势幅值加上模型扰动项才能保证系统到达滑模面。但k也不能无限大k太大会导致严重的抖振把高频分量引入到等效控制信号里。我实测下来k一般取反电动势幅值的1.5到3倍具体边界在调试环节再细说。3. 从抖振信号到转子角度一阶低通与锁相环的配合逻辑3.1 sign函数带来的高次谐波怎么洗干净符号函数的开关特性带来了一个直接后果——等效控制信号里混着大量高频分量直接拿去算角度肯定不行。标准做法是在符号函数输出后面串一个一阶低通滤波器把高频抖振滤掉剩下平滑的等效反电动势。滤波器的传递函数是H(s) ωc / (s ωc)ωc是截止角频率。这个参数的选择是个典型的折中截止频率设高了滤波效果差反电动势信号里还带着开关噪声设低了有效信号本身的幅值和相位也被衰减角度估算误差增大。我一般把ωc取在控制频率的1/10到1/20附近比如10kHz的控制频率滤波器截止频率落在500Hz到1kHz。但这只是初始值具体还要结合转速范围和负载工况调整。3.2 低通滤波器的相位滞后补偿怎么算一阶低通滤波器最大的副作用是相位滞后。滞后角度和信号频率以及滤波器截止频率直接相关Δθ arctan(ωe / ωc)ωe是电角速度。转速越高滞后越明显。如果不做补偿估算角度会落后真实角度导致电流解耦不彻底d轴电流波动、母线电压利用率下降严重时直接失步。补偿方法很简单在锁相环输出的θe基础上加上一个和估算转速相关的补偿角。实际操作中这个补偿角的精度不需要太高因为锁相环本身还有一定的自适应能力但必须加否则高速段必然出问题。3.3 用锁相环代替atan2的工程理由反电动势eα、eβ已经到手理论上用atan2就能直接求θe。但直接atan2在工程上有两个毛病一是eα、eβ过零附近有噪声时角度输出会剧烈跳变二是转速信息还得单独对角度微分微分噪声又来了。锁相环的好处在于它把角度和转速的估计统一成了一个跟踪问题用PI调节器去锁定反电动势的相位同时输出平滑的转速估计。典型的反电动势锁相环结构是误差e eα·cosθ_hat eβ·sinθ_hatθ_hat是估算角度经过PI调节器后积分得到角度PI输出同时作为角速度估计。这个结构天然带滤波特性对反电动势噪声不敏感而且角度和速度同时输出省掉了一个微分环节。我自己的模型里锁相环带宽设在200Hz到500Hz之间配合低通滤波器使用动态和稳态都能兼顾。4. Simulink仿真模型的搭建路线与参数设定4.1 电机本体与逆变器的建模选择仿真模型的第一部分是电机本体。Simulink里有现成的PMSM模块参数设置方便但我不建议直接用它做无感观测器验证——内置模块的电机模型是理想的观测器似乎能轻松收敛掩盖很多实际问题容易给人一种算法稳定的错觉。我动手搭了一个基于电压方程的电机子模块输入是三相电压输出是三相电流和电磁转矩机械部分用简单的运动方程耦合。这样做虽然繁琐但后续加参数误差、参数摄动就方便多了。逆变器部分我直接用三相两电平桥臂加PWM发生器母线电压设成310V左右模拟三相220V整流后的直流母线。功率管的导通压降和死区时间我在第一批仿真里先设成理想值0等基础跑通了再把它打开专门看它对观测器的影响。4.2 SMO核心模块的搭建细节滑模观测器模块在仿真里的搭法如下输入电流环输出的αβ轴参考电压uα_ref、uβ_ref以及采样得到的αβ轴实际电流iα、iβ内部流程先按电压方程算电流估算值的微分再积分得估算电流估算电流和实际电流误差过符号函数乘增益k符号函数输出经过一阶低通滤波得到等效反电动势eα、eβ这里有个细节容易踩坑符号函数直接用Sign模块会带来严重的数值振荡尤其是变步长仿真时。我的做法是用饱和模块代替符号函数饱和限幅值设成1这样等效于一个归一化的滞环切换数值上稳得多。实际仿真里这个替换对结果影响不大但能明显改善仿真速度。另一个容易忽略的细节是滤波器的离散化实现。Simulink里如果用连续一阶低通传递函数变步长仿真时没有问题但后面要往实机移植最好从一开始就用离散传递函数F(z)把仿真步长固定下来模拟真实的离散控制周期。4.3 角度反馈闭环无感控制系统中的坐标变换怎么连观测器估算出的θ_hat反馈到电流环的Park变换和电压重构的逆Park变换替换掉原来编码器提供的θe。这个替换就完成了闭环电流环用估算角度进行坐标变换电流控制器输出参考电压参考电压经过逆Park变换得到αβ轴电压送给SVPWM调制。SVPWM输出的三相电压驱动电机本体采样电流再回到观测器形成完整的无感FOC闭环。需要提一句的是电流环的参考坐标系完全依赖θ_hat。如果θ_hat存在一个固定偏差d轴电流和q轴电流之间会出现耦合表现在仿真里就是转速波动或者弱磁区的电流异常。做闭环仿真时我习惯先给一个固定角度偏移量去测试系统的容错能力看看电流环在多大角度误差下还能稳定这比单纯看稳态误差更有工程参考价值。4.4 启动阶段的处理零低速预定位与I-F切换这是仿真里最容易翻车的地方——观测器在零速和极低速时基本失效因为反电动势幅值和转速成正比零速时反电动势为零观测器没有任何有效输入。仿真里如果一上来就给个目标转速然后直接发动SMO电流会乱冲角度会任意漂移最终发散。我采用的启动策略是I-F电流-频率开环启动先把转子预定位到某个固定位置然后用一个缓慢增加的电流矢量以固定电角速度拖着转子转起来。当转速上升到反电动势足够大、观测器收敛稳定之后再从I-F切换回闭环FOC。切换逻辑可以用转速阈值触发也可以用观测器误差大小触发。阈值设多少合适呢我的经验是额定转速的5%到10%。比如额定转速3000rpm切换点设在150到300rpm之间太小了观测器还没有完全收敛切过去容易冲击太大了又失去了无感低速扩展的意义。仿真里这个切换点可以通过反复试跑来找实机上还得叠加角度误差判断。5. 仿真调试中的真实踩坑记录发散、振荡、过补偿5.1 滑模增益k选多大才算够用滑模增益k是观测器里最敏感的参数。我在第一版模型里按理论值把k设成反电动势幅值的两倍——额定转速下反电动势幅值大约是这样算的Emax ψf·ωe_max以某款额定3000rpm的电机为例磁链ψf取0.1Wb最高电角速度大约是314rad/s反电动势幅值大约31V。k取两倍就是62V。跑出来的结果是中高速段角度估算平稳但低速段一启动就振荡电流噪声也大。原因在于低速段反电动势幅值远小于额定值两倍裕量在那个工况下显得不够滑模面难以维持。后来我改成了分档增益低速段用大增益保证滑模面能建立高速段用小增益降低抖振。具体数值靠仿真试凑但初始范围可以参考反电动势幅值的1.5到3倍然后在仿真里把转速从低到高扫一遍看哪个区间开始振荡就上调哪个区间噪声明显就下调。滑模增益不是越大约好够用就行这是我在调试里最大的体会。5.2 滤波器截止频率与带宽的匹配误区滤波器截止频率选错是另一个最常见的问题。我一开始把低通滤波器截止频率设成2kHz想着开关频率是10kHz滤高频绰绰有余。结果角度估算在3000rpm附近出现明显滞后电流环解耦失败q轴电流出现震荡。算了一下3000rpm对应的电频率是150Hz2kHz的截止频率带来的相位滞后大约4.3度看似不大但在高速轻载工况下这点误差足以让系统动态性能显著恶化。后来把截止频率降到800Hz角度滞后补偿量也同步调了情况好了不少。这里要给一个具体的匹配原则截止频率至少要高于最高电频率的5倍以上保证有效信号不被过度衰减同时又要低于开关频率的1/5保证滤波效果。800Hz到1.5kHz这个范围对10kHz开关频率来说是合理的初始区间取哪个值取决于你对相位滞后补偿的把握程度。5.3 仿真步长太大也会让SMO崩盘这个坑和算法本身无关但能把人折磨到怀疑人生。我用变步长仿真时最大步长设成1e-4秒结果观测器在高速段频繁失步波形像发了癫痫一样。排查了半天发现符号函数环节在步长较大时会产生自激振荡等效控制量被反复翻转后续的低通滤波和锁相环全被带崩。把仿真改成定步长1e-5秒之后问题立刻消失。所以做电机无感仿真时我建议从一开始就坚定地用定步长离散仿真步长和实机控制周期保持一致比如控制频率10kHz就用1e-4秒步长控制频率20kHz就用5e-5秒。这样既不会有数值稳定性问题也方便直接往实机代码上迁移。5.4 角度补偿算错时系统会出现哪些典型症状角度补偿的量如果算错了症状很典型轻载时电流波形还算正常一加负载就会听见明显的嗡嗡声母线电流波动转速出现与负载同频率的脉动。这是因为补偿角度不准确坐标系和真实转子磁场之间存在残余角差导致励磁分量和转矩分量没有完全解耦。仿真里排查这个问题有个好办法把观测器估算角度和理想电机模型里的真实角度同时拉出来放到同一个scope里看。如果两条线之间存在一个固定角度差那就是补偿角没算对如果角度差随转速变化而变化那就是补偿公式里的系数给错了。我最后一次修正时把补偿角的计算从arctan(ωe/ωc)换成了近似线性化的形式在转速变化范围内重新拟合了系数误差控制在电角度2度以内系统就彻底安静了。6. 仿真跑通不算完实机移植前必须补齐的差距6.1 离散控制周期下的观测器精度仿真里跑通的算法离直接上机还有一段路。最大的区别是离散化仿真里即使定步长也可以在一个步长内做完整的代数运算实机上控制频率受限于CPU算力和电流环带宽通常10kHz或者20kHz观测器必须在这个周期内算完。离散化方法的选择直接关系到观测器的稳定性。我建议用双线性变换把连续域的滑模观测器和滤波器离散化而不是简单的欧拉前向后者在大步长下容易引入递减相位裕度。锁相环的PI参数在连续域调好的值离散化之后大概率需要重新调整。我的判断依据是把锁相环带宽保持在控制频率的1/10以内比如10kHz控制频率PLL带宽不超过500Hz这样离散化对它的影响相对可控。6.2 逆变器死区与电流采样噪声的影响仿真里如果一开始就把死区设为0实机上一定会措手不及。死区时间会引入一个和电流方向相关的电压误差相当于在αβ轴电压上叠加了方波扰动这个扰动将经过滑模观测器的强增益放大在估算反电动势上表现为明显的低次谐波。实机调试时最常见的现象是空载转速平稳带一点负载后角度估算开始波动。应对手段有两个一是做死区补偿在电压参考值上叠加一个和电流方向相关的补偿量这个在无感系统里尤其重要因为观测器本身对电压参考值非常敏感二是在电流采样上做中心对齐采样尽量避开功率管开关带来的尖峰噪声。仿真阶段至少应该把死区时间打开看看观测器在死区影响下还能不能保持角度估计精度提前发现问题。6.3 电机参数失配时观测器的表现与应对无感观测器对电机参数Rs和Ls的依赖是不对称的电阻误差在低速段影响明显因为压降占比大电感误差在高速段影响明显因为反电动势幅值变大。实机上电机温度变化会导致电阻变化磁路饱和会导致电感变化。我在仿真里做过一组参数失配实验把电阻在模型里故意设成实际值的1.5倍低速段电流误差明显增大把电感设成实际值的0.8倍高速段角度估算开始出现稳态偏差。应对措施是在观测器前端加参数辨识或者在启动时做一次离线参数自学习。工程上更常见的做法是鲁棒化设计在滑模增益里加入自适应项让观测器对参数失配不那么敏感。仿真阶段至少要做一遍参数摄动测试记录估算角度的极限误差范围看看系统的应用边界在哪里否则上机之后电机一热起来参数一变算法直接翻车。7. 最后分享几个我自己觉得好用的调试习惯调试无感观测器的时候有个习惯我保留至今每次只动一个参数改完跑完记录波形再改下一个。滑模增益、滤波器截止频率、锁相环带宽、角度补偿系数这四个参数互相耦合一起改出了问题根本定位不了是哪个环节引起的。仿真初始阶段先不要追求低转速直接给个额定转速跑起来把观测器在中高速段的性能调到稳定收敛再往下探低速边界一点点逼近极限。我见过太多人一上来就在150rpm练基本功调了三天还在振荡本质上是在和物理极限较劲完全没有必要。最后还有一个小技巧在Simulink里同时把真实角度和估算角度接到同一个示波器上观察Lissajous波形。如果两条曲线在相位上重合说明观测器完全收敛如果差一个固定相角但稳定说明补偿可能有偏差但系统能工作如果两者来回打转基本可以判定滑模面没建立——先回去调增益别动其他参数。这个办法我用了好几年比看一堆性能指标直观得多。
阅读完成 · 觉得有帮助?
咨询建站