以下是PID控制的部分代码(matlab的m文件):
ts=0.001;采样时间=0.001s
sys=tf(400,[1,50,0]);建立被控对象传递函数
dsys=c2d(sys,ts,'z');把传递函数离散化(问题1)
[num,den]=tfdata(dsys,'v');离散化后提取分子、分母
rin=1.0;输入为阶跃信号
u_1=0.0; u_2=0.0; 什么东西的初始状态(问题2)
y_1=0.0; y_2=0.0; 是不是输出的初始状态
error_1=0;初始误差
x=[0 0 0]';PID的3个参数Kp Ki Kd组成的数组
p=100;仿真时间100ms
for k=1:1:p
r(k)=rin;
u(k)=kpidi(1)*x(1)+kpidi(2)*x(2)+kpidi(3)*x(3)
if u(k)>=10
u(k)=10;
end
if u(k)<=-10
u(k)=-10;
end
yout(k)=-den(2)*y_1-den(3)*y_2+num(2)*u_1+num(3)*u_2;(问题3)
error(k)=r(k)-yout(k);
%返回pid参数
u_2=u_1;u_1=u(k);
y_2=y_1;y_1=yout(k);
x(1)=error(k);
x(2)=(error(k)-error_1)/ts;
x(3)=x(3)+error(k)*ts;
error_2=error_1;
error_1=error(k);
end
问题1:把传递函数离散化[SYSD,G]=C2D(SYSC,Ts,METHOD)这里面的method有好多种,而且用的method不一样得出的结果也不一样,这些参数究竟有什么区别(不要把matlab的help给我翻译一遍,帮忙解释详细点)
问题2:这些是不是PID控制器输出的初始状态,“rin--①--PID控制器--②--被控对象--③---”是不是就是上面②的地方的信号值?
问题3(关键问题):这个式子是怎么得出来的?从传递函数得出差分方程是个什么步骤,要具体点的或者给本参考书。
又如:在《先进PID控制MATLAB仿真(第二版)》P146有 被控对象G(s)=133/(s^2+25s),采样时间为1ms,采用z变换进行离散化,经过z变换后的离散化对象为yout(k)=-den(2)yout(k-1)—den(3)yout(k-2)十num(2)u(k-1)+num(3)u(k-2)(实在是搞不明白怎么来的)
问题4:不是线性的对象可不可以写成差分方程的形式,比如G(s)=20e^(-0.02s)/(1.6s^2+4.4s+1)带了个纯延迟的该怎么弄。或者换成个3阶对象怎么写成差分方程
补充:找有类似工作要做的朋友加好友讨论讨论。
本人正在做毕业设计《遗传算法用于模糊控制器的优化》,现在可以对普通的二阶被控对象进行隶属度函数和规则的优化,就是由于第三第四个问题卡住了,继续不下去了。全是用代码编写的,没有用到simulink,所以代码很长修改也麻烦,还不知道在代码里面怎么弄带纯延迟或非线性的对象。有谁知道如何把simulink的数据调入m文件或者把m文件的数据传入simulink,欢迎来讨论.
知道多少就回答多少,只要有帮助的,至少给20分。
加好友可以在百度里面加,或者QQ37819899注明加好友原因。
由连续传递函数模型怎么得到差分方程
1、先建立以知的传递函数 假设传递函数为:G(s)=exp^(-0.004s)*400\/(s^2+50s);其中^后表示指数,如:2^3=8;4^2=16;在matlab里面建立这个传递函数的命令就是:sys=tf(400,[1,50,0],'inputdelay',0.004);2、用命令 c2d:假设在输入端有一个零阶保持器,把连续时间的状态空间模型...
如何将传递函数转化成差分方程
找找MATLAB的命令,先给定个采样率,把它变成Z传递函数,然后差分方程也就有了,如果要手算估计找本计算机控制系统的书上面有表格和公式的 也是变成Z 传递函数,然后再写成差分方程形式
从matlab系统辨识工具箱导出传递函数模型
假设单输入单输出传递函数是G=1\/(s+1)按采样周期Ts=0.01s离散得到离散传递函数G'=Y\/U=0.00995z^-1\/(1-0.99z^-1)转化为差分方程为y(k)=0.99*y(k-1)+0.00995*u(k-1)也就是说想要得到k时刻的输出y,需要通过k-1时刻的输出y与k-1时刻的输入u,编写程序时对之前时刻的数据加以记...
急急急不可耐!!!有人知道怎么在MATLAB上使用差分方程
dsys1=c2d(sys1,ts,\\'zoh\\');转化成dz函数 [num1,den1]=tfdata(dsys1,\\'v\\');获得z传函的分子和分母 Ideal closed loop 期望鼻环传递函数 sys2=tf([1],[0.15,1],\\'inputdelay\\',0.76);系统传递函数 dsys2=c2d(sys2,ts,\\'zoh\\');转化成d(z)函数 Design Dalin controller ...
matlab利用递归求解差分方程
首先,这个不是matlab利用递归求解差分方程,而是递推;差分方程其实就是递推关系式。然后这个循环:for i=N+1:N+length(n),y(i)= -a1*y(i-N:i-1)'+ b1*x(i-N:i-N+M)';end 其实是因为:y[n]+ a1*y[n-1]+ a2*y[n-2]...+ an*y[n-N]= b0*x[n]+ b1*x[n-1]+...
怎么用matlab求差分
调用filter函数解差分方程。1)yn=filter(B,A,xn)是计算输入向量xn的零状态响应输出信号yn,yn与xn长度相等,其中B=[b0,b1,……bn], A=[a0,a1,……an]。其中a0=1。2)yn=filter(B,A,xn,xi)是计算全响应的函数。xi是等效初始条件的输入序列,xi能由初始条件确定。此时需要调用filtic函数。
matlab能不能在给出初始条件的情况下求解一阶常系数差分方程?
能 dslove命令 先用syms声明符号变量,然后用dslove命令
什么是差分方程,如何用matlab解差分方程?
u=(1\/5)^n; %设置u为输入信号 U=ztrans(u); %z变换 y=diff_eq([1 -5 6],[0],[1 0],U); %解析解。y=simplify(y)其运行结果,y(n)=3*2^n - 2*3^n 例2:试用matlab求解差分方程,y(t+2)+y(t+1)-6y(t)=5*2^t,y(0)=1,其中y(0)=1,y(1)=0的解析值。...
关于matlab filter这个函数到底怎么用?
一、在MATLAB中,可以用函数y=filter(p,d,x)实现差分方程的仿真,即y=filter(p,d,x)用来实现差分方程,d表示差分方程输出y的系数,p表示输入x的系数,而x表示输入序列。输出结果长度数等于x的长度。 举例:实现差分方程,先从简单的说起:filter([1,2],1,[1,2,3,4,5]),实现y[k]=x[k]+2*x[k-1]...
请问怎么用MATLAB更具差分方程求得频率响应曲线?
哥们是自动化系的吧?学的是控制原理?先把差分方程转成传递函数,用传递函数来做做频率响应曲线呗 用这个函数 freqz(G(s))不知道语法的话 help freqz就行了