StateHandler: simple fan speed adjustment. pid() needs improvments

This commit is contained in:
Evgenii Meshcheriakov 2022-10-19 16:46:32 +03:00
parent 290c73f358
commit 0d70f8b464
3 changed files with 18 additions and 9 deletions

View File

@ -109,7 +109,7 @@ private:
* weigh of fan, so voltage within range of 0-89 is not * weigh of fan, so voltage within range of 0-89 is not
* sufficient to start motor. * sufficient to start motor.
* TODO: Value 89 should be scaled to 0 at some point */ * TODO: Value 89 should be scaled to 0 at some point */
Counter fan_speed = {89, 1000}; Counter fan_speed = {20, 1000};
/*integral controller for PID. should be global, since it /*integral controller for PID. should be global, since it
* accumulates error signals encountered since startup*/ * accumulates error signals encountered since startup*/
int integral = 0; int integral = 0;

View File

@ -134,8 +134,18 @@ StateHandler::stateAuto (const Event &event)
break; break;
case Event::eTick: case Event::eTick:
save (event.value, value[AUTO].getCurrent (), AUTO); save (event.value, value[AUTO].getCurrent (), AUTO);
pid(); int i = 0;
// pid();
// this->A01->write(fan_speed.getCurrent());
if(saved_curr_value[AUTO] < saved_set_value[AUTO]) {
fan_speed.inc();
this->A01->write(fan_speed.getCurrent()); this->A01->write(fan_speed.getCurrent());
} else if(saved_curr_value[AUTO] > saved_set_value[AUTO]){
fan_speed.dec();
while(i<720) i++;
i = 0;
this->A01->write(fan_speed.getCurrent());
}
break; break;
} }
} }
@ -177,9 +187,9 @@ StateHandler::save (int eventValue, int counterValue, size_t mode)
} }
void StateHandler::pid () { void StateHandler::pid () {
float kP = 0.7, kI = 0.7, kD = 0.7; float kP = 0.001, kI = 0.001, kD = 0.001;
int error = 0, last_error = 0, derivative = 0; int error = 0, last_error = 0, derivative = 0;
error = saved_curr_value[AUTO] - saved_set_value[AUTO]; error = saved_set_value[AUTO] - saved_curr_value[AUTO];
last_error = error; last_error = error;
integral += error; integral += error;
derivative = error - last_error; derivative = error - last_error;

View File

@ -63,7 +63,8 @@ main (void)
ModbusMaster fan(1); ModbusMaster fan(1);
fan.begin(9600); fan.begin(9600);
ModbusRegister A01(&fan, 0); ModbusRegister A01(&fan, 0);
ModbusRegister DI1(&fan, 4, false); // ModbusRegister DI1(&fan, 4, false);
StateHandler ventMachine (&lcd, &A01); StateHandler ventMachine (&lcd, &A01);
/** Common pins */ /** Common pins */
@ -78,8 +79,6 @@ main (void)
SwitchController sw_toggle (&b_toggle, &glob_time, &ventMachine, SwitchController sw_toggle (&b_toggle, &glob_time, &ventMachine,
BUTTON_CONTROL_TOG_MODE); BUTTON_CONTROL_TOG_MODE);
PressureWrapper sens; PressureWrapper sens;
int pressure = 0, pressure_time = 0; int pressure = 0, pressure_time = 0;
@ -93,7 +92,7 @@ main (void)
* TODO: * TODO:
* - Update current pressure to eTick * - Update current pressure to eTick
*/ */
if(pressure_time == 80) { if(pressure_time == 5) {
pressure = sens.getPressure(); pressure = sens.getPressure();
pressure_time = 0; pressure_time = 0;
} }