ARTICLE DETAIL

资讯详情

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

Simulink搭建PMSM FOC控制模型:从坐标变换到SVPWM与PI整定

Simulink搭建PMSM FOC控制模型:从坐标变换到SVPWM与PI整定 1. 项目概述与整体思路1.1 为什么Simulink搭建PMSM FOC控制模型这么受欢迎做电机控制的同学一定绕不开PMSM也就是永磁同步电机。这几年新能源车、机器人关节、伺服驱动器几乎都成了PMSM的主场而FOC矢量控制又是PMSM最主流的控制方案。FOC把定子三相电流分解成交轴和直轴两个分量让电机控制起来就像控制直流电机一样简单id控制励磁iq控制转矩二者解耦之后控制逻辑一下子清晰多了。既然FOC这么重要总不能每次都直接拿驱动板去试。硬件调试成本高烧管子、炸电容都是常事而且一旦波形不对很难判断是算法问题、采样问题还是板子问题。Simulink的价值就在这里——把PMSM模型、逆变器、坐标变换、PI调节器、SVPWM全部放在一个环境里跑逻辑上先打通参数上先扫一遍再上硬件就从容多了。这篇文章就是一份完整的搭建记录针对的正是“PMSM FOC控制模型”这个经典需求。无论你是刚接触FOC的在校学生还是从其他行业转过来做电机驱动的工程师这篇文章都适合你。文中会给出电机参数、PI参数、SVPWM计算过程、仿真设置、波形分析和常见坑点跟着搭一遍基本就能拥有一套可以改造成自己项目的仿真基础。1.2 模型架构与模块清单整个仿真模型的顶层架构我习惯分成三块主电路部分、控制算法部分、测量与标定部分。主电路包含直流母线、逆变器、PMSM本体控制算法包含速度环、电流环、坐标变换、SVPWM测量与标定主要处理和显示三相电流、母线电压、转子位置、转速、转矩等信号。顶层模型建议用子系统封装尤其是控制算法部分。做两层封装就够了第一层是Input/Output接口清晰的控制核心第二层是内部各个功能子模块。这样做不只是为了好看关键是为了后续做代码生成和硬件移植的方便。你在Simulink里把接口固定好了后面无论是换成真实电机还是把控制算法跑进单片机里结构都不用大改。具体模块清单大概是下面这些速度给定模块用Step阶跃信号或Ramp斜坡信号作为速度指令。速度环PI控制器外环输出q轴电流参考值。电流环PI控制器d轴和q轴各一个输出d轴和q轴电压。Clarke变换/Park变换模块把三相电流变成id、iq。反Park变换模块把ud、uq变成uα、uβ。SVPWM模块根据uα、uβ计算三相桥臂占空比。三相两电平逆变器用Simscape Universal Bridge实现也可用受控电压源做平均模型。PMSM本体模型用Simscape的PMSM模块或者自己用数学方程搭一个。测量与采样模块模拟电流传感器、ADC、编码器角度反馈加入零阶保持器。这个架构是双闭环级联结构内环电流环、外环速度环也是当前工业上最常用、最成熟的结构。内环响应快外环响应慢拉开带宽差距之后两个环就可以独立整定互不干扰。搭建的时候建议把电流环先单独调好再接上速度环不要一开始就两级一起调否则真的会让人非常上头。1.3 动手前的准备版本、工具箱与仿真文件使用建议如果你下载过别人的Simulink模型大概率遇到过版本打不开的情况。Simulink模型文件在低版本MATLAB里经常打不开。我的建议是搭建时就直接用一个相对稳定的版本比如R2020b之后的版本。Simscape Electrical相关模块在不同版本的路径和名称会有细微调整但基本逻辑一致。需要的工具箱主要有Simulink、Simscape Electrical如果要用代码生成或FMU导出还需要MATLAB Coder和Simulink Coder。纯离线仿真不需要嵌入式Coder但如果你想在Simulink里做处理器在环仿真那就要提前确认工具链是否完整。拿到仿真文件后不要急着改参数先按顺序做三件事检查顶层还有哪些黄色警告块先把模型弄到全部通过。把电机参数、母线电压、开关频率这些关键参数和实际项目对齐。先跑一遍额定工况确认波形正常之后再开始改PI参数。很多人拿到模型第一步就改Kp和Ki然后发现波形乱七八糟根本分不清是参数问题还是模型接线问题。正确的顺序是先保证模型本身没问题再动控制参数。2. 核心模块搭建与原理拆解2.1 坐标变换Clark和ParkFOC的核心是坐标变换这部分如果理解不透彻后面所有波形分析都会很吃力。首先是Clarke变换作用是把三相静止坐标系下的电流ia、ib、ic等效成两相静止坐标系下的iα、iβ。三相电流需要满足ia ib ic 0在这个前提下我习惯使用等幅值Clarke变换公式是iα iaiβ (ia 2ib) / √3注意iα和iβ的幅值和相电流幅值一致这方便后面做标幺化和PI参数计算。如果你看到别人的模型里用2/3系数的Clarke变换也不奇怪那是等功率变换幅值会差一个系数PI参数也要跟着变。然后是Park变换作用是把iα、iβ从静止坐标系旋转到随转子磁场同步旋转的dq坐标系。这里需要转子位置角θ也就是电角度。Park变换公式id iαcosθ iβsinθiq -iαsinθ iβcosθ反Park变换用在SVPWM之前把电流环算出来的ud、uq变换回uα、uβuα udcosθ - uqsinθuβ udsinθ uqcosθ在Simulink里实现这些变换可以直接用三角函数模块加乘法器也可以用Fcn模块写一行表达式还可以用MATLAB Function模块。我个人推荐Fcn模块简洁清晰调试方便。比如反Park变换的uβ可以写成“u_d * sin(theta) u_q * cos(theta)”。这里要特别留意角度对齐的问题。模型里的角度是电角度不是机械角度。PMSM极对数如果是4那电角度就等于机械角度乘以4。如果在仿真中使用的电角度和真实转子的初始位置没有对齐启动瞬间就会出现电流冲击严重时会看到i和q轴失控。很多仿真模型会默认在初始时刻把转子角度设为0这相当于已经把初始位置给理想化了硬件上是做不到的所以后面调试代码时还是要单独处理初始位置检测。2.2 电流环和速度环PI设计电流环是整个FOC动态响应的基础电流环带宽决定了对转矩的响应速度。电流环的模型可以用一阶惯性环节近似设计方法我用的是整定思路内模控制或者零极点对消。对于d轴和q轴电感相等的情况也就是表贴式PMSMd轴和q轴电流环的PI参数可以相同。对内置式PMSM如果Ld和Lq差别明显就需要分别计算。电流环PI参数的基本估算公式Kp ≈ L * ωcKi ≈ R * ωc这里的L是相电感R是相电阻ωc是期望的电流环带宽单位是rad/s。为什么Kp和L有关系因为电流环输出的是电压而电感两端的电压和电流变化率直接相关电感越大要获得同样的电流变化速度就需要越大的比例增益。Ki则决定了稳态误差的消除速度和电阻R相关。带宽到底取多少合适一个基本原则是电流环带宽要远低于采样频率一般取开关频率的1/10到1/20。开关频率10kHz时采样频率如果是10kHz带宽取1000rad/s左右比较稳妥最多不要超过2000rad/s否则离散化延迟会引起振荡。速度环的带宽就更慢一些通常取电流环带宽的1/5到1/10。速度环比电流环慢得多这样的好处是两级环路不会互相打架。速度环的输出就是iq的给定值所以速度环PI参数和转动惯量、极对数、磁链都有关系直接计算比较繁琐我在仿真中更喜欢用试凑法先给一组大致参数然后看阶跃响应波形微调。2.3 SVPWM调制模块的搭建SVPWM是FOC里非常有特色的一步。它把电流环解耦后的uα、uβ转换成三相桥臂开关信号或占空比相比传统SPWMSVPWM的直流母线电压利用率要高最高可达母线电压的1/√3倍。我在仿真里一般用角度法来实现SVPWM思路简单不容易出错第一步计算参考电压矢量的幅值和相角Vm sqrt(uα * uα uβ * uβ)θ atan2(uβ, uα)注意把角度范围从(-π, π]换算到(0, 2π)第二步判断扇区sector floor(θ / (π/3)) 1这个公式把整个360度空间分成六个扇区每个扇区60度。第三步计算当前扇区中两个相邻基本矢量各自的作用时间T1 √3 * Vm / Vdc * Ts * sin(π/3 - θ_local)T2 √3 * Vm / Vdc * Ts * sin(θ_local)T0 Ts - T1 - T2这里θ_local是把θ换算到当前扇区内的局部角度范围0到π/3。Ts是PWM周期。T1和T2分别是两个相邻矢量的作用时间T0是零矢量作用时间。计算出来的T0会判断正负。正常情况下T0大于等于0如果T0小于0说明指令电压已经超过了SVPWM线性调制区此时需要对T1和T2做等比例缩放这就是过调制处理。Simulink模型里要在SVPWM模块后面加一个限幅否则调制比超过1的时候占空比会跑出去波形和实际硬件就不一致了。SVPWM模块用MATLAB Function实现最方便扇区判断、时间计算、七段式占空比换算全写在同一个函数里。写完之后输入uα、uβ、Vdc、Ts输出就是三相上桥臂的占空比再往下接PWM发生器或者直接接受控电压源模型。2.4 逆变器与PMSM本体建模逆变器和PMSM本体模型的选择直接影响仿真速度和精度。Simscape Electrical里面有现成的Universal Bridge模块可以选择IGBT或MOSFET作为开关器件配合PWM信号驱动能够比较真实地把开关谐波模拟出来。但如果你主要关心控制算法不想把开关过程细节全仿真出来也可以用平均电压模型直接拿SVPWM算出的三相调制波作为受控电压源的输入接到PMSM模型上。这种做法仿真速度快很多不会因为开关频率太高而把仿真步长压得很小但缺点是看不到电流纹波和开关谐波。我的建议是控制算法初调的时候用平均模型尽可能多跑工况等PI参数整定得差不多了再换回开关模型看一次完整波形。PMSM本体模型直接用Simscape里面的Permanent Magnet Synchronous Machine模块。在参数设置里需要填上定子电阻、d轴电感、q轴电感、永磁磁链、极对数、转动惯量、黏滞摩擦系数等。这个模块已经考虑了反电动势、电磁转矩和机械方程足够日常仿真使用。如果你的目标是更深入地研究电机数学模型也可以自己搭一个PMSM数学方程模型用积分器、乘法器、三角函数搭建磁链方程、电压方程、转矩方程和运动方程。自己搭一遍会加深理解但工程上直接使用官方模型效率更高所以在一般项目里我不建议重复造轮子。3. 关键参数计算与实操配置3.1 电机参数与仿真环境设置为了方便讲解我举一组具体的电机参数后面所有计算都以这组参数为基础参数数值定子电阻 Rs0.958 Ωd轴电感 Ld5.25 mHq轴电感 Lq5.25 mH永磁磁链 Ψf0.0827 Wb极对数 Pn4额定转速3000 rpm额定电压220 VAC直流母线电压 Vdc311 V转动惯量 J0.003 kg·m^2这组参数是典型的750W级别伺服电机水平用起来比较顺手。转速3000rpm时电频率为3000 / 60 * 4 200Hz换算成角速度是约1256.6 rad/s。如果直接在220V交流整流得到的311V直流母线上运行3000rpm时反电动势峰值约为0.0827 * 2π * 200 ≈ 103.9V留有充足的调压裕量仿真中不容易出现电流失控。仿真环境设置方面我的习惯是采用离散仿真模式。因为FOC最终要落到MCU里离散化之后的模型和真实控制器行为更接近。在Simulink模型配置参数中求解器选择离散定步长步长设置为1e-5秒或者2e-5秒。开关频率10kHz对应PWM周期100us如果仿真步长太大PWM边沿会和采样时刻重叠导致波形异常步长太小的又跑得慢1e-5秒是个折中。3.2 电流环PI参数计算实例现在用上面的电机参数来算一下电流环PI参数。假设电流环期望带宽取1000rad/s这个值约为开关频率角频率的1/10比较稳妥。Kp ≈ L * ωc 0.00525 * 1000 5.25 V/AKi ≈ R * ωc 0.958 * 1000 958离散化的时候积分系数需要乘上采样周期。假设电流环执行频率和开关频率一致为10kHzTs 1e-4秒那么离散积分增益为Ki_d 958 * 1e-4 0.0958这里要注意一点Simulink里的离散PI控制器或者我们自己搭的离散PI模块参数单位必须和连续域PI不一样。用PID Controller模块时如果选择离散域它会直接提示你填离散增益如果自己搭就是用Kp和Ki_d两个增益搭成比例加积分结构。很多人在仿真里把连续域的Ki直接用到了离散模型上结果积分作用弱了100倍电流稳不住。如果把带宽提高到2000rad/sKp就变成10.5Ki变成1916。从仿真波形看PI参数增大会让动态响应更快但也会让电流噪声更明显尤其在电感较小、采样延迟不可忽略的时候很容易出现高频振铃。所以实际调试时我都是先给一个相对保守的带宽比如600到1000rad/s确认模型稳定后再逐步抬高。3.3 速度环和限幅参数速度环带宽我习惯取电流环的1/10也就是100rad/s左右。速度环PI参数直接算比较麻烦和转动惯量以及转矩常数都有关。可以先给一个初始估计再根据阶跃响应调整。速度环初始参数可以从机电时间常数出发来估计。转矩常数约为1.5 * Pn * Ψf算出来大约1.5 * 4 * 0.0827 ≈ 0.496 N·m/A。这个系数会作为速度环增益的一部分内环等效环节所以在实际整定中不必太纠结扫几组参数比推导公式来得快。速度环输出是q轴电流参考值必须设置限幅限幅值通常就是电机的额定电流峰值。假设额定电流有效值是3A峰值约4.24A那iq_ref的限幅可以设为±4.24A。没有这个限幅在速度阶跃比较大的情况下积分器积分到很大的值启动电流就会远远超过额定值。实际硬件上这是非常危险的。同样的道理电流环输出电压ud、uq也要限幅限幅值不要超过SVPWM线性输出能力。对311V母线电压相电压线性区幅值上限约为311 / √3 ≈ 179.6V。所以ud、uq的限幅设为±180V就足够了。3.4 初始角度和电流采样模拟离线仿真里转子角度通常直接由PMSM模型输出看起来好像不需要关心初始位置检测。但实际工程中编码器上电后的零位和电机反电动势零位不一定重合这个问题不做掉启动就会出问题。我在仿真里做了一个很实用的习惯在角度反馈路径上加一个偏置参数theta_offset用来模拟编码器零位没有对齐的情况。这样你在离线阶段就能测试角度偏差带来的影响。另外一个容易忽略的点是电流采样。Simulink的PMSM模型输出的是连续电流信号可以直接给坐标变换用但真实系统中电流是ADC采样得到的离散值而且往往是在PWM中点采样。如果你希望仿真和硬件更贴近建议在电流反馈路径上加入零阶保持器ZOH采样周期和PWM周期一致。这一步加上之后你会发现电流环的相位裕度变小了原来的PI参数可能还需要微调。对想在仿真阶段就模拟硬件特性的同学来说这个做法非常值得一试。4. 仿真运行、波形分析与调参方法4.1 怎么搭测试工况模型搭好之后不要直接给一个突变阶跃就开始看波形那样太粗暴也很难定位问题。我习惯按以下顺序来跑第一空载启动。给定转速从0斜坡上升到500rpm让模型先跑起来。斜坡时间设0.5秒左右转速不至于太激。观察id、iq是否收敛转速是否能跟上给定。第二加载测试。在电机稳定运行后比如1秒处给一个阶跃负载转矩负载大小设为额定的50%到100%。观察转矩和转速的恢复过程。这一步能看出速度环的抗扰能力。第三正反转测试。给定转速先到正1000rpm再到负1000rpm看四象限运行时是否有异常。那些坐标变换方向写反的模型到这一步肯定藏不住了。第四低速重载测试。给定转速50rpm挂上一倍额定负载。低速重载是FOC最考验电流环的工况电流大、反电动势小如果PI参数偏小电流会明显滞后转速波动会很大。测试工况搭的时候就在模型外面用一个Signal Builder或者一组Step模块组合就行不需要在控制算法里面加逻辑。保持控制算法纯粹只处理输入输出这对后续代码生成也有好处。4.2 波形能看出什么问题波形是你直接判断模型正常与否的唯一依据。我最常看的几个信号是三相电流、id/iq、转速、电磁转矩和相电压波形。先说三相电流。启动瞬间三相电流如果有一个很大的尖峰随后很快回落通常不是大事因为转速从0建立需要一个过程。但如果电流尖峰迟迟不降甚至越跑越大基本就是PI符号搞反了或者坐标变换方向反了。坐标变换方向反了的一个典型现象是iq给定为正实际转矩却是负的电机根本不往给定方向转。再说id/iq。在表贴式PMSM中id给定设为0稳定后id应该在0附近波动iq应该跟随负载转矩。如果id始终偏到一个方向比如0.5A不下来大概率是Park变换角度有偏差或者是电流传感器有偏移。仿真中不存在传感器偏移那就要优先检查角度对齐。SVPWM出来的相电压波形能看出调制是否进入过调制区。如果相电压波形顶部出现明显的平台削平说明指令电压已经超过SVPWM线性区此时电流波形会出现畸变谐波会增大。应对方式要么是提高母线电压要么是降低转速给定要么引入弱磁控制。调PI参数的时候我用的是一个比较笨但很有效的方法先把电流环带宽调出来观察q轴电流阶跃响应。给定一个iq参考值的小阶跃用Scope看iq跟踪速度如果没有超调、没有振荡响应时间在1ms以内说明电流环带宽基本够了。然后再调速度环观察转速阶跃响应。转速不要有大的超调一般允许5%到10%的超调但如果有持续振荡就要降低速度环比例增益或增加微分阻尼。4.3 从离线仿真到外部模式与FMU导出模型调通以后很多人的下一步是往硬件上搬。这里有两个热词需要提一下一个是Simulink外部模式External Mode一个是FMU导出。外部模式的意思是Simulink模型编译后部署到支持的目标硬件上通过以太网或串口和PC通信在Simulink界面里实时调参、实时看波形。这比纯离线仿真又进了一步因为你已经跑在真实处理器上只是还没有真正驱动功率电路。我做过几次很方便但前提是目标硬件有对应的支持包而且板子的ADC、PWM底层驱动已经写好。仿真里模块能跑通不代表硬件外设寄存器配置没问题外部模式只能帮你验证控制算法在真实芯片上的实时性验证不了驱动板的功率部分。FMU导出是另一个很实用的功能。Simulink模型可以把整个控制算法封装成FMU文件然后导入到其他仿真软件里做联合仿真。比如做整车仿真时车辆动力学在Carsim或Amesim里电机控制器在Simulink里这时把控制器导出成FMU给整车模型调用会省去很多来回切换的麻烦。在导出FMU之前模型必须满足两个条件一是全部采用定步长离散求解器二是所有模块都不能有连续状态。也就是说如果你用的是连续积分器要提前替换成离散积分器。我在实际项目中就是把外面的大闭环拆开控制器单独固化成FMU这样其他人使用时就没法随便改内部逻辑参数开放接口又保留很方便。5. 常见问题与排查技巧实录5.1 典型故障现象与排查表仿真模型搭完最常见的问题其实就那么几类。我把实际项目中经常遇到的故障现象和排查思路整理成了一个速查表。故障现象可能原因排查方法模型一跑就发散数值爆炸仿真步长过大PI参数过大或存在代数环减小步长降低Kp检查是否有未初始化的积分器id、iq波形正弦抖动很大电流环带宽过高或采样延迟未补偿降低电流环带宽到1000rad/s以下增加零阶保持器后重调PI转速建立不起来速度环饱和或iq限幅太小检查iq_ref是否一直顶在饱和值适当提高限幅启动瞬间电流异常大转子初始角度不对或Park方向反了检查theta_offset对比角度波形稳态时dq电流存在固定偏置坐标变换中角度换算错误用恒速工况核对id、iq和三相电流的关系电磁转矩脉动特别大死区时间或SVPWM过调制检查相电压限幅或把死区时间降至0后对比iq给定不为0但电机不转三相接线相序反了或PWM占空比反逻辑检查逆变器输出相序核对SVPWM输出逻辑上面这个表里最常被新手忽视的是代数环。Simulink里如果你把电流直接又反馈到坐标变换而坐标变换又和电流计算在一个时间步里相互依赖就会产生代数环。代数环会导致仿真可能崩溃或结果异常。检查方法是在模型菜单里浏览代数环系统会高亮显示。消除代数环的办法是给反馈环节加一个单位延迟或零阶保持器这也更贴近实际采样过程。5.2 几个很容易忽略的坑第一个坑是PI控制器积分饱和。很多人用Simulink自带的PID Controller模块却忘了设置积分抗饱和。在速度环中如果给定转速迟迟达不到目标积分项会一直累积到很大的值一旦转速开始跟上这个累加的积分会让输出继续冲上去造成大超调甚至反转。最简单的方法是给速度环PI输出加入限幅之外还要把积分输出同步限幅在同样的范围或者用条件积分的做法。Simulink里可以用Integrator模块的limit output和保持饱和状态来实现。第二个坑是SVPWM的零序分量处理。如果你拿SVPWM算出来的三相占空比直接去和三角波比较生成PWM波形一定要确认比较方式。是大于的时候输出高电平还是小于的时候输出高电平不同控制板可能不一样。如果逻辑反了电机也能转但效率变差电流波形会很奇怪。仿真中用开关模型时可以先不加电压看纯占空比波形再接入电机。第三个坑是电机模型初始值的设置。PMSM模块的初始转子角度通常默认是0但如果你在第一拍就给定了一个很大的iq电机会以一种不真实的瞬态启动。解决办法是给速度给定加一个较长的斜坡或者把PMSM模块的初始条件改成和实际工况匹配。尤其在做弱磁或高速工况时初始值不匹配会导致第一拍电流尖峰非常大。第四个坑是不同Simulink版本的模块路径不一致。Simscape Electrical里的PMSM模块不同版本可能从“Simscape/Power Systems”变成了“Simscape/Electrical/Specialized Power Systems”。如果你打开别人模型时发现模块变红了多半就是版本差异。解决方法是不要在模型里用绝对路径引用模块尽量用子系统内部封装跨版本时容错率更高。5.3 调试时最值得养成的好习惯除了一次次改参数之外我强烈建议你把仿真中关心的信号用数据记录功能记下来不要只看Scope上的实时波形。Scope上看到的那几条线一晃就过去了很难反复比较。Simulink里用To Workspace模块或者日志记录Simulink Data Inspector参数改一轮之后就可以并排比较前后两组波形的差异。再一个建议是每次只改一个参数。经常看到有人一次性把Kp、Ki、带宽、限幅全改了然后波形变好了却说不清到底是谁起的作用。这不是调参是在赌运气。正确做法是保持其他参数不变只动一个参数在图上对比两组波形的差异记录结论然后再动下一个。还有一个经验是仿真也要考虑“最坏情况”。比如母线电压降低到200V负载突然从0加到满载或者某个采样通道延迟了半个周期这些情况下模型还能不能稳。真实硬件运行中电源波动、负载突变都是常态如果把仿真只限定在理想额定工况那仿真的参考价值就会打折扣。6. 仿真模型后续扩展建议6.1 做无感FOC前的准备无感FOC是最近被问得特别多的话题。用完这篇Simulink模型之后如果你想把位置传感器去掉那仿真模型就是在正式上硬件之前最好的平台。无感FOC的关键在于转子位置和速度估计常见方法有滑模观测器、扩展卡尔曼滤波器、高频注入法等。在现有模型上扩展无感方案时你首先要做的就是“破坏”原本理想的位置反馈——把PMSM模块输出的真实角度和速度藏起来只给电流、电压信号作为观测器的输入然后用观测器估算出来的角度和速度去替换原来的反馈。这一步在仿真中很值得提前做因为硬件上接编码器时你还能用编码器信号来验证观测器可一旦切到无感模式错误的初始角度会在低速时直接导致启动失败。仿真里你可以反复测试不同初始角度下的启动策略把所有边界情况摸清楚之后硬件调试会轻松很多。我建议无感仿真参数先放在中高速工况比如额定转速以上滑模观测器在中高速段表现稳定低速段的动态会比较难处理。把中高速段调顺之后再慢慢把转速往下压最后才考虑高频注入这一类零低速方案。6.2 弱磁控制、参数辨识等扩展方向这台仿真模型的扩展空间很大。如果你要做高速运行可以加上弱磁控制也就是在电压接近饱和时主动利用负的d轴电流来削弱永磁磁链从而让电机在电压受限情况下继续升速。弱磁控制实现起来不复杂关键在于电压环或者查表策略的参数设计而Simulink正好方便你把这些策略放进去试。参数辨识也是很多人的下一步需求。在线辨识或者离线辨识定子电阻、电感、磁链对于提高控制性能非常重要。Simulink里可以搭建递推最小二乘RLS模块利用运行中的电流和电压数据实时辨识电阻和电感。有了这三个参数PI参数可以自动根据工况进行调整也就是自整定控制。如果还想进一步逼近工程实际你可以把机械模型做得更细致比如加入齿轮箱、减速器背隙、负载惯量变化。用Simscape Multibody连接机械负载或者和Carsim/Amesim做联合仿真都能把你的控制算法放到更复杂的工况里测试。我之前试过把电机控制模型和整车动力学模型连在一起调试的能量回收策略和扭矩补偿逻辑很多在纯电机台上发现不了的问题放到联合仿真里就暴露出来了。6.3 仿真文件的维护和版本管理模型搭好了之后别直接拷一个最终版就完事。我的习惯是给每个版本加日期和描述比如“FOC_v1_20250110_电流环整定2700rpm”这样后面翻找的时候一眼就能看到该看哪个文件。Simulink模型自带版本化工具也可以直接用Git管理模型文件虽然Simulink的mdl或slx文件在Git里直接看diff不方便但至少能保存版本回溯点。每次修改完参数在模型的Description字段里备注一下改了哪些内容、为什么改。模型放久了人会忘记当时的想法备注能帮你省下大量回忆时间。还有一点仿真文件夹里放一个README.md把电机参数来源、PI参数计算方式、测试工况说明写清楚。这份文件以后交给你新来的同事比口头讲十遍都有用。回到我自己的实际体验搭这个PMSM FOC模型最深的印象就是最终调试时发现一切正常、但电机就是啸叫的那一次。仿真中一切波形都很完美等到硬件上才发现电流采样时刻和PWM开关边沿重合了导致采样到开关噪声。后来回到Simulink把零阶保持器和延迟模块加到电流反馈路径上重新整定了一次PI参数波形才和仿真对得上。从那以后我再也不把仿真模型完全建立在理想反馈上而是尽量提前把采样延迟、读写量化、限幅非线性这些“不干净”的因素放进去。这套仿真模型的价值恰恰就是让你在真正碰硬件之前把这些坑提前踩一遍。
返回列表