赞
踩
目录
构建好的仿真模型
设置成速度开环控制,根据电机特性设置成速度开环控制,Iq指令50,设置扫描系统的输入,输出,这里的输入是Iq_ref0,输出是Speed_out.
仿真一下
代码如下
io(1)= linio('PMSM_FOC_PowerGUI_Model/Motor_Control/Motor_Control_Function/Control_Command_2ms/Iq_ref0',1,'input');
io(2)= linio('PMSM_FOC_PowerGUI_Model/Motor_Control/Motor_Control_Function/Control_Command_2ms/Speed_out',1,'output');
这里的意思是环路的输入输出位置,运行后可以直接定位到Iq_ref0的位置
input =frest.createFixedTsSinestream(0.002,{1, 2*pi*500});
input.Amplitude=5;
这是设置注入正弦信号的幅值,频率,运行效果如下:
这里注入一个1-500HZ的正弦信号,叠加在给定的Iq_ref0=50的输入上
画出伯德图
[sysData,simlog] = frestimate(mdel,io,input);
bopt = bodeoptions;
bopt.Grid = 'on';
bopt.PhaseMatching = 'on';
figure, bode(sysData,'*r',bopt)
frest.simView(simlog,input,sysData);
sysA = tfest(sysData,3, 1) %速度开环系统的传递函数,这里按照3个极点1个零点进行拟合
figure, bode(sysData,'r*',sysA,bopt) % 画出拟合出来的传递函数的伯德图
运行以上代码,仿真效果如下,Iq_ref0会被注入一个幅值5的正弦信号,速度也会振荡
仿真结束后得到的伯德图和拟合的伯德图
最后得到了速度环的开环传递函数
通过Control System Designer设计补偿器,这里就用PI的传递函数来设计
s = tf('s')
Gspeed=(4551*s + 1.261e05)/(s^2+653*s+6907)
Gspeed_z=c2d(Gspeed,0.002,'tustin');
Speedz_numz = 0.070761*[1 -0.9229];
Speedz_denz = [1 -1];
C_speedz = tf(Speedz_numz,Speedz_denz,0.002);
H_speed =1;
F_speed =1;
controlSystemDesigner(Gspeed_z,C_speedz,H_speed,F_speed);
pid(C_speedz)
加上速度环,并把生成的PI参数添加到模型,进行仿真,仿真效果如下:
PI参数控制效果满足设计需求
在进行环设计时,Matlab提供了很多方便的工具,我们可以自己推导传递函数,进行控制器的设置,也可以通过扫伯德图生成传递函数再进行补偿器的设计,甚至更简单的我们做好PI控制器后直接试凑法得到参数,实际情况应根据系统的复杂程序进行判断该用哪种方法,这里通过这个小实验记录下通过扫伯德图的方法获得传递函数并进行补偿器设计。这种方法同样也可以用于电源环路设计
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。