typedef struct DeltPID{char PIDTemp;//pid开关温差char P;char I;char D;char PIDKc;//维持功率}data DELTPID;int data PID_Buff[3];//温度缓冲区-参与PID运算int data PID_Value;//输出控制量DELTPID PID={50,50,50,50,50}; //增量pid结构体DELTPID E_PID;unsigned char data HeatCount = 0;void PID_Out(){ if (HeatCount>0) {HeatCount--; HEAT_START;//开始加热 } else { HEAT_STOP;//停止加热 } } int data PID_Buff[3];//温度缓冲区-参与PID运算 DELTPID PID={50,50,50,50,50}; //增量pid结构体DELTPID E_PID; #define MAX_DELT 15//最大增量void PID_Ctrl(){static int ei;//当前偏差int last_ei;//int delt_ei;//偏差变化量//刷新最近两次偏差unsigned char i_sign;//是否取消积分作用unsigned char c_sign;//是否取消维持功率int delt_value;//增量pid输出值last_ei = ei;ei = TempSet - PID_Buff[0];delt_ei = ei - last_ei;//求出偏差变化量if (ei > PID.PIDTemp)//当前温差大于设定温差{PID_Value = 150;//全功率输出return;}else if (ei < -5)//超调{PID_Value = 0;//停止输出return;}//增量pid控制if (((ei>0) && (delt_ei<0)) || ((ei<0) && (delt_ei>0))){i_sign = 0;//专家pid测量值正向目标值靠近,取消积分作用}else{i_sign = 1;} if ((ei<0) && (delt_ei>0)){c_sign = 1;//温度正在从高温向目标值靠近}else{c_sign = 0;} delt_value = (float)PID.P/17*delt_ei + (float)PID.I/100*ei*i_sign-(float)PID.D/200*(PID_Buff[0]-2*PID_Buff[1]+PID_Buff[2]) + (float)PID.PIDKc/1000*TempSet*c_sign; if (delt_value>MAX_DELT){delt_value = MAX_DELT;}else if (delt_value<(-MAX_DELT)){delt_value = -MAX_DELT;}PID_Value+=delt_value;if (PID_Value<0){PID_Value = 0;}else if (PID_Value>150){PID_Value = 150;}}
导读:目前正在解读《单片机PID程序源代码》的相关信息,《单片机PID程序源代码》是由用户自行发布的知识型内容!下面请观看由(电工技术网 - www.9ddd.net)用户发布《单片机PID程序源代码》的详细说明。
简介:本文给大家分享了一个单片机PID程序源代码。
提醒:《单片机PID程序源代码》最后刷新时间 2024-03-14 01:01:21,本站为公益型个人网站,仅供个人学习和记录信息,不进行任何商业性质的盈利。如果内容、图片资源失效或内容涉及侵权,请反馈至,我们会及时处理。本站只保证内容的可读性,无法保证真实性,《单片机PID程序源代码》该内容的真实性请自行鉴别。