永磁同步电机矢量控制系统仿真及其对应说明报告!
永磁同步电机的矢量控制算是工业界的老熟人了,这玩意儿玩的就是磁场和转矩的解耦。咱们今天不扯那些复杂的数学推导,直接打开Simulink甩开膀子干。先看这张仿真模型总图——左边是双闭环结构,右边那块蓝色的SVPWM模块是不是特别抢眼?别急,这玩意儿待会儿咱们拆开了揉碎了讲。
先看电流环的实现。在Simulink里搭建Park变换的时候,有个细节容易被新手忽略:theta角到底是电机角度还是别的什么?这里我摔过跟头,直接上代码:
% 电角度计算模块 function theta_e = calc_theta_e(theta_m, pole_pairs) theta_e = pole_pairs * theta_m; theta_e = mod(theta_e, 2*pi); end这个pole_pairs极对数要是没乘对,整个坐标变换直接翻车。上次有个兄弟仿真结果震荡得像蹦迪,查了半天发现这里参数设成了1,实际电机是4极的,你说坑不坑?
PI调节器参数整定这块,别迷信书本上的临界比例法。实战中我习惯用这个模板:
Kp = Ld * bandwidth * 2; % d轴电感乘以两倍带宽 Ki = R * bandwidth; % 定子电阻乘带宽比如当带宽设为500Hz时,直接套公式秒出参数。不过注意啊,这里的Ld和R得用真实电机参数,别拿淘宝上买的拆机电机参数瞎填,实测过有个老哥的电机Ld实际比标称值大了30%,仿真和实物对不上差点怀疑人生。
永磁同步电机矢量控制系统仿真及其对应说明报告!
SVPWM生成模块是重头戏,看这段核心代码:
function [Ta, Tb, Tc] = svpwm(Valpha, Vbeta, Vdc) % 扇区判断 theta = atan2(Vbeta, Valpha); sector = floor(theta/(pi/3)) + 3; % 作用时间计算 T1 = sqrt(3)*Ts*(Vbeta - Valpha/tan(sector*pi/3)) / Vdc; T2 = sqrt(3)*Ts*Valpha / (Vdc*sin(sector*pi/3)); % 矢量作用时间分配(这里简化处理) Ta = (Ts - T1 - T2)/4; Tb = Ta + T1/2; Tc = Tb + T2/2; end注意那个Ts是PWM周期,曾经有仿真出现高频振荡,最后发现是这里没做饱和限制。当T1+T2 > Ts时,必须做标准化处理,否则仿真器不会报错但波形会抽风。
最后说说速度环调试的玄学——别一上来就调参数。先让电流环闭环跑起来,看空载转速能不能稳在设定值。遇到过最奇葩的情况是仿真时转速曲线像心电图,结果是机械惯性参数J设太小了,电机稍微给点转矩就飞转,把J值调大5倍立马老实。
仿真跑通后别急着关电脑,把示波器模块的这些变量拖出来看看:
- dq轴电流跟踪情况(理想状态是id=0)
- 三相电流THD(超过15%就得查PWM环节)
- 转矩脉动(正常应该在2%以内)
要是发现启动时电流冲击过大,试试在速度给定加个斜坡函数。有次仿真炸了IGBT模型,就是因为启动瞬间给个阶跃速度指令,电流直接彪到200A,虽然仿真里不怕炸,但实际做硬件可是会冒烟的。