一阶惯性环节matlab编程_matlab一阶惯性环节

一阶惯性环节matlab编程_matlab一阶惯性环节该楼层疑似违规已被系统折叠隐藏此楼查看此楼我照着网上的程序自己改出来的程序是这样的clc;clear;ts=0.001;%采样时间sys=tf(-53,[19926,100],’ioDelay’,540);%tf是传递函数,用来实现G(s);在自动控制领域经常用到,dsys=c2d(sys,ts,’z’);%把控制函数离散化,转化…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

我照着网上的程序自己改出来的程序是这样的

clc;

clear ;

ts=0.001; %采样时间

sys=tf(-53,[19926,100],’ioDelay’,540); %tf是传递函数,用来实现G(s); 在自动控制领域经常用到,

dsys=c2d(sys,ts,’z’); %把控制函数离散化,转化为拆分方程

[num,den]=tfdata(dsys,’v’); % 离散化后提取分子、分母 ,提取拆分方程系数

u_0=0.0;

u_1=0.0;

u_2=0.0;

y_1=0.0;

y_2=0.0;

x=[0,0,0]’;

error_1=0;

error_2=0;

for k=1:1:1000000

time(k)=k*ts; %采样次数

S=1; %选择需要跟踪的函数

if S==1

kp=-2.5237;ki=-025316;kd=18.2627; %初始化PID

rin(k)=1; %Step Signal ,阶跃信号

end

if S==2

kp=x;ki=x;kd=x;

rin(k)=0.5*sin(2*pi*k*ts); %Sine Signal 正弦信号

end

if S==3 %三角波信号

kp=x;ki=x;kd=x;

if mod(time(k),2)<1

rin(k)=mod(time(k),1);

else

rin(k)=1-mod(time(k),1);

end

rin(k)=rin(k)-0.5;

end

if S==4 %锯齿波信号

kp=x;ki=x;kd=x; %测试得合适参数,如果输出过冲,可将kd调小。

rin(k)=mod(time(k),1);

end

du(k)=kp*x(1)+kd*x(2)+ki*x(3); %PID Controller 控制系数

u(k)=u_1+du(k);

%Linear model

yout(k)=-den(2)*y_1+num(1)*u_0+num(2)*u_1; %实际输出

error(k)=rin(k)-yout(k); %Return of parameters 误差

u_2=u_1; %保存上上次输入 为下次计算

u_1=u(k); %保存上一次控制系数 为下次计算

y_2=y_1; %保存上上次次输出 为下次计算

y_1=yout(k); %保存上一次输出 为下次计算

x(1)=error(k)-error_1; %Calculating P

x(2)=error(k)-2*error_1+error_2; %Calculating D

x(3)=error(k); %Calculating I

error_2=error_1;

error_1=error(k);

end

figure(1);

plot(time,rin,’b’,time,yout,’r’); %输入 和实际控制输出

xlabel(‘time(s)’),ylabel(‘rin,yout’);

axis([0,1000,0,1.2]);

% figure(2);

% plot(time,error,’r’) %输入与输出误差输出曲线

% xlabel(‘time(s)’);ylabel(‘error’);

得到的图形是这样的

5331104c75716c236664e4710d3946ce.png

我用Simulink得到的图是这样的

21ca07a2b5b5dd4e3d7816de6d945411.png

有大佬告诉我一下我的程序哪里出错了吗

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/185896.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • 国内DNS首选_国内常用dns

    国内DNS首选_国内常用dns国内DNS首选配置

  • 策略模式 C++ 实现

    策略模式 C++ 实现

  • windows redis设置密码_redis如何设置密码及验证密码

    windows redis设置密码_redis如何设置密码及验证密码在windows环境下修改redis密码

  • cglib动态代理实现原理_动态代理的两种方式

    cglib动态代理实现原理_动态代理的两种方式CGLib动态代理原理CGLib动态代理是代理类去继承目标类,然后重写其中目标类的方法啊,这样也可以保证代理类拥有目标类的同名方法;看一下CGLib的基本结构,下图所示,代理类去继承目标类,每次调用代理类的方法都会被方法拦截器拦截,在拦截器中才是调用目标类的该方法的逻辑,结构还是一目了然的;1.CGLib的基本使用使用一下CGLib,在JDK动态代理中提供一个Proxy类来创建代理类,而在CGLib动态代理中也提供了一个类似的类Enhancer;使用的CGLib版本是2.2.2,我是随便找的,不

  • Linux下export命令和source命令与环境变量设置「建议收藏」

    Linux下export命令和source命令与环境变量设置「建议收藏」Linux下export命令和source命令与环境变量设置环境变量广泛用于程序运行环境的设置。从Linuxshell的角度来看,环境变量无非就是shell脚本的变量而已。从这个角度理解环境变量,就能理解设置环境变量的那些命令究竟在做什么。说明:笔者的系统为debian,shell为bash,以下例子均在笔者的Linux环境下测试,不保证其他环境能够通过。export命令和source命令…

  • S3C2440 LED驱动总结

    S3C2440 LED驱动总结1.电路图2.使用说明此驱动实现二种操作模式: 普通操作模式:./LedTest<led1/led2/led3><on/off> 点亮或熄灭某个LED灯 掩码操作模式:./LedTestled_mask led_mask只能是:000、001、010、011….111 可以同时设置三个LED,对应1位置的LED被点亮,对应0位置熄灭…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号