张华伟-基于STM32F4ARM单片机精确温控的设计与实现(7)

2019-08-26 17:46

if( Key1 == 0) { Dly_ms(5); if( Key1 == 0) { Set_Temp ++ ; if( Set_Temp>= 99)

Set_Temp = 99 ;

}

while( Key1 ==0 ) { Show_Flag2 = 1; }

}

if( Key2 == 0) { Dly_ms(5); if( Key2 == 0) { Set_Temp -- ; if( Set_Temp<20)

Set_Temp = 20;

}

while( Key2 ==0 ) { Show_Flag2 = 1; }

}

}

}

附录

26

附录

//增量PID算法 #include \#include \extern unsigned intSet_Temp; extern signed intRG_tem_real; extern unsigned char Sw_Flag ;

unsigned char RG_Ki_time1,RG_Ki_time2; double RG_fErr0,RG_fErr1,RG_fErr2; double RG_tem_Err1; struct RG_PP { double Ki_ek0; double Ki_ek1; signed intSetPoint; double SumError; double Proportion; double Integral; double Derivative; double LastError; double PrevError; double Error; double dError;

double FDUk;

}RG_PID;

void RG_PID_Init(void) { RG_PID.Ki_ek0 = 0; RG_PID.Ki_ek1 = 0; RG_PID.SetPoint = Set_Temp; RG_PID.SumError = 0;

RG_PID.Proportion = 5;

27

附录

}

RG_PID.Integral = 0.005; RG_PID.Derivative = 1; RG_PID.LastError = 0; RG_PID.PrevError = 0; RG_PID.Error = 0; RG_PID.dError = 0; RG_PID.FDUk = 0;

void RG_PID_fErr1(void) { }

void RG_PID_fErr2(void)

if(((RG_PID.Error>1)||(RG_PID.Error<-1))&&(RG_fErr0==RG_PID.Error)) { } else { }

RG_Ki_time1=0; RG_PID.Ki_ek0=1;

RG_Ki_time1++; if(RG_Ki_time1==3) { } else { }

RG_PID.Ki_ek0=20;

RG_Ki_time1=0; RG_PID.Ki_ek0=40;

RG_fErr0=RG_PID.Error;

28

附录

{

if((((RG_tem_real-RG_tem_Err1)<2)&&((RG_tem_real-RG_tem_Err1)>-2))&&((RG_

PID.Error>10)||(RG_PID.Error<-10))) { RG_Ki_time2++; if(RG_Ki_time2==3) { RG_Ki_time2=0; RG_PID.Ki_ek1=20;

} else { RG_PID.Ki_ek1=10; }

}

else { RG_Ki_time2=0; RG_PID.Ki_ek1=1; }

RG_tem_Err1=RG_tem_real;

}

void RG_PID_fErr3(void) { if(RG_PID.Ki_ek0>RG_PID.Ki_ek1) { RG_PID.Ki_ek1=1; } else {

RG_PID.Ki_ek0=1; 29

附录

}

}

void RG_PID_Calc(void) { RG_PID.Error = RG_PID.SetPoint - RG_tem_real; // 当前误差 if( RG_PID.Error< 0) { RG_PID.FDUk = 1 ;

}

else if( RG_PID.Error> 10) { RG_PID.FDUk = 999 ; }

else { RG_PID_fErr1(); RG_PID_fErr2(); RG_PID_fErr3();

RG_PID.SumError += RG_PID.Ki_ek0*RG_PID.Error; RG_PID.dError = RG_PID.LastError - RG_PID.PrevError; RG_PID.PrevError = RG_PID.LastError; RG_PID.LastError = RG_PID.Error;

RG_PID.FDUk = RG_PID.Proportion * RG_PID.Error + RG_PID.Integral * RG_PID.SumError

+ RG_PID.Derivative * RG_PID.dError; }

}

void RG_Pwm_Control(void) {

30

// 积分 // 当前微分 // 比例 // 积分项 // 微分项


张华伟-基于STM32F4ARM单片机精确温控的设计与实现(7).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:电气设计统一规定

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: