PID控制的MATLAB仿真(1)

PID控制的MATLAB仿真(1)PID控制应用广泛,说起来PID特别的简单,在比例负反馈的基础上加入微分项实现快速调节,加入积分项实现无静差。MATLAB强大的功能让学习变得非常简单。在学习智能控制这门课的时候,老师推荐了刘金琨老师的先进PID控制一书,边看边学边调程序。下文程序选自此书。首先从模拟PID开始,被控系统一般是下图这种结构:其中PID控制器:一种用模拟PID控制的磁悬浮:电路图左侧是霍尔传

大家好,又见面了,我是你们的朋友全栈君。

1. 简介

PID控制应用广泛,说起来PID特别的简单,在比例负反馈的基础上加入微分项实现快速调节,加入积分项实现无静差。MATLAB强大的功能让学习变得非常简单。在学习智能控制这门课的时候,老师推荐了刘金琨老师的先进PID控制一书,边看边学边调程序。下文程序选自此书。

2. 模拟PID

首先从模拟PID开始,被控系统一般是下图这种结构:
这里写图片描述

其中PID控制器:
这里写图片描述

一种用模拟PID控制的磁悬浮:
这里写图片描述
这里写图片描述
电路图
这里写图片描述
左侧是霍尔传感器获得磁体的位置,中间是控制器,右侧是驱动部分。U2D是比例放大器,后面的网络引入了微分。

对系统的仿真,可以使用SIMULINK,还可以通过S函数实现:

%S-function for continuous state equation
function [sys,x0,str,ts]=s_function(t,x,u,flag)
switch flag,
%Initialization
  case 0,
    [sys,x0,str,ts]=mdlInitializeSizes;
%Outputs
  case 3,
    sys=mdlOutputs(t,x,u);
%Unhandled flags
  case { 
   2, 4, 9 }
    sys = [];
%Unexpected flags
  otherwise
    error(['Unhandled flag = ',num2str(flag)]);
end
%mdlInitializeSizes
function [sys,x0,str,ts]=mdlInitializeSizes
sizes = simsizes;
sizes.NumContStates  = 0;
sizes.NumDiscStates  = 0;
sizes.NumOutputs     = 1;
sizes.NumInputs      = 3;
sizes.DirFeedthrough = 1;
sizes.NumSampleTimes = 0;
sys=simsizes(sizes);
x0=[];
str=[];
ts=[];
function sys=mdlOutputs(t,x,u)
error=u(1);
derror=u(2);
errori=u(3);

kp=60;
ki=1;
kd=3;
ut=kp*error+kd*derror+ki*errori;
sys(1)=ut;

3. 离散系统PID

有了方便的计算机,很多时候数字控制器变得特别方便。
对一个系统

1/(1+s)

%Discrete PID control for continuous plant
clear all;
close all;

ts=0.001;  %Sampling time
xk=zeros(2,1);
e_1=0;
u_1=0;

for k=1:1:2000
time(k) = k*ts;

yd(k)=0.50*sin(1*2*pi*k*ts);

para=u_1;
tSpan=[0 ts];
[tt,xx]=ode45('chap1_6plant',tSpan,xk,[],para);
xk = xx(length(xx),:);
y(k)=xk(1); 

e(k)=yd(k)-y(k);
de(k)=(e(k)-e_1)/ts; 

u(k)=20.0*e(k)+0.50*de(k);
%Control limit
if u(k)>10.0
   u(k)=10.0;
end
if u(k)<-10.0
   u(k)=-10.0;
end

u_1=u(k);
e_1=e(k);

D=1;
if D==1  %Dynamic Simulation Display
    plot(time,yd,'b',time,y,'r');
    pause(0.00000000000000000);
end
end
figure(1);
plot(time,yd,'r',time,y,'k:','linewidth',2);
xlabel('time(s)');ylabel('yd,y');
legend('Ideal position signal','Position tracking');
figure(2);
plot(time,yd-y,'r','linewidth',2);
xlabel('time(s)'),ylabel('error');
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

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

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

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

(0)
blank

相关推荐

  • java上传文件的几种方式_javaweb文件上传

    java上传文件的几种方式_javaweb文件上传1、ServletFileUpload  表单提交中当提交数据类型是multipare/form-data类型的时候,如果我们用servlet去做处理的话,该http请求就会被servlet容器,包装成httpservletRequest对象  ,在由相应的servlet进行处理。packagecom.jws.app.operater.service.impl;…

  • 六十四卦详细解释_六十四卦断事

    六十四卦详细解释_六十四卦断事文章目录第1卦 乾为天(乾卦) 刚健中正 上上卦第2卦 坤为地(坤卦) 柔顺伸展 上上卦第3卦 水雷屯(屯卦) 起始维艰 下下卦第4卦 山水蒙(蒙卦) 启蒙奋发 中下卦第5卦 水天需(需卦) 守正待机 中上卦第6卦 天水讼(讼卦) 慎争戒讼 中下卦第7卦 地水师(师卦) 行险而顺 中上卦第8卦 水地比(比卦) 诚信团结 上上卦第9卦 风天小畜(小畜卦) 蓄养待进 下下卦第10卦 天泽履(履卦) 脚…

  • git 修改用户名以及邮箱_注册github账号

    git 修改用户名以及邮箱_注册github账号1、查看命令gitconfig–local–list2、查看当前用户名gitconfiguser.name3、查看邮箱gitconfiguser.email4、修改用户名gitconfiguser.namexxx5、修改邮箱gitconfiguser.emailxxx

  • 网站可以免费做业务CMS讨论[亲测有效]

    网站可以免费做业务CMS讨论

    2021年12月17日
  • idea 2021激活码破解方法

    idea 2021激活码破解方法,https://javaforall.cn/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

  • php轻博客社区视频教程,轻博客主题 – SEO极致优化的ZBLOG轻博客主题

    php轻博客社区视频教程,轻博客主题 – SEO极致优化的ZBLOG轻博客主题zblog自适应轻博客主题,简洁、轻巧、极致优化~QQ群:457320274(问题反馈以及其他链接交换等)交流社区:https://www.bxiu.net/(有问题可以求助交流)更新记录:2021.02.22v2.8更新内容:1、新增分类自定义标题;(默认分类标题是分类名-副标题,输入自定义后则显示自定义标题,详情看分类编辑页)。2021.02.20v2.7更新内容:1、调整列…

发表回复

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

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