thermferm/thermferm.c

changeset 310
53774295e14a
parent 309
c0dc3cd97fa4
child 311
f3b0e9ac9bcb
equal deleted inserted replaced
309:c0dc3cd97fa4 310:53774295e14a
1336 P_err = err; 1336 P_err = err;
1337 D_err = err - unit->PID_err_old; 1337 D_err = err - unit->PID_err_old;
1338 1338
1339 /* 1339 /*
1340 * A postive value means heating, a negative value cooling. 1340 * A postive value means heating, a negative value cooling.
1341 * Start with Kp, Kd and Ki set to 0.
1342 * Increase Kp until small oscillation.
1343 * Increase Kd until a little damping.
1344 * Increase Ki after Kp and Kd are set until longterm convergence.
1341 */ 1345 */
1342 Out = (10.0*P_err) + (0.1*unit->PID_I_err) + (5*D_err); 1346 Out = (10.0*P_err) + (0.0*unit->PID_I_err) + (0.0*D_err);
1347 //Out = (10.0*P_err) + (0.1*unit->PID_I_err) + (5*D_err);
1343 // Kp 0.1 Ki 0.3 Kd 0.02 1348 // Kp 0.1 Ki 0.3 Kd 0.02
1344 if (err != 0.0) { 1349 if (err != 0.0) {
1345 if (debug) 1350 if (debug)
1346 fprintf(stdout, "sp=%.2f pv=%.2f err_old=%.2f err=%.2f P_err=%.2f I_err=%.2f D_err=%.2f Out=%.2f\n", 1351 fprintf(stdout, "sp=%.2f pv=%.2f err_old=%.2f err=%.2f P_err=%.2f I_err=%.2f D_err=%.2f Out=%.2f\n",
1347 sp, pv, unit->PID_err_old, err, P_err, unit->PID_I_err, D_err, Out); 1352 sp, pv, unit->PID_err_old, err, P_err, unit->PID_I_err, D_err, Out);

mercurial