模糊控制程序设计报告
- 格式:pdf
- 大小:149.13 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.系统组成该水温恒温模糊控制系统包括以下几个部分:1)传感器:用于实时监测水温,通常采用温度传感器来获取水温数据。
2)单片机:作为系统的核心控制部分,负责根据传感器采集的水温数据进行控制算法处理,并输出控制信号给执行器。
3)执行器:负责控制水温调节设备,比如加热器或制冷器,以使水温保持在设定的恒温值附近。
4)人机界面:用于设定水温的目标值、显示当前水温以及系统的工作状态等信息,通常采用液晶显示屏或LED灯来实现。
2.系统工作原理系统工作流程如下:1)单片机通过传感器获取实时水温数据,并与设定的恒温值进行比较。
2)根据实时水温和设定值之间的差异,单片机通过模糊控制算法计算出调节水温的控制信号。
3)控制信号送往执行器,执行器根据信号控制加热器或制冷器对水温进行调节。
4)单片机不断循环执行上述步骤,使水温保持在设定的恒温值附近。
二、模糊控制算法设计模糊控制算法是一种基于模糊逻辑进行推理和决策的控制方法,适用于非线性、不确定性系统的控制。
在水温恒温控制系统中,可以设计如下的模糊控制算法:1.模糊化:将实时水温和设定水温映射到模糊集合,通常包括“冷”、“适中”和“热”等。
2.模糊规则库:根据实际情况,设定一系列的模糊规则,描述实时水温和设定水温之间的关系。
3.模糊推理:通过模糊规则库,进行模糊推理,得到相应的控制信号。
4.解模糊化:将模糊推理的结果映射到实际的控制信号范围内,作为执行器的输入。
通过模糊控制算法设计,可以更加灵活地调节水温,适应各种复杂环境下的恒温控制需求。
三、系统实现在实际系统的实现中,首先需要选择合适的传感器,并设计好传感器的接口电路来获取水温数据。
《智能控制》 课程实验报告实验题目:模糊控制器设计与实现 一、 实验目的1.掌握模糊控制系统的设计方法;2.比较常规控制与模糊控制的优缺点; 3.训练Matlab 程序设计能力。
二、 实验内容1.针对一个二阶系统,分别设计模糊控制器和常规控制器; 2.分别PID 控制和模糊控制两种情况下系统阶跃响应; 3.对实验结果进行对比分析。
三、 实验设备计算机 1台Window XP 操作系统 Matlab 6.5软件四、 实验原理1、 模糊控制模糊逻辑控制又称模糊控制,是以模糊集合论,模糊语言变量和模糊逻辑推理为基础的一类计算机控制策略,模糊控制是一种非线性控制。
图1-1是模糊控制系统基本结构,由图可知模糊控制器由模糊化,知识库,模糊推理和清晰化(或针对模糊控制器每个输入,输出,各自定义一个语言变量。
因为对控制输出的判断,往往不仅根据误差的变化,而且还根据误差的变化率来进行综合评判。
所以在模糊控制器的设计中,通常取系统的误差值e 和误差变化率ec 为模糊控制器的两个输入,则在e 的论域上定义语言变量“误差E ” ,在ec 的论域上定义语言变量“误差变化EC ” ;在控制量u 的论域上定义语言变量“控制量U ” 。
通过检测获取被控制量的精确值,然后将此量与给定值比较得到误差信号e ,对误差取微分得到误差变化率ec ,再经过模糊化处理把分明集输入量转换为模糊集输入量,模糊输入变量根据预先设定的模糊规则,通过模糊逻辑推理获得模糊控制输出量,该模糊输出变量再经过去模糊化处理转换为分明集控制输出量。
2、PID 控制在模拟控制系统中,控制器最常用的控制规律是PID 控制。
PID 控制器是一种线性控制器。
它根据给定值与实际输出值之间的偏差来控制的。
其传递函数的形式是:)11()(s T sT k s G D I p ++=,PID 控制原理框图如图1-2所示。
式中p k ——比例系数;I T ——积分时间常数;D T ——微分时间常数。
基于单片机模糊PID控制算法实验设计基于单片机的模糊PID控制算法是一种将模糊逻辑和PID控制相结合的控制方法。
模糊PID控制算法在许多工程和科学领域中具有广泛的应用,用于控制各种物理系统,例如机械系统、电子系统和化学系统等。
本文将介绍基于单片机的模糊PID控制算法的实验设计。
一、实验目的本实验旨在通过使用单片机实现模糊PID控制算法,控制一个虚拟物理系统的运动。
通过这个实验,我们可以了解模糊PID控制算法的原理和实现过程,并通过实验结果对其性能进行评估。
二、实验原理模糊PID控制算法是将模糊逻辑和传统的PID控制算法相结合而得到的一种控制方法。
PID控制算法是一种反馈控制方法,它通过测量和计算系统的误差,调整输出控制量,使得系统的运行状态能够接近期望状态。
模糊PID控制算法的原理是,在PID控制算法的基础上,使用模糊逻辑来处理模糊因素,使得控制系统能够对模糊因素有更好的适应性和鲁棒性。
模糊逻辑是对不确定性和模糊性进行建模和处理的一种方法,它能够通过模糊集合和模糊规则来描述和处理模糊因素。
在模糊PID控制算法中,首先使用一组模糊集合来表示误差和变化率的程度,然后建立一组模糊规则,通过模糊推理得到模糊控制量,最后将模糊控制量经过模糊解模糊化得到实际控制量。
这样,通过模糊逻辑的处理,能够使得控制系统对于模糊因素有更好的适应性和鲁棒性。
三、实验步骤1.设计一个虚拟物理系统,可以使用一个电机控制器和一个电机模拟器来模拟物理系统的运动。
2.根据虚拟物理系统的特性,确定控制系统的输入和输出变量,例如位置和速度。
3.设计一组模糊集合来表示位置和速度的程度,例如“远”、“近”、“大”、“小”等。
4.建立一组模糊规则,通过模糊推理得到模糊控制量。
5.设计一个PID控制算法,用于计算系统的误差和调整输出控制量。
6.将模糊控制量和PID控制量相结合,得到最终的实际控制量。
7.使用单片机编程语言,例如C语言,实现上述的模糊PID控制算法。
洗衣机的模糊控制器设计1 洗衣机的模糊控制传统的洗衣机都是人们用肉眼观看后,根据人的经验来调整洗衣时间和用水量,而模糊控制就是以人对被控对象的控制经验为依据而设计的控制器,这样就能实现控制器模拟人的思维方式来控制洗衣机。
以模糊洗衣机的设计为例其控制是一个开环的决策过程,模糊控制按以下步骤进行。
[4]1.1 洗衣机的时间控制1.1.1 确定模糊控制器的结构选用单变量二维模糊控制器。
控制器的输入为衣物的污泥和油脂,输出为洗涤时间。
1.1.2 定义输入、输出模糊集将污泥分为3个模糊集:SD(污泥少),MD (污泥中),LD (污泥多);取值范围为[0,100]。
将油脂分为3个模糊集:NG (油脂少),MG (油脂中),LG (油脂多); 将洗涤时间分为5个模糊集:VS (很短),S(短),M (中等),L(长),VL (很长)。
1.1.3 定义隶属函数选用如下隶属函数:50/5050/10050/50/50x x x x x x x μLDMD SD污泥1005010050500500 x x x x 采用三角形隶属函数可实现污泥的模糊化。
采用Matlab进行仿真,污泥隶属函数设计仿真程序如下: Close all ; N=2; x=0:0.1:100; for i=1:N+1 f(i)=100/N*(i-1); endu=trimf(x,[f(1),f(1),f(2)]); figure(1); plot(x,u); for j=2:Nu=trimf(x,[f(j-1),f(j),f(j+1)]); hold on; plot(x,u); endu=trimf(x,[f(N),f(N+1),f(N+1)]); hold on; plot(x,u); xlabel(‘x’);ylabel(‘Degree of membership ’); 污泥程序仿真结果如图1所示:01020304050607080901000.10.20.30.40.50.60.70.80.91xDe g r e e of m e m b e r s h i p图1 污泥隶属函数将油脂分为三个模糊集:NG (无油脂)MG (油脂中)LG(油脂多),取值范围为[0,100]选用如下隶属函数:50/5050/10050/50/50y y y y y y y LGMG NG油脂1005010050500500 y y y y 采用三角形隶属函数实现油脂的模糊化,仿真程序如下: Clear all; N=2; x=0:0.1:100; for i=1:N+1 f(i)=100/N*(i-1); endu=trimf(y,[f(1),f(1),f(2)]); figure (1); plot(y,u); for j=2:Nu=trimf(y,[f(j-1),f(j),f(j+1)]); hold on; plot(y,u); endu=trimf(y,[f(N),f(N+1),f(N+1)]); hold on; plot(y,u); xlabel(‘y’);ylabel(‘Degree of membership ’); 油脂程序仿真结果如图2所示:01020304050607080901000.10.20.30.40.50.60.70.80.91yDe g r e e of m e mb e r s h i p图2 油脂隶属函数将洗涤时间分为五个模糊集:VS(很短)S (短)M (中等)L(很长)取值范围为[0,60] 选用如下隶属函数:20/4020/6015/2515/4015/1015/2510/10/10z z z z z z z z z z z z z VLL M S VS洗涤时间604060404025402525102510100100 z z z z z z z z 采用三角形隶属函数实现洗涤时间的模糊化,其Matlab仿真程序如下: Close all; Z=0:0.1:60;U=trimf(z,[0,0,10]); Figure(1); Plot(z,u);U=trimf(z,[0, 10,25]); hold on; plot(z,u);U=trimf(z,[ 10,25,40]); hold on; plot(z,u);U=trimf(z,[ 25,40,60]); hold on; plot(z,u);U=trimf(z,[ 40,60,60]); hold on; plot(z,u); xlabel(‘z’)ylabel(“Degree of membership ”); 洗涤时间仿真程序结果如图3所示:01020304050600.10.20.30.40.50.60.70.80.91zDe g r e e of m e m b e r s h i p图3 洗涤时间隶属函数1.1.4 建立模糊控制规则根据人的操作经验设计模糊规则,模糊规则设计的标准为:“污泥越多,油脂越多,洗涤时间越长”;“污泥适中,油脂适中,洗涤时间适中”;“污泥越少,油脂越少,洗涤时将越短”。
用 PLC 实现模糊控制的程序设计方法摘要:采用 PLC 进行模糊控制操作的程序设计的方法,是我们在应用 PLC 实现一些复杂控制系统时发现的,以前我们经常使用的小型 PLC 由于其不具备现代控制算法植入功能而逐渐被淘汰,文中所述程序设计方法通过实际项目的检验发现可以有效地对系统进行控制,有效缩短控制系统开发周期,其优越性能正在逐步强大起来。
关键词:PLC;模糊控制PLC 即可编程控制器,是为了进行相关数据的计算而发明的一种适用于规模化工业生产条件下使用的设备,通过一定的程序和要求,进行数据的输入和结果的输出,以此来控制工业生产过程。
模糊控制就是将其建立在人类思考问题的方式上形成的一种控制方法,它反映着人类的思维在处理事情上展现出来的一种模糊化的思考,比如对于复杂看似难以解决的问题,人们往往会根据自己的经验对事物进行思考,当我们对被控系统在一定程度上有所认识的前提下,并为解决它需要实现的控制功能而进行适当的思考,这时我们便将其称之为思维的模糊性。
模糊控制就是模仿的人类面对这种状况下的思维,我们只需给予它一定的模糊的指令程序,让其对整个的控制过程进行计算运行,这种看似简单的指令却需要有专业的人士发出以便得到相对更准确的结果。
这种对于控制的模糊性和我们以往进行的自动化的控制有着完全不同的本质,而这种模仿人类思维的控制恰恰体现了它智能化的一面,更适合当今生产对于控制的要求。
一、控制算法面对现今工业生产的复杂性,简单的线性数学模型已经不能满足生产的要求,取而代之的是要建立一个可适应不停变化的、非简单性的控制系统,而这种模型的建立纯在较大的难度。
在过去生产简单产品,不需要过多操作流程的条件下,简单传统的控制就可以实现生产的要求,现在只有找到一种先进的控制模式才能让复杂的生产流程顺利进行,用 PLC 进行模糊控制便是解决这一问题的有效办法。
传统的控制需要基于一定的模型才能准确运行,而模糊控制则完全不需要,正是这一点才让它适应于复杂的条件。
实验二一、实验目的1.通过实验熟悉并掌握GUI(Graph User Interface)的工具箱函数的使用方法2.通过实验熟悉并掌握模糊控制器的设计方法与步骤3.通过实验熟悉并掌握利用GUI建立FIS的方法与步骤2.通过实验进一步熟悉并掌握Matlab软件的使用方法二、实验内容1.根据给定要求,设计炉温控制系统的模糊控制器2.编制炉温模糊控制系统的Matlab仿真程序3.利用GUI建立FIS三、实验步骤1.设计炉温控制系统的模糊控制器①确定模糊控制器的结构②定义输入、输出模糊集③定义输入输出隶属函数④建立模糊控制规则⑤建立模糊控制表⑥进行模糊推理,求出模糊关系作出模糊决策⑦对控制量进行反模糊化2.按上述步骤,设计炉温模糊控制系统的Matlab仿真程序3.针对本例,进一步利用GUI建立FIS①进入FIS编辑器②建立初步的模糊推理系统③建立各变量的隶属函数④设置当前变量的变化范围和其在隶属函数上的显示范围⑤打开模糊规则编辑器加入模糊控制规则⑥打开模糊规则观察器,观察模糊规则⑦打开输出曲面观察器,观察模糊推理系统的输出曲面⑧分析实验结果,完成实验报告。
四、实验要求对于所设计的炉温控制系统,要求温度保持在600°C恒定,针对该控制系统有以下控制经验:1。
若炉温低于600°C,则升压;低得越多升压越高.2.若炉温高于600°C,则降压;高得越多降压越低.3.若炉温等于600°C,则保持电压不变。
(1)设模糊控制器为一维控制器,输入输出变量的量化等级为7级,取5个模糊集。
(2)设模糊控制器为一维控制器,输入输出变量的量化等级为7级,取7个模糊集。
五、实验内容六、实验程序%Fuzzy Control for temperatureclear all;close all;a=newfis(‘fuzzy temperature’);a=addvar(a,'input’,'e’,[—3 3]);a=addmf(a,’input’,’1’,’NB','zmf',[-3 -1]);a=addmf(a,’input’,’1’,’NM’,’trimf’,[-3 —1 1]);a=addmf(a,’input',’1',’NS’,’trimf’,[—2 0 2]);a=addmf(a,’input’,’1’,’Z,'trimf’,[—2 1 1 ]);a=addmf(a,’input',’1’,’PS,’trimf’,[-1 2 1]);a=addmf(a,’input',’1’,'PM'trimf',[1 2 3 ]);a=addmf(a,’input’,'1’,'PM'smf',[1 3 ]);a=addvar(a,’output’,’u’,[-3 3]);a=addmf(a,’output’,‘1’,’NB',’zmf’,[—3 —1]); a=addmf(a,'output’,‘1',’NS’,'trimf’,[—3 1 1]);a=addmf(a,’output’, ‘1’,’Z’,'trimf',[-2 0 2]);a=addmf(a,'output’,‘1’,'PS’,’trimf’,[-1 1 2]);a=addmf(a,’output’,‘1’,'PB’,’smf’,[1 3] );rulelist=[1 1 1 12 2 1 13 2 1 14 3 1 15 5 1 16 5 1 17 5 1 1];a=addrule(a,rulelist);a1=setfis(a,’DeduzzMothod’,’mom’);writefis(a1,’temperature’);a2=readfis(’temperature’);figure(1);plotfis(a2);figure(2);plotmf(a,’input’,1);figure(3);plotmf(a,’output',1);flag=0showrule(a);ruleview(‘temperature’);enddisp(‘—----—---———------——--—-—-——--—-—----—--—-————-——--——————--‘);disp(‘fuzzy controller table:e=[-3,3],u=[-3,3] ');disp(‘—--—-—-—-——-—--——-———-———----——--——--------——--—--—---———-—-‘);for i=1:1:7e(i)=i—4;Ulist(i)=evafis([e(i)],a2);endUlist=round(Ulist);e=-3;u=eavlfis([e],a2)。
模糊控制程序设计报告
自研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较大造成的。