资讯详情

资讯详情

PMSM矢量控制双闭环调速系统Simulink建模与参数整定

简介这是一份围绕永磁同步电动机矢量控制调速系统建模与仿真撰写的技术文档面向电气工程、电机控制方向的学生、科研人员与工程技术人员用于理解矢量控制原理并完成Simulink仿真建模。压缩包内共1个doc文件约641KB以文字与公式推导为主系统梳理了永磁同步电机矢量控制调速系统的理论框架与实现思路。文档从矢量控制的基本思想切入讲解在磁场定向坐标上将电流矢量解耦为励磁分量与转矩分量、使交流电机控制近似直流电机的方法并展开电压空间矢量技术涉及三相电压源逆变器的8种开关模式、扇区判断、相邻非零矢量作用时间计算及七段式切换时间等内容。同时说明如何在Simulink中搭建永磁同步电机矢量控制系统模型并进行仿真优化。目前已有241人学习适合作为课程设计、毕业设计或课题入门的参考资料帮助读者建立完整的理论认知与建模仿真思路。1. 从一台 750W 伺服驱动说起PMSM 矢量控制调速为什么要先建模再上电台架上摆着一台 750W 表贴式永磁同步电动机驱动器给定 1500 r/min 阶跃示波器上转速冲到 1950 r/min 才回落相电流里叠着 2 kHz 的啸叫。改一组 PI 参数就要重新上电、重新夹电流钳运气不好还得换功率管。永磁同步电动机矢量控制调速系统建模与仿真要解决的正是这件事把 dq 坐标系下的电机模型、FOC 矢量控制的双闭环结构、调制环节和负载特性全部搬进计算环境先在仿真里把参数试到位再到硬件上验证。它适合做伺服固件、变频器、电驱控制的工程师也适合需要交一份可复现仿真报告的学生。仿真不是替代台架而是把台架上的试错次数压到个位数。2. PMSM 的 dq 轴数学模型与 FOC 双闭环框图的对应关系矢量控制能成立前提是先把三相交流量搬到随转子旋转的坐标系里让定子电流分解成励磁分量和转矩分量。这一步不做后面的转速环、电流环都是悬空的。工程上通常按 Clarke、Park、反 Park 三步走再把电压方程写成积分器形式塞进 Simulink。2.1 三相静止坐标系到 dq 旋转坐标系的三步变换Clarke 变换把 ia、ib、ic 压成 αβ 两轴。等幅值变换下系数是 2/3等功率变换下是 sqrt(2/3)。这个选择直接决定后面转矩方程前面的系数混用会让转矩偏 1.5 倍或 0.667 倍波形看着差不多数值全错。Park 变换再按电角度 θe 把 αβ 转到 dq% 等幅值 Clarke Parktheta_e 为电角度rad function [id, iq] clarke_park(ia, ib, ic, theta_e) i_alpha (2/3) * (ia - 0.5*ib - 0.5*ic); i_beta (2/3) * (sqrt(3)/2*ib - sqrt(3)/2*ic); id i_alpha*cos(theta_e) i_beta*sin(theta_e); iq -i_alpha*sin(theta_e) i_beta*cos(theta_e); end逻辑说明先做等幅值 Clarke 得到正交两相量再用与转子同步旋转的 Park 矩阵投影。theta_e必须是电角度等于机械角乘极对数这一条在 4.1 节会被反复提到。反 Park 用在电流环输出侧把 ud、uq 变回 uα、uβ 送给调制模块矩阵是上面 Park 的转置形式角度符号取正。2.2 电压方程与转矩方程如何映射成 Simulink 里的积分器表贴式 PMSM 在 dq 轴下的电压方程和转矩方程是建模的核心ud Rs*id Ld*did/dt - we*Lq*iq uq Rs*iq Lq*diq/dt we*(Ld*id psi_f) Te 1.5 * p * ( psi_f*iq (Ld - Lq)*id*iq ) J*dwm/dt Te - TL - B*wm , we p*wm把这组式子改写成 did/dt、diq/dt、dwm/dt 在左侧的形式右边就是加减乘除Simulink 里用 Integrator 模块承接即可。常见的写法是写一个 MATLAB 函数交给 ode 求解器或者干脆用 Interpreted MATLAB Functionfunction dx pmsm_dq(~, x, u, p) % x [id; iq; wm]; u [ud; uq; TL] id x(1); iq x(2); wm x(3); we p.p * wm; % 电角速度 did (u(1) - p.Rs*id we*p.Lq*iq) / p.Ld; diq (u(2) - p.Rs*iq - we*(p.Ld*id p.psi_f)) / p.Lq; Te 1.5 * p.p * (p.psi_f*iq (p.Ld - p.Lq)*id*iq); dwm (Te - u(3) - p.B*wm) / p.J; dx [did; diq; dwm]; end参数说明p.Ld、p.Lq是 dq 轴电感表贴式两者接近相等p.psi_f是永磁体磁链由反电动势常数换算psi_f Ke_line / (sqrt(3) * 2*pi*f_e)这类公式按各家电机的定义不同要核对一次p.B是粘滞摩擦系数样机手册一般不给取 0 到 1e-4 N·m·s 之间对转速环影响不大但对低速稳态误差有影响。2.3 表贴式与内置式 PMSM 的凸极率如何决定控制策略Ld - Lq这一项决定了要不要做 MTPA。凸极率为 1 时该项为零id 给定直接给 0 就是最优凸极率大于 1 时注入负的 id 能在同样转矩下少用一点电流但会引入额外铜耗和参数敏感性。参数表贴式 SPM示例内置式 IPM示例建模时的注意点Ld (mH)8.55.2手册给的常是线电感需换算Lq (mH)8.512.8凸极率约为 2.4psi_f (Wb)0.0850.092由 Ke 换算注意线/相定义Rs (Ω)1.20.85随温度变化仿真可取 25℃ 值极对数 p44电角度 机械角度 × p控制策略id 0MTPA 或 id 0后者需要额外查表或解析解对刚上手的人建议先按表贴式建模把转速环、电流环和调制都跑通再替换成Ld ! Lq的参数观察转矩脉动变化。跳过这一步直接做 MTPA会把整定问题和平滑性问题混在一起很难定位。3. 用 Simulink 搭一套转速电流双闭环 PMSM 调速系统的落地步骤搭模型最怕的就是一上来全画完跑不动再回头找。合理的顺序是先让开环的电机模型转起来再加电流环最后合上转速环。每一层都能单独给阶跃、单独看波形问题就不会一次堆在一起。3.1 主电路、SVPWM 调制与母线电压的取值直流母线电压决定能跑多快。忽略管压降时SVPWM 线性调制区的最大相电压幅值是Vdc/sqrt(3)SPWM 只有Vdc/2前者比后者高约 15.47%。这就是同样母线电压下SVPWM 能把额定转速往上多推一截的原因。选母线电压时按额定转速下的反电动势峰值加电流环需要的余量倒推% 由目标转速反推所需最低母线电压 n_max 3000; % r/min目标最高转速 Ke_phase 0.052; % V/(rad/s) 相反电动势常数 p 4; % 极对数 we_max n_max * 2*pi/60 * p; % 电角速度 rad/s Em Ke_phase * we_max; % 相反电动势峰值 V Vdc_min sqrt(3) * (Em 0.15*Em); % 留 15% 电流环余量 fprintf(最低母线电压约 %.1f V\n, Vdc_min);参数说明Ke_phase用相绕组反电动势峰值除以电角速度得到若手册给的是线电压有效值需先乘 sqrt(2) 再除以 sqrt(3)。0.15 这个余量是经验值主要覆盖 Rs 压降和电流环动态所需转速越高、电流越大应取得更大。调制模块上开关频率一般取 8 kHz 到 20 kHz仿真步长要远小于开关周期固定步长至少取开关周期的 1/20。3.2 电流环与转速环 PI 参数的工程整定公式电流环的被控对象近似为1/(Ls Rs)用 PI 的零点去对消对象的极点就得到一组不用试凑的初值% 电流环 PI 初值按带宽整定 fsw 10000; % 开关频率 Hz f_ci fsw / 20; % 电流环带宽取开关频率的 1/20 wci 2*pi*f_ci; Ld 8.5e-3; Lq 8.5e-3; Rs 1.2; Kp_d wci * Ld; Ki_d wci * Rs; Kp_q wci * Lq; Ki_q wci * Rs; % 转速环 PI 初值带宽取电流环的 1/8 J 1.2e-4; psi_f 0.085; p 4; wcn wci / 8; Kp_n wcn * J / (1.5 * p * psi_f); Ki_n Kp_n * wcn / 5; % 零点放在带宽的 1/5 处抑制超调参数说明Kp_d、Ki_d的单位分别是 V/A 和 V/(A·s)注意与仿真里电流单位保持一致f_ci取开关频率的 1/20 是保守起点想更快的动态可以做到 1/10但离散化和延时带来的相位损失会开始显现。转速环Kp_n的量纲是 A·s/radKi_n再乘一个零点频率。整定完后超调大就把Ki_n往下调响应慢就提Kp_n两个旋钮分别管相位和增益不要一起动。环节被控对象近似KpKi带宽取值d 轴电流环1/(Ld·sRs)wci·Ldwci·Rsfsw/20q 轴电流环1/(Lq·sRs)wci·Lqwci·Rsfsw/20转速环1/(J·s)wcn·J/(1.5p·psi_f)Kp·wcn/5wci/83.3 用 MATLAB 脚本批量配置参数并自动跑仿真手工在 Block 里点参数容易漏改用脚本把参数写进基础工作区再统一sim一遍改一次参数重跑一轮只要几秒mdl pmsm_foc_speed; params struct(Rs,1.2,Ld,8.5e-3,Lq,8.5e-3,psi_f,0.085, ... p,4,J,1.2e-4,B,1e-5,Vdc,310,fsw,10000); n_ref_list [500, 1000, 1500, 3000]; % 待测转速点 r/min T_load 0.5; % 负载转矩 N·m for k 1:numel(n_ref_list) assignin(base,n_ref, n_ref_list(k)); assignin(base,TL, T_load); fn fieldnames(params); for i 1:numel(fn) assignin(base, fn{i}, params.(fn{i})); end set_param(mdl, StopTime, 1.0, Solver, ode4, FixedStep, 2e-6); out sim(mdl); wm out.get(wm); % 转速信号 rad/s rpm wm * 60 / (2*pi); fprintf(给定 %5.0f r/min稳态误差 %.2f%%超调 %.1f%%\n, ... n_ref_list(k), (1-mean(rpm(end-500:end))/n_ref_list(k))*100, ... (max(rpm)-n_ref_list(k))/n_ref_list(k)*100); end逻辑说明循环里每次改的是基础工作区的变量模型里所有模块都引用同名变量避免逐块修改。StopTime取 1 s 是为了让转速环完全进入稳态取末段 500 个采样点算稳态误差。参数扫描的步长和采样点数要一起看采样点太少会让稳态误差的统计没有意义。真正的调试顺序是先用 500 r/min 空载跑通再加T_load最后才跑 3000 r/min 看弱磁区是否进饱和。4. 仿真波形不对时的排查顺序从转速飞车到转矩脉动模型跑出波形只是第一步能不能解释波形才是关键。多数问题不是控制算法写错而是角度、限幅、步长这三类工程细节没处理。按下面的顺序查比盯着代码逐行读要快。4.1 电角度初值与旋变零位启动反转和堵转的根源最常见的一类现象是给正转速给定电机先反转一小段再缓慢正转或者干脆堵在原地。原因通常是 Park 变换用的theta_e与真实转子位置差了固定角度。仿真里可以直接算出理想电角度theta_e p * theta_m但真实系统要经过旋变或霍尔的对齐。建模阶段为了复现这个问题可以在角度输入上人为加一个常量偏置看控制器是否能拉回来% 注入 5 度电角度偏置观察 id/iq 的耦合与转速响应 theta_offset 5 * pi/180; theta_e_used p * theta_m theta_offset; % 控制器侧使用错误角度 theta_e_real p * theta_m; % 电机模型侧使用真实角度参数说明角度偏置小于 30 度电角度时表现为 id、iq 出现一个与转速相关的耦合分量转速仍能上去偏置接近 90 度时iq 被大量漏成 id转矩明显不够出现堵转。排查时先确认p有没有乘再确认角度是机械角还是电角然后确认偏置方向的正负与电机相序是否一致。相序接反是同一类问题的另一种表现仿真里把 ia、ic 对调即可复现。4.2 积分饱和、限幅与转速环超调的关系转速环输出的是 iq 给定若后面接的限幅设在 20 A、而启动瞬间 PI 输出到了 200 A积分项会一路累积等转速接近给定再泄放形成明显的超调。这个现象在仿真里和在台架上完全一致是很值得先在仿真里看清楚的坑现象直接原因处理方式副作用启动超调 30% 以上转速环积分饱和加输出限幅 抗饱和反馈上升时间略变长电流顶在限幅值不动母线电压不足或电流限太紧核对 Vdc 与负载大小无稳态转速有静差转速环 Ki 过小或负载未前馈提高 Ki 或加 TL 前馈Ki 过大引起震荡id 长期不为 0角度偏置或 d 轴电流环极性错复核 Park 矩阵符号无抗饱和的常用做法有两种一是把积分器的输出乘一个使能信号只有未限幅时才积分二是把限幅前后的差值乘系数反馈回积分器输入端。前者实现简单后者恢复更平滑仿真里两种都值得试。注意限幅值本身要跟电机的连续电流能力对齐不能为了先跑通随便给个大数否则仿真的动态根本不代表真机。4.3 步长、离散化与转矩脉动精度和仿真时长的取舍转矩脉动在仿真里通常来自三处定步长造成的数值截断、开关动作引起的电流纹波、以及 dq 变换中角度更新的滞后。用 1e-5 s 的步长跑波形很干净但 1 s 仿真要算十万步参数扫描时很难受。用 1e-4 s 跑速度快十倍但定步长相位滞后会让电流环看起来震荡加大于是有人误以为 PI 参数不对继续往下调越调越差。% 扫描不同定步长观察同一组 PI 下的转速超调变化 for h [1e-4, 2e-5, 5e-6, 2e-6] set_param(pmsm_foc_speed,FixedStep, num2str(h)); out sim(pmsm_foc_speed); rpm out.get(wm) * 60/(2*pi); fprintf(步长 %8.1e s 峰值 %.0f r/min 末值 %.0f r/min\n, ... h, max(rpm), mean(rpm(end-200:end))); end逻辑说明固定步长和变步长要分开比较变步长求解器会自己缩小步长通过开关点波形更接近连续域但重复性差、扫描参数时耗时不稳。判断标准不是哪个更好看而是同一组 PI 参数下步长减半后超调是否收敛。如果步长从 2e-5 减到 2e-6 超调还在显著变化说明当前带宽已经逼近步长的极限该降带宽或者上离散化控制器而不是继续调增益。顺带一提热词里常出现的 SPWM 变频器-异步电机交流调速系统、转速开环恒压频比仿真被控对象是异步机的 T 型等效电路控制结构是开环 V/F和 PMSM 的双闭环 FOC 是两条完全不同的路线不要拿 V/F 的整定经验套到 PMSM 上恒压频比那种压频比固定、靠转差自动调速的做法在 PMSM 上会直接失步。5. 从仿真模型到可上机的控制器离散化自检与三个容易被忽略的进阶点仿真模型在连续域跑得漂亮不代表能直接拿去写 C 代码。真正动手前通常要把控制器部分离散化用和固件一致的采样周期重跑一遍这一步能提前暴露大部分实现问题。离散化的关键是把电流环的采样周期和 PWM 更新周期分开设置。常见做法是电流环在 PWM 周期中断里执行转速环每 N 个电流环周期执行一次N 取 5 到 10。在 Simulink 里用 Rate Transition 连接不同采样率的模块同时把控制器的积分项改成前后向差分形式验证超调是否仍在可接受范围。如果离散化后带宽下降明显可以适当把f_ci从 fsw/20 降到 fsw/30。自检项检查方法通过标准采样率一致性比对控制器与调制模块的采样时间无 Rate Transition 警告单位一致性全局搜索 rad/s 与 r/min 混用处转速环给定与反馈同单位限幅完整性逐一确认 PI 输出与积分器都有上下限无无界积分路径定点量化影响把控制器改成 fixdt 类型重跑稳态误差增量小于 1%用模型在环MIL做一次闭环自检具体做法是把控制器子系统单独打包输入接录制好的真实工况数据输出与连续域控制器逐点比对。转速阶跃、突加负载、低速反转这三种工况各跑一次如果离散控制器与连续域控制器在 1 s 内的转速偏差都小于 3%这版参数基本可以下到固件。方法本身不复杂成本在于要有真实工况数据台架上先录一组波形比凭空造负载曲线有用得多。还有一个只在仿真里才方便做的技巧把负载转矩换成随机或周期性扰动源观察抗扰性能。上面 3.3 节的脚本里TL从常量改成一个幅值随转速变化的函数就能模拟风机泵类负载和摩擦负载的差别这类检查在台架上要换机械负载才能做在仿真里只是改一行。做到这一步模型就从跑起来好看变成能支撑参数决策了。本文还有配套的精品资源点击获取
觉得有用,分享给同行:

为您的企业打造数字门面

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

立即咨询 →