StateHandler: simple fan speed adjustment. pid() needs improvments
This commit is contained in:
parent
290c73f358
commit
0d70f8b464
@ -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;
|
||||||
|
|||||||
@ -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;
|
||||||
this->A01->write(fan_speed.getCurrent());
|
// 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());
|
||||||
|
} 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;
|
||||||
|
|||||||
@ -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;
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user