|
|
|
|
@ -200,16 +200,48 @@ void PID_Calc() // pid calc
|
|
|
|
|
pid.hd = pid.hd_h;
|
|
|
|
|
pid.h_base = pid.h_base_h;
|
|
|
|
|
|
|
|
|
|
// if now temp is close to set temp, the heater will be less power
|
|
|
|
|
// TODO::在外界温度温差比较大(45-22=23度)时,加热功率也可能不够
|
|
|
|
|
if (pid.set_tem - pid.now_tem < 3) {
|
|
|
|
|
pid.hp = pid.hp_h * 0.6;
|
|
|
|
|
}
|
|
|
|
|
// TODO::在外界温度温差比较大(45-22=23度)时,加热功率不够
|
|
|
|
|
if (pid.set_tem - pid.now_tem < 1) {
|
|
|
|
|
pid.hp = pid.hp_h * 0.3;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// // if now temp is close to set temp, the heater will be less power
|
|
|
|
|
// // TODO::在外界温度温差比较大(45-22=23度)时,加热功率也可能不够
|
|
|
|
|
// if (pid.set_tem - pid.now_tem < 3) {
|
|
|
|
|
// pid.hp = pid.hp_h * 0.6;
|
|
|
|
|
// }
|
|
|
|
|
// // TODO::在外界温度温差比较大(45-22=23度)时,加热功率不够
|
|
|
|
|
// if (pid.set_tem - pid.now_tem < 1) {
|
|
|
|
|
// pid.hp = pid.hp_h * 0.3;
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
|
|
// TODO::要改成根据外界温度调节参数
|
|
|
|
|
// TODO::A test
|
|
|
|
|
// 1 大于3度时候,最大6000
|
|
|
|
|
// 2 小于3度时候,在0度外界温差时,最小到0
|
|
|
|
|
// 3 小于3度时候,在12度外界温差时,最小到1800
|
|
|
|
|
// 4 小于3度时候,在23度外界温差时,最小到2700
|
|
|
|
|
// 变量:外界温差 t_out,内部温差 t_in
|
|
|
|
|
// 由2-4, hp_base = -3.125*t_out^2+187.5*t_out
|
|
|
|
|
// 由1, hp = min( (6000 - hp_base) / 3 * t_in + hp_base, 6000 )
|
|
|
|
|
|
|
|
|
|
if (abs(pid.out_tem) > 1e-5) {
|
|
|
|
|
float t_out = pid.set_tem - pid.out_tem; // 7
|
|
|
|
|
float t_in = pid.set_tem - pid.now_tem; // 1.1
|
|
|
|
|
float hp_base = -0.003125 * t_out * t_out + 0.1875 * t_out;
|
|
|
|
|
pid.hp = (6 - hp_base) / 3 * t_in + hp_base;
|
|
|
|
|
if (pid.hp < 0) {
|
|
|
|
|
pid.hp = 0;
|
|
|
|
|
}
|
|
|
|
|
if (pid.hp > 6) {
|
|
|
|
|
pid.hp = 6;
|
|
|
|
|
}
|
|
|
|
|
} else {
|
|
|
|
|
if (pid.set_tem - pid.now_tem < 3) {
|
|
|
|
|
pid.hp = pid.hp_h * 0.6;
|
|
|
|
|
}
|
|
|
|
|
if (pid.set_tem - pid.now_tem < 1) {
|
|
|
|
|
pid.hp = pid.hp_h * 0.4;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// l mode
|
|
|
|
|
|