Move all floats to doubles
The code was developed initially around a pid loop implemented using
floats. Therefore, the code was converting back and forth between
double for sensor values as inputs and outputs from this PID loop.
Change-Id: I2d2919e1165103040729c9f16bb84fde3dd6b81b
Signed-off-by: Patrick Venture <venture@google.com>
diff --git a/pid/ec/pid.cpp b/pid/ec/pid.cpp
index c2236c2..1ded7ac 100644
--- a/pid/ec/pid.cpp
+++ b/pid/ec/pid.cpp
@@ -23,7 +23,7 @@
* clamp
*
*/
-static float clamp(float x, float min, float max)
+static double clamp(double x, double min, double max)
{
if (x < min)
{
@@ -40,15 +40,15 @@
* pid code
* Note: Codes assumes the ts field is non-zero
*/
-float pid(pid_info_t* pidinfoptr, float input, float setpoint)
+double pid(pid_info_t* pidinfoptr, double input, double setpoint)
{
- float error;
+ double error;
- float p_term;
- float i_term = 0.0f;
- float ff_term = 0.0f;
+ double p_term;
+ double i_term = 0.0f;
+ double ff_term = 0.0f;
- float output;
+ double output;
// calculate P, I, D, FF
@@ -79,7 +79,7 @@
if (pidinfoptr->slew_neg != 0.0f)
{
// Don't decrease too fast
- float min_out =
+ double min_out =
pidinfoptr->last_output + pidinfoptr->slew_neg * pidinfoptr->ts;
if (output < min_out)
{
@@ -89,7 +89,7 @@
if (pidinfoptr->slew_pos != 0.0f)
{
// Don't increase too fast
- float max_out =
+ double max_out =
pidinfoptr->last_output + pidinfoptr->slew_pos * pidinfoptr->ts;
if (output > max_out)
{
diff --git a/pid/ec/pid.hpp b/pid/ec/pid.hpp
index 6b1030a..779ced5 100644
--- a/pid/ec/pid.hpp
+++ b/pid/ec/pid.hpp
@@ -7,8 +7,8 @@
typedef struct
{
- float min;
- float max;
+ double min;
+ double max;
} limits_t;
/* Note: If you update these structs you need to update the copy code in
@@ -18,35 +18,35 @@
{
bool initialized; // has pid been initialized
- float ts; // sample time in seconds
- float integral; // intergal of error
- float last_output; // value of last output
+ double ts; // sample time in seconds
+ double integral; // intergal of error
+ double last_output; // value of last output
- float p_c; // coeff for P
- float i_c; // coeff for I
- float ff_off; // offset coeff for feed-forward term
- float ff_gain; // gain for feed-forward term
+ double p_c; // coeff for P
+ double i_c; // coeff for I
+ double ff_off; // offset coeff for feed-forward term
+ double ff_gain; // gain for feed-forward term
limits_t i_lim; // clamp of integral
limits_t out_lim; // clamp of output
- float slew_neg;
- float slew_pos;
+ double slew_neg;
+ double slew_pos;
} pid_info_t;
-float pid(pid_info_t* pidinfoptr, float input, float setpoint);
+double pid(pid_info_t* pidinfoptr, double input, double setpoint);
/* Condensed version for use by the configuration. */
struct pidinfo
{
- float ts; // sample time in seconds
- float p_c; // coeff for P
- float i_c; // coeff for I
- float ff_off; // offset coeff for feed-forward term
- float ff_gain; // gain for feed-forward term
+ double ts; // sample time in seconds
+ double p_c; // coeff for P
+ double i_c; // coeff for I
+ double ff_off; // offset coeff for feed-forward term
+ double ff_gain; // gain for feed-forward term
ec::limits_t i_lim; // clamp of integral
ec::limits_t out_lim; // clamp of output
- float slew_neg;
- float slew_pos;
+ double slew_neg;
+ double slew_pos;
};
} // namespace ec
diff --git a/pid/ec/stepwise.cpp b/pid/ec/stepwise.cpp
index 4a71532..0a5c0b0 100644
--- a/pid/ec/stepwise.cpp
+++ b/pid/ec/stepwise.cpp
@@ -22,10 +22,10 @@
namespace ec
{
-float stepwise(const ec::StepwiseInfo& info, float input)
+double stepwise(const ec::StepwiseInfo& info, double input)
{
- float value = info.output[0]; // if we are below the lowest
- // point, we set the lowest value
+ double value = info.output[0]; // if we are below the lowest
+ // point, we set the lowest value
for (size_t ii = 1; ii < ec::maxStepwisePoints; ii++)
{
diff --git a/pid/ec/stepwise.hpp b/pid/ec/stepwise.hpp
index 4034b47..bc7c204 100644
--- a/pid/ec/stepwise.hpp
+++ b/pid/ec/stepwise.hpp
@@ -26,13 +26,13 @@
struct StepwiseInfo
{
- float ts; // sample time in seconds
- float reading[maxStepwisePoints];
- float output[maxStepwisePoints];
- float positiveHysteresis;
- float negativeHysteresis;
+ double ts; // sample time in seconds
+ double reading[maxStepwisePoints];
+ double output[maxStepwisePoints];
+ double positiveHysteresis;
+ double negativeHysteresis;
};
-float stepwise(const ec::StepwiseInfo& info, float value);
+double stepwise(const ec::StepwiseInfo& info, double value);
} // namespace ec
\ No newline at end of file