温控系统c语言源代码,模糊PID控制温控系统设计C语言程序代码

时间: 2023-11-26 12:06:07 浏览: 30
以下是一个基于模糊PID控制的温控系统的C语言源代码示例: ``` #include <stdio.h> #include <stdlib.h> #include <math.h> #define TEMP_SET_POINT 60.0 // 温度设定值 #define TEMP_TOLERANCE 2.0 // 温度容差 #define MAX_POWER 100.0 // 最大加热功率 #define MIN_POWER 0.0 // 最小加热功率 #define SAMPLE_TIME 0.1 // 采样时间 // 模糊控制参数 #define NB 7 // 模糊集合数量 #define NM 7 #define NS 7 #define ZE 7 #define PS 7 #define PM 7 #define PB 7 #define DE 0.1 // 均匀分割间隔 #define e_c PS // e_c: e的上限 #define e_s NS // e的下限 #define delta_u_c PM // delta_u的上限 #define delta_u_s NM // delta_u的下限 // 模糊集合隶属度函数 double NB_func(double e) { return 1.0 / (1.0 + exp(-NB * (e - PB))); } double NM_func(double e) { return 1.0 / (1.0 + exp(-NM * (e - PM))); } double NS_func(double e) { return 1.0 / (1.0 + exp(-NS * (e - ZE))); } double ZE_func(double e) { return 1.0 / (1.0 + exp(-ZE * (e - ZE))); } double PS_func(double e) { return 1.0 / (1.0 + exp(-PS * (e - ZE))); } double PM_func(double e) { return 1.0 / (1.0 + exp(-PM * (e - NM))); } double PB_func(double e) { return 1.0 / (1.0 + exp(-PB * (e - NB))); } // 模糊控制规则库 double delta_u_table[7][7] = { {PB, PM, PM, ZE, NS, NS, NS}, {PB, PM, PM, NS, NS, NS, NS}, {PM, PM, ZE, NS, NS, NS, NM}, {PM, PS, ZE, NS, NS, NM, NM}, {PS, ZE, NS, NS, NM, NM, NB}, {ZE, ZE, NS, NM, NM, NB, NB}, {ZE, PS, PM, NM, NB, NB, NB} }; // 模糊控制 double fuzzy_control(double e, double delta_e) { double delta_u = 0.0; int i, j; double e_array[7], delta_e_array[7]; double u_array[7] = {MIN_POWER, MIN_POWER, MIN_POWER, MIN_POWER, MIN_POWER, MIN_POWER, MIN_POWER}; double sum_e = 0.0, sum_delta_e = 0.0, sum_u = 0.0, sum_w = 0.0, w = 0.0; // 计算e、delta_e的隶属度 e_array[0] = NB_func(e); e_array[1] = NM_func(e); e_array[2] = NS_func(e); e_array[3] = ZE_func(e); e_array[4] = PS_func(e); e_array[5] = PM_func(e); e_array[6] = PB_func(e); delta_e_array[0] = NB_func(delta_e); delta_e_array[1] = NM_func(delta_e); delta_e_array[2] = NS_func(delta_e); delta_e_array[3] = ZE_func(delta_e); delta_e_array[4] = PS_func(delta_e); delta_e_array[5] = PM_func(delta_e); delta_e_array[6] = PB_func(delta_e); // 计算u的隶属度 for (i = 0; i < 7; i++) { for (j = 0; j < 7; j++) { w = e_array[i] * delta_e_array[j]; u_array[(int)round(delta_u_table[i][j])] = fmax(u_array[(int)round(delta_u_table[i][j])], w); } } // 计算delta_u for (i = 0; i < 7; i++) { delta_u += u_array[i] * (i * DE + delta_u_s); sum_w += u_array[i]; } delta_u /= sum_w; return delta_u; } int main() { double temp = 20.0; // 初始温度为20度 double last_temp = 20.0; // 上次温度 double e = 0.0, delta_e = 0.0; double power = 0.0; double time = 0.0; double Kp = 0.2, Ki = 0.1, Kd = 0.05; // PID控制参数 double last_error = 0.0, error = 0.0, error_integral = 0.0, error_derivative = 0.0; while (fabs(temp - TEMP_SET_POINT) > TEMP_TOLERANCE) { // 计算误差和误差变化率 last_error = error; error = TEMP_SET_POINT - temp; error_integral += error * SAMPLE_TIME; error_derivative = (error - last_error) / SAMPLE_TIME; // 计算模糊PID控制输出 delta_e = Kp * error + Ki * error_integral + Kd * error_derivative; power = fuzzy_control(error, delta_e); // 限制输出范围 power = fmin(power, MAX_POWER); power = fmax(power, MIN_POWER); // 模拟温度变化 temp += power / 10.0 * SAMPLE_TIME; // 输出结果 printf("Time: %.1f s, Temperature: %.1f C, Power: %.1f %%\n", time, temp, power); // 更新时间 time += SAMPLE_TIME; } printf("Temperature control finished.\n"); return 0; } ``` 这个代码示例中,模糊PID控制使用了7个模糊集合,每个模糊集合都有一个隶属度函数,模糊控制规则库使用了一个7x7的表格,其中每个元素表示 delta_u(控制量)的隶属度,表格中的行和列分别代表误差e和误差变化率delta_e的模糊集合。在模糊控制中,通过计算e和delta_e的隶属度以及控制量的隶属度,可以得到一个delta_u的模糊值,最终通过求加权平均值得到delta_u的模糊输出,然后根据模糊输出和PID控制算法计算出实际控制量,并对其进行限制输出范围。

相关推荐

最新推荐

基于STM32的温度控制系统设计.pdf

基于STM32系统的温度控制系统设计,此资源包括设计报告及相关电路。 温度监控主要应用在温室以及需要对温度进行监控的地方,主要目的是为了能够感知所检测区域的温度情况并进行温度控制。设计以 STM32F103 作为系统...

基于AT89S51单片机的PID温度控制系统设计

本文对系统进行硬件和软件的设计,在建立温度控制系统数学模型的基础之上,通过对PID控制的分析设计了系统控制器,完成了系统的软、硬件调试工作。算法简单、可靠性高、鲁棒性好,而且PID控制器参数直接影响控制效果...

基于PID算法和89C52单片机的温度控制系统

单片机作为控制系统中必不可少的部分,在各个领域得到了广泛的应用,用单片机进行实时系统数据处理和控制,保证系统工作在最佳状态,提高系统的控制精度,有利于提高...本系统采用单片机编程实现PID算法进行温度控制。

一种基于单片机的水位自动控制系统设计

本文介绍了水位自动控制系统工作的基本原理。阐述了一种基于单片机的通用水位控制系统的基本组成,并提出了该系统模块化的硬件和软件设计方法,最后,对该系统的工程应用作了评价和讨论。

基于DS18B20测温的单片机温度控制系统

温度是工业控制中主要的被控参数之一.对典型的温度控制系统进行研究具有很广泛的意义。

MRP与ERP确定订货批量的方法.pptx

MRP与ERP确定订货批量的方法.pptx

管理建模和仿真的文件

管理Boualem Benatallah引用此版本:布阿利姆·贝纳塔拉。管理建模和仿真。约瑟夫-傅立叶大学-格勒诺布尔第一大学,1996年。法语。NNT:电话:00345357HAL ID:电话:00345357https://theses.hal.science/tel-003453572008年12月9日提交HAL是一个多学科的开放存取档案馆,用于存放和传播科学研究论文,无论它们是否被公开。论文可以来自法国或国外的教学和研究机构,也可以来自公共或私人研究中心。L’archive ouverte pluridisciplinaire

数据可视化在统计分析中的重要性

# 1. 数据可视化的概念与意义 在数据科学和统计分析领域,数据可视化作为一种强大的工具,扮演着至关重要的角色。本章将介绍数据可视化的概念与意义,探讨数据可视化与统计分析的关系,以及数据可视化的作用与优势。 #### 1.1 数据可视化的定义 数据可视化是指利用图形、图表、地图等视觉元素来直观呈现数据信息的过程。它通过视觉化的方式展示数据,帮助人们更直观地理解数据的含义和规律。数据可视化的目的在于让人们能够快速、清晰地认识数据,发现数据中的模式和规律,同时也能够帮助人们传达和交流数据所包含的信息。 #### 1.2 数据可视化的作用与优势 数据可视化的作用包括但不限于: - 使复杂数据变

coxph模型的summary函数以后得到的是什么,分别分析一下

coxph模型是用来拟合生存分析数据的模型,它可以用来评估某些预测变量对于生存时间的影响。在R语言中,当我们用coxph函数拟合模型后,可以使用summary函数来查看模型的摘要信息。 使用summary函数得到的是一个类似于表格的输出结果,其中包含了以下信息: 1. Model:显示了使用的模型类型,这里是Cox Proportional Hazards Model。 2. Call:显示了生成模型的函数及其参数。 3. n:数据集中观测值的数量。 4. Events:数据集中事件(即生存时间结束)的数量。 5. Log-likelihood:给定模型下的对数似然值。 6. C

oracle教程07plsql高级01.pptx

oracle教程07plsql高级01.pptx