基于模糊PID的直流电机控制系统simulink建模与仿真

news/2024/9/19 9:00:00/文章来源:https://www.cnblogs.com/hardware/p/18326463

1.课题概述

        PID控制器和模糊PID控制器通过Simulink建模实现,在matlab中编程实现模糊控制规则,PID控制器参数计算。运行simulink模型之后,将2个控制器的控制响应曲线进行对比得到仿真结果。

 

2.系统仿真结果

将PID控制器的控制响应曲线和模糊PID控制响应曲线放一起对比,结果如下:

 

 

 

可以看到,模糊PID控制器收敛速度更快,且超调更小。

 

3.核心程序与模型

版本:MATLAB2022a

 

Simulink模型如下:

 

 

 

模糊规则通过MATLAB编程实现,核心程序如下:

 

% 添加输入变量E及其隶属度函数
FIS = addvar(FIS,'input','E',[-100 100]); 
% 添加E的负向隶属度函数
FIS = addmf(FIS,'input',1,'Negative','gaussmf',[70 -100]);
% 添加E的正向隶属度函数
FIS = addmf(FIS,'input',1,'Positive','gaussmf',[70 100]);% 添加输入变量CE及其隶属度函数
FIS = addvar(FIS,'input','CE',[-100 100]); 
% 添加CE的负向隶属度函数
FIS = addmf(FIS,'input',2,'Negative','gaussmf',[70 -100]);
% 添加CE的正向隶属度函数
FIS = addmf(FIS,'input',2,'Positive','gaussmf',[70 100]);% 添加输出变量u及其隶属度函数
FIS = addvar(FIS,'output','u',[-200 200]); 
% 添加u的最小值常量函数-200(min)函数负向端点是-200,正向端点是-200。
FIS = addmf(FIS,'output',1,'Min','constant',-200);
% 添加u的零点常量函数,正向端点是0,负向端点是0
FIS = addmf(FIS,'output',1,'Zero','constant',0);
% 添加u的最大值常量函数,正向端点是200,负向端点是200
FIS = addmf(FIS,'output',1,'Max','constant',200);%模糊规则
...........................................................
FIS = addrule(FIS,ruleList);
0001

  

 

4.系统原理简介

       基于模糊PID的直流电机控制系统是一种先进的控制策略,它结合了模糊逻辑和传统PID控制器的优点,以提供更优的控制性能。这种控制系统在许多领域,特别是在直流电机控制中,得到了广泛的应用。

 

      模糊PID控制器是一种将模糊逻辑与常规PID控制器相结合的智能控制器。它利用模糊逻辑的推理能力,根据不同的输入值,动态调整PID控制器的参数,以达到更好的控制效果。

 

      在模糊PID控制系统中,首先通过模糊化模块将输入的误差和误差变化率转换为模糊量。然后,根据模糊推理规则,对这些模糊量进行推理,得出相应的控制输出。最后,将这个模糊控制输出转换为实际的控制输出,实现对被控对象的控制。

 

4.1 PID控制器

      比例-积分-微分(PID)控制是工业中最常用的控制算法,在工业控制中已被普遍接受。 PID 控制器的流行部分归因于它们在各种操作条件下的稳健性能,部分归因于它们的功能简单性,这使工程师能够以简单、直接的方式操作它们。

 

       PID算法由三个基本系数组成; 比例,积分和微分,它们是变化的以获得最佳响应。 本文讨论了闭环系统、经典 PID 理论和调节闭环控制系统的效果。 还讨论了 LabVIEW 中的 PID 工具集以及这些 VI 的易用性。

 

       PID 控制器是一种线性控制器,它根据给定值与实际输出值构成控制偏差。将偏差的比例§、积分(I)和微分(D)通过线性组合构成控制量,对被控对象进行控制,故称 PID 控制器,原理框图如图所示。

 

 

 

4.2模糊化模块

       在模糊PID控制系统中,误差和误差变化率是输入量。它们可以通过相应的函数转换为模糊量。通常,误差和误差变化率可以使用以下公式进行计算:

 

误差:e = r - y

误差变化率:ec = (e(t) - e(t-1)) / T

 

其中,r是参考输入,y是被控对象的输出,T是采样时间。

 

4.3 模糊推理模块

       模糊推理模块是模糊PID控制系统的核心部分。它根据不同的输入模糊量,通过模糊推理规则得出相应的控制输出。在模糊PID控制系统中,通常使用以下模糊推理规则:

 

IF e is A and ec is B THEN u is C

 

其中,A、B和C是模糊集合,u是控制输出。这些模糊集合可以根据实际情况进行定义。

 

4.4 解模糊模块

       解模糊模块是将模糊控制输出转换为实际控制输出的模块。它通常使用中心平均法或最大值法进行解模糊操作。中心平均法是通过计算每个可能输出值的中心平均值来得出实际输出值。最大值法是通过选择所有可能输出值中的最大值来得出实际输出值。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/772242.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

公钥私钥gitee都不行,新手小白破局(windows凭据)

公钥私钥gitee都不行,新手小白破局(windows凭据) 创建时间:2024-07-26 一、问题复现 gitee项目创建后,由于之前的 账号密码错乱,导致提交不了,不能克隆下来,不能提交,如下: 1.1 初始的一个项目1.2 克隆出现问题二、删除公钥私钥 2.1 本机之前生成的密钥文件 一般在这…

【活动预告】Easysearch 结合大模型实现 RAG

2024 搜索客社区 Meetup 首期线上活动正式启动,本次活动由 搜索客社区、极限科技(INFINI Labs)联合举办,诚邀广大搜索技术开发者和爱好者参加交流学习。 活动时间:2024 年 7 月 31 日 19:30-20:30 (周三) 活动形式:微信视频号(极限实验室)直播 报名方式:关注或扫码海…

反射、特性

1.反射的例子:

SQL数据库表 多对多关系设计--省去链表的尝试

概述 之前遇到一个MES需求,需要创建一个基础资料表 "人员信息表" ,用于其它业务的人员信息关连,因为这些人员并非系统登录帐号,所以单独进行维护。人员表涉及到字段包括:ID,工号,姓名,所属工序,所属职称,所属车间。其中,所属工序、所属职称、所属车间 为…

Asp .Net Core 系列:详解授权以及实现角色、策略、自定义三种授权和自定义响应

什么是授权(Authorization)? 在 ASP.NET Core 中,授权(Authorization)是控制对应用资源的访问的过程。它决定了哪些用户或用户组可以访问特定的资源或执行特定的操作。授权通常与身份验证(Authentication)一起使用,身份验证是验证用户身份的过程,授权与身份验证相互独…

CTF-内存取证题目

一:使用volatility2版本 1、分析镜像 python2 vol.py -f /home/kali/桌面/worldskills3.vmem imageinfo 2、从内存中获取到用户admin的密码并且破解密码,以flag{admin,password}形式提交(密码为6位) (1)查看系统用户 python2 vol.py -f /home/kali/桌面/worldskills3.vme…

后端说,单页面SPA和前端路由是怎么回事

没有请求的路由 在传统开发中,浏览器点击一个超链接,就会像后端web服务器发送一个html文档请求,然后页面刷新。但开始单页面开发后,就完全不同了。 单页面?这个概念难以理解。我用一个js作为整个web应用,然后再这个js中操作dom变化,以此来实现页面变化。这不叫单页面吗?…

nginx批量封禁黑名单ip

nginx批量封禁黑名单ip昨天搞到差不多1点,今天又是忙到6点半,连我领导都说“搞得我们加一好憔悴呀”。有很长一段时间没更新博客了,想着怎么做个人IP。。。谋出路一、需求介绍废话少说,需求就是怎么批量封禁别人给来的一大堆黑名单ip。甲方每天不定期发来几百、上千个ip,我…

【基础教程】Tutorial on Pytorch 结合官方基础文档和个人经验

参考与前言 此教程首次书写于2021年12月份 至 2022年4月份间不断补充;阅读本文时可以对着代码运行查看官方网址:https://pytorch.org/tutorials/ 【基本从这里翻译而来 更简洁版+碎碎念】 https://pytorch.org/tutorials/beginner/blitz/cifar10_tutorial.html#sphx-glr-begi…

kettle从入门到精通 第八十一课 ETL之kettle kettle中的json对象字段写入postgresql中的json字段正确姿势

1、上一节可讲解了如何将json数据写入pg数据库表中的json字段,虽然实现了效果,但若客户继续使用表输出步骤则仍然无法解决问题。 正确的的解决方式是设置数据库连接参数stringtype=unspecified 2、stringtype=unspecified 参数的作用: 当设置为 unspecified 时,pg JDBC 驱动…

C++文件系统操作6 - 跨平台实现文件和文件夹的拷贝

1. 关键词 2. fileutil.h 3. fileutil.cpp 4. filesystem_win.h 5. filesystem_win.cpp 6. filesystem_unix.cpp 7. 源码地址1. 关键词 C++ 文件系统操作 拷贝文件 拷贝文件夹 跨平台 2. fileutil.h#pragma once#include <string> #include <cstdio> #include <…

ArchLinux 问题集锦

电脑使用Android的网络 sudo pacman -S usb_modeswitch 手机打开网络共享 Android使用usb连接电脑网络 yay -S gnirehte gnirehtet runAndroid 投屏到电脑 sudo pacman -S scrcpy scrcpyPlasma KDE Screen Locking Picture of the Day 每日一图的图片缓存位置~/.cache/plasma_e…