
1. 为什么要用PSO去整定PMSM速度环参数做PMSM驱动控制这几年速度环PI参数整定一直是道绕不过去的坎。我最早接触PMSM速度环参数整定的时候用的还是最传统的工程试凑法先把Kp调到临界振荡再退回来然后慢慢加Ki消静态误差。一套参数调下来少说也得半天换一个负载工况、换一块驱动板之前的经验就基本作废了。后面接触到PSO参数整定才意识到这种靠手感、靠经验的活完全可以交给智能算法去干而且效果往往比我手动调出来的更稳、更均匀。先说清楚为什么传统的试凑法在PMSM速度环上这么痛苦。永磁同步电机的速度环不是简单的一阶或二阶对象它的内层还有电流环电流环本身又包含PI调节器、逆变器滞后、开关周期离散化误差这些环节。所以速度环实际面对的是一个带延迟的高阶被控对象。你调Kp的时候响应变快了但延迟环节会带来相位裕度下降很容易出现转速超调、甚至低频振荡你调Ki的时候抗扰能力上去了但Ki过大会让速度环和电流环产生耦合谐振严重的时候电机在启动阶段就会发出刺耳的“嗡嗡”声。这种多个参数互相牵连的调法最消耗调试者的耐心。PSO的思路很简单就是把你手动调参数时脑子里那套“试一下、看波形、再改一点”的逻辑变成一个自动寻优的数学模型。把Kp和Ki当作粒子的位置坐标让几十个粒子在二维参数空间里飞每飞到一个位置就做一次阶跃响应测试算出超调量、调节时间、ITAE这些性能指标然后把指标换算成一个适应度值。粒子之间共享最优位置信息逐步向最优参数组合靠拢。我在实际项目中用下来一套不太好调的PMSM速度环参数PSO一般跑20到40代就能搜出可用的结果比纯手工试凑快一个数量级。这篇文章主要想分享我在PMSM速度环参数整定上的完整实践包括速度环数学模型的简化方法、PSO算法的关键设计、仿真到实机的踩坑记录、最终的实验数据对比以及一些排查问题的经验。无论你是刚接触永磁同步电机控制的初学者还是正在为某个项目参数调不动而头疼的工程师这些内容应该都能给你提供一套可直接落地的参考方案。2. PMSM速度环数学模型与PSO算法关键设计2.1 速度环被控对象建模从电机方程到传递函数要整定PMSM速度环参数先得知道你在整定一个什么样的对象。这一步偷懒的话后面PSO搜出来的参数很可能在仿真里没问题一上实机就发散。我自己习惯从PMSM的dq轴数学模型开始推导。在转子磁场定向坐标系下PMSM的电压方程是ud Rs·id Ld·(did/dt) - ωe·Lq·iquq Rs·iq Lq·(diq/dt) ωe·(Ld·id ψf)电磁转矩方程是Te 1.5·p·(ψf·iq (Ld - Lq)·id·iq)机械运动方程是J·(dωm/dt) Te - TL - B·ωm对于表贴式PMSMLd和Lq近似相等转矩方程化简为 Te 1.5·p·ψf·iq Kt·iq。也就是说电磁转矩和iq电流呈线性关系此时的转矩系数Kt是一个常数。这是速度环被控对象中最关键的一个参数。速度环的外面还有电流环。工程上通常把电流环等效成一个一阶惯性环节时间常数大约是2倍的电流环采样周期。而电流环采样周期一般等于PMSM的开关周期。所以一套典型的控制结构是速度环采样频率1kHz电流环采样频率10kHz那么电流环等效时间常数Tc约等于100微秒逆变器死区时间大约2到3微秒。把这些串起来速度环被控对象的传递函数可以近似表达为Gv(s) Kt / (J·s B) × 1 / (2·Tc·s 1)这个模型虽然粗糙但对于PSO整定来说完全够用了。要注意的是它里面包含了延迟环节这正是PSO去搜索比手工试凑更有优势的地方。因为延迟项的存在会约束Kp的上限手工调的时候很难直观判断某个Kp值会不会引起振荡而PSO可以通过适应度函数自动把这些约束吃进去。2.2 PSO维度映射与适应度函数设计PSO要把速度环参数整定问题转换成寻优问题首先要定义粒子位置和速度的含义。我在项目中只整定Kp和Ki两个参数所以粒子就是二维的每个粒子的位置向量是 [Kp, Ki]粒子的速度向量是 [ΔKp, ΔKi]。这里有个设计细节Ki这个维度的搜索范围不能直接给任意值最好先用电机机电时间常数估算一个初始区域。电机机电时间常数可以用 J / B 来估算Ki的量纲是1/秒所以Ki的搜索上限大致取 Kp / 机电时间常数 的两倍左右这样能避免随机初始化的粒子大多落在不稳定区域。适应度函数的设计是整个PSO整定的灵魂。如果适应度函数选得不好算法即使收敛了得到的参数也可能不符合工程要求。我最常用的是带超调惩罚的ITAE指标J ∫₀ᵀ t·|e(t)| dt w₁·Mp w₂·t_settle其中e(t)是转速误差Mp是超调量t_settle是进入稳态区间的时间w₁和w₂是加权系数。为什么要加超调惩罚和调节时间惩罚因为纯ITAE指标倾向于优化整个误差曲线的积分它可能允许一个比较明显的超调来换取更快的上升时间。而在实际PMSM驱动中转速超调意味着母线电流冲击严重时会触发驱动板的过流保护甚至造成机械传动部分的冲击振动。我在项目中把超调量权重w₁设得比较大取0.3左右让搜索空间里超调较大的粒子适应度被明显拉低。还有一个容易被忽略的适应度细节稳态误差必须单独检查。有些粒子会让系统进入一个不太稳定的振荡状态但积分指标计算周期恰好覆盖了振荡区间导致误差积分反而不大被误判为优秀个体。解决办法是在适应度计算结束后增加一个判断如果最后0.2秒的转速误差超过额定转速的1%直接把适应度设置为一个大数。这个硬过滤条件在实机整定时尤为重要。2.3 PSO参数选取与迭代策略PSO算法自身的参数也会直接影响最终整定效果。粒子数、迭代次数、学习因子、惯性权重这四样东西需要根据实际计算预算来权衡。我的常用配置是粒子数N 30迭代次数T 60c1 1.5c2 1.5惯性权重w从0.9线性递减到0.4粒子速度上限vmax 0.2 × (参数上限 - 参数下限)惯性权重线性递减是最稳妥的策略。前期w较大粒子全局探索能力更强能够跳出局部最优后期w减小粒子在最优解附近精细搜索。c1和c2相等时粒子的个体经验和群体经验权重相当适合参数空间维度较低的情况。如果你的整定对象比较复杂比如同时整定Kp、Ki、Kff前馈系数三维搜索空间下我会把c1稍微调大到1.6提升粒子探索自身经验的权重降低早熟收敛的概率。迭代20代以后我一般会看一眼适应度收敛曲线。如果连续5代全局最优适应度都没有变化就要考虑是否发生了早熟收敛。我的处理方式是引入随机重启机制选择适应度最差的5个粒子把它们的当前位置重新随机初始化同时保留全局最优信息。这样能在不打断整体搜索进程的前提下增加种群多样性。3. 仿真到实机驱动板选型与开关频率的配合3.1 仿真平台搭建隐藏的坑在MATLAB/Simulink里搭建PMSM双闭环仿真模型时我建议不要用自带的PMSM模型直接整定。自带的理想模型忽略了逆变器死区、ADC量化误差、速度反馈滤波延迟PSO在这种干净模型里搜出的参数切换到实机后经常出现两个问题一是Kp偏大实机上一启动就振荡二是Ki偏大实机在负载突变时电流冲击明显。我的做法是在仿真模型里主动加入这些“不干净”的因素。电流环采样频率设置成和实机驱动板一样的10kHz逆变器模型加上死区时间3微秒电流反馈加上量化误差约为1%满量程的白噪声。速度环采样频率固定1kHz速度反馈通道加一阶低通滤波器截止频率通常取300到500Hz。这样仿真环境和实机驱动板的特性高度接近PSO搜索出来的参数区间有很高的参考价值。在仿真阶段PSO的适应度评估可以批量并行执行。每次阶跃测试耗时1秒30个粒子迭代60次理论上要1800次阶跃测试如果串行跑要半小时以上。我一般用MATLAB的parfor或者并行计算工具箱把粒子评估循环并行化20分钟内能把一轮整定跑完。如果不想折腾并行也可以用简化方式先把粒子数降到15、迭代次数降到30配合前文提到的稳定域约束足以圈出一个不错的参数区间。3.2 实机平台配置与PSO整定流程实机整定使用的驱动板是我基于STM32F405自己画的一块板子主控频率168MHz三相逆变器用的是IR2136驱动芯片加IRFP460 MOS管母线电压48V。PMSM开关频率设置成10kHz速度环执行周期1kHz电流环执行周期100微秒。编码器用1000线的增量式光电编码器四倍频后每圈4000个计数速度反馈通过M法测速得出分辨率在全速范围内约1rpm。实机整定和仿真整定有一个巨大的区别实机评估每个粒子的适应度是一次真实的电机阶跃运行时间成本和设备安全都要考虑。实机上30个粒子跑60次迭代每次阶跃测试2秒总耗时将近1小时这还没算参数下载时间和波形保存时间。所以我建议实机阶段采用“仿真粗搜实机精调”的两级策略仿真先把粒子收敛到参数空间的某个区域实机只用窄范围进行二次搜索粒子数10个、迭代次数15次总共150次阶跃测试20分钟左右就能跑完。实机搜索前还有几个安全方面的准备。第一电流环的d轴、q轴电流限幅必须设置好出厂的默认值一般是额定电流的1.5倍如果某个粒子的Kp过大导致电流暴涨限幅能保住MOS管。第二转速保护值要设置搜索过程中转速一旦超过额定转速的120%程序立即切断PWM输出。第三电机轴最好脱开负载只保留一个惯量较小的飞轮这样即使参数发散对机械部分的冲击也有限。第四把PSO每代的最优参数实时显示在上位机上一旦发现参数在向明显异常的方向演化可以手动停止。3.3 开关频率与无感场合的特殊考量PMSM开关频率的选择对速度环整定结果有直接影响。开关频率越高电流环的等效延迟越小允许的速度环带宽就越高整定出来的Kp可以更大。我自己对比过10kHz和20kHz两种开关频率对整定结果的影响在相同的电机和负载条件下20kHz开关频率下整定出的Kp大约比10kHz能高20%到30%速度环响应速度有可感知的提升。但代价是开关损耗变大驱动板温升明显逆变器的散热开销更高。对大多数项目来说10kHz是性价比最高的选择既能保证足够的速度环带宽又不至于让驱动板的温度处理成为瓶颈。如果你做的是pmsm无感控制整定时候还要多考虑一步速度反馈噪声。无感算法比如滑模观测器或磁链观测器估算出的转速里混有比较明显的基波和高频噪声直接送给速度环会导致Kp稍微调大就出现转速抖动。我的做法是先对估计转速做一阶低通滤波截止频率取500Hz左右滤完波再做速度环PI运算。但滤波器本身会引入相位延迟这个延迟又占掉了额外的相位裕度。所以无感场合整定出的速度环Kp通常要比带编码器的有感控制低20%到30%。这也是为什么同一个电机无感控制跑起来总觉得“肉”一些而带编码器时又能“燥”起来。4. 整定结果对比与实验数据分析4.1 阶跃响应PSO参数 vs 经验参数我在一套额定转速3000rpm、额定电流6A的PMSM测试平台上做了对比实验。电机用M法测速反馈负载是一个可调磁粉制动器分别用传统经验调参和PSO整定参数做了两组阶跃实验。先看空载启动阶跃目标转速1000rpm。经验参数是我手动调的整体思路是“先稳住、再调快”Kp取0.12Ki取18。PSO整定出来的参数是Kp 0.086Ki 12.4。从结果看经验参数的超调量约12%第一次超调后需要振荡两个周期才稳定下来调节时间约0.85秒PSO参数的超调量只有3%基本一次到位调节时间约0.36秒。这里有个有意思的细节PSO整定出的Kp反而比经验参数小但它用更合理的Ki配合让系统在保持临界阻尼的同时加快了响应。这说明“Kp越大越快”这个直觉在带延迟的系统中并不总是成立。再看突加负载实验。转速稳定在1200rpm后突加50%额定负载。经验参数下转速跌落约65rpm恢复到稳态需要1.2秒中间还伴随一次小幅振荡PSO参数下转速跌落38rpm恢复时间0.28秒几乎没有可见的二次振荡。这个结果特别能体现PSO参数的价值虽然Kp小了点但Ki的配置更贴合被控对象的机电时间常数抗扰能力明显更好。4.2 参数鲁棒性与工况适应性整定出的参数不是一次性的还需要验证在不同工况下的表现。我做了母线电压波动和惯量负载变化两组测试。母线电压从48V降到36V时经验参数的表现会略微变差转速阶跃的超调从12%升到15%振荡幅度也有增加。原因在于较低的母线电压限制了电流环的dq轴电压输出能力等效降低了电流环的响应速度速度环的相位裕度进一步下降。PSO整定参数在这个场景下表现稍好一些超调从3%升到6%调节时间从0.36秒升到0.42秒仍在可接受范围内。惯量变化方面我测试了电机轴上加装一个2倍转子惯量的飞轮。此时PSO参数的速度阶跃出现约8%的超调但很快能稳定下来经验参数则出现了持续三个周期的低频振荡需要把Kp调小30%才能稳定。结论是PSO参数对惯量变化的鲁棒性优于手动参数但一旦惯量变化超过设计值的2倍建议重新跑一轮整定。这一轮整定可以只做窄范围精调耗时不长没必要从全局重新搜索。4.3 PSO收敛过程记录我记录了一轮30粒子、60迭代的收敛过程。前5代粒子群在参数空间内分布很散适应度值从几千到几万都有全局最优适应度快速下降。第8代以后最优解基本锁定在Kp ≈ 0.08到0.1、Ki ≈ 10到14的区域内。第15代到第30代适应度曲线下降开始放缓粒子们主要在做局部精细搜索。到第40代以后适应度几乎没有变化表示搜索已经收敛。这个收敛过程告诉我一件事在实际项目中PSO迭代到30代左右就足够得到高质量结果了继续迭代的边际收益很小。如果你的时间预算紧张跑20代也好配合惯性权重线性递减策略最终参数的工程可用度已经不错。如果用的是随机重启策略偶尔会出现适应度先平稳、然后突然跳降的现象那一般是某个被重置的粒子发现了更优区域属于正常情况。5. 常见问题排查与避坑速查表5.1 算法层面早熟收敛、适应度震荡与耗时优化早熟收敛是PSO整定最常遇到的问题。症状是适应度曲线在某一个数值上卡住很多代不动或者粒子群全部聚集在一个局部最优区域。除了前面提到的随机重启机制我还会检查粒子速度上限vmax是否设置过小。如果vmax小于参数搜索范围的5%粒子群会迅速收缩到初始最优附近几乎没有机会探索其他区域。把vmax放宽到搜索范围的20%左右一般能缓解这个问题。适应度震荡是另一个高频问题。现象是同一个粒子的参数在多次阶跃测试中适应度计算结果差异巨大导致PSO无法正确比较粒子优劣。我排查后发现最常见的罪魁祸首是阶跃测试的初始状态不一致。实机整定中每次阶跃测试前必须确保电机已经稳定在同一个转速起始值比如都从0rpm阶跃到目标转速。如果上一次测试结束后电机还没完全停止就开始了下一次测试转速初速会随机漂移适应度自然就抖了。解决方法是每次测试前增加一个固定时长的准备阶段让电机稳定运行在起始转速并持续0.5秒后再执行阶跃。耗时方面如果你的整定时间预算紧张可以考虑降低粒子数和迭代次数但应优先降低粒子数而不是迭代次数。经验上粒子数不足会导致探索不充分而迭代次数不足会导致整个粒子群的收敛不充分。我推荐的最小配置是粒子数15、迭代次数20再低的话结果质量就很难保证了。5.2 控制与驱动层面电流饱和、反馈噪声与开关频率实机调试时如果速度环参数偏大首要症状是电流环进入饱和状态。电流给定的波形出现削顶dq轴电流跟踪不上给定值电机会发出明显的噪声。这种情况如果不加限制PSO会把适应度评估带偏因为电流饱和已经破坏了线性系统的前提。我的做法是在适应度函数中增加一个电流限幅惩罚项如果阶跃过程中任意时刻的q轴电流超过额定电流的1.5倍直接给这个粒子的适应度乘一个惩罚系数。这样PSO会自动避开那些会让电流环饱和的参数组合。速度反馈噪声问题在无感控制中更为突出。我在整定无感PMSM速度环时观察到适应度曲线会在某几个粒子参数处出现“尖峰”式跳变排查下来是观测器转速噪声过大导致速度误差积分值异常偏大。这种情况下先不要急着改PSO参数应该先优化速度反馈通路。比如把速度反馈滤波器的截止频率从500Hz降到200Hz或者改用带通滤波器滤除特定频段的噪声然后再重新整定。开关频率的选择也会影响整定结果的可移植性。如果你把仿真中10kHz开关频率下整定出的参数直接用到20kHz开关频率的驱动板上理论上系统会更稳但实际上可能因为电流环模型差异导致性能不最优。反过来把20kHz整定的参数用到10kHz上就很容易发散。所以换驱动板时如果开关频率变了参数必须重新整定。5.3 实机安全与调试环境注意事项实机整定过程中最重要的一条原则任何时候都不要让粒子参数在未经限制的情况下直接作用于电机。我在第一次实机PSO整定时吃过亏。当时有一个粒子的Kp特别大Kp又恰好能让系统在一个临界稳定状态运行结果转速出现了剧烈振荡母线电流瞬间冲到额定电流的3倍直接把驱动板的保险丝烧了。后来我加了两个硬保护一是在速度环输出端加一个限幅限制iq给定值的最大绝对值二是在上位机里实时监控母线电流一旦超过阈值自动发送停机指令。有了这两层保护后面几百次粒子测试都运行得很平稳。还有一个容易忽略的环境因素是机械共振。当整定出的速度环带宽恰好落在机械传动系统的共振峰范围内电机会在某个转速区间发出异常的共振噪声。这种问题在仿真里完全看不到因为仿真模型里没有机械谐振。我在实机测试中遇到过一台带减速箱的电机速度环带宽调到一定程度后启动瞬间减速箱箱体出现明显的周期性撞击声。解决办法不是去调PI参数而是先确认机械系统的固有频率然后在速度环输出端加一个陷波滤波器来抑制共振峰的放大效应。6. 最后说两个小技巧第一个小技巧是实机整定完第一轮之后别急着把参数固化。我通常会把PSO搜出的最优参数做一次±20%的邻域扫描生成一张参数-性能热力图这样能直观看到最优解附近还有没有更平坦的区域。如果某个参数组合在邻域扫描中表现出较强的鲁棒性即使它在数值上不是适应度最优的那一组我也会优先选择它作为最终参数。因为生产环境的工况波动远比测试时复杂一个对参数不那么敏感的解远比一个最优但处于陡峭峡谷边缘的解更可靠。第二个小技巧是关于PSO初值设置的。如果项目中有历史调试数据或者你大致知道某台电机之前用过的有效PI参数范围可以把这个参数范围作为PSO初始粒子群的分布中心。设置中心后初始粒子群的一半围绕该中心随机分布另一半在全局范围内均匀分布。这样既能利用历史经验又不至于完全放弃全局搜索。我试过纯随机初始化和带先验信息的初始化两种方式在相同的迭代预算下带先验信息的一组收敛速度大约快30%最终适应度也更优。我在实际项目中用PSO整定PMSM速度环参数已经跑通了多个平台从24V的小功率驱动板到48V的工业驱动板都验证过。这套“数学模型简化 PSO离线粗搜 实机窄域精调 安全保护兜底”的流程把我的调试时间从以天为单位压缩到了以小时为单位。如果你也在被PMSM速度环参数整定折磨不妨试着搭一个仿真模型让粒子群先把参数范围圈出来再带着这个范围上实机去跑你会发现调参这件事远没有想象中那么玄学。