ARTICLE DETAIL

资讯详情

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

永磁电机多目标优化实战:Maxwell+Optislang+Matlab联动全流程

永磁电机多目标优化实战:Maxwell+Optislang+Matlab联动全流程 做永磁电机设计的同行都知道真正让人头疼的不是电磁场公式而是“改了A就崩了B、调了C又丢了D”的参数拉扯。我前段时间接了个8极48槽永磁同步电机的项目客户要求把转矩脉动做低平均转矩不能掉磁钢用量还希望尽量省。这三个目标天生打架纯凭经验手调一版一版算下来几个月都不一定找得到像样的平衡点。后来我把Matlab、Maxwell和Optislang串成一条自动化优化链路Maxwell负责高精度电磁场仿真Optislang负责设计空间管理、样本采样和代理模型搭建Matlab承担数据处理与多目标优化算法。这篇内容就是这次永磁电机多目标优化之旅的完整复盘包括工具怎么联动、代理模型怎么建才可靠、Pareto前沿怎么读以及过程中踩过的几个坑。适合正在做电机正向设计、想让优化流程自动化、或者准备引入Optislang做优化平台的朋友参考。1. 项目起点这台电机原本卡在哪儿1.1 初始设计与性能瓶颈这台电机的基本参数先交代一下8极48槽额定转速3000rpm额定转矩大约12 Nm磁钢用的N35UH钕铁硼。初始设计是个比较保守的方案极弧系数0.72磁钢厚度3.2mm气隙0.5mm槽口宽度1.8mm内置式V型磁路。有限元仿真跑下来性能给到手里其实不太好看平均转矩只有12.3 Nm转矩脉动8.7%齿槽转矩峰峰值0.46 Nm。客户给的目标是转矩脉动尽量低于5%平均转矩至少保住12 Nm在这个基础上再谈省磁钢。一开始我确实是想靠手动试算。毕竟这种8极48槽的拓扑不算太新直觉上觉得把极弧系数拉到0.78、磁钢加厚0.3mm脉动应该能压下来。结果真跑完一版平均转矩确实上去了但齿槽转矩和转矩脉动反而变差了。原因也不难理解极弧系数变化会同时改变气隙磁场的谐波成分齿槽转矩是定子齿和磁极之间切向力的体现谐波一变脉动走势根本不是线性的。手工调参本质上是靠经验和碰运气在这个强耦合问题面前效率很低。1.2 为什么单目标优化解决不了这类问题有些项目可以把问题简化成单目标——比如只追求效率最高其他性能当作硬约束卡一下就行。但这次不行三个目标之间是此消彼长的关系。磁钢多放一点气隙磁密提升平均转矩确实涨了但漏磁和齿槽转矩也会跟着变转矩脉动并不会同步变好磁钢省到极限平均转矩就可能掉到客户底线以下。这种情况用加权法把三个目标揉成一个数字也有问题权重的选择本身就是个玄学不同权重组合跑出来的结果可能千差万别而且你很难向客户解释为什么权重要取0.4和0.3。多目标优化的思路则是直接让算法搜索出一整组互不支配的解也就是Pareto前沿。什么是互不支配简单说就是方案A在脉动上比方案B好但在磁钢用量上比方案B差A和B谁都不能说全面压制对方它们都在前沿上。最后工程决策交给设计师来拍板客户要省磁钢就取偏向磁钢体积小的那个点客户要低脉动就取脉动最小的那个点灵活得多。2. 三件工具的分工与耦合链路2.1 Maxwell的角色高精度场计算与参数化数据源头Ansys Maxwell在整个链条里是数据源头。它干的事情不是“优化”而是把给定的结构参数老老实实算成电磁性能。永磁电机的转矩脉动、齿槽转矩、反电动势谐波、损耗这些量必须靠有限元仿真才能拿得到比较准的数值解析公式在这个阶段只能作为参考。Maxwell参与优化的前提是模型必须参数化。你需要在几何建模阶段就把磁钢厚度、极弧系数、气隙、槽口宽度这些关键尺寸定义成变量而不是画死尺寸。这一步决定了后续能达到的上限。如果模型里有一个尺寸是写死的后面Optislang和Matlab想改也没法改整个优化就断了。我一般会在Maxwell的Design Properties里把变量统一建好然后再让几何尺寸引用这些变量。参数命名我用英文加下划线比如mag_thickness、pole_arc、airgap、slot_open方便脚本和优化平台识别不要用中文后续做批处理时字符编码问题会很烦。Maxwell在流程里的另外一个要求是计算速度。单次仿真大概三到五分钟听起来不算慢但优化采样往往要跑上百个样本串行跑就是好几个小时。所以我在Maxwell里把网格剖分设置成中等偏细加了一个收敛条件转矩波动小于0.5%就停止迭代。太粗的网格虽然快但转矩脉动这种对谐波敏感的量根本算不准优化结果拿去复核的时候偏差会很大。2.2 Optislang的核心价值设计空间管理、代理模型与流程调度Optislang在这条链路里像是整个项目的工作台。它能做的事情很多但真正让我觉得不可替代的是三件第一设计空间采样第二代理模型搭建第三仿真流程的自动调度。如果你直接用优化算法去调用Maxwell每评估一个候选方案就要跑一次有限元仿真一次3分钟优化算法动辄迭代几千次总时长跑到天荒地老。Optislang的做法是在设计空间里用DOE方法比如拉丁超立方采样LHS先布置一批样本点把每个样本点都丢给Maxwell算出响应值然后用这些输入输出数据训练一个代理模型。代理模型本质是输入到输出的数学映射评估一次只需要毫秒级优化算法可以在代理模型上快速迭代先筛出一批不错的候选解再回到有限元做精确验证。这就是整个流程效率层面的关键设计。Optislang和Maxwell的集成方式我用的比较顺的是通过AEDT Integration组件直接把Optislang的参数映射到Maxwell的项目变量再把Maxwell的结果变量映射回Optislang。为了让它跑得更稳我在Maxwell里保存了一个独立的仿真脚本Optislang每次调用时通过批处理方式启动Maxwell计算完自动导出一个结果文件Optislang再从文件里解析数据。这样做的好处是一旦某个样本网格剖分失败整个流程不会崩掉Optislang会把该样本标记为无效跳过继续跑下一个。2.3 Matlab在流程中的位置占据的是“算法端”Matlab在前期很多工程师会用它做电机设计计算比如磁路法初步估算、反电动势波形合成、谐波分析这些当然没问题。但在和Optislang协同的流程里Matlab扮演的角色更偏向优化算法和数据处理。具体分工是这样的Optislang完成DOE采样、调用Maxwell获取响应、训练代理模型并输出一个精度达标的代理模型文件或者函数式Matlab读入这个代理模型接着用多目标优化算法在整个设计空间里寻优。我习惯用Matlab自带的gamultiobj它实现的是NSGA-II算法用起来方便Pareto前沿的输出结果也直观。在Matlab侧每个个体就是一组设计参数目标函数就是从代理模型得到的转矩脉动、平均转矩和磁钢体积。由于代理模型算得快全跑一遍几乎不耗时我通常会做几次重复优化、每次加大种群规模和代数确保收敛稳定。三条工具串起来就是一条完整的“仿真-建模-优化”链路。你可能会问Optislang自己也带优化算法为什么还要Matlab再插一脚我个人的考虑是Matlab在算法定制上更自由客户后续如果要加一些比较特殊的约束、或者想对比不同优化算法的效果在Matlab里写个约束条件、写段测试脚本都非常方便不用重新搭流程。如果项目不要求算法定制直接用Optislang自带的多目标算法也能出结果两种路线都可以。3. 参数化建模与样本采样把设计空间铺好3.1 哪些参数值得进入优化列表永磁电机可调的参数不少但并不是所有参数都值得放进优化变量。我把候选参数按“影响程度”和“几何可实现性”两个维度筛了一遍。影响程度指的是对转矩、脉动、齿槽转矩、损耗这些目标有没有明显作用几何可实现性指的是尺寸变化会不会导致模型拓扑出错比如定子齿宽太薄可能导致几何重叠磁桥宽度太小可能导致机械强度不够。最终进入优化列表的是五个变量磁钢厚度、极弧系数、气隙、槽口宽度、磁桥宽度。定子齿宽和槽口宽度有关联但齿宽对转矩的影响不如槽口对齿槽转矩的影响显著为了控制变量数量我这一轮先没让它进列表。变量太多会让采样点的数量爆炸性增长样本少了对代理模型的精度影响比较大工程上要懂得取舍。参数物理含义对目标的典型影响磁钢厚度V型磁路中磁钢径向厚度磁钢用量、气隙磁密、转矩能力极弧系数磁极弧长与极距之比气隙磁场波形、齿槽转矩、转矩脉动气隙定子与转子之间的间隙磁路磁阻、电感参数、装配难度槽口宽度定子槽开口尺寸齿槽转矩、气隙磁导谐波磁桥宽度转子隔磁桥尺寸漏磁、机械强度、高速离心安全这五个变量对性能目标的影响路径并不相同后面做敏感性分析时会看得非常清楚。第一次做这类项目的人容易一股脑把十几个变量全塞进去这种做法最大的问题不是算不了而是采样空间太大会让代理模型的精度很难保障。五个变量我用拉丁超立方取了120个样本点基本够用。3.2 参数上下限怎么定既要有寻优空间又要防止不切实际参数上下限绝对不能拍脑袋。我见过有人把磁钢厚度下限设到0.5mm理由是“想看极限范围内有什么结果”。这个下限从加工角度根本不成立0.5mm厚的钕铁硼磁钢在冲压和装配环节非常容易碎裂而且这么薄的磁钢局部退磁风险极大。这种不合理的上下限会把代理模型的训练样本引到设计空间的荒芜区域纯属浪费样本量。我给每个参数定上下限都先问工程约束。磁钢厚度下限取2.0mm考虑的是加工强度和退磁上限取4.5mm考虑的是转子槽形空间和漏磁控制。极弧系数的物理范围是0到1但工程上0.6到0.9更合理太小磁密波形太尖、谐波大太大会导致磁极间干涉。气隙本来就是个敏感参数下限0.4mm受装配公差控制再小就会出现扫膛风险上限取0.7mm再大电磁性能损失太多。槽口宽度下限1.2mm受绕线工艺限制上限2.4mm受齿部磁密饱和限制。磁桥宽度这个参数比较特殊它直接影响漏磁越窄漏磁越小但机械强度越差还要看转子线速度我按经验取0.8mm到1.6mm。所有上下限确定后我在项目文档里做了一张参数表标注了定值和约束依据。这个步骤虽然耗时但对后续流程的价值非常大能避免优化算法跑到产品根本无法生产的区域。3.3 DOE采样与网格一致性第一批样本就踩了坑DOE采样我用的是Optislang里的拉丁超立方采样LHS。相比随机采样LHS的均匀性更好120个点分布在整个五维空间里每个参数的取值范围都被比较充分地覆盖。之所以强调均匀覆盖是因为代理模型的精度和训练样本在空间中的分布质量直接相关。如果样本扎堆在一个角落代理模型在未被覆盖的区域基本都是瞎猜。第一批样本跑完我发现有7个样本因为网格剖分失败被标记为无效。后来查了一下主要问题出在参数组合比较极端的情况下。比如极弧系数取0.9、同时磁桥宽度取1.6mm时转子磁极之间的几何形状接近一个很窄的桥Maxwell剖分时生成了畸形网格求解器不收敛。这个问题的根源是Maxwell的参数化模型在几何变化剧烈的地方网格自适应算法会产生很差的单元质量。处理方式有两条一是在Optislang工作流里加一个失败重试机制把失效样本重新提交一次有时候第二次剖分会正常二是直接剔除坏点并补采。我最后选择在采样池里额外加了8个备选点补掉失效样本的位置。我还特意检查了网格一致性。前面提到我习惯用中等偏细的网格加转矩收敛条件但实际上Maxwell的网格剖分在不同参数组合下生成的单元数量会有差异。这个问题容易被人忽略因为常规看一个方案的仿真结果时你并不关心网格数量波动。但在优化流程里如果有的样本网格剖分特别细、有的特别粗转矩脉动这种对数值波动敏感的量就会混入网格差异造成的误差代理模型拟合出来的规律可能不是真实的物理规律。我的建议是给Maxwell设置一个目标网格单元数量范围比如8000到10000个单元剖分后检查一下数量偏差太大的样本单独标记确认是否需要重新剖分。4. 敏感性分析与代理模型先看清哪些参数在“捣乱”4.1 敏感性分析结果怎么读别被“相关”骗了120个样本点跑完Optislang会给出每个参数对每个目标的敏感性指标。我拿到结果先看的是ANOVA方差分析、皮尔逊相关系数和Sobol指数。这三个指标侧重点不同但结合起来能看到变量的主效应和交互效应。我的结果大致是这样的极弧系数是齿槽转矩和转矩脉动的头号影响参数贡献率接近一半磁钢厚度对平均转矩的影响最大磁桥宽度对磁钢体积的影响可以忽略但对漏磁和转矩的间接影响不能忽视气隙对平均转矩有影响但对脉动的影响相对较弱。这个结果和电磁直觉基本一致说明样本质量和仿真数据是可信的。要注意的是敏感性分析里的相关性并不等于因果性。比如磁桥宽度和转矩脉动可能显示出较高的相关系数但实际上磁桥宽度影响的是漏磁系数漏磁变了导致等效气隙磁密变化进而影响脉动中间隔了好几层物理过程。读懂这种间接影响路径对于后续修改模型非常有帮助如果只知道“有相关”不知道为什么遇到问题就很难定位。4.2 代理模型选型Kriging是这类问题的优选Optislang里提供了多种代理模型从简单的一阶多项式到神经网络都有。我一开始图省事直接用了二阶多项式响应面训练完发现平均转矩的拟合还不错R²能到0.98但转矩脉动的拟合效果很差R²只有0.7左右。原因不难理解转矩脉动对设计参数的变化非常敏感而且响应曲线存在明显的非线性特征多项式这种全局光滑的模型难以捕捉局部剧烈变化。后来换成Kriging模型转矩脉动代理模型的表现明显改善。Kriging本质上是一种基于插值的代理模型它既能给出预测值还能给出预测的不确定性估计。这个不确定性信息很有价值后面在做优化时可以向不确定性大的区域补充采样提高模型一步步逼近真实响应的能力。如果你用的不是OptislangMatlab里也有fitrgp可以做高斯过程回归效果类似。4.3 代理模型精度验证的三个硬指标代理模型训练完不能直接用必须做验证。我的习惯是从120个样本里随机抽20个作为验证集不参与训练单独对比模型预测值和Maxwell真实仿真值。第一个指标是R²也就是模型的解释能力0.95以上才算合格。第二个指标是均方根误差RMSE这个要和目标量级一起看如果转矩脉动的平均值是6%RMSE在0.3%以内就算不错超过0.5%就要小心了。第三个指标是最大绝对偏差用于找出模型可能局部失准的位置。在验证时我遇到过这样一个案例代理模型整体R²是0.96看着挺好但在极弧系数接近0.9的角落区域最大偏差达到1.2%的转矩脉动这个区域恰好是Pareto前沿可能出现的区域。这时候就不能只看整体R²要针对相关区域补充样本点重新训练。补充说明一点很多文章会说“代理模型精度越高越好”这个说法的正确性取决于代价。精度每提高一个档次你要做的有效仿真就越多而每个电磁仿真都是有时间成本的。工程上R²在0.95以上、最大偏差在可接受范围内就该进入优化阶段而不是无止境地加样本。5. 多目标寻优从Pareto前沿中挑出能落地的方案5.1 优化目标和约束的数学化表达进入优化阶段前先把目标函数用数学语言写清楚。我这个项目定义的目标有三个目标1最小化转矩脉动TR目标2最大化平均转矩Tavg写成最小化负平均转矩目标3最小化磁钢体积Vmag约束条件有效率不低于96%、反电动势波形畸变率不超过5%、磁钢最大退磁率不超过10%。这些约束如果不加优化算法可能找到转矩脉动极低但效率掉到90%以下的方案这种方案在工程里没有任何意义而且浪费算力去探索没有价值的设计区域。用Matlab的gamultiobj实现时我把约束条件写成一个不等式函数。写约束时有个小技巧约束不要太紧也不要太松。太紧会把大部分设计空间直接砍掉导致可行解太少太松则形同虚设优化结果不可用。比如效率要求96%是我根据客户要求定的但实际样本里效率分布范围其实很窄从95.8%到96.8%这个约束对解的筛选起的是“剔除异常”的作用不是为了压缩空间。5.2 为什么用NSGA-II而不是加权单目标加权的思路是把三个目标乘以权重加成一个总目标然后做单目标优化。优点是简单任何单目标优化算法都能用缺点也很明显只得到一个解而且这个解严重依赖权重设置。更麻烦的是如果你对三个目标的相对重要程度只有模糊感知没有精确的量化权重加权出来的那个解往往不是你真正想要的。NSGA-II的思路完全不同。它通过非支配排序保持解的多样性把种群分成不同等级的Pareto前沿通过拥挤度距离让解在目标空间均匀分布。运行一次就能得到一整条Pareto前沿相当于把所有可能的权衡都摆在桌面上。Matlab自带的gamultiobj在设置上很方便只需要指定变量数目、目标函数、上下界和约束再设置种群规模和迭代代数。我个人习惯把种群设置成120代数设200跑下来稳定性不错。种群太小容易陷入局部Pareto前沿种群太大的话每次迭代时间变长但代理模型评估速度很快整体代价可接受。5.3 Pareto前沿怎么读角点解和中段解的选择优化完成后Matlab输出的是一个目标值矩阵每一行是一个非支配解。直接把三个目标画成三维散点图颜色表示转矩脉动趋势最能直观感受前沿的形态。我观察到的典型前沿形态平均转矩和磁钢体积大体呈正相关想磁钢用得少就注定拿不到最高的转矩转矩脉动和极弧系数有强相关脉动最低的那些方案集中在极弧系数0.78到0.82附近。Pareto前沿的三个角点各有各的问题磁钢体积最小的角点方案平均转矩只有11.5 Nm低于客户要求直接排除转矩脉动最低的角点方案脉动确实只有3.8%但通过参数组合看磁桥宽度接近下限机械强度风险偏高也需要再评估平均转矩最高的角点方案磁钢用量超标不符合省磁钢的大方向。最终我选了个中段解磁钢厚度3.5mm极弧系数0.80气隙0.5mm槽口宽度1.6mm磁桥宽度1.1mm。这个方案预测平均转矩12.6 Nm转矩脉动4.6%磁钢体积比初始设计少了约6%整体比较均衡。选型的逻辑就是避开角点选择各项指标都不差、余量适中的解。这种方案在实际工程中的稳健性最好即使制造公差导致参数偏移性能也不会急剧恶化。6. 最优解的有限元复核与迭代调整6.1 复核流程代理模型永远替代不了有限元代理模型训练得再好也只是对真实有限元响应的近似最终落地前必须回到Maxwell里做精确复核。我从Pareto前沿上选了5个候选点放在Maxwell里重新做完整仿真网格剖分比样本阶段更细一些确保结果可信。复核结果让我对代理模型的可靠性有了更具体的感觉平均转矩的预测偏差在1%以内相当准磁钢体积因为是直接计算出来的偏差可以忽略转矩脉动的预测偏差在5%到10%之间个别点接近15%。转矩脉动这个目标确实难拟合Kriging模型已经尽力但谐波和齿槽效应的非线性太强插值误差无法完全消除。这个误差水平在接受范围内因为它只影响候选解的排序细节不会影响整体局势的判断。如果你复核后发现某个候选点和代理模型预测偏差特别大不要急着怪模型。先看一下这个点在设计空间的位置是不是处在采样点稀疏区域。如果是优先在这个区域补充采样点重新训练代理模型再跑一轮优化——这叫自适应采样是优化流程里非常实用的一招。6.2 边界方案为什么风险高代理模型的盲区就在边缘我在复核时特别留意设计空间边界的方案。边界附近有一个通病代理模型的插值误差在边界处最大因为训练样本在边界区域的密度通常低于中心区域。LHS虽然强调均匀覆盖但高维空间的中心区域天然会比边界多些数据点边界外的外推行为更是完全不可控。更麻烦的是工程风险往往也集中在边界附近。磁桥宽度取最小值时转子的机械强度裕度不足高速旋转下容易出问题。气隙取最小值时虽然电磁性能可能不错但装配公差稍微波动一点就可能扫膛。这些风险代理模型完全感知不到因为响应面里没有机械应力项也没有装配公差项。所以凡是边界候补方案我都会额外加一遍机械强度校核和公差敏感性分析。这轮项目最终选的方案就没有贴着边界这是个有意的选择。6.3 验证后的设计迭代和延伸方向最终方案在Maxwell里复核通过后我又做了一轮转矩、效率、弱磁性能的完整校核。相比初始设计转矩脉动从8.7%降到4.3%平均转矩从12.3 Nm提到12.6 Nm磁钢体积减少约6%效率基本维持在96.3%各项指标都落在客户要求范围内。这次项目的流程走通后后续可以做的延伸其实很多。可以加入多转速点的工况优化不只是额定点一个工况算最优可以把温度场耦合进来因为磁钢在高温下的退磁性能会变化不同温度点下最优参数很可能不同还可以做大范围的公差灵敏度分析让优化结果不仅性能好而且在批量制造时性能一致性高。工具链本身是灵活的换一个电机拓扑、换一批目标函数都能复用。这次做完最大的一个体会是多目标优化的价值不是替工程师做决定而是把“决定”变成“选择”。你不需要再靠猜参数一个个试而是把一个合理的设计空间和一组清晰的目标交给算法让它把可能性铺开成一条Pareto前沿。真正拍板的人还是工程师但手里掌握的信息量和底气完全不同。最后说一个小经验第一次跑这种三工具联动流程不要贪多求全先把五个变量、三个目标这套小规模流程完整走通一遍确认数据链路、代理模型精度、复核流程都没问题再逐步扩大设计空间。流程本身跑通比参数多少重要得多因为它一旦通了后面换模型换目标都只是改配置的事情。
返回列表