智能控制概论报告_第1页
智能控制概论报告_第2页
智能控制概论报告_第3页
智能控制概论报告_第4页
智能控制概论报告_第5页
已阅读5页,还剩17页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、智能控制概论报告模糊控制器设计原尧槃08010439目录、设计要求 TOC o 1-5 h z HYPERLINK l bookmark64 o Current Document 二、控制器设计3确定模糊控制器输入输出变量3确定各输入输出变量的变化范围、量化等级和量化因子3在各输入和输出语言变量的量化域内定义模糊子集4模糊控制规则的确定5求模糊控制表5三、程序设计四、测试与仿真Simulink 搭建2.比例因子K3对响应曲线的影响五、总结10六、使用方法10七、代码附录11一、设计要求:已知被控对象模型,给定阶跃响应幅值为30,系统初值为0,完成以下内 容:(a)设计常规的模糊逻辑控制器;(b

2、)当通过改变模糊逻辑控制器比例因子时,分析系统响应有什么变化?(c)联系、结合模糊逻辑控制器设计过程(结构设计、模糊化设计、规则设计、精确化设计) 以及控制系统响应情况,谈谈本人对模糊逻辑控制系统的一些认识和看法。要求:(1)先进行系统分析,然后给出完整详细的设计过程,可参见P59-61页直流调速系统的模 糊逻辑控制器设计过程;(2)提交完整的报告,包括:封面(题目、个人学号姓名等信息)、目录、任务要求叙述、 系统分析及控制设计原理(包括控制系统原理图及文字分析)、完整的设计实现过程(包 括模糊控制器每部分的选择与实现、计算、原理过程等)、仿真验证(算法流程图、软 件实现手段介绍、系统参数选择

3、、响应曲线图、结合调参对响应曲线的影响给出必要 的分析)、讨论与分析,其中对(b)(c)部分的分析字数要求在500-2000字以内。(3)提交可运行的软件程序,计算机上可检验结果;必须在根目录卜附软件/程序使用说明, 运行说明(可能的话,附那些参数可调及具体效果的说明)二、控制器设计确定模糊控制器输入输出变量本控制器设计参考中文书P54叩61中的二维控制器设计,输入为偏差E和偏差变化量ES来 进行调节。另外模糊控制器通过查表法实现。控制表方式的模糊逻辑控制器基本结构图图2确定各输入输出变量的变化范围、量化等级和量化因子取三个语言变量的量化等级都为7级,即x, y, z, = -3,-2,-1,

4、 0,1, 2, 3 。由于在设计控制器 的时候己经把量化因子涵盖在程序中了,所以三个量化因子并没有出现在simulink当中。 初始设定误差e的论域为-30,30,误差变化de的论域为-60,60,控制输出u的论域为-9,9, 此处的u是控制变化量。Kl=3/30=0.l, K2=3/60, K3=9/3=3在各输入和输出语言变量的量化域内定义模糊子集这里采用5个模糊子集,包括:PB, PS, ZE, NS, NBo模糊子集通过隶属度函数来定义。这里 采用非线性量化以提高控制精度。误差Qe-30-15-5051530-3-2-10123NB10. 500000NS00. 50. 50000Z

5、E000. 510. 500PS00000. 50.50PB000000.51表21误差率dede-60-20-5052060-3-2-10123NB10. 500000NS00. 50. 250000ZE000. 7510. 7500PS00000. 250.50PB000000.51表22控制变化量uuT-4.5-1.501.54.59-3-2-10123NB10. 500000NS00. 50. 50000ZE000. 510. 500PS00000. 50.50PB000000.51表23模糊控制规则的确定根据模糊控制规则可得出控制规则库,如卜.表所示。控制规则表UNBNSZEPSPB

6、NB*PBPBPSNBNSPBPSPSZENBZEPBPSZENSNBPSPBZENSNSNBPB?BNSNBNB:表24求模糊控制表通过模糊控制表,模糊控制器可以快速地通过判断输入量的等级来得出相应的输出量,从而 避免了影响实时控制的复杂计算。比如当系统无处e的量化值为 假设系统误差e的量化值为1、误差变化de的量化值为2。则由控制规则表2-4可得出相应 的隶属度值,如:对于误差 e, Unb(-2)=0.5Uns(-2)=0.5;误差变化 de, Uze(0)=l通过查表可知,对应NB和ZE的控制输出为PB;对应NS和ZE的控制输出为PS;由模糊逻辑推理可得:Upb(-2,0)=min(0

7、.5,l)=0.5/即 Ul=0.5/PB;Ups(-2/0)=min(0.5/l)=0.5, 即 U2z=0.5/PS;最终通过并运算得到输出量u最后通过重心法得出UJ空竺竺竺=2U=urVU2=0.5/PB + 0.5/PS0.5 4-0.5+0.5同理可得其他输出等级U,如下表模糊控制表-3-2-10123-32. 672.52.52. 672-0. 5-2. 67-22.52221-0. 5-2.5-12.62. 140. 50. 25-0. 22-1. 375-2. 602. 6720. 50-0. 5-2-2. 6712.61.3750. 22-0. 25-0. 5-2. 14-2

8、. 622.50. 5-1-2-2-2-2.532. 670.5-2-2. 67-2.5-2.5-2. 67表2.5通过找到输出等级后再乘以相应的量化因子K3即可得出实际的输出量。三、程序设计程序设计流程图3-1图31四、测试与仿真l.Simulink 搭建比例因子K3对响应曲线的影响这里PID控制器选取的P=l, 1=1, D=0o通过控制PID数值来研究比例因子K3对系统的影响。 由于这里采取的是非线性量化,所以输出将由一组分段函数构成。r9 (degree 3)x degree + 4. 5 (3 degree 2)3 x degree + 1.5 (2 degree 1)(1)1. 5

9、 x degree ( 1 degree 0)x degree (0 degree 1)3 x degree 1.5 (1 degree 2)x degree 4,5 (2 degree 3)4540-,卜 i j; TOC o 1-5 h z I I; 1:Z5 I ;号?:?: ?: -II I I :20 I ? :- :- -II ;:;:;:.:JjJ:Jj-II1 叶 j?:?:? 5. .; ; :; ;J111;0? ?% a) 406003100120140 1ED Iffl 200Fimc of018 (degree 3)9 x degree + 9 (3 degree 2

10、)6 x degree + 3 (2 degree 1)3 x degree ( 1 degree 0)3 x degree (0 degree 1)6 x degree 3 (1 degree 2)9 x degree 9(2 degree 3)nmcorrset 030 (degree 3)15 x degree + 15 (3 degree 2)10 x degree + 5 (2 degree 1)(3) u = 5 x degree ( 1 degree 0)5 x degree (0 degree 1)10 x degree 5 (1 degree 2)15 x degree 15

11、(2 degree 3)36 degree 3)18 x degree + 18 (3 degree 2)12 x degree + 6 (2 degree 1)6 x degree ( 1 degree 0)6 x degree (0 degree 1)12 x degree 6 (1 degree 2)18 x degree 18(2 degree 3)42 (degree 3)21 x degree + 21 (3 degree 2)14 x degree + 7 (2 degree 1)(5) u =7 x degree ( 1 degree 0)7 x degree (0 degre

12、e 1)14 x degree 7 (1 degree 2)21 x degree 21(2 degree 3)如果进一步增大量化因子K3值,响应曲线将会变得越来越不稳定。因此最终数值K3取第(4)、 个分段函数比较好,响应速度快,其中tp和都相对于不加模糊控制器的曲线小,并且超 调量也比不加模糊控制器的系统小。五、总结这次上机编程实验主要目的是模糊控制器的实现,把理论知识转换为实际仿真运算。由于毕 竟是仿真实验,与实际操作仍不相同,在一些数值选取,比如论域、隶属度函数的确定,都 是通过主观意愿而不是实际经验来操作的。但是关键部分的运算比如模糊控制表的生成的确 增强了我对模糊控制的理解。通过仿

13、真可以发现增加了模糊控制器的系统的确比单纯地PID 调节有着更强的控制效果,这也是学习的成果和目标之一。由于个人较为熟悉C语言,所以这次是用s-function中的C语言来实现模糊控制器的。以后 可以是用.m文件来进行编程,以利用matlab自带的强大功能。六、使用方法用 simulink 打开 Artificial_Control_Design再在Matlab的Command Window中选取将要导入s-function中的.C文件所在的文件,如 下图。(这里的.c文件是fuzzy_controlc)DesktopWindow Help| D:StudyV;四上课件熠融制概论-1 What

14、s New 编译 fuzzy_controlc,在 Command Window 中输入 mex fuzzycontrol.c,等待编译完成双击 sinmulink 中的 s-function 模块,在 s-function name 中输入 fuzzy_control,然后点击 确定 保存,并编译由运行双击示波器观测波形七、代码附录/* 1st: mex fuzzy_control.c2nd: save simulink3rd: compile simulink and run/* sfuntmpl_basic.c: Basic f CT template for a level 2 S-f

15、unction.* I See matlabroot/simulink/src/sfuntmpl_doc.c for a more detailed template |Copyright 1990-2002 The MathWorks, Inc.SRevision: 1.27.4.2 $/*You must specify the S_F UN CT I ON_N AM E as the name of your S-f unction(i.e. replace sfuntmpl_basic with the name of your S-function)./#define S_FUNCT

16、ION_NAME fuzzy_control /modified name#define S_FUNCTION_LEVEL 2 /*Need to include simstruc. h for the definition of the SimStruct andits associated macro definitions./#inclucle rrsimst rue. hchar degree_e=0/degree_de=0;double degree_u=0,delta_u=0; /delta_u: the variable added to the controlled varia

17、bledouble fuzzy_table7 7= 3,3,25,2. 67, 0.5/2 67)r2.5,oo1/0.5z2.5z2.6,2. 14,0.5,0.25f-0.22, 一1.375, 一26,2.67,o0.5,0,-0.5, -2,-2.7z2.6,2.5,2.67,1.375, 0.220.5,0.5,-2,-0.25,一2 67,-。.5, -2匕,-2.5, 一 3,14, -2.6,-2.5,-3 ;ErrorhandlingYou should use thefollowing techniqueto report errors encounteredwithina

18、nS-function:ssSetErrorStatus (Sz f,Error encountered duetoreturn;Notethat the 2nd argument to ssSetErrorStatusmust be persistentmemory.It cannot be a local variable. For example the unpredictable errors:following will causemdlOutputs ()char msg256;msg256;”(ILLEGAL: to fix use static charsprintf (msg

19、f nError due to %s ,rz string); ssSetErrorStatus (Sz msg);return;* Seemat labroot/ simulink/src/sfuntmpl_cloc. c for more details .* S-function methods */* Function: mdllnitializeSizes* Abstract:The sizes information is used by Simulink. to determine the S-functionblock1s characteristics (number of

20、inputs, outputsf states, etc.)./staticvoid mdllnitializeSizes(SimStruct *S)/* See sfuntmpl_doc.c for more details on the macros below */ssSetNumSFcnParams(Sz 0); /* Number of expected parameters */MODIFIEDif (ssGetNumSFcnParams (S) != ssGetSFcnParamsCount(S) (/* Return if number of expected != numbe

21、r of actual parameters / return;ssSetNumContStates(S, 0);ssSetNumDiscStates(S, 0);if (!ssSetNumlnputPorts(Sz 3) return; /modified original:1 ssSetlnputPortwidth(Sz 0z 1); /demension of input0;ss Set Input Po rt Requi redCont iguous (S r 0, true) ; /*clirect input signal access*/ssSetlnputPortwidth (

22、Sz lz 1) ; /demension of input1;ss Set Input Po rt Requi redCont iguous (S r 1, true) ; /*clirect input signal access*/ssSetlnputPortwidth (Sz 2/ 1) ; /demension of inputZ;ss Set Input Po rt Requi redCont iguous (S r 1, true) ; /*clirect input signal access*/*Set direct feedthrough flag (l=yes, 0=no

23、).A port has direct feedthrough if the input is used in eitherthe mdlOutputs or mdlGetTimeOfNextVarHit functions.* See matlabroot/simulink/src/sfuntmpl_directfeed.txt */0/ 1);1/ 1);2, 1);ssSetlnputPortDirectFeedThrough(Sz ssSetlnputPortDirectFeedThrough (Sz ssSetlnputPortDirectFeedThrough(Szif (!ssS

24、etNumOutputPorts(Sz 1) return;ssSetOutputPortwidth(Sf 0f 1);ssSetNumSampleTimes(Sz 0.1); /SAMPLE T工ME!ssSetNumRWork(Sf 0);ssSetNumlWork(Sf 0);ssSetNumPWork(Sf 0);ssSetNumModes(Sf 0);ssSetNumNonsampledZCs(Sf 0);as a built-in block */* Specify the sim state compliance to be samessSetSimStateCompliance

25、 (Sf USE_DEFAULT_S:M_STATE);ssSetOptions (S, 0);)/Abstract:In this function, you should initialize the continuous and discretestates for your S-function block. The initial states are placedin the state vector, ssGetCont States(S) or ssGetRealDiscStates(S)You can also perforin any other initializatio

26、n activities that yourS-function may require. Note, this routine will be called at thestart of simulation and if it is present in an enabled subsystemconfigured to reset states, it will be call when the enabled subsystemrestarts execution to reset the states.*/staticvoicl mdllnitializeConditions (Si

27、mStruct *S)(#endif/* MDL INITIALIZE CONDITIONS */ Function: mdllnitializeSampleTimesAbstract:This function is used to specify the sample time (s) for yourS-function. You must register the same number of sample times asspecified in ssSetNumSampleTimes./staticvoicl mdllnitializeSampleTimes (SimStruct

28、*S) (ssSetSampleTime (S, 0, CONTINUOUS_SAMPLE_TIME);ssSetOffsetTime (S, 0f 0.0);)#define MDL_INITIALIZE_CONDITIONS / Change to #undef to remove function */#if defined(MDL_INITIALIZE_CONDITIONS)/* Function: mdllnitializeConditions#define MDL_START /* Change to #undef to remove function */ #if defined

29、(MDL_START)/* Function: mdlStartAbstract:This function is called once at start of model execution. If youhave states that should be initialized oncer this is the placeto do it.*/staticvoid mdlStart(SimStruct *S)(#endif/* MDL_START */* Function: mdlOutputsAbstract:In this function, you compute the ou

30、tputs of your S-functionblock./staticvoid mdlOutputs (SimStruct *SZ int_T tid)(/real_T *paral = mxGetPr(ssGetSFcnParam(Sz 0);/real_T *para2 = mxGetPr(ssGetSFcnParam(Sz1);/real_T *para3 = mxGetPr(ssGetSFcnParam(Sz 2);const real_T*ul=(constreal_T*)ssGetlnputPortSignal(Sz 0);const real_T*u2=(constreal_

31、T*)ssGetlnputPortSignal(Sz1);const real_T*u3=(constreal_T*)ssGetlnputPortSignal(Sz 2);real_T *y = ssGetOutputPortSignal (S,0);/convert the input e into the degree of control*/ if (ul0 0)(if (ul0 5) degree_e = 1;/5else (if (ul0 15) degree_e = 2;/15else degree_e = 3;else if (ul0 -5) degree_e = -1;else

32、 (if (ul0 -15) degree_e = -2;else degree_e = -3;else degree_e = 0; /convert the input de into the degree of control*/ if (u20 0) if (u20 5) degree_de = 1;/5 elseif (u20 20) degreede = 2;/20 else degree_de = 3;else if (u20 -5)elseif (u20 degree_de = -1;-20) degree_de = -2;else degree_de = -3;else deg

33、ree_de = 0;degree_u = fuzzy_tabledegree_de + 3 degree_e + 3;if (degree_u 0)(/delta_u=3*degree_u;/18.15if(degree_u 1) delta_u = 20*degree_u;/1.5* degree_u;/6*degree_u;/7 * degree_u;/3*degree_u;/5 * degree_u; /1.5 * degree_u;elseif(degree_u 2) delta_u =40*degree_u-20;/3 * degree_u -1.5;/12*degree_u-6;

34、/14 * degree_u - 7;/ 6*degree_u-3;/10 * degree_u - 5;/3 * degree_u - 1.5;elseif (degree_u -1) delta_u = 20 * degree_u;/7 * clegree_u;/ 3*degree_u;/5 Abstract:In this function, you compute the S-function block1s derivatives.The derivatives are placed in the derivative vector, ssGetdX(S) degree_u;/1.5

35、 * degree_u;elseif(degree_u -2) delta_u = 40 * degree_u + 20;/14 * degree_u + 7; / /6*degree_u+3; / /10 * clegree_u + 5 ;/3 * degree_u + 1.5;elseif (degree_u -3) delta_u = 60 * degree_u + 60;/18*degree_u+18;/21 * degree_u + 21;/ 9*degree_u+5;/15 * degree_u + 15;/4.5 * degree_u + 4.5;else delta_u = -120;/-42;/-18;/-9;y0 = u30 + delta_u;/+20;/*degree_e=0;degree_de=0;degree_u=0;delta_u=0;/)#define MDL_U

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论