📄 eex2.m
字号:
function [step1,fix,tstop,idnt]=eex2(temp,t,Ts,kp,ki,kd);
% temp 设置阶跃输入值
% t 设置采样点数
% step1 simulink阶跃输入设定值
% fix simulink仿真的固定步长,即采样周期,建议最小选0.2s
% tstop simulink仿真停止时间
% idnt 实时输出
% kp,ki,kd分别为PID控制器的三个参数
%运行步骤:1 计算得到实验箱上搭建系统的传递函数,在simulink中搭建闭环控制系统,
% 按照选定的采样周期将其离散化,运行ex2.mdl,调整PID参数满足性能要求。
% 2 运行eex2函数,格式 [step1,fix,tstop,idnt]=eex2(temp,t,Ts,kp,ki,kd)
% kp,ki,kd为simulink仿真得到的参数值。
% 4 运行plot(out,'r-')
% 例如 temp=160;t=160;Ts=0.2;kp=0.1;ki=0.1;kd=0;
s=serial('com1','baudrate',2400,'parity','none','databits',8,'stopbits',1);
fopen(s);
fwrite(s,85,'uchar'); %十进制85就是十六进制55H.
fwrite(s,16,'uchar'); %十进制16就是十六进制10H.数据
fwrite(s,00,'uchar');
fwrite(s,temp,'uchar');
error_1=temp;
errori=0;
for i=1:t
tic;
fwrite(s,85,'uchar'); %十进制85就是十六进制55H.
fwrite(s,01,'uchar'); %十进制16就是十六进制01H.数据
fwrite(s,00,'uchar');
fwrite(s,00,'uchar');
idn(i)=fread(s,1,'uint8')+8/255*temp;
error=temp-idn(i);
errord=(error-error_1)/Ts;
errori=errori+error*Ts;
idn1(i)=kp*error+kd*errord+ki*errori;
error_1=error;
fwrite(s,85,'uchar');%十进制85就是十六进制55H.
fwrite(s,16,'uchar');%十进制16就是十六进制10H.数据
fwrite(s,00,'uchar');
fwrite(s,idn1(i),'uint8');
ts1=toc; %simulink仿真停止时间
pause(Ts-ts1);
end
tstop=Ts*t %simulink仿真停止时间
step1=temp; %simulink阶跃输入设定值
fix=Ts; %simulink仿真的固定步长
temp=00
fwrite(s,85,'uchar'); %十进制85就是十六进制55H.
fwrite(s,16,'uchar'); %十进制16就是十六进制10H.数据
fwrite(s,00,'uchar');
fwrite(s,temp,'uchar');
fwrite(s,85,'uchar');%十进制85就是十六进制55H.
fwrite(s,16,'uchar');%十进制16就是十六进制10H.数据
fwrite(s,00,'uchar');
fwrite(s,temp,'uchar');
fwrite(s,85,'uchar');%十进制85就是十六进制55H.
fwrite(s,16,'uchar');%十进制16就是十六进制10H.数据
fwrite(s,00,'uchar');
fwrite(s,temp,'uchar');
fclose(s);
delete(s);
clear s;
idnt=[ 0 idn(6)/6 idn(6)/4 idn(6)/2.5 idn(6)/1.5 idn(6:t) idn(t)]; %实时输出
plot(idnt);
grid;
legend('实时输出');
hold on
% plot(out,'r-')
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -