diff --git a/firmware/console/binary/output_channels.txt b/firmware/console/binary/output_channels.txt index 32967ac23c..aa4b8bc264 100644 --- a/firmware/console/binary/output_channels.txt +++ b/firmware/console/binary/output_channels.txt @@ -240,6 +240,7 @@ uint16_t rpmAcceleration;dRPM;"RPM/s",1, 0, 0, 5, 0 int8_t[4 iterate] autoscale vvtTargets;;"deg",1, 0, 0, 0, 0 uint16_t turboSpeed;@@GAUGE_NAME_TURBO_SPEED@@;"hz",1, 0, 0, 0, 0 +! fun fact: we have a separate pid_state.txt file for a bit of a different structure huh? struct pid_status_s float autoscale pTerm;;"", 1, 0, -50000, 50000, 2 int16_t autoscale iTerm;;"", 0.01, 0, -327, 327, 2 diff --git a/firmware/util/math/efi_pid.cpp b/firmware/util/math/efi_pid.cpp index 8ad13e12cf..fe1f0f40b5 100644 --- a/firmware/util/math/efi_pid.cpp +++ b/firmware/util/math/efi_pid.cpp @@ -137,7 +137,8 @@ void Pid::postState(TunerStudioOutputChannels *tsOutputChannels) const { void Pid::postState(pid_status_s& pidStatus) const { pidStatus.output = output; - pidStatus.error = getPrevError(); + pidStatus.error = previousError; + pidStatus.pTerm = parameters == nullptr ? 0 : parameters->pFactor * previousError; pidStatus.iTerm = iTerm; pidStatus.dTerm = dTerm; } diff --git a/firmware/util/math/efi_pid.h b/firmware/util/math/efi_pid.h index 62d03717e1..16df09fd11 100644 --- a/firmware/util/math/efi_pid.h +++ b/firmware/util/math/efi_pid.h @@ -69,7 +69,7 @@ public: float iTermMin = -1000000.0; float iTermMax = 1000000.0; protected: - pid_s *parameters; + pid_s *parameters = nullptr; virtual void updateITerm(float value); }; diff --git a/firmware/util/math/pid_state.txt b/firmware/util/math/pid_state.txt index fbf0822294..1a1b26c660 100644 --- a/firmware/util/math/pid_state.txt +++ b/firmware/util/math/pid_state.txt @@ -1,5 +1,4 @@ struct_no_prefix pid_state_s - float pTerm; float iTerm; float dTerm;we are remembering this only for debugging purposes float target;only used for logging