基于8位单片机的模糊控制算法程序,实现2输入1输出模糊控制,输入为偏差e,偏差变化率ec,输出为阀门开度,此程序以中央空调制冷控制为例。
以下为模糊算法源程序:
/********************************************************************************************:
编写说明:模糊控制,双输入,单输出,偏差e,偏差变化率ec
编写时间:2015.8.27
作 者:QQ351150613
程序问题:调试结束,与matlab7.0仿真对比,精度在0.05之间
*********************************************************************************************/
#include <reg52.h> //头文件
//-------------------------------------宏定义------------------------------------------------
#define OUTPUT_TOT 7
#define MU_MAX 0xFF
#define RULE_TOT 147
#define IO_NUM 0x07
#define LABEL_NUM 0x70
#define DEFAULT_VALUE 0x0
//---------------------------------------变量定义--------------------------------------------
float fuzzy_in[2]={0.0,0.0}, //偏差e(-10.0,10.0),偏差ec(-4.0,4.0)
fuzzy_r; //实际输出增量-1.0,1.0
unsigned char input[2]; //偏差e,ec量化为0-255的值
unsigned char bdata clause_val; // 保持当前规则
unsigned char outputs[OUTPUT_TOT],fuzzy_out;
sbit operator = clause_val^3; // 表示所使用的模糊操作是AND=0;还是0R=1
sbit clause_type = clause_val^7; // 表示分支是条件分支=0;还是结果分支=1
unsigned char code output_memf[OUTPUT_TOT]={ 9,41,84,127,169,212,245};
// 定义E输入常量
#define E_NB 0x00
#define E_NM 0x10
#define E_NS 0x20
#define E_Z 0x30
#define E_PS 0x40
#define E_PM 0x50
#de