模糊控制程序设计报告
- 格式:pdf
- 大小:150.05 KB
- 文档页数:6
模糊PID控制温控系统设计C语言程序代码介绍本文介绍了使用模糊PID控制方法来设计温控系统的C语言程序代码。
本温控系统使用传感器读取室内温度,然后根据读取的数值对应调整冷风机的风速和加热器的加热时间,从而控制室内温度达到一个设定值。
系统设计本温控系统采用模糊PID控制方法,具体实现流程如下:1.根据设定温度和当前室内温度计算出误差值2.使用模糊控制方法将误差值转化为温度调节量3.根据模糊控制输出的温度调节量计算出PID控制器的输出4.根据PID控制器的输出调节冷风机的风速和加热器的加热时间系统设计中需要使用的传感器,冷风机和加热器的具体型号及参数需要根据实际情况进行选择。
此处不做详细说明。
程序代码实现以下代码实现了上述系统设计,包括模糊控制和PID控制。
// 温控系统C语言程序代码#include<stdio.h>#include<stdlib.h>// 模糊控制double GetTemperatureByFuzzy(double error){double delta = 0.5; // 设定的温度调节步长double result = 0;if (error <= -5){result = 1;}else if (error > -5 && error < 0){result = (error + 5) / 5.0;}else if (error >= 0 && error < 5){result = (5 - error) / 5.0;}else{result = 0;}return result * delta;}// PID控制double GetTemperatureByPID(double error, double lastError, double integ ral){double Kp = 0.5; // 比例系数double Ki = 0.01; // 积分系数double Kd = 0.1; // 微分系数double deltaT = 0.1; // 采样时间double derivate = (error - lastError) / deltaT;double result = Kp * error + Ki * integral + Kd * derivate;return result;}// 主函数int main(){double setTemp = 25; // 设定温度double curTemp = 24; // 当前温度,需要从传感器读取double lastError = 0; // 上一次的误差值double integral = 0; // 积分项while (1){double error = setTemp - curTemp; // 计算当前误差值double fuzzyTemp = GetTemperatureByFuzzy(error); // 模糊控制integral += error; // 更新积分项double pidTemp = GetTemperatureByPID(error, lastError, integra l); // PID控制lastError = error; // 更新上一次误差值// 根据pidTemp和fuzzyTemp调节冷风机的风速和加热器的加热时间,省略// 读取传感器更新当前温度,省略// curTemp = GetCurTemp();// 采样时间,省略// sleep(1);}}本文介绍了使用模糊PID控制方法来设计温控系统的C语言程序代码。
课程名称:智能控制实验名称:模糊控制一、实验目的:(1)了解在Simulink 仿真环境下建立控制系统方框图的方法,熟悉Matlab 和Simulink 仿真环境(2)掌握模糊控制器的设计方法。
(3)比较PID 控制和模糊控制的特点。
二、实验内容和步骤 已知s e s s s G 2.0214820)(-++=,分别设计PID 控制与模糊控制,使系统达到较好性能,并比较两种方法的结果。
结构如下图。
(1)模糊控制规则设计针对该定位系统,设计二维模糊控制规则,使性能达到最佳。
模糊控制规则如下:(2)设计未加PID或FUZZY控制器时,设计系统如下:输入阶跃信号,观测与分析仿真结果。
(3)加入PID控制器如下:对应的仿真结构图为:调整参数,观测与分析仿真结果。
PID控制的仿真曲线如下:(4)设计FUZZY控制器在simulink仿真环境下,设计模糊控制系统,包括模糊控制规则、隶属函数、比例因子、量化因子、论域等参数设计。
FUZZY控制仿真结构图如下:其中黄色部分具体为:利用simulink设计的模糊控制的仿真结构图为:其中对于模糊控制器的设计:E=[-6 6] EC=[-6 6] U=[-6 6],并且其隶属函数分别为:E的隶属函数EC的隶属函数U的隶属函数再将其中一个学生的比较好的实验结果作为参考实例:首先仿真图如下:模糊控制器的设计:E=[-6 6] EC=[-6 6] U=[-6 6],并且其隶属函数分别为:E和EC的隶属函数U的隶属函数控制规则:ECNB NM NS ZE PS PM PB ENB PB PB PB PB PM ZE ZENM PB PB PB PB PM ZE ZENS PM PM PM PM ZE NS NSZE PM PM PS ZE NS NM NMPS PS PS ZE NM NM NM NMPM ZE ZE NM NB NB NB NBPB ZE ZE NM NB NB NB NB设计好模糊控制器后,运行仿真图形,得到的仿真曲线如下(step time=1):模糊控制的仿真曲线由仿真可知,通过选择合适的PID参数可以达到较好的控制性能。
控制工程学院课程实验报告:智能控制 课程实验报告实验题目: 模糊控制器的设计与实现班级 姓名 学号 日期一、 实验目的及内容实验目的:1、掌握模糊控制器的设计方法;2、比较模糊控制器与常规控制器的优缺点;3、提高matlab 程序设计能力; 实验内容:1、针对一个被控对象,定义输入输出模糊变量及模糊控制规则;2、分析设计模糊控制器与常规控制器测出两种情况下系统的阶跃响应;3、比较分析实验结果。
二、 实验设备1、安装有Matlab 软件的pc 机;2、设定一被控二阶传递函数 三、 实验原理1、模糊控制原理:模糊逻辑控制又称模糊控制,是以模糊集合论,模糊语言变量和模糊逻辑推理为基础的一类计算机控制策略,模糊控制是一种非线性控制。
图一位常规的模糊控制设计模型图一 常规模糊控制系统原理图23S S 2S G 2++=)(针对模糊控制器每个输入,输出,各自定义一个语言变量。
因为对控制输出的判断,往往不仅根据误差的变化,而且还根据误差的变化率来进行综合评判。
所以在模糊控制器的设计中,通常取系统的误差值e 和误差变化率ec 为模糊控制器的两个输入,则在e 的论域上定义语言变量“误差E ” ,在ec 的论域上定义语言变量“误差变化EC ” ;在控制量u 的论域上定义语言变量“控制量U ” 。
通过检测获取被控制量的精确值,然后将此量与给定值比较得到误差信号e ,对误差取微分得到误差变化率ec ,再经过模糊化处理把分明集输入量转换为模糊集输入量,模糊输入变量根据预先设定的模糊规则,通过模糊逻辑推理获得模糊控制输出量,该模糊输出变量再经过去模糊化处理转换为分明集控制输出量。
2、PID 控制原理:在模拟控制系统中,控制器最常用的控制规律是PID 控制。
PID 控制器是一种线性控制器。
它根据给定值与实际输出值之间的偏差来控制的。
其传递函数的形式是:,PID 控制原理框图如图二所示。
式中p k ——比例系数;I T ——积分时间常数;D T ——微分时间常数。
模糊控制系统实验报告学院:班级::学号:、实验目的1.通过本次实验,进一步了解模糊控制的基本原理、模糊模型的建立和模糊控制器的设计过程。
2.提高有关控制系统的程序设计能力;3.熟悉Matlab语言以及在智能控制设计中的应用。
二、实验内容设计一个采用模糊控制的加热炉温度控制系统。
被控对象为一热处理工艺制作中的加热炉,加热设备为三相交流调压供电装置,输入控制信号电压为0-5V,输出相电压为0-220V,输出最大功率180kW炉内变化室温~625C。
三、实验过程及步骤1.用Matlab中的Simulink工具箱,组成一个模糊控制系统,如图所示2.采用模糊控制算法,设计出能跟踪给定输入的模糊控制器,对被控系统进行仿真,绘制出系统的阶跃响应曲线(1)模糊集合及论域的定义对误差E、误差变化EC机控制量U的模糊集合及其论域定义如下: E、EC和U的模糊集合均为:{NB、NM NS 0、PS PM PB}E和EC的显示范围为:[-6 6]结果如下图所示FIS Editor: UntitledFile Edit Viev;FIS VariablesEMECin put variable "E"Current VariableNameTypeRangeDisplay RangeEinput[-6 6]Help Close Select etl variable "E"File Edit Viev^Current VariableNsrueTypeRangeDitsptey RangeSelected variable 'U"打开Rule编辑器,并将49条控制规则输入到Rule编辑器中FIS VariablesLIoutput06】[-6 6]Rule Editor: UntitledECouiput variable "U1利用编辑器的” View T Rules”和” View^Surface ”得到模糊推理系统的模糊规则和输入输出特性曲面,分别如下图所示Fil e Edit Viev; OptionsFile Edit Viev^ OptionsRule Viewer Untitled忻珅:[□ g]Plot points: 101left down up ReadySurface Viewer: UntitledE "U = 1.a3e-D0&Move:Help Close口从图中可以看出,输出变量U 是关于两个输入变量E 、EC 的非线性函 数,输入输出特性曲面越平缓、光滑,系统的性能越好。
1.1课题研究背景及意义伴随着现代工业的快速发展,标志着一个国家工业实力的相应设备如精密机床、工业机器人等对其“驱动源”一电伺服驱动系统提出了越来越高的要求。
而基于正弦波反电势的永磁同步电动机(简称PMSM)因其卓越的性能已日渐成为电伺服系统执行电动机的“主流”[1],随着现代电力电子技术、微电子技术及计算机技术等支撑技术的快速发展,以永磁同步电动机作为执行机构的交流伺服驱动系统的发展得以极大的迈进。
然而伺服控制技术是决定交流伺服系统性能好坏的关键技术之一,是国外交流伺服技术封锁的主要部分。
随着国内交流伺服电机及驱动器等硬件技术逐步成熟,以软形式存在于控制芯片中的伺服控制技术成为制约我国高性能交流伺服技术及产品发展的瓶颈。
研究具有自主知识产权的高性能交流伺服控制技术,尤其是最具应用前景的永磁同步电动机伺服控制技术,具有重要的理论意义和实用价值[2,3]。
1.2伺服系统简介1.2.1伺服系统的定义伺服控制系统一般包括控制器、被控对象、执行环节、检测环节、比较环节等五部分[4],其系统结构如图1.1所示。
图1-1伺服系统结构根据伺服系统图1.1中各组成部分的区别,伺服系统有多种不同的分类方法。
按照执行元件即电机的类型通常可分为直流伺服系统和交流伺服系统;根据控制器实现方法不同,可分为模拟伺服系统和数字伺服系统;根据控制器中闭环的多少,可分为开环控制系统、单环控制系统、双环控制系统和多环控制系统[5]。
1.2.2伺服系统的发展状况对于发展高性能交流伺服系统来说,由于在一定条件下,作为“硬形式’,存在的伺服电机、逆变器以相应反馈检测装置等性能的提高受到许多客观因数的制约;而以“软形式”存在的控制策略具有较大的柔性,近年来随着控制理论新的发展,尤其智能控制的兴起和不断成熟,加之计算机技术、微电子技术的迅猛发展,使得基于智能控制的先进控制策略和基于传统控制理论的传统控制策略的“集成"得以实现,并为其实际应用奠定了物质基础【6】。
clear all;close all;T=0; %ʱ¼ä³£Êýa=newfis('fuzz_temperatrue');a=addvar(a,'input','e',[-3,3]); %Parameter e a=addmf(a,'input',1,'NB','zmf',[-3,-1]);a=addmf(a,'input',1,'NM','trimf',[-3,-2,0]);a=addmf(a,'input',1,'NS','trimf',[-3,-1,1]);a=addmf(a,'input',1,'Z','trimf',[-2,0,2]);a=addmf(a,'input',1,'PS','trimf',[-1,1,3]);a=addmf(a,'input',1,'PM','trimf',[0,2,3]);a=addmf(a,'input',1,'PB','smf',[1,3]);a=addvar(a,'output','u',[72,78]); %Parameter u a=addmf(a,'output',1,'NB','zmf',[72,74]);a=addmf(a,'output',1,'NM','trimf',[72,73,75]);a=addmf(a,'output',1,'NS','trimf',[73,74,75]);a=addmf(a,'output',1,'Z','trimf',[74,75,76]);a=addmf(a,'output',1,'PS','trimf',[75,76,77]);a=addmf(a,'output',1,'PM','trimf',[75,77,78]);a=addmf(a,'output',1,'PB','smf',[76,78]);rulelist=[1 1 1 1; %Edit rule base2 2 1 1;3 3 1 1;4 4 1 1;5 5 1 1;6 6 1 1;7 7 1 1];a=addrule(a,rulelist);a1=setfis(a,'DefuzzMethod','mom'); %Defuzzywritefis(a1,'temperatrue'); %Save to fuzzy file "tank.fis" a2=readfis('temperatrue');figure(1);plotfis(a2);figure(2);plotmf(a,'input',1);figure(3);plotmf(a,'output',1);flag=1;if flag==1showrule(a) %Show fuzzy rule baseruleview('temperatrue'); %Dynamic Simulationenddisp('-------------------------------------------------------');disp(' fuzzy controller table:e=[-3,+3],u=[-4,+4] ');disp('-------------------------------------------------------');for i=1:1:7e(i)=i-4;Ulist(i)=evalfis([e(i)],a2);endUlist=round(Ulist)e=-3; % Erroru=evalfis([e],a2) %Using fuzzy inference四、Simulink仿真模型五、实验结果令T=0;1、模糊控制器为一维控制器,输入输出变量的量化等级为7级,取5个模糊集。
模糊控制课程设计报告一、模糊控制器设计1.输入输出变量的隶属度函数图1.1输入偏差量e图1.2输入偏差量变化率ec图1.3输出控制量u2.模糊规则设置1.if(input1 is ss1 ) and (input2 is s2)then (output1is b3)2.if(input1 is ss1 )and (input2 is m2)then (output1 is b3)3.if(input1 is ss1 )and (input2 is b2)then (output1 is mb3)4.if(input1 is s1 ) and (input2 is s2)then (output1 is b3)5.if(input1 is s1 )and (input2 is m2)then (output1 is mb3)6.if(input1 is s1 ) and (input2 is b2)then (output1 is m3)7.if(input1 is sm1) and (input2 is s2)then (output1 is mb3)8.if(input1 is sm1)and (input2 is m2)then (output1 is mb3)9.if(input1 is sm1)and (input2 is b2)then (output1 is m3)10.if(input1 is bb1)and (input2 is b2)then (output1 is s3)11.if(input1 is bb1)and (input2 is m2)then (output1 is s3)12.if(input1 is bb1)and (input2 is s2)then (output1 is sm3)13.if(input1 is b1) and (input2 is b2)then (output1 is s3)14.if(input1 is b1)and (input2 is m2)then (output1 is sm3)15.if(input1 is b1)and (input2 is s2)then (output1 is m3)16.if(input1 is mb1)and (input2 is b2)then (output1 is sm3)17.if(input1 is mb1)and (input2 is m2)then (output1 is sm3)18.if(input1 is mb1)and (input2 is s2)then (output1 is m3)19.if(input1 is m1)and (input2 is m2)then (output1 is m3)20.if(input1 is m1)and (input2 is s2)then (output1 is mb3)21.if(input1 is m1)and (input2 is b2)then (output1 is sm3)二、Simulink回路设计1.设计思路按照书中所示的基本结构将偏差、控制器、被控对象连接成一个回路,通过将偏差和偏差变化率输入模糊控制器,得到输出控制力矩u输入到被控对象中,最终得到理想的控制结果。
模糊控制程序设计报告
自研112班 麻世博 2201100387
题目:已知被控对象为0.51()101
s G s e s −=+。
假设系统给定为阶跃值r =30,采样时间为0.5s ,系统的初始值r(0)=0。
试分别设计:
(1)常规的PID 控制器;
(2)常规的模糊控制器;
分别对上述2种控制器进行Matlab 仿真,并比较控制效果
解答:
1 常规PID 控制器的设计与SIMULINK 仿真
如图1所示,使用SIMULINK 工具对已知系统的PID 控制系统进行仿真。
图1 PID 控制系统的SIMULIK 仿真
其中PID 控制器为离散型,采样时间T=0.5s ,参数P=14,I=3,D=0。
阶跃信号幅值为30,被控对象传递函数为0.51()101
s G s e s −=+。
该系统的阶跃响应如图2。
图2 PID控制系统的输出
该控制系统上升时间T r=1.5s,调节时间T s=8s,超调量σ%=70%,没有稳态误差。
该系统中PID控制器的输出曲线如图3。
图3 PID控制器的输出曲线
输出最大值为465,最小值为-208。
2 模糊控制器的设计
在本文中,我通过MATLAB提供的模糊逻辑工具箱(Fuzzy Logic Toolbox)编辑隶属函数、控制规则,设计了一个双输入单输出的模糊控制器,如下图所示。
图4 模糊控制器概览
2.1 隶属度函数的确立。
选择偏差E和偏差变化率EC作为控制器的输入,控制量U为输出。
取E、EC和U的模糊子集为{NB, NM, NS, ZO, PS, PM, PL} ,它们的论域为{-3, -2, -1, 0, 1, 2, 3}。
在 MATLAB的命令窗口输入命令Fuzzy,进入模糊逻辑编辑窗口。
取输入量E、EC的隶属函数为高斯型(gaussmf),输出U的隶属函数为三角形(trimf),如下图所示。
图5 输入模糊变量E的隶属度函数
图6 输入模糊变量EC的隶属度函数
图7 输出模糊变量U的隶属度函数
2.2 模糊控制规则与决策方法的确立。
根据隶属函数和控制经验设计的控制规则如表1所示。
以 if ⋯then的形式在Rule Editor窗口输入这49条规则,这样就完成了控制规则的编辑。
表1 模糊控制器规则表 E U
NB NM NS ZO PS PM PB NB NB NB NM NM NM NS NS NM NB NM NM NS NS ZO PS NS NM NM NS NS ZO PS PM ZO NM NM NS ZO PS PM PM
PS NM NS ZO PS PS PM PM
PM NS ZO PS PS PM PM PM
EC PB PS PS PM PM PM PB PB
在本控制器中,模糊决策采用Mamdani 型推理算法,逆模糊用重心平均法(centroid)。
这样就利用模糊逻辑工具箱建立了一个FIS 型文件,取文件名为f4.fis ,并将模糊控制器导入工作空间,这样就完成了FIS 型文件同SIMULINK 的连接,为下一步的系统仿真打下了基础。
3 模糊控制系统的SIMULINK 仿真
在 SIMULINK 的菜单中,选择Fuzzy Logic Toolbox 中的Fuzzy Logic Controller 模块,键入f4,在这基础之上,加上量化因子Ke 、Kec 和Ku 。
这样,模糊控制器便建立起来了,再加上被控系统的模型和相关模块,就构成了如图8所示的模糊控制系统。
图8 模糊控制系统的SIMULINK 仿真
其中,输入阶跃信号幅值为30,起始时间t=1s ,Ke=0.32,采样周期T=0.5s ,Kec=0.03,采样周期T=0.5s ,限幅器Fe 和Fec 输出范围为[-3,3]。
Ku=50。
被控对象传递函数为,
0.51()101
s G s e s −=+。
该系统的输出阶跃响应如图9。
图9 模糊控制系统的阶跃响应
该控制系统上升时间T r=4.5s,调节时间T s=3.5s,超调量σ%=8.2%,稳态误差6.7%。
模糊控制器的输出如图10.
图10 模糊控制器的输出曲线
模糊控制器的最大输出130,最小输出为-3。
4 PID控制器与模糊控制器的比较。
与PID控制器相比,模糊控制器的调节时间较短,超调量较小,控制器输出更加平稳,幅度更小,但稳态误差较大。
这次仿真结果与理想的模糊控制器的仿真效果差距较大,可能是该系统的信号采样时间T=0.5s较大造成的。