分数阶PID控制器
在matlab中绘制分数阶PID控制器的奈奎斯特图时,由于没有办法使用tf来构造传递函数,并进一步用自带的函数库画图,从而只能从原理上计算数据绘图。
使用PLOT3绘图
clc;clear ;
Uin = 48; % 输入电压
L = 130e-6; % 电感值
C = 68e-6; % 电容值
R = 5; % 电阻值
% miu = 1; % 微分项的分数阶次
%Kp=0.01
Kp = 0.01:0.001:0.05; % 比例项
Ki = 10; % 积分项
% Kd = 0.2; % 微分项
% 创建频率向量
omega = linspace(-1e5, 1e5, 5e4); % 设置频率范围
% 初始化 lambda 值范围
lambdas = [0.4 0.8 0.9 1 1.1 1.2 1.3 1.4 1.5 1.6 ] ;
% 初始化奈奎斯特图数据
num_omegas = length(omega);
num_lambdas = length(lambdas);
num_kp=length(Kp);
G_lambda = zeros(num_omegas, num_lambdas);
% 计算奈奎斯特图数据
for j=1:num_kp
for i = 1:num_lambdas
lambda = lambdas(i);
Gc = Kp(j) + Ki * (1i*omega).^(-lambda);
Gv = Uin ./ ((1i*omega).^2 .* L .* C + (L/R) .* (1i*omega) + 1);
G_lambda(:, i) = Gc .* Gv;
end
% 绘制奈奎斯特图
G_plot1=G_lambda(2e4:2.49e4,1:num_lambdas);
G_plot2=G_lambda(2.51e4:3e4,1:num_lambdas);
z_num1=length(real(G_plot1));z1=Kp(j).*ones(z_num1,1);
z_num2=length(real(G_plot2));z2=Kp(j).*ones(z_num2,1);
plot3(real(G_plot1),imag(G_plot1),z1,'Color',[0.5 0.5 0.5])
plot3(real(G_plot2),imag(G_plot2),z2,'Color',[0.5 0.5 0.5])
grid on %打开网格线,便于观察和分析
xlim([-8 10])
ylim([-20 20])
hold on
end
x1=[-1,-1];y1=[0,0];z1=[0,0.06];
line(x1,y1,z1,'Color','red','lineWidth',3);
xlabel('实部');
ylabel('虚部');
zlabel('比例系数Kp')
在小循环中计算不同λ时,实质就是在z轴变量相同时的几组数据,然后在绘制奈奎斯特部分,G_plot1、2就是提取出计算的数据的部分,让画图的数据量小些,z_num就是生成和xy轴数据量相同的一组数,kp控制着z轴的大小,相当于就是多个二维图叠加的效果了。