#ifndef _FUZZY_H_ #define _FUZZY_H_ #include "stdint.h" #define VOL_REF 2480 #define DAC_OUT(x) ((((u32)x)*4095)/VOL_REF) #define DAC_OUT_1(x) (DAC->DHR12R1=DAC_OUT(x)) #define DAC_OUT_2(x) (DAC->DHR12R2=DAC_OUT(x)) //当采用无触发是,直接对DHR12Rx寄存器写值就有输出,而不是DORx !!! //DAC零输出时失调电压50mV,51mV #define STOVE_A 0 #define STOVE_B 1 #define PWM_SCAN 2000L #define PWM_PERIOD 0xFF #define PWM_PITCED 0x00 #define KU40 40 //40℃/min,u=[-60uS,+60uS] #define KU35 35 //35℃/min,u=[-54uS,+54uS] #define KU30 30 //30℃/min,u=[-48uS,+48uS] #define KU25 25 //25℃/min,u=[-42uS,+42uS] #define KU20 20 //20℃/min,u=[-36uS,+36uS] #define KU15 15 //15℃/min,u=[-30uS,+30uS] #define KU10 10 //10℃/min,u=[-24uS,+24uS] /*********************************************************************************** 换算关系 K型热电偶(铂铑): 0℃--0mV,918℃--38.042mV CS1242: LSB Weight=Full ScaleRage/2^24=2*Vref/PGA/2^24=5/128/2^24=1250/2^24 mV数=1250*AD读数/2^24 被测温度大约(假设热电偶为线性)C=918/38.042*1250/2^24*AD读数 1℃的AD=2^24*38.042/918/1250=536 0.1℃=54 ************************************************************************************/ #define KC 54L //#define MAX_TEMP 10000 //高温炉最高1000℃保护 #define MAX_TEMP 12500 //高温炉最高1250℃保护 DYM20250618 #define INTEGRALSWITCH 50L //100 以下开门升温 ECSUM -24 //最大 低温段 // 关门升温 ECSUM -48 //500 以下开门升温 ECSUM -24 //最大 低温段 // 关门升温 ECSUM -100 void InitFuzzy(void); void TaskFuzzy(void); void CtrlStove(u8 cOpen, long lDefTemp, u8 cRate); #define MIN_STABLE_CNT 15 typedef struct { u16 iStableCnt; u16 iDestTemp; u32 integral; } StableTempTab; #define ERRORCNT 9 //误差记录 #define DERRORCNT 10 //误差变化率记录 typedef struct { long gDest; //目标温度值,0.1°分辨率 long CTEMP; //开始控制温度 long lRate; //升温速度 long Error[ERRORCNT]; //偏差 long dErr[DERRORCNT] ; //偏差变化率 long ECSUM; //10S内的偏差变化率之和 long SumErrLimit ; //加热初值 long PreviewOut; long HFDownTemp ; long du; unsigned int temp_out;//温度输出值 unsigned int PID_SET; long DoorOpenValue; //保存炉子门状态 char LowSpeedCnt; unsigned int cur_Temp;//当前温度值 unsigned int iDestTemp; //目标温度值 unsigned int iStableCnt; //输出稳定次数 unsigned int iPreStabCnt; //保存的稳定次数 unsigned int TIME_NUM; unsigned int TIME_FLAG; unsigned int PWM_TIME_NUM; unsigned int PWM_TIME_FLAG; unsigned int PID_SET_ALL; unsigned int PID_SET_FLAG; unsigned int PID_TEST_STATUS; unsigned int PWM_STATUS; unsigned int PWM_STATUS_FLAG; } AI_CONTROL; //extern AI_CONTROL Ai_CTRL; void SaveStable(StableTempTab *psTmpTab); void LoadStable(u16 iTemp, StableTempTab *psTmpTab); void saveHFDownTemp (u8 temp); u8 readHFDownTemp (void); #endif