在STM32上实现FuzzyPID(理论与代码实现)

本文详细介绍了如何在STM32微控制器上实现模糊PID控制器,以温度控制为例,涵盖输入量化、规则库、隶属度函数、模糊推理和解模糊等关键步骤。文中提供代码示例,并分享了实际应用中调整表格和参数以优化控制效果的经验。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在STM32上实现FuzzyPID(代码详解与实现)–以温控为例

资源下载:https://download.csdn.net/download/weixin_39092315/19524894(已更新带.h)

1.前言

模糊PID已经在实际生活当中有应用了,至于它是否真的比传统PID要好,各位就自行判断。本文基于博主做的项目中的经验总结而成,借助代码一步步推理至实现。有不错的控温效果,精度很高,但耗时挺长。

2.实现步骤

2.1输入量的量化与模糊化

在温度控制中,能够得到的数据就是温差(Error)和温差变化率(iError),所以首先确定我们的输入有两个:Error、iError。模糊PID的特点就是模糊,我们将确切的输入进行量化,就是模糊的第一步。量化就是通过量化函数将输入映射到几个数字级别,一般都是相对于0对称的数字区间。具体投射到怎样的区间根据实际情况而定。

举个例子:温控器件工作温度是25c°,目标常控温度为20c°,那么输入数据的范围为:±5c°,又由于温控器件温度变化率最大为±0.3(变化率的大小需要实际测定,具体与每周期采样时间有关)。那么,我们需要设置量化函数的两个分母为:5与0.3,因此在温控过程中,温差逐渐减少,所以量化值Error/MaxE的值随着温差减少而减小,能够表征温控当前温度与目标温度的差距(方便减小P控制和增大I控制,细品)。

代码用的是±6.

//输入值的量化论域(-6->6)
static void LinearQuantization(FUZZYPID *vPID,float _Real_Value,float *qValue)
{
	 float thisError;
	 float deltaError;
	 

	 thisError=vPID->setVaule-_Real_Value;   //计算当前偏差
	 deltaError=thisError-vPID->lasterror;   //计算偏差增量
		
	//E和EC的量化
	 qValue[0]=6.0*thisError/(v
评论 19
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值