From 71fe8e7ced20bbcea503e0ef22e155c09f63a1f7 Mon Sep 17 00:00:00 2001 From: Fabien Poussin Date: Sun, 25 Mar 2018 04:21:11 +0200 Subject: Renaming PID struct typedef to avoid conflicts --- os/various/pid.c | 22 +++++++++++----------- os/various/pid.h | 54 +++++++++++++++++++++++++++--------------------------- 2 files changed, 38 insertions(+), 38 deletions(-) diff --git a/os/various/pid.c b/os/various/pid.c index f704b29..fee9608 100644 --- a/os/various/pid.c +++ b/os/various/pid.c @@ -9,13 +9,13 @@ #include "pid.h" #include "osal.h" -#define TIME_MS (osalOsGetSystemTimeX() / (OSAL_ST_FREQUENCY / 1000)) +#define TIME_MS ((osalOsGetSystemTimeX() * 1000) / OSAL_ST_FREQUENCY ) /*Constructor (...)********************************************************* * The parameters specified here are those for for which we can't set up * reliable defaults, so we need to have the user set them. ***************************************************************************/ -void pid_create(pid_t* p, float* Input, float* Output, float* Setpoint, +void pid_create(pidc_t* p, float* Input, float* Output, float* Setpoint, float Kp, float Ki, float Kd, int POn, int Direction) { p->output = Output; @@ -23,8 +23,8 @@ void pid_create(pid_t* p, float* Input, float* Output, float* Setpoint, p->setPoint = Setpoint; p->inAuto = false; - pid_setOutputLimits(p, 0, 255); // default output limit corresponds to - // the arduino pwm limits + pid_setOutputLimits(p, 0, 4095); // default output limit corresponds to + // the 12 bit dac limit p->sampleTime = 100; // default Controller Sample Time is 100ms @@ -42,7 +42,7 @@ void pid_create(pid_t* p, float* Input, float* Output, float* Setpoint, * pid Output needs to be computed. returns true when the output is computed, * false when nothing has been done. **********************************************************************************/ -bool pid_compute(pid_t* p) +bool pid_compute(pidc_t* p) { if(!p->inAuto) return false; unsigned long now = TIME_MS; @@ -86,7 +86,7 @@ bool pid_compute(pid_t* p) * it's called automatically from the constructor, but tunings can also * be adjusted on the fly during normal operation ******************************************************************************/ -void pid_setTunings(pid_t* p, float Kp, float Ki, float Kd, int POn) +void pid_setTunings(pidc_t* p, float Kp, float Ki, float Kd, int POn) { if (Kp < 0 || Ki < 0 || Kd < 0) return; @@ -113,7 +113,7 @@ void pid_setTunings(pid_t* p, float Kp, float Ki, float Kd, int POn) /* SetSampleTime(...) ********************************************************* * sets the period, in Milliseconds, at which the calculation is performed ******************************************************************************/ -void pid_setSampleTime(pid_t* p, int NewSampleTime) +void pid_setSampleTime(pidc_t* p, int NewSampleTime) { if (NewSampleTime > 0) { @@ -132,7 +132,7 @@ void pid_setSampleTime(pid_t* p, int NewSampleTime) * want to clamp it from 0-125. who knows. at any rate, that can all be done * here. **************************************************************************/ -void pid_setOutputLimits(pid_t* p, float Min, float Max) +void pid_setOutputLimits(pidc_t* p, float Min, float Max) { if(Min >= Max) return; p->outMin = Min; @@ -153,7 +153,7 @@ void pid_setOutputLimits(pid_t* p, float Min, float Max) * when the transition from manual to auto occurs, the controller is * automatically initialized ******************************************************************************/ -void pid_setMode(pid_t* p, int Mode) +void pid_setMode(pidc_t* p, int Mode) { bool newAuto = (Mode == PID_AUTOMATIC); if(newAuto && !p->inAuto) @@ -167,7 +167,7 @@ void pid_setMode(pid_t* p, int Mode) * does all the things that need to happen to ensure a bumpless transfer * from manual to automatic mode. ******************************************************************************/ -void pid_initialize(pid_t* p) +void pid_initialize(pidc_t* p) { p->outputSum = *p->output; p->lastInput = *p->input; @@ -181,7 +181,7 @@ void pid_initialize(pid_t* p) * know which one, because otherwise we may increase the output when we should * be decreasing. This is called from the constructor. ******************************************************************************/ -void pid_setDirection(pid_t* p, int Direction) +void pid_setDirection(pidc_t* p, int Direction) { if(p->inAuto && Direction != p->direction) { diff --git a/os/various/pid.h b/os/various/pid.h index 74d116d..49ccd6f 100644 --- a/os/various/pid.h +++ b/os/various/pid.h @@ -13,11 +13,11 @@ typedef struct { - + float kp; // * (P)roportional Tuning Parameter float ki; // * (I)ntegral Tuning Parameter float kd; // * (D)erivative Tuning Parameter - + float dispKp; // * we'll hold on to the tuning parameters in user-entered float dispKi; // format for display purposes float dispKd; // @@ -36,43 +36,43 @@ typedef struct { unsigned long sampleTime; float outMin; float outMax; - + bool inAuto; bool pOnE; -} pid_t; +} pidc_t; //commonly used functions ************************************************************************** -void pid_create(pid_t* p, float* Input, float* Output, float* Setpoint, // * constructor. links the PID to the Input, Output, and - float Kp, float Ki, float Kd, int POn, int Direction); // Setpoint. Initial tuning parameters are also set here. - // (overload for specifying proportional mode) +void pid_create(pidc_t* p, float* Input, float* Output, float* Setpoint, // * constructor. links the PID to the Input, Output, and + float Kp, float Ki, float Kd, int POn, int Direction); // Setpoint. Initial tuning parameters are also set here. + // (overload for specifying proportional mode) -void pid_setMode(pid_t* p, int mode); // * sets PID to either Manual (0) or Auto (non-0) +void pid_setMode(pidc_t* p, int mode); // * sets PID to either Manual (0) or Auto (non-0) -bool pid_compute(pid_t* p); // * performs the PID calculation. it should be - // called every time loop() cycles. ON/OFF and - // calculation frequency can be set using SetMode - // SetsampleTime respectively +bool pid_compute(pidc_t* p); // * performs the PID calculation. it should be + // called every time loop() cycles. ON/OFF and + // calculation frequency can be set using SetMode + // SetsampleTime respectively -void pid_setOutputLimits(pid_t* p, float Min, float Max); // * clamps the output to a specific range. 0-255 by default, but - // it's likely the user will want to change this depending on - // the application +void pid_setOutputLimits(pidc_t* p, float Min, float Max); // * clamps the output to a specific range. 0-255 by default, but + // it's likely the user will want to change this depending on + // the application //available but not commonly used functions ******************************************************** -void pid_setTunings(pid_t* p, float Kp, float Ki, float Kd, int POn); // * While most users will set the tunings once in the - // constructor, this function gives the user the option - // of changing tunings during runtime for Adaptive control - -void pid_setDirection(pid_t* p, int Direction); // * Sets the Direction, or "Action" of the controller. DIRECT - // means the output will increase when error is positive. REVERSE - // means the opposite. it's very unlikely that this will be needed - // once it is set in the constructor. -void pid_setSampleTime(pid_t* p, int NewSampleTime); // * sets the frequency, in Milliseconds, with which - // the PID calculation is performed. default is 100 - -void pid_initialize(pid_t* p); +void pid_setTunings(pidc_t* p, float Kp, float Ki, float Kd, int POn); // * While most users will set the tunings once in the + // constructor, this function gives the user the option + // of changing tunings during runtime for Adaptive control + +void pid_setDirection(pidc_t* p, int Direction); // * Sets the Direction, or "Action" of the controller. DIRECT + // means the output will increase when error is positive. REVERSE + // means the opposite. it's very unlikely that this will be needed + // once it is set in the constructor. +void pid_setSampleTime(pidc_t* p, int NewSampleTime); // * sets the frequency, in Milliseconds, with which + // the PID calculation is performed. default is 100 + +void pid_initialize(pidc_t* p); #endif -- cgit v1.2.3