在m文件中编写PID控制算法
已知被控对象传递函数为systf[4.27],[1 0 0]); kp50; ki1.5; kd10; 在simulink下如何搭建进行仿真我只会m文件来仿真,以下是.m文件 clear all; close all; ts0.01;采样时间 systf[4.27],[1 0 0];构造时滞系统传递函数模型 dsysc2dsys,ts,z;连续系统离散化,用z变换 [num,den]tfdatadsys,v;求零极点矩阵 u_10.0;u_20.0;输入输出等相关变量初始化 y_10.0;y_20.0;y_30.0; x[0,0,0]; error_10; error_20; for k11400 timekk*ts; 400个采样点 rink1;Step Signal kp50; ki1.5; kd10; ukkp*x1kd*x2ki*x3; PID 限制器输出 Restricting the output of controller 对限制器件的输出进行限幅限制 if uk10 uk10; end if uk-10 uk-10; end Linear model 线性模型 youtk-den2*y_1-den3*y_2num2*u_1num3*u_2; errorkrink-youtk; Return of parameters 参数更新 u_2u_1;u_1uk; y_3y_2;y_2y_1;y_1youtk; 增量式PID限制算法 x1errork-error_1; Calculating P x2errork-2*error_1error_2;Calculating D x3errork; Calculating I error_2error_1; error_1errork; end figure1; plottime,rin,b,time,yout,k; xlabel无时滞环节的限制系统PID仿真 times,ylabelrin,yout; grid on; figure2; plottime,u,k; xlabeltimes,ylabelu; grid on; 最近让做一个一级倒立摆数字PID限制 这是我参考了别人的程序的基础上,自己编写的。 可是当我输入不同的kp时,没有出现振荡的状况。 大家帮我看看,这个程序哪出了问题呢 clear all; close all; l1; g9.8; ts0.001; 小车的位移为输入,角度为输出时的差分方程表示 systf[3 0 0],[-4*l 0 3*g]; dsysc2dsys,ts,z; [num den]tfdatadsys,v; 小车的受力为输入,位移为输出时的差分方程表示 sys1tf[-4*l 0 3*g],[-2.2 0 2.1*g 0]; dsys1c2dsys1,ts,z; [num1 den1]tfdatadsys1,v; 由冲击力产生的小车位移,此为系统的干扰也是初始位移输入 k11000; x0impznum1,den1,k; f_10; f_20; x_10; x_20; u_10.0;u_20.0; uu_1x01;uu_2x02; theta_10;theta_20; s[0 0 0]; e_10;e_20; kp0;ki0;kd0; for k11000 timekk*ts; rink0.0;期望输入 选用的是PID增量算法 detaukkp*s1kd*s2ki*s3; uku_1detauk; if uk10 uk10; end if uk-10 uk-10; end uukukx0k; thetak-den2*theta_1-den3*theta_2num1*uuknum2*uu_1num3*uu_2; erink-thetak;e表示误差 u_2u_1;u_1uk; uu_2uu_1;uu_1uuk; theta_2theta_1;theta_1thetak; s1e-e_1; s2e-2*e_1e_2; s3e; e_2e_1;e_1e; end hold on; plottime,theta,r,time,rin,b