首页 > 编程语言 >matlab PID程序

matlab PID程序

时间:2024-01-16 16:15:41浏览次数:29  
标签:输出 PID time 程序 rin matlab error yout

%设一被控对象G(s)=50/(0.125s^2+7s)
%用增量式PID控制算法编写仿真程序
%输入分别为单位阶跃、正弦信号,采样时间为1ms

clear;
close all;
ts=0.001;                 %采样时间
sys=tf(50,[0.125,7,0]); %tf是传递函数  即被控对象函数G();
dsys=c2d(sys,ts,'z');    %把控制函数离散化
[num,den]=tfdata(dsys,'v');% 离散化后提取分子、分母
u_1=0;
u_2=0;
y_1=0;
y_2=0;
error_1=0;
error_2=0;
P=0;I=0;D=0;
n=1000;
time=zeros(1,n);
rin=zeros(1,n);
yout=zeros(1,n);
for k=1:n
    time(k)=k*ts;                   %采样时间
    S=1;
    if S==1
        kp=10;ki=100;kd=0.1;        %初始化PID
        rin(k)=1*(time(k)>0.1);     %Step Signal
    elseif S==2
        kp=10;ki=100;kd=0.1;
        rin(k)=0.5*sin(2*pi*k*ts);	%Sine Signal即实际输入
    end
    du=kp*P+kd*I+ki*D;              %PID Controller控制系数
    u=u_1+du;                       %Restricting the output of controller
    
    yout(k)=-den(2)*y_1-den(3)*y_2+num(2)*u_1+num(3)*u_2;	%实际输出
    error=rin(k)-yout(k);           %Return of parameters 误差
    u_2=u_1;                        %保存上上次输入
    u_1=u;                          %保存上一次控制系数
    y_2=y_1;                        %保存上上次输出
    y_1=yout(k);                    %保存上一次输出
    P=error-error_1;                %Calculating P
    D=error-2*error_1+error_2;      %Calculating D
    I=error;                        %Calculating I
    error_2=error_1;                %保存上上次误差
    error_1=error;                  %保存上一次误差
end
figure;
plot(time,rin,'b',time,yout,'r');	%输入和实际控制输出
xlabel('time(s)'),ylabel('rin,yout');

Simulink验证

开环控制系统:被控对象的输出(被控制量)对控制器的输出没有影响。
闭环控制系统:被控对象的输出(被控制量)会反送回来影响控制器的输出。

在工程实际中,应用最为广泛的调节器控制规律为比例、积分、微分控制,简称PID控制。
当被控对象的结构和参数不能完全掌握,或得不到精确的数学模型时,控制理论的其它技术难以采用时,系统控制器的结构和参数必须依靠经验和现场调试来确定,这时应用PID控制技术最为方便。(PID控制可以应用于系统参数和特性不能被有效测量的场合。)

比例(P):
控制器输出与输入误差信号成比例关系。
仅有比例控制时系统输出存在稳态误差。
积分(I):
输出与输入误差信号的积分成正比关系。
比例+积分(PI)控制器,可以消除系统静差。
微分(D):
控制器输出与输入误差信号的微分成正比关系。
具有比例+微分(PD)的控制器,能够提前使抑制误差的控制作用等于零,从而避免了被控量的严重超调,能改善系统在调节过程中的动态特性。

标签:输出,PID,time,程序,rin,matlab,error,yout
From: https://www.cnblogs.com/dingdangsunny/p/17967886

相关文章

  • 某客《微信小程序》从基础到实战视频教程
     第1部分微信小程序从基础到实战课程概要  第1节微信小程序从基础到实战课程概要  1.1微信小程序从基础到实战课程概要  第2部分初识微信小程序   第1节微信小程序简介  2.1微信小程序简介  第2节微信小程序开发准备2.2.1微信小程序开发准......
  • 程序员创业该做什么产品?
    大家好,我是闲者,因为今年的目标是做个自己的产品,但是却不知道要做什么产品!很纠结。原文发表在我的博客:闲着博客-程序员创业该做什么产品?考虑到孙子兵法提过先胜而战”,既然不知道要做什么产品,那就看看做什么产品会失败!顺便吐槽下……关于程序员如何创业,做产品,网上搜一下就是一堆......
  • GPT应用开发:运行你的第一个聊天程序
    本系列文章介绍基于OpenAIGPTAPI开发大模型应用的方法,适合从零开始,也适合查缺补漏。本文首先介绍基于聊天API编程的方法。环境搭建很多机器学习框架和类库都是使用Python编写的,OpenAI提供的很多例子也是Python编写的,所以为了方便学习,我们这个教程也使用Python。Python环境......
  • `PyInstaller`是一个将Python程序打包成独立可执行文件的工具,它提供了许多参数来配置
    `--distpath`是`PyInstaller`的一个参数,它用于指定生成的可执行文件(及其依赖)的存放路径¹²⁴。默认情况下,这些文件会被放置在当前目录下的`dist`文件夹中²。例如,如果你想让`dist`文件夹中的内容在桌面上生成,你可以这样使用`--distpath`参数⁴:```bashpyinstaller--on......
  • 记一次 .NET某MES自动化桌面程序 卡死分析
    一:背景1.讲故事前些天有位朋友在微信上找到我,说他们的客户端程序卡死了,让我帮忙看下是什么原因导致的?dump也拿到了手,既然有了dump就开始正式分析吧。二:WinDbg分析1.什么导致的卡死客户端的程序卡死比较好找原因,入手点就是主线程,看下它此时正在做什么,可以用k命令。0:00......
  • Golang实现程序优雅退出的方法 有哪些 ?
    Golang实现程序优雅退出的方法有哪些?原创磊丰Go语言圈2024-01-1608:31发表于广东听全文学习与交流:Go语言技术微信群商务合作加微信:LetsFeng   现在就开始你的Go语言学习之旅吧!人生苦短,let’sGo.      Goland全家桶激活码,永久有效,亲测可用,限时免......
  • 还不敢写多线程程序?看看Go如何让并发控制简单有趣
    还不敢写多线程程序?看看Go如何让并发控制简单有趣原创 萤火架构 萤火架构 2024-01-1219:50 发表于北京 听全文所谓并发控制,就是同一程序进程内不同线程间访问相同资源时的冲突处理,有时也称为进程内同步。比如一个简单的内存累加计数操作,如果不进行同步,不同的线程可......
  • 微信小程序测试点,9大方面全方位总结
    微信小程序无需下载安装,用户在微信扫一扫或搜索即可使用,小程序版本类型可分为:开发版、体验版、正式版。开发版、体验版无需审核,只需要给微信号权限,经过扫小程序的二维码就能访问,正式版本需要经过微信审核才可使用。下面从9个方面,总结下微信小程序的测试点:1、功能:与Web和App......
  • 在应用程序中,打开文件时,弹开文件窗口,看不见共享盘
    在应用程序中,打开查找文件时,找不到共享盘所有的设置方法都对,各种方法都试了,什么改注册表,授权等等,应用程序在别的电脑也正常,就是在这台电脑上不行,打开查找文件时,没有共享盘(要的文件在共享盘里)(注:当前用户有超级用户权限) 换administrator用户登录,再查看,有了: ......
  • 4412 设备树 qt busybox , ctrl+c 无法终止 程序
    问题: 在系统中,ctrl+c无法终止程序。背景: 软件:迅为网盘设备树镜像。硬件:迅为4412板卡。  网上的截图:   我自己的改动如下;     结果显示: ......