前阵子一个做设备驱动的朋友跟我抱怨说Simulink里跑异步电机矢量控制仿真网上资料找了一堆可标题里全是FVCSVPWM转子磁场定向这种词照着抄都跑不出稳定波形。我听了倒不意外——这套系统看着高大上真正动手搭的时候每个模块的来龙去脉不清楚参数就是瞎调。今天就把这个经典组合从头到尾拆开讲一遍从标题里的每个词开始到建模思路、参数整定、调试踩坑尽量让没接触过矢量控制的人也能照着搭出一套能跑、能看波形的仿真。1. 从标题拆解这套系统的整体思路1.1 拆开标题先看这套系统到底由什么组成Matlab/Simulink仿真 异步电机矢量控制 FVC有速度反馈 两电平SVPWM 转子磁场定向这个标题看着长其实每个词都在指一个具体的环节。异步电机矢量控制是说控制对象和控制方法不是永磁同步电机也不是直接转矩控制核心是把异步电机这种强耦合、非线性的对象通过坐标变换解耦成类似直流电机的结构。FVC有速度反馈指的是控制结构里有转速闭环外环是速度环内环是电流环编码器或者测速发电机把实际转速反馈回来跟给定转速做比较。两电平SVPWM是逆变器的调制策略也就是怎么把控制器算出来的电压指令变成逆变器六个开关管的驱动信号。转子磁场定向是矢量控制里的具体定向方式就是把旋转坐标系的d轴对准转子磁链矢量这样励磁电流和转矩电流才能真正解耦。这四个词之间的关系其实是一条完整的控制链路转速给定经过速度环产生转矩电流指令电流环再根据励磁电流和转矩电流的反馈算出d、q轴电压经过坐标反变换得到两相静止坐标系下的电压分量最后交给SVPWM去生成实际的开关脉冲。转子磁场定向并不是一个独立模块它藏在坐标变换、磁链观测和转差计算里是整个矢量控制能够成立的前提。这套仿真结构算是异步电机驱动里最经典、也最不容易出错的方案明确用速度传感器反馈省去了无速度传感器算法里对转速观测的顾虑低速和零速下的性能稳定得多。适合刚接触FOC的人做第一套完整仿真也适合做硬件在环之前先在模型层面验证算法逻辑。1.2 这套仿真解决什么问题、适合谁来用做异步电机驱动最怕的不是算法复杂而是调试环境不理想。直接上电调电流过冲可能烧管子参数整定不当可能啸叫或者跳闸而且在没有示波器、没接负载的情况下想把速度环和电流环分开调麻烦得很。用Simulink仿真的价值就是先把控制逻辑和参数在虚拟环境里验证一遍把大部分坑趟平再上实物。具体来说这套仿真能解决三类问题。第一是验证算法逻辑坐标变换方向对不对、SVPWM扇区判断有没有问题、PI输出极性是否一致这些纯看代码很难发现仿真里看波形一眼就能看出来。第二是参数整定电流环和速度环的PI参数可以先在仿真里用工程公式算一遍再微调省得在实物上盲目试凑。第三是极限工况测试比如突然加载、转速阶跃、电压跌落、过流保护门限等这些在实物上做比较危险仿真里可以随意造条件。什么人适合用这套仿真我接触过不少读者有刚转行做电机控制的嵌入式工程师有做电力电子研究的研究生也有做设备维护但想搞明白原理的现场工程师。大家基础不一样但共同点是都需要一个能亲手搭出来的完整案例。如果已经做过SPWM或者六步换向但对矢量控制还没有建立起整体感觉这套仿真就是非常合适的跳板。1.3 为什么选Simulink而不是直接写C代码曾经也有人问既然矢量控制的算法在单片机里是用C写的为什么不直接从代码开始我的看法是仿真的作用和代码完全不一样。Simulink里我可以直接拖一个现成的异步电机模型不用自己解四阶状态方程控制算法用模块或者简单的M函数搭出来改一个PI参数只要双击改数字跑一遍几十秒就看出来效果这在手写代码的场景下是很难达到的效率。另外Simulink自带电机模型、逆变器模型、测量模块都是经过验证的省去了自己搭模型出错的概率。还有一点很关键Simulink的求解器可以配置成定步长离散模型后续如果要通过嵌入式Coder生成单片机代码整个仿真模型几乎可以无缝过渡到硬件平台前期搭的控制逻辑不会白费。当然Simulink不是没有缺点最大的问题就是仿真速度。开关频率如果设到10kHz变步长求解器在每次开关动作附近会疯狂地缩小步长仿真跑起来非常慢。这个问题后面专门讲解决办法也有不少。2. 关键技术模块的原理与建模要点2.1 转子磁场定向矢量控制的数学根基三相异步电机的数学模型是个多变量、强耦合的非线性系统定子电压方程和转子电压方程互相纠缠转矩表达式又跟电流、磁链都有关。转子磁场定向的思路非常巧妙让一个旋转坐标系的d轴始终跟转子磁链矢量方向对齐这样一来转子磁链在q轴的分量就为零。这个定向的直接结果就是把定子电流分解成两个独立的控制量d轴电流负责建立和维持转子磁链可以叫它励磁分量q轴电流负责产生电磁转矩可以叫它转矩分量。在坐标系旋转速度跟转子磁链同步的前提下励磁和转矩两部分互不影响控制就变简单了。这跟直流电机里的励磁绕组和电枢绕组是比较类似的这也是为什么矢量控制也叫四直流电机控制思想。实际工程里转子磁场定向有直接定向和间接定向两种方式。直接定向需要观测转子磁链角度通常用电压电流模型或者加装磁链观测器实现麻烦而且低速下精度容易退化。绝大多数FVC有速度反馈的应用用的是间接定向也叫转差频率法定向它只需要知道转子转速和转差角速度就能计算出同步旋转坐标系的电角度不需要直接观测磁链矢量实现简单得多而且在速度反馈可用的情况下动态性能足够好。2.2 异步电机本体模型参数到底该怎么设Simulink里面异步电机有现成模块一般叫Asynchronous Machine有SI国际单位制和标幺值两种选择。我给的建议是直接用SI单位制尤其是刚开始搭仿真的时候标幺值换算容易出错SI单位下所有参数都能在电机铭牌和厂家手册里直接找到调试时心里更有数。要注意的一个关键点是电机模块里的转子参数通常是折算到定子侧的等效值。这个折算系数不需要自己去算电机厂家给的数据表里一般已经把折算后的参数列出来了。还有初始磁链的设置初始值最好设成零或者接近零否则仿真一开始就会有一个比较大的暂态过程看起来就像启动冲击电流容易让人误以为是控制问题。实际的电机模型在Simulink内部是用dq旋转坐标系下的四阶状态方程描述的它已经考虑了定子瞬态、转子瞬态和机电耦合只要参数输入正确不需要自己额外建模。可以在模块参数里看到的定子电阻、定子漏感、转子电阻、转子漏感、互感、转动惯量、极对数这些值每个都会影响仿真的动态特性其中定子电阻对低速性能影响最大互感则直接决定磁链观测和转差计算的精度。2.3 FVC速度闭环外环内环配合的工程逻辑FVC有速度反馈的矢量控制结构上就是典型的双闭环控制速度环在外面电流环在里面。速度环接收转速误差经过PI调节器输出q轴电流给定值电流环有两个一个负责d轴电流一个负责q轴电流分别跟随励磁电流和转矩电流的指令。为什么需要双环而不是一个速度环直接输出电压这是因为电流环的动态响应速度要比速度环快很多电磁时间常数一般只有几毫秒甚至更短而机械时间常数可能会有几百毫秒甚至几秒。把它们分开控制就能让电流快速跟上指令而速度环只需要处理相对缓慢的机械动态两个环都不会互相拖累。电流环在物理上还起到限流保护的作用因为整个过程电机电流的给定值都可以被直接限制在安全范围内。FVC相对无速度传感器的矢量控制最大的优势就在低速和零速工况。无速度传感器方案在极低速下反电动势几乎为零转速观测很容易漂移而FVC有物理速度反馈低速下速度信号依然准确所以带载启动、爬行、堵转这类的工况都容易处理。代价就是需要一个速度传感器但很多工业场合本来就会安装编码器或测速发电机这个代价并不算大。2.4 两电平SVPWM为什么绕不开它逆变器调制策略很多人第一反应是SPWM就是三相正弦调制波跟三角形载波比较。SPWM实现简单但有一个明显的短板直流母线电压利用率比较低输出到电机端最大相电压峰值只能到母线电压的一半。SVPWM的思路不同它不是分别调制三相而是把三相合成电压矢量放在一个复平面里用逆变器八个开关状态对应的基本电压矢量去合成期望的电压矢量。SVPWM在电压利用率上比SPWM高出约15%谐波含量和转矩脉动也比SPWM更小电机运行噪音更低。两电平的意思就是逆变器每个桥臂只有上下两个开关管输出相电压只有正母线或者负母线两种电平这是工业里最常见的结构。标题里的两电平SVPWM就是目前绝大多数低压变频器都在用的调制方式。SVPWM的实现大体分四步。第一步判断合成电压矢量落在六个扇区中的哪个第二步计算相邻两个基本电压矢量的作用时间第三步根据作用时间计算三相开关切换时刻第四步输出实际的PWM脉冲。后面实操部分我会按这个顺序给出可以直接套用的计算过程。3. 一步步搭出能跑起来的仿真3.1 系统拓扑和模块连接顺序如果让我给一个仿真搭的最小结构清单大概是这样的。直流电压源直接用恒定DC Source代表整流加滤波后的母线电压比如600V。两电平逆变器Simulink的Universal Bridge或者Three-Phase Inverter模块选择两电平、PWM驱动。异步电机Asynchronous Machine SI Units输入机械负载转矩输出定子电流、转速、电磁转矩等。速度传感器直接取电机模块的转速输出即可FVC场景里可以认为是真实编码器反馈。控制算法部分坐标变换、PI调节器、SVPWM这些可以在一个子系统里搭也可以写成M函数。连接顺序上控制算法输出PWM脉冲给逆变器逆变器输出三相电压给电机电机的电流和转速反馈回来给控制算法。反馈的电流需要经过Clark变换和Park变换转速进速度环。逆变器的直流母线要并联一个比较大的电容否则母线电压纹波会影响控制效果一般取几千微法。一个常被忽略的细节是电流反馈的采样时刻。仿真里如果直接用连续时间信号做反馈看起来很正常但后续要转离散控制或者生成C代码就一定要意识到实际单片机里电流采样是在PWM周期某个特定时刻进行的。建议从一开始就把控制算法做成离散的用ZOH零阶保持器模拟采样这样仿真结果才更贴近真实。3.2 坐标变换模块Clark、Park、反Park异步电机的定子电流要进入控制算法首先得从三相静止坐标系变换到两相静止坐标系也就是Clark变换。利用Ia Ib Ic 0这个约束可以简化成Ialpha IaIbeta (Ia 2 * Ib) / sqrt(3)当然也可以使用等幅值或者等功率两种不同的变换系数Simulink的坐标变换模块里一般会让你选注意跟电机模块、SVPWM模块保持一致就可以。我习惯用等幅值变换因为PI参数算起来更直观。接下来是Park变换把两相静止坐标系的电流转到转子磁链定向的旋转坐标系Id Ialpha * cos(theta) Ibeta * sin(theta)Iq -Ialpha * sin(theta) Ibeta * cos(theta)这里的theta就是转子磁链角度在间接定向里它等于转速积分加转差角度。电压那边还需要一个反Park变换把dq轴的电压指令变成alpha、beta轴的电压供SVPWM使用。Simulink里实现这几个变换既可以自己搭简单的三角函数模块也可以用FOC库里的现成坐标变换模块。自己搭的好处是看得见、能彻底理解坏处是接线多容易错。我建议新手至少自己搭一遍再换成库模块这个过程能在脑子里留下非常深的印象。3.3 电流环PI参数计算实例Pi参数整定是仿真里最容易卡壳的地方这里给一套可以落地的工程方法。用一台比较常见的2.2kW异步电机参数来做例子定子电阻Rs为2.7欧定子电感Ls为0.25亨开关频率设为10kHz电流环采样周期跟PWM周期一致Ts为0.0001秒。电流内环里电机电气部分可以近似成一个电阻加电感的一阶惯性环节。电流PI调节器最常见的整定方法是把PI零点跟电机极点对消也就是让PI的积分时间常数等于Ls除以Rs。这样整个电流开环就变成一个纯积分环节加增益更容易设计带宽。具体计算按工程简化方法来做。电流环带宽可以先取开关频率角频率的十分之一左右10kHz对应约6.28万弧度每秒取六千弧度每秒偏激进了我建议保守一点取一千到两千弧度每秒。这里取带宽w_i为1000弧度每秒那么Kp_i w_i * Ls 1000 * 0.25 250Ki_i w_i * Rs 1000 * 2.7 2700这里Kp_i是比例增益Ki_i是积分增益。实际进Simulink的PI模块时注意有的模块参数是Kp和Ki有的模块是Kp和1/Ti积分时间就是Kp除以Ki千万别搞混。这个算法只是一个起点实际还得看波形微调。如果电流响应慢适当增大Kp如果电流有振荡就要减小Kp或者增加Ki。仿真里调起来特别高效因为跑一圈波形很快就能看到趋势。3.4 速度环PI参数计算实例速度环作为外环带宽必须明显低于电流环工程上一般取电流环带宽的五分之一到十分之一。电流环带宽1000弧度每秒速度环就取100到200弧度每秒否则外环会把内环的动态放大系统容易不稳定。速度环设计的物理基础是电机的机械方程转矩等于转动惯量乘角加速度。电机极对数为2转子磁链大致取0.7韦伯那么转矩常数近似为1.5乘极对数乘磁链算出来约2.1牛米每安。转动惯量取0.01公斤平方米。速度环带宽取100弧度每秒的话Kp_w 2 * J * w_w / Kt 2 * 0.01 * 100 / 2.1算下来约0.95Ki_w Kp_w * w_w / 5 0.95 * 20约19这里的Ki_w需要根据实际积分效果再调。速度环的输出是q轴电流的限幅值必须加上一个合理的限幅比如额定电流的1.5倍否则启动大阶跃时电流会冲得很高。实际调试的时候一个常见误区是速度环增益不够就使劲加Kp结果速度确实快跟上了电流却开始振荡。正确做法是先保证电流环没有明显振荡再逐步提高速度环带宽每次只调一个参数。3.5 SVPWM计算核心步骤SVPWM模块的输入是Ualpha和Ubeta两个电压分量以及母线电压和开关周期输出是三相占空比或者PWM脉冲。扇区判断可以走一条简单稳妥的路先用atan2算出合成电压矢量跟alpha轴的夹角再看夹角落在哪个60度区间。比如0到60度是第一扇区60到120度是第二扇区以此类推到第六扇区。这个方法多花一个反正切的开销但在Simulink仿真或者是主频足够的MCU上完全不是问题而且逻辑非常直观不容易出错。作用时间计算我这里给一组基于伏秒平衡推导的常见公式。把母线电压记为Vdc开关周期记为Ts先算出X、Y、Z三个辅助量X sqrt(3) * Ubeta * Ts / VdcY (1.5 * Ualpha sqrt(3)/2 * Ubeta) * Ts / VdcZ (-1.5 * Ualpha sqrt(3)/2 * Ubeta) * Ts / Vdc然后根据扇区查表选择T1和T2。第一扇区时T1 XT2 Y。这里不同资料里X/Y/Z的定义也许略有差异但原理一致认准一套公式用就行。算出T1和T2之后还要补上零矢量作用时间T0 Ts - T1 - T2。如果T0小于零说明电压指令已经超调需要按比例缩放T1和T2这就是过调制处理仿真里经常碰到。接下来是七段式调制把零矢量分成两段放在周期开头和结尾中间插入V7零矢量这样开关切换的时候每次只改变一相谐波比较小也方便在实际逆变器里做电流采样。切换时刻Ta、Tb、Tc按下面的方式算Ta (Ts - T1 - T2) / 4Tb Ta T1 / 2Tc Tb T2 / 2然后在Simulink里把这三个切换时刻跟三角载波比较生成六路PWM信号。每个扇区下哪一相对应Ta、Tb、Tc会变化这个细节可以专门对着扇区表写一个M函数来输出三相对应关系。4. 调试实录常见问题与处理办法4.1 启动瞬间电流过冲怎么压几乎所有第一次搭这套仿真的人都会碰见这个问题给定转速阶跃之后启动那一瞬间电流波形直接顶到天上严重的时候过流保护整定都白做。原因主要有三个。第一个是速度PI输出限幅太松启动大阶跃时速度环直接把q轴电流指令拉到最大值电流自然冲高。第二个是积分饱和速度误差大导致速度环积分项快速累积等到转速接近给定值时积分项还保持在高位转速就会超调。第三是磁链建立初期转子磁链还没完全建立转矩电流却已经加上去了实际转矩可能会波动。处理办法也不难。第一把速度环输出限幅设成合理值比如1.2到1.5倍额定电流别下意识设成10倍。第二给速度给定加斜坡而不是直接阶跃斜坡时间取0.5到1秒启动冲击会明显缓解。第三在PI模块上开启抗积分饱和也叫Anti-Windup积分达到限幅时停止累加否则超调很难消除。4.2 转速波形振荡或者有静差速度环如果调完电流环之后接上去转速波形经常出现两种情况一种是稳态有静差转速始终达不到给定值另一种是转速来回振荡像在给定值附近打摆。静差多半是因为速度环PI的积分作用不够。如果用的是PI而不带积分或者Ki设得很小那静差就压不掉。把Ki加大、让积分慢慢把误差积掉静差就会消失。注意观察积分项的输出变化如果它一直在缓慢爬升说明积分作用确实弱了。振荡就要反过来看多数时候是速度环带宽太高了增益和积分都过于激进。先把Kp减半看振荡有没有减弱如果减了还振再把速度反馈滤波加上一个一阶低通截止频率取200赫兹左右。我调试时习惯把速度环带宽从低往高拉每拉一档就跑一次阶跃响应看临界点在哪里找到稳定裕度最大的位置再固定下来。4.3 磁链估算不准怎么办间接转子磁场定向依赖转差公式转差角速度跟转子时间常数和q轴电流有关。一旦电机参数跟实际值有偏移尤其是转子电阻随温度变化转子磁场定向就不再准确表现就是转矩响应迟钝、电流偏大、速度动态变差。仿真里由于电机模型参数是固定的磁链估算不准的直接原因多半是模型中使用的转子时间常数跟电机模块里的参数不一致。解决办法是回到电机参数表把转子时间常数算准再填进转差计算模块。转子时间常数等于转子电感除以转子电阻在2.2kW那个例子里大概是0.25除以2.1约0.12秒。还有一个更实际的建议如果以后要上硬件转子电阻会受温度影响漂移压铸铝转子的偏差尤其明显建议加入在线参数辨识或者改成磁链观测器。仿真阶段不用搞太复杂先把转子时间常数设置跟模型参数一致观察磁链波形是否平滑即可。4.4 仿真跑得慢的踩坑优化这个问题真得单独说。同样的模型有的人跑起来几十秒搞定有的人要跑十几分钟差别非常大。最大元凶是变步长连续求解器在PWM开关动作附近反复缩小步长开关频率越高仿真越慢。我的建议是直接把求解器改成定步长离散求解器比如ode4步长设成PWM周期或者比PWM周期略小。只要模型里的控制算法是按离散方式搭的定步长离散求解器并不会损失精度反而更贴近实际代码的运行方式。如果还觉得慢可以进一步降低示波器的采样点数或者不要同时把十几个信号全部录进Scope里。再一个实用技巧是先用开环或者不带SVPWM的简化模型调好PI参数再切换到完整拓扑跑最终验证这样前期的迭代速度会快很多。5. 一点实操体会搭这套仿真我的体会是先别急着追求波形完美第一目标是让整个闭环转起来。哪怕转速有小静差、电流有轻微纹波只要系统稳定就说明坐标变换、SVPWM、反馈方向这些基础环节全对了剩下都是PI参数的活。方向错了再怎么调参数都白搭这是我踩过最深的坑。另外就是调参顺序一定是从内环到外环。先把电流环单独跑用方波给定看电流跟踪电流环调稳了再去调速度环。很多人上来就调速度环Kp调半天没效果往下一看电流环本来就在振荡。这套仿真后续要扩展的方向也挺清楚的。想提高低速性能可以加磁链观测器想省掉速度传感器就把编码器反馈换成转速辨识算法想把逆变器损耗也考虑进去可以把理想开关换成带导通压降和开关损耗的IGBT模型。总之把基础这套玩透后面做硬件、做工程化都是水到渠成的事。
阅读完成 · 觉得有帮助?