monitor pid change requests
All checks were successful
Build .deb on release / Build-Deb (push) Successful in 1m50s

This commit is contained in:
Alex Janka 2024-01-22 16:17:18 +11:00
parent 13b892ca7e
commit 0f6091a615
3 changed files with 38 additions and 7 deletions

2
Cargo.lock generated
View file

@ -2573,7 +2573,7 @@ dependencies = [
[[package]]
name = "tesla-charge-controller"
version = "1.0.19"
version = "1.0.20"
dependencies = [
"async-channel",
"chrono",

View file

@ -1,6 +1,6 @@
[package]
name = "tesla-charge-controller"
version = "1.0.19"
version = "1.0.20"
edition = "2021"
license = "MITNFA"
description = "Controls Tesla charge rate based on solar charge data"

View file

@ -95,9 +95,34 @@ impl TeslaChargeRateController {
}
}
#[derive(Default)]
struct PidLoop {
previous_error: f64,
proportional_gauge: Gauge,
derivative_gauge: Gauge,
change_request_gauge: Gauge,
}
impl Default for PidLoop {
fn default() -> Self {
describe_gauge!(
"tcrc_proportional",
"Proportional component of requested change to charge rate"
);
let proportional_gauge = gauge!("tcrc_proportional");
describe_gauge!(
"tcrc_proportional",
"Derivative component of requested change to charge rate"
);
let derivative_gauge = gauge!("tcrc_derivative");
describe_gauge!("tcrc_change_request", "Requested change to charge rate");
let change_request_gauge = gauge!("tcrc_change_request");
Self {
previous_error: 0.,
proportional_gauge,
derivative_gauge,
change_request_gauge,
}
}
}
impl PidLoop {
@ -111,16 +136,22 @@ impl PidLoop {
let derivative = (error - self.previous_error) / delta_time;
let config = access_config();
let proportional_component = config.pid_controls.proportional_gain * error;
let derivative_component = config.pid_controls.derivative_gain * derivative;
let extra_offsets = if pl_state.internal_load_current > 1. {
1.
} else {
0.
};
let new_target = ((config.pid_controls.proportional_gain * error)
+ (config.pid_controls.derivative_gain * derivative))
+ extra_offsets
+ (charge_state.charge_amps as f64);
let offset = proportional_component + derivative_component + extra_offsets;
self.proportional_gauge.set(proportional_component);
self.derivative_gauge.set(derivative_component);
self.change_request_gauge.set(offset);
let new_target = offset + (charge_state.charge_amps as f64);
self.previous_error = error;