pid: fix coefficents

This commit is contained in:
Vasily Davydov 2022-10-27 17:07:59 +03:00
parent fa8734a9a8
commit 45c2ec6409
2 changed files with 14 additions and 14 deletions

View File

@ -20,7 +20,7 @@ enum _global_values
LCD_SIZE = 16, LCD_SIZE = 16,
TIMER_GLOBAL_TIMEOUT = 120000, TIMER_GLOBAL_TIMEOUT = 120000,
TIMER_SENSORS_TIMEOUT = 5000, TIMER_SENSORS_TIMEOUT = 5000,
TIMER_PRESSURE_TIMEOUT = 250, TIMER_PRESSURE_TIMEOUT = 150,
TIMER_ERROR_VALUE = -255, TIMER_ERROR_VALUE = -255,
}; };

View File

@ -120,7 +120,7 @@ StateHandler::stateManual (const Event &event)
switch (event.type) switch (event.type)
{ {
case Event::eEnter: case Event::eEnter:
displaySet(MANUAL); displaySet (MANUAL);
// this->_propeller->spin (fan_speed.getCurrent ()); // this->_propeller->spin (fan_speed.getCurrent ());
break; break;
case Event::eExit: case Event::eExit:
@ -140,7 +140,7 @@ StateHandler::stateAuto (const Event &event)
switch (event.type) switch (event.type)
{ {
case Event::eEnter: case Event::eEnter:
displaySet(AUTO); displaySet (AUTO);
// this->_propeller->spin (fan_speed.getCurrent ()); // this->_propeller->spin (fan_speed.getCurrent ());
break; break;
case Event::eExit: case Event::eExit:
@ -150,8 +150,8 @@ StateHandler::stateAuto (const Event &event)
break; break;
case Event::eTick: case Event::eTick:
handleTickValue (event.value); handleTickValue (event.value);
pid (); pid ();
this->_propeller->spin (fan_speed.getCurrent ()); this->_propeller->spin (fan_speed.getCurrent ());
break; break;
} }
} }
@ -190,16 +190,16 @@ StateHandler::handleControlButtons (uint8_t button)
{ {
case BUTTON_CONTROL_DOWN: case BUTTON_CONTROL_DOWN:
this->value[(current_mode)].dec (); this->value[(current_mode)].dec ();
state_timer->resetCounter(); state_timer->resetCounter ();
break; break;
case BUTTON_CONTROL_UP: case BUTTON_CONTROL_UP:
this->value[(current_mode)].inc (); this->value[(current_mode)].inc ();
state_timer->resetCounter(); state_timer->resetCounter ();
break; break;
case BUTTON_CONTROL_TOG_MODE: case BUTTON_CONTROL_TOG_MODE:
current_mode = !current_mode; current_mode = !current_mode;
SetState (&StateHandler::stateInit); SetState (&StateHandler::stateInit);
state_timer->resetCounter(); state_timer->resetCounter ();
return; return;
break; break;
default: default:
@ -207,7 +207,7 @@ StateHandler::handleControlButtons (uint8_t button)
} }
if (current_mode == MANUAL && saveSetAndDisplay (MANUAL)) if (current_mode == MANUAL && saveSetAndDisplay (MANUAL))
{ {
this->_propeller->spin (getSetSpeed () * 10); this->_propeller->spin (fan_speed_normalized ());
} }
else else
{ {
@ -226,7 +226,7 @@ StateHandler::handleTickValue (int value)
if (value > TIMER_PRESSURE_TIMEOUT) if (value > TIMER_PRESSURE_TIMEOUT)
{ {
SetState (&StateHandler::stateGetPressure); SetState (&StateHandler::stateGetPressure);
state_timer->resetCounter(); state_timer->resetCounter ();
} }
if (value == TIMER_ERROR_VALUE) if (value == TIMER_ERROR_VALUE)
{ {
@ -264,15 +264,15 @@ int
StateHandler::fan_speed_normalized () StateHandler::fan_speed_normalized ()
{ {
int speed = value[MANUAL].getCurrent (); int speed = value[MANUAL].getCurrent ();
if (speed <= 92) if (speed <= 95)
speed += 8; speed += 5;
return speed * 10; return speed * 10;
} }
void void
StateHandler::pid () StateHandler::pid ()
{ {
float kP = 1.0, kI = 0.1, kD = 0.125; float kP = 0.6, kI = 0.05, kD = 0.125;
int error = 0, last_error = 0, derivative = 0; int error = 0, last_error = 0, derivative = 0;
error = saved_set_value[AUTO] - saved_curr_value[AUTO]; error = saved_set_value[AUTO] - saved_curr_value[AUTO];
last_error = error; last_error = error;
@ -286,7 +286,7 @@ StateHandler::updateSensorValues ()
{ {
sensors_data[TEMPERATURE] = humidity.readT (); sensors_data[TEMPERATURE] = humidity.readT ();
// sensors_data[PRESSUREDAT] = _pressure->getPressure (); // sensors_data[PRESSUREDAT] = _pressure->getPressure ();
sensors_data[CO2] = co2.read (); sensors_data[CO2] = co2.read ();
state_timer->tickCounter (5); state_timer->tickCounter (5);
sensors_data[HUMIDITY] = humidity.readRH (); sensors_data[HUMIDITY] = humidity.readRH ();