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); |