声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 1876|回复: 0

[综合讨论] 紧急求助,帮我看下这个pid控制器的s函数 谢谢

[复制链接]
发表于 2012-4-14 19:06 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?我要加入

x
%基于hebb学习法则的单神经网络PID解耦控制器
%算法调整 kp,ki,kd
function [sys,x0,str,ts]=s1(t,x,u,flag)%%??????????????????flag值如何给定的,为什么这样给?
switch flag,
case 0           % 初始化
    [sys,x0,str,ts] = mdlInitializeSizes;
case 2           % 离散状态更新
    sys = mdlUpdates(x,u);
case 3           % computation of control signal计算的控制信号
    sys=mdlOutputs(t,x,u);
case {1, 4, 9}   % unused flag values未使用的flag值
    sys = [];
otherwise        % error handling错误处理
    error(['Unhandled flag = ',num2str(flag)]);
end;

%==============================================================
% when flag=0, 执行系统初始化
%==============================================================
function [sys,x0,str,ts] = mdlInitializeSizes
sizes = simsizes;        %生成size数据结构
sizes.NumContStates = 0; % 连续状态数
sizes.NumDiscStates = 3; % 离散状态数 p i d
sizes.NumOutputs = 1;    % 输出量个数
sizes.NumInputs = 3;     % 输入量个数
sizes.DirFeedthrough = 1;% input reflected directly in output
sizes.NumSampleTimes = 1;% single sampling period单采样周期
sys = simsizes(sizes);   %
x0 = [0; 0; 0];          % zero initial states
str = [];
ts = [-1 0];             % sampling period
%==============================================================
% when flag=2, 更新离散状态
%==============================================================
function sys = mdlUpdates(x,u)
T=1;?????????????这个T是啥啊?  
sys=[ u(1);
      x(2)+u(1)*T;
      (u(1)-u(2))/T];%??????????????????

%==============================================================
% when flag=3, computates the output signals计算输出信号
%==============================================================
function sys = mdlOutputs(t,x,u)
persistent wkp1_1 wki1_1 wkd1_1 u1_1
xiteP=6800;%学习速率
xiteI=65;%学习速率
xiteD=1000;%学习速率

if t==0  %初始化 kp,ki and kd
    wkp1_1=rand;
    wki1_1=rand;
    wkd1_1=rand;
    u1_1=0;
end

%采用hebb学习算法NNC的权值调整
   wkp1=wkp1_1+xiteP*x(1)*u1_1*x(1);  %P
   wki1=wki1_1+xiteI*x(1)*u1_1*x(2);  %I
   wkd1=wkd1_1+xiteD*x(1)*u1_1*x(3);  %D

   wadd1=abs(wkp1)+abs(wki1)+abs(wkd1);
   w111=wkp1/wadd1;
   w122=wki1/wadd1;
   w133=wkd1/wadd1;
   w1=[w111,w122,w133];
   k1=1.1;
   u1=k1*w1*x;
   
   wkp1_1=wkp1;
   wkd1_1=wkd1;
   wki1_1=wki1;

   u1_1=u1;

   sys=u1;
回复
分享到:

使用道具 举报

您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-5-15 11:35 , Processed in 0.054271 second(s), 18 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表