资讯详情

资讯详情

永磁同步电机模型预测转矩控制仿真实现与调试实战

刚接手这个永磁同步电机传统模型预测转矩控制研究Simulink仿真实现课题时我第一反应是这不就是把直接转矩控制DTC的滞环换成滚动优化吗真做起来才发现坑全藏在细节里。从电机方程离散化到延时补偿从权重系数整定到仿真发散排查每一步都能让人折腾好几天。这篇博文就把我完整跑通一版传统MPTC仿真的经验和盘托出给正在做相关课题、或者准备入坑电机模型预测控制的朋友一份可以直接照着搭的实操参考。1. 项目拆解MPTC到底在干什么1.1 核心需求解析这个课题的核心任务是用模型预测控制Model Predictive Control, MPC替代传统PI加PWM的级联结构直接对永磁同步电机PMSM的转矩和磁链进行闭环控制。说通俗点控制器根据电机当前状态把逆变器能产生的每一种开关组合都预演一遍选出效果最好的那个直接输出开关信号。传统转矩控制的两个代表方案我简单对比一下。直接转矩控制DTC靠两个滞环比较器查开关表动态响应快但开关频率不固定、转矩脉动大磁场定向控制FOC靠PI加PWM调制稳态性能好但参数整定繁琐、动态响应受限于PI带宽。MPTC的思路是用一个代价函数替代滞环和调制器把选哪个电压矢量变成一个最优化问题理论上兼得两者的优点。1.2 为什么选模型预测转矩控制我当初选这个方向看中的是三个实质性优势。第一是概念直观。预测控制的逻辑链非常清晰建立电机模型枚举所有可能的电压矢量预测每个矢量对应的转矩和磁链用代价函数打分最后选得分最高的那个。每一步都能对应到物理意义不像PI参数那样需要试探。第二是动态响应快。MPTC在一个控制周期内直接选择最优电压矢量不需要PWM调制环节电压利用率高转矩响应通常在几百微秒内就能完成。对于需要快速转矩响应的场景比如电动汽车驱动、伺服系统这个优势很关键。第三是约束处理自然。逆变器只有8种开关状态天然就是一个有限控制集Finite Control Set, FCS问题不需要额外的调制器去逼近参考电压矢量计算量也相对可控。但也要坦诚说传统MPTC的缺点同样明显稳态转矩脉动比FOC大、开关频率不固定、对模型参数敏感。这些后面在调试部分我会展开讲。1.3 适用场景与技术边界这个课题适合谁如果你在学电机控制做过FOC或者DTC的仿真想往模型预测控制方向迈进这是一个很好的切入点。它既有理论深度预测建模、滚动优化又有工程味道代码实现、参数整定仿真环境里调通之后对控制系统的理解会上升一个台阶。同时要明确边界这是传统MPTC。学界现在更多研究的是无权重系数MPTC、三矢量MPTC、鲁棒MPTC等改进方案。但传统方案是所有改进的地基地基没打牢后面看改进论文很容易一头雾水。2. 电机数学模型仿真的地基2.1 dq坐标系下的电压方程与磁链方程MPTC的预测模型建立在dq同步旋转坐标系下。表贴式永磁同步电机SPMSM和内置式IPMSM的区别主要在电感上我这边仿真用的是表贴式电机即LdLq。电压方程ud Rs*id Ld*did/dt - ωe*Lq*iq uq Rs*iq Lq*diq/dt ωe*(Ld*id ψf)磁链方程ψd Ld*id ψf ψq Lq*iq其中Rs是定子电阻Ld、Lq是dq轴电感ψf是永磁体磁链ωe是电角速度。这里要特别注意dq轴的定义d轴与永磁体转子磁链方向对齐q轴超前d轴90度电角度。坐标变换不对后面全盘皆输。2.2 离散化处理MPTC是数字控制必须把连续方程离散化。工程上最常用的是前向欧拉法公式简单在采样周期足够小微秒级时精度完全够用。采用周期Ts取5微秒,离散化后的电流预测方程id(k1) id(k) Ts/Ld * (ud(k) - Rs*id(k) ωe*Lq*iq(k)) iq(k1) iq(k) Ts/Lq * (uq(k) - Rs*iq(k) - ωe*(Ld*id(k) ψf))这里有个容易忽略的点每个采样周期开始时控制器采样得到id(k)、iq(k)和ωe然后假设在一个控制周期内电压矢量恒定、转速不变用这个模型预测下一个周期的电流。这本质上是零阶保持器的假设采样周期越小假设越接近真实。2.3 转矩预测的核心公式得到电流预测值后就可以预测磁链和转矩ψd(k1) Ld*id(k1) ψf ψq(k1) Lq*iq(k1) Te(k1) 1.5*p*(ψf*iq(k1) (Ld-Lq)*id(k1)*iq(k1))对于表贴式电机LdLq转矩方程简化为Te 1.5pψf*iq。也就是说转矩只跟q轴电流成正比控制起来更直观代价函数里转矩项可以直接用iq代替。搭建模型前我先把电机参数确定下来。用的是一组常见的中小型工业电机参数参数数值单位额定功率1.5kW额定转速1500rpm极对数p4-定子电阻Rs0.958Ωd轴电感Ld5.25mHq轴电感Lq5.25mH永磁体磁链ψf0.1827Wb转动惯量J0.003kg·m²阻尼系数B0.008N·m·s直流母线电压Vdc300V3. 预测转矩控制算法设计3.1 逆变器开关状态与电压矢量两电平三相逆变器有6个功率开关管上桥臂和下桥臂互补导通所以每一相有且只有两种状态上桥臂导通记为1或下桥臂导通记为0。三相组合起来共8种开关状态[0 0 0] V0 零矢量 [1 0 0] V1 有效矢量 [1 1 0] V2 [0 1 0] V3 [0 1 1] V4 [0 0 1] V5 [1 0 1] V6 [1 1 1] V7 零矢量每个有效矢量的幅值都是(2/3)Vdc相邻间隔60度电角度两个零矢量幅值为零。这8个开关状态就是我们的候选动作集。预测控制的滚动优化就是在这8个状态里逐一评估。3.2 代价函数设计与权重系数代价函数是MPTC的灵魂。传统MPTC最常见的代价函数形式g |Te_ref - Te(k1)| λψ * |ψs_ref - |ψs(k1)||第一项是转矩跟踪误差第二项是磁链幅值跟踪误差λψ是权重系数。两个物理量量纲不同转矩是N·m磁链是Wb直接相加没有意义必须靠λψ来平衡优先级。权重系数的整定是传统MPTC最头疼的问题之一。常见做法是试凑法先只保留转矩项观察转矩脉动然后逐渐增大λψ观察磁链波形和转矩响应找到一个两者兼顾的平衡点。我仿真中用的λψ大约在100到200之间具体要看电机的额定工况。这个过程的坑我后面会专门讲。3.3 延时补偿机制延时补偿是数字控制绕不开的问题。实际DSP/单片机执行MPTC算法需要时间采样、预测、优化、输出整个过程可能占用一到两个采样周期。如果算法算出的开关状态在下一个周期才真正生效相当于你用的还是旧状态去预测新时刻会产生明显的控制延迟。解决方案是两步预测法。第一步先用当前时刻的采样值和上一周期选出的电压矢量预测k1时刻的id和iq第二步以k1为起点枚举8个电压矢量预测k2时刻的转矩和磁链用这个去跟参考值比较。这样就提前了一个周期做决策补偿了执行延迟。我在Simulink里的实现就是按这个逻辑写的代码里分了两层循环和两组预测方程实测波形比不加补偿的版本平滑不少。4. Simulink仿真实现与参数整定4.1 仿真架构与模块划分整个仿真模型我分成五个大块PMSM电机本体、两电平逆变器、坐标变换模块、MPTC控制器MATLAB Function块、速度外环PI控制器。电机本体可以直接用Simulink Simscape Electrical里的Permanent Magnet Synchronous Machine模块也可以自己用电压方程搭S函数或者子系统。我的建议是课题研究阶段用库里的模块省时省力还可靠如果要做算法验证或者改电机模型再自己搭。库里模块的输入是三相电压输出是三相电流、电角度、机械转速、电磁转矩等接口很完整。逆变器我用的是Universal Bridge模块选Two-level bridge、IGBT/Diode类型。也可以直接用三个开关管和逻辑门搭但Universal Bridge封装好仿真速度快适合做控制算法研究。MPTC控制器是核心我写在一个MATLAB Function块里。代码核心逻辑function [Sa, Sb, Sc] mptc_controller(Te_ref, psi_s_ref, id, iq, wm, theta_e, Vdc) Ts 5e-6; % 采样周期 Rs 0.958; % 定子电阻 Ld 5.25e-3; % d轴电感 Lq 5.25e-3; % q轴电感 psi_f 0.1827; % 永磁体磁链 p 4; % 极对数 lambda_psi 150; % 磁链权重系数 we wm * p; % 电角速度 % 8种开关状态 sw [0 0 0; 1 0 0; 1 1 0; 0 1 0; 0 1 1; 0 0 1; 1 0 1; 1 1 1]; % 开关状态对应的alpha-beta电压 Udc Vdc * 2/3; Valpha Udc * (sw(:,1) sw(:,2)*cos(pi/3) sw(:,3)*cos(2*pi/3)); Vbeta Udc * (sw(:,2)*sin(pi/3) sw(:,3)*sin(2*pi/3)); ct cos(theta_e); st sin(theta_e); g_opt 1e10; % 初始化最优代价 index 1; % 初始化最优开关状态编号 for k 1:8 % dq轴电压分量 ud ct * Valpha(k) st * Vbeta(k); uq -st * Valpha(k) ct * Vbeta(k); % 第一步预测k1时刻电流延时补偿 id_p1 id Ts/Ld * (ud - Rs*id we*Lq*iq); iq_p1 iq Ts/Lq * (uq - Rs*iq - we*(Ld*id psi_f)); % 第二步预测k2时刻磁链和转矩 id_p2 id_p1 Ts/Ld * (ud - Rs*id_p1 we*Lq*iq_p1); iq_p2 iq_p1 Ts/Lq * (uq - Rs*iq_p1 - we*(Ld*id_p1 psi_f)); psi_d_p2 Ld * id_p2 psi_f; psi_q_p2 Lq * iq_p2; psi_s_p2 sqrt(psi_d_p2^2 psi_q_p2^2); Te_p2 1.5 * p * (psi_f * iq_p2 (Ld - Lq) * id_p2 * iq_p2); % 代价函数 g abs(Te_ref - Te_p2) lambda_psi * abs(psi_s_ref - psi_s_p2); if g g_opt g_opt g; index k; end end Sa sw(index, 1); Sb sw(index, 2); Sc sw(index, 3); end注意几个实现细节。Valpha和Vbeta的计算要把三相开关组合投影到αβ坐标系公式里的系数(2/3)是等幅值变换的结果。坐标变换用到的cos(theta_e)和sin(theta_e)必须和电机模块输出的电角度对齐theta_e是转子d轴相对α轴的电角度。4.2 关键参数计算PI速度外环的转矩参考生成也要仔细。速度环输出的是转矩参考Te_ref需要限幅防止转矩超过电机和逆变器的承受能力。我这里把转矩上限设为30N·m通过饱和模块实现。磁链参考ψs_ref的计算是个基本功。对于表贴式电机额定磁链约等于永磁体磁链ψf。实际取ψs_ref 0.1827 Wb也就是直接用ψf作为参考。如果要做弱磁控制磁链参考需要随转速升高而降低这个课题里暂时不做。采样周期的选择要权衡。Ts越小预测越准、控制越平滑但计算量越大对硬件要求越高。我取了5微秒在Simulink里跑没问题实际工程中用DSP实现的话这类算法通常选10到50微秒。注意仿真步长要远小于采样周期我设的固定步长1微秒。4.3 仿真结果分析跑通后的波形有几个关键特征值得关注。转速阶跃响应给定转速从0阶跃到1000rpm电机加速过程中转矩被限幅在最大值转速线性上升大约0.3秒到达稳态几乎没有超调。这说明速度环PI整定基本到位MPTC在动态过程中的转矩跟踪是靠谱的。稳态转矩波形MPTC最直观的特征就是转矩脉动比FOC大。我的仿真里稳态转矩脉动峰峰值大约在2到3N·m之间额定转矩约9.5N·m脉动占比在20%到30%。这就是传统单矢量MPTC的原罪因为每个控制周期只作用一个电压矢量转矩无法被精细调节。磁链轨迹定子磁链矢量在αβ平面上的轨迹是一个接近圆形的多边形。电压矢量切换时磁链轨迹的每个折点对应一次开关动作。轨迹越接近圆磁链脉动越小。5. 常见问题与排查技巧实录5.1 仿真发散从波形爆炸到稳定运行我第一次跑仿真模型直接发散电流飙升到几千安培波形惨不忍睹。排查过程值得分享。第一步看模型参数。PMSM模块的电气参数、初始条件、采样时间是否都设置正确。我犯过一个低级错误电机模块的极对数和控制器里的p不一致一个设4一个设2结果转矩方向都算错了。第二步看坐标变换。检查Park变换的角度方向、sin/cos的正负号是否和电机模块定义一致。最简单的方法是在给定id_ref0、iq_ref小电流的开环测试下观察电机能否正常起转若方向反了说明坐标变换有问题。第三步看采样周期和仿真步长。如果仿真步长大于采样周期会引入额外延迟和数值误差。我最初不小心把仿真步长设成了和采样周期一样的5微秒数值振荡很严重改为1微秒后明显改善。5.2 转矩脉动过大权重系数和采样周期的博弈转矩脉动大是MPTC的特色但如果大到无法接受先查这几处。权重系数λψ是否过大或过小。λψ过大控制器会优先保证磁链幅值稳定转矩跟踪的优先级下降转矩脉动反而可能增大λψ过小磁链波形难看转矩脉动也不会好到哪去。我做了个扫参实验λψ从50到300步长50记录转矩脉动和磁链脉动的变化最后锁定在150附近。采样周期是否偏大。采样周期从5微秒改成2微秒转矩脉动明显下降代价是每个周期的计算量翻倍。Simulink里跑没问题硬件上就要掂量掂量了。还有一个常见坑输出开关状态到逆变器的接口没有加单位延时或锁存器导致仿真的代数环问题。MPTC控制器输出的是离散开关状态必须通过Zero-Order Hold模块或设置采样时间避免触发Simulink的代数环报错或者波形异常。5.3 稳态转速静差速度环PI整定的细节MPTC本身控制的是转矩和磁链转速闭环依赖外环PI。静差的出现通常和两个因素有关。PI参数给的偏保守。速度环带宽不够稳态时PI积分作用不足会出现静差。我这里把速度环的Kp调到50Ki调到800静差基本消除。注意Ki的单位和仿真步长有关换步长后要重新整定。转矩参考限幅过小。如果限幅值低于负载转矩和损耗之和电机转速永远提不上去静差就会被限制出来。检查方法是看速度环输出即Te_ref有没有持续顶在饱和值上。5.4 常见问题速查表现象可能原因排查/解决方法电流、转矩瞬间发散采样周期与步长不匹配、参数设置错误检查仿真步长、核对电机参数电机转向相反坐标变换角度方向错误检查Park变换符号对比电流方向稳态转矩脉动过大λψ不当、Ts偏大扫参整定λψ减小采样周期转速静差大PI参数偏小、限幅饱和增大Ki检查Te_ref限幅值磁链轨迹严重畸变电机参数与实际不符核对Ld、Lq、ψf、Rs仿真报代数环错误开关输出缺乏采样保持在输出端加Zero-Order Hold6. 实操心得与扩展建议整个项目做下来我最大的感受是MPTC的入门门槛不在算法理解而在仿真细节的把控。坐标变换、延时补偿、权重整定每一个环节的错误在波形上都会以某种方式体现出来排查过程很考验对电机模型的掌握程度。给准备入坑的朋友几个实际操作层面的建议。保存仿真结果时一定把控制周期、开关状态、代价函数值这些中间量也记录下来排查问题时这些数据比只看转矩波形高效得多。权重系数的整定一定要做扫参对比实验哪怕只是粗略的网格搜索也能帮你建立对代价函数各项目敏感性的直觉。另外如果你打算在硬件上实现务必提前考虑算法执行时间对延时补偿步数的影响这是仿真里容易忽视、实验里最容易翻车的地方。这个课题还有几个自然的延伸方向把单矢量扩展成三矢量以降低转矩脉动用电感辨识或扰动观测器来增强参数鲁棒性或者用查表方式消除权重系数。但不管往哪个方向走先把传统MPTC的仿真从搭模型到调参数完整走通一遍这个基本功打扎实了后面所有改进方案都会顺畅得多。
觉得有用,分享给同行:

为您的企业打造数字门面

稳重轻奢商务风格,端正雅致视觉,长效耐看不易过时。

立即咨询 →