forked from M-Labs/thermostat
pid: change signedness from heating to cooling
This commit is contained in:
parent
6ba1459a3c
commit
d574ccb5f4
10
src/pid.rs
10
src/pid.rs
@ -47,7 +47,7 @@ impl Controller {
|
|||||||
|
|
||||||
pub fn update(&mut self, input: f64) -> f64 {
|
pub fn update(&mut self, input: f64) -> f64 {
|
||||||
// error
|
// error
|
||||||
let error = self.target - input;
|
let error = input - self.target;
|
||||||
|
|
||||||
// partial
|
// partial
|
||||||
let p = f64::from(self.parameters.kp) * error;
|
let p = f64::from(self.parameters.kp) * error;
|
||||||
@ -65,7 +65,7 @@ impl Controller {
|
|||||||
// derivative
|
// derivative
|
||||||
let d = match self.last_input {
|
let d = match self.last_input {
|
||||||
None => 0.0,
|
None => 0.0,
|
||||||
Some(last_input) => f64::from(self.parameters.kd) * (last_input - input),
|
Some(last_input) => f64::from(self.parameters.kd) * (input - last_input),
|
||||||
};
|
};
|
||||||
self.last_input = Some(input);
|
self.last_input = Some(input);
|
||||||
|
|
||||||
@ -129,7 +129,7 @@ mod test {
|
|||||||
#[test]
|
#[test]
|
||||||
fn test_controller() {
|
fn test_controller() {
|
||||||
const DEFAULT: f64 = 0.0;
|
const DEFAULT: f64 = 0.0;
|
||||||
const TARGET: f64 = 1234.56;
|
const TARGET: f64 = -1234.56;
|
||||||
const ERROR: f64 = 0.01;
|
const ERROR: f64 = 0.01;
|
||||||
const DELAY: usize = 10;
|
const DELAY: usize = 10;
|
||||||
|
|
||||||
@ -144,8 +144,8 @@ mod test {
|
|||||||
let next_t = (t + 1) % DELAY;
|
let next_t = (t + 1) % DELAY;
|
||||||
// Feed the oldest temperature
|
// Feed the oldest temperature
|
||||||
let output = pid.update(values[next_t]);
|
let output = pid.update(values[next_t]);
|
||||||
// Overwrite oldest with previous temperature + output
|
// Overwrite oldest with previous temperature - output
|
||||||
values[next_t] = values[t] + output;
|
values[next_t] = values[t] - output;
|
||||||
t = next_t;
|
t = next_t;
|
||||||
total_t += 1;
|
total_t += 1;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user